Commit ff6231d1 authored by YongHao Hu's avatar YongHao Hu Committed by Alexandre Julliard

msvcp90: Add istream::operator>>complex implementation and tests.

parent 5acb82fc
......@@ -18,20 +18,20 @@
@ cdecl -arch=win64 ??$?5GU?$char_traits@G@std@@@std@@YAAEAV?$basic_istream@GU?$char_traits@G@std@@@0@AEAV10@PEAG@Z(ptr ptr) basic_istream_short_read_str
@ cdecl -arch=win32 ??$?5GU?$char_traits@G@std@@V?$allocator@G@1@@std@@YAAAV?$basic_istream@GU?$char_traits@G@std@@@0@AAV10@AAV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z(ptr ptr) basic_istream_short_read_bstr
@ cdecl -arch=win64 ??$?5GU?$char_traits@G@std@@V?$allocator@G@1@@std@@YAAEAV?$basic_istream@GU?$char_traits@G@std@@@0@AEAV10@AEAV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z(ptr ptr) basic_istream_short_read_bstr
@ stub -arch=win32 ??$?5MDU?$char_traits@D@std@@@std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@AAV?$complex@M@0@@Z
@ stub -arch=win64 ??$?5MDU?$char_traits@D@std@@@std@@YAAEAV?$basic_istream@DU?$char_traits@D@std@@@0@AEAV10@AEAV?$complex@M@0@@Z
@ cdecl -arch=win32 ??$?5MDU?$char_traits@D@std@@@std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@AAV?$complex@M@0@@Z(ptr ptr) basic_istream_char_read_complex_float
@ cdecl -arch=win64 ??$?5MDU?$char_traits@D@std@@@std@@YAAEAV?$basic_istream@DU?$char_traits@D@std@@@0@AEAV10@AEAV?$complex@M@0@@Z(ptr ptr) basic_istream_char_read_complex_float
@ stub -arch=win32 ??$?5MGU?$char_traits@G@std@@@std@@YAAAV?$basic_istream@GU?$char_traits@G@std@@@0@AAV10@AAV?$complex@M@0@@Z
@ stub -arch=win64 ??$?5MGU?$char_traits@G@std@@@std@@YAAEAV?$basic_istream@GU?$char_traits@G@std@@@0@AEAV10@AEAV?$complex@M@0@@Z
@ stub -arch=win32 ??$?5M_WU?$char_traits@_W@std@@@std@@YAAAV?$basic_istream@_WU?$char_traits@_W@std@@@0@AAV10@AAV?$complex@M@0@@Z
@ stub -arch=win64 ??$?5M_WU?$char_traits@_W@std@@@std@@YAAEAV?$basic_istream@_WU?$char_traits@_W@std@@@0@AEAV10@AEAV?$complex@M@0@@Z
@ stub -arch=win32 ??$?5NDU?$char_traits@D@std@@@std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@AAV?$complex@N@0@@Z
@ stub -arch=win64 ??$?5NDU?$char_traits@D@std@@@std@@YAAEAV?$basic_istream@DU?$char_traits@D@std@@@0@AEAV10@AEAV?$complex@N@0@@Z
@ cdecl -arch=win32 ??$?5NDU?$char_traits@D@std@@@std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@AAV?$complex@N@0@@Z(ptr ptr) basic_istream_char_read_complex_double
@ cdecl -arch=win64 ??$?5NDU?$char_traits@D@std@@@std@@YAAEAV?$basic_istream@DU?$char_traits@D@std@@@0@AEAV10@AEAV?$complex@N@0@@Z(ptr ptr) basic_istream_char_read_complex_double
@ stub -arch=win32 ??$?5NGU?$char_traits@G@std@@@std@@YAAAV?$basic_istream@GU?$char_traits@G@std@@@0@AAV10@AAV?$complex@N@0@@Z
@ stub -arch=win64 ??$?5NGU?$char_traits@G@std@@@std@@YAAEAV?$basic_istream@GU?$char_traits@G@std@@@0@AEAV10@AEAV?$complex@N@0@@Z
@ stub -arch=win32 ??$?5N_WU?$char_traits@_W@std@@@std@@YAAAV?$basic_istream@_WU?$char_traits@_W@std@@@0@AAV10@AAV?$complex@N@0@@Z
@ stub -arch=win64 ??$?5N_WU?$char_traits@_W@std@@@std@@YAAEAV?$basic_istream@_WU?$char_traits@_W@std@@@0@AEAV10@AEAV?$complex@N@0@@Z
@ stub -arch=win32 ??$?5ODU?$char_traits@D@std@@@std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@AAV?$complex@O@0@@Z
@ stub -arch=win64 ??$?5ODU?$char_traits@D@std@@@std@@YAAEAV?$basic_istream@DU?$char_traits@D@std@@@0@AEAV10@AEAV?$complex@O@0@@Z
@ cdecl -arch=win32 ??$?5ODU?$char_traits@D@std@@@std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@AAV?$complex@O@0@@Z(ptr ptr) basic_istream_char_read_complex_ldouble
@ cdecl -arch=win64 ??$?5ODU?$char_traits@D@std@@@std@@YAAEAV?$basic_istream@DU?$char_traits@D@std@@@0@AEAV10@AEAV?$complex@O@0@@Z(ptr ptr) basic_istream_char_read_complex_ldouble
@ stub -arch=win32 ??$?5OGU?$char_traits@G@std@@@std@@YAAAV?$basic_istream@GU?$char_traits@G@std@@@0@AAV10@AAV?$complex@O@0@@Z
@ stub -arch=win64 ??$?5OGU?$char_traits@G@std@@@std@@YAAEAV?$basic_istream@GU?$char_traits@G@std@@@0@AEAV10@AEAV?$complex@O@0@@Z
@ stub -arch=win32 ??$?5O_WU?$char_traits@_W@std@@@std@@YAAAV?$basic_istream@_WU?$char_traits@_W@std@@@0@AAV10@AAV?$complex@O@0@@Z
......
......@@ -10,20 +10,20 @@
@ cdecl -arch=win64 ??$?5GU?$char_traits@G@std@@@std@@YAAEAV?$basic_istream@GU?$char_traits@G@std@@@0@AEAV10@PEAG@Z(ptr ptr) basic_istream_short_read_str
@ cdecl -arch=win32 ??$?5GU?$char_traits@G@std@@V?$allocator@G@1@@std@@YAAAV?$basic_istream@GU?$char_traits@G@std@@@0@AAV10@AAV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z(ptr ptr) basic_istream_short_read_bstr
@ cdecl -arch=win64 ??$?5GU?$char_traits@G@std@@V?$allocator@G@1@@std@@YAAEAV?$basic_istream@GU?$char_traits@G@std@@@0@AEAV10@AEAV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z(ptr ptr) basic_istream_short_read_bstr
@ stub -arch=win32 ??$?5MDU?$char_traits@D@std@@@std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@AAV?$complex@M@0@@Z
@ stub -arch=win64 ??$?5MDU?$char_traits@D@std@@@std@@YAAEAV?$basic_istream@DU?$char_traits@D@std@@@0@AEAV10@AEAV?$complex@M@0@@Z
@ cdecl -arch=win32 ??$?5MDU?$char_traits@D@std@@@std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@AAV?$complex@M@0@@Z(ptr ptr) basic_istream_char_read_complex_float
@ cdecl -arch=win64 ??$?5MDU?$char_traits@D@std@@@std@@YAAEAV?$basic_istream@DU?$char_traits@D@std@@@0@AEAV10@AEAV?$complex@M@0@@Z(ptr ptr) basic_istream_char_read_complex_float
@ stub -arch=win32 ??$?5MGU?$char_traits@G@std@@@std@@YAAAV?$basic_istream@GU?$char_traits@G@std@@@0@AAV10@AAV?$complex@M@0@@Z
@ stub -arch=win64 ??$?5MGU?$char_traits@G@std@@@std@@YAAEAV?$basic_istream@GU?$char_traits@G@std@@@0@AEAV10@AEAV?$complex@M@0@@Z
@ stub -arch=win32 ??$?5M_WU?$char_traits@_W@std@@@std@@YAAAV?$basic_istream@_WU?$char_traits@_W@std@@@0@AAV10@AAV?$complex@M@0@@Z
@ stub -arch=win64 ??$?5M_WU?$char_traits@_W@std@@@std@@YAAEAV?$basic_istream@_WU?$char_traits@_W@std@@@0@AEAV10@AEAV?$complex@M@0@@Z
@ stub -arch=win32 ??$?5NDU?$char_traits@D@std@@@std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@AAV?$complex@N@0@@Z
@ stub -arch=win64 ??$?5NDU?$char_traits@D@std@@@std@@YAAEAV?$basic_istream@DU?$char_traits@D@std@@@0@AEAV10@AEAV?$complex@N@0@@Z
@ cdecl -arch=win32 ??$?5NDU?$char_traits@D@std@@@std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@AAV?$complex@N@0@@Z(ptr ptr) basic_istream_char_read_complex_double
@ cdecl -arch=win64 ??$?5NDU?$char_traits@D@std@@@std@@YAAEAV?$basic_istream@DU?$char_traits@D@std@@@0@AEAV10@AEAV?$complex@N@0@@Z(ptr ptr) basic_istream_char_read_complex_double
@ stub -arch=win32 ??$?5NGU?$char_traits@G@std@@@std@@YAAAV?$basic_istream@GU?$char_traits@G@std@@@0@AAV10@AAV?$complex@N@0@@Z
@ stub -arch=win64 ??$?5NGU?$char_traits@G@std@@@std@@YAAEAV?$basic_istream@GU?$char_traits@G@std@@@0@AEAV10@AEAV?$complex@N@0@@Z
@ stub -arch=win32 ??$?5N_WU?$char_traits@_W@std@@@std@@YAAAV?$basic_istream@_WU?$char_traits@_W@std@@@0@AAV10@AAV?$complex@N@0@@Z
@ stub -arch=win64 ??$?5N_WU?$char_traits@_W@std@@@std@@YAAEAV?$basic_istream@_WU?$char_traits@_W@std@@@0@AEAV10@AEAV?$complex@N@0@@Z
@ stub -arch=win32 ??$?5ODU?$char_traits@D@std@@@std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@AAV?$complex@O@0@@Z
@ stub -arch=win64 ??$?5ODU?$char_traits@D@std@@@std@@YAAEAV?$basic_istream@DU?$char_traits@D@std@@@0@AEAV10@AEAV?$complex@O@0@@Z
@ cdecl -arch=win32 ??$?5ODU?$char_traits@D@std@@@std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@AAV?$complex@O@0@@Z(ptr ptr) basic_istream_char_read_complex_ldouble
@ cdecl -arch=win64 ??$?5ODU?$char_traits@D@std@@@std@@YAAEAV?$basic_istream@DU?$char_traits@D@std@@@0@AEAV10@AEAV?$complex@O@0@@Z(ptr ptr) basic_istream_char_read_complex_ldouble
@ stub -arch=win32 ??$?5OGU?$char_traits@G@std@@@std@@YAAAV?$basic_istream@GU?$char_traits@G@std@@@0@AAV10@AAV?$complex@O@0@@Z
@ stub -arch=win64 ??$?5OGU?$char_traits@G@std@@@std@@YAAEAV?$basic_istream@GU?$char_traits@G@std@@@0@AEAV10@AEAV?$complex@O@0@@Z
@ stub -arch=win32 ??$?5O_WU?$char_traits@_W@std@@@std@@YAAAV?$basic_istream@_WU?$char_traits@_W@std@@@0@AAV10@AAV?$complex@O@0@@Z
......
......@@ -9026,6 +9026,183 @@ basic_istream_char* __thiscall basic_istream_char_read_func_ios_base(basic_istre
return this;
}
/* ??$?5MDU?$char_traits@D@std@@@std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@AAV?$complex@M@0@@Z */
/* ??$?5MDU?$char_traits@D@std@@@std@@YAAEAV?$basic_istream@DU?$char_traits@D@std@@@0@AEAV10@AEAV?$complex@M@0@@Z */
basic_istream_char* __cdecl basic_istream_char_read_complex_float(basic_istream_char *this, complex_float *v)
{
float r;
basic_ios_char *base = basic_istream_char_get_basic_ios(this);
TRACE("(%p %p)\n", this, v);
ws_basic_istream_char(this);
if(basic_istream_char_peek(this) == '(') {
char c;
basic_istream_char_get(this);
basic_istream_char_read_float(this, &r);
if(ios_base_fail(&base->base))
return this;
ws_basic_istream_char(this);
c = basic_istream_char_peek(this);
if(c == ',') {
float i;
basic_istream_char_get(this);
basic_istream_char_read_float(this, &i);
if(ios_base_fail(&base->base))
return this;
ws_basic_istream_char(this);
c = basic_istream_char_peek(this);
if(c == ')') { /* supported format: (real, imag) */
basic_istream_char_get(this);
v->real = r;
v->imag = i;
}else {
basic_ios_char_setstate(base, IOSTATE_failbit);
return this;
}
}else if(c == ')') { /* supported format: (real) */
basic_istream_char_get(this);
v->real = r;
v->imag = 0;
}else {
basic_ios_char_setstate(base, IOSTATE_failbit);
return this;
}
}else { /* supported format: real */
basic_istream_char_read_float(this, &r);
if(ios_base_fail(&base->base))
return this;
v->real = r;
v->imag = 0;
}
return this;
}
/* ??$?5NDU?$char_traits@D@std@@@std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@AAV?$complex@N@0@@Z */
/* ??$?5DU?$char_traits@D@std@@@std@@YAAEAV?$basic_istream@DU?$char_traits@D@std@@@0@AEAV10@AEAV?$complex@N@0@@Z */
basic_istream_char* __cdecl basic_istream_char_read_complex_double(basic_istream_char *this, complex_double *v)
{
double r;
basic_ios_char *base = basic_istream_char_get_basic_ios(this);
TRACE("(%p %p)\n", this, v);
ws_basic_istream_char(this);
if(basic_istream_char_peek(this) == '(') {
char c;
basic_istream_char_get(this);
basic_istream_char_read_double(this, &r);
if(ios_base_fail(&base->base))
return this;
ws_basic_istream_char(this);
c = basic_istream_char_peek(this);
if(c == ',') {
double i;
basic_istream_char_get(this);
basic_istream_char_read_double(this, &i);
if(ios_base_fail(&base->base))
return this;
ws_basic_istream_char(this);
c = basic_istream_char_peek(this);
if(c == ')') { /* supported format: (real, imag) */
basic_istream_char_get(this);
v->real = r;
v->imag = i;
}else {
basic_ios_char_setstate(base, IOSTATE_failbit);
return this;
}
}else if(c == ')') { /* supported format: (real) */
basic_istream_char_get(this);
v->real = r;
v->imag = 0;
}else {
basic_ios_char_setstate(base, IOSTATE_failbit);
return this;
}
}else { /* supported format: real */
basic_istream_char_read_double(this, &r);
if(ios_base_fail(&base->base))
return this;
v->real = r;
v->imag = 0;
}
return this;
}
/* ??$?5ODU?$char_traits@D@std@@@std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@AAV?$complex@O@0@@Z */
/* ??$?5ODU?$char_traits@D@std@@@std@@YAAEAV?$basic_istream@DU?$char_traits@D@std@@@0@AEAV10@AEAV?$complex@O@0@@Z */
basic_istream_char* __cdecl basic_istream_char_read_complex_ldouble(basic_istream_char *this, complex_double *v)
{
double r;
basic_ios_char *base = basic_istream_char_get_basic_ios(this);
TRACE("(%p %p)\n", this, v);
ws_basic_istream_char(this);
if(basic_istream_char_peek(this) == '(') {
char c;
basic_istream_char_get(this);
basic_istream_char_read_ldouble(this, &r);
if(ios_base_fail(&base->base))
return this;
ws_basic_istream_char(this);
c = basic_istream_char_peek(this);
if(c == ',') {
double i;
basic_istream_char_get(this);
basic_istream_char_read_ldouble(this, &i);
if(ios_base_fail(&base->base))
return this;
ws_basic_istream_char(this);
c = basic_istream_char_peek(this);
if(c == ')') { /* supported format: (real, imag) */
basic_istream_char_get(this);
v->real = r;
v->imag = i;
}else {
basic_ios_char_setstate(base, IOSTATE_failbit);
return this;
}
}else if(c == ')') { /* supported format: (real) */
basic_istream_char_get(this);
v->real = r;
v->imag = 0;
}else {
basic_ios_char_setstate(base, IOSTATE_failbit);
return this;
}
}else { /* supported format: real */
basic_istream_char_read_ldouble(this, &r);
if(ios_base_fail(&base->base))
return this;
v->real = r;
v->imag = 0;
}
return this;
}
/* ?swap@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEXAAV12@@Z */
/* ?swap@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAXAEAV12@@Z */
DEFINE_THISCALL_WRAPPER(basic_istream_char_swap, 8)
......
......@@ -10,20 +10,20 @@
@ cdecl -arch=win64 ??$?5GU?$char_traits@G@std@@@std@@YAAEAV?$basic_istream@GU?$char_traits@G@std@@@0@AEAV10@PEAG@Z(ptr ptr) basic_istream_short_read_str
@ cdecl -arch=win32 ??$?5GU?$char_traits@G@std@@V?$allocator@G@1@@std@@YAAAV?$basic_istream@GU?$char_traits@G@std@@@0@AAV10@AAV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z(ptr ptr) basic_istream_short_read_bstr
@ cdecl -arch=win64 ??$?5GU?$char_traits@G@std@@V?$allocator@G@1@@std@@YAAEAV?$basic_istream@GU?$char_traits@G@std@@@0@AEAV10@AEAV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z(ptr ptr) basic_istream_short_read_bstr
@ stub -arch=win32 ??$?5MDU?$char_traits@D@std@@@std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@AAV?$complex@M@0@@Z
@ stub -arch=win64 ??$?5MDU?$char_traits@D@std@@@std@@YAAEAV?$basic_istream@DU?$char_traits@D@std@@@0@AEAV10@AEAV?$complex@M@0@@Z
@ cdecl -arch=win32 ??$?5MDU?$char_traits@D@std@@@std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@AAV?$complex@M@0@@Z(ptr ptr) basic_istream_char_read_complex_float
@ cdecl -arch=win64 ??$?5MDU?$char_traits@D@std@@@std@@YAAEAV?$basic_istream@DU?$char_traits@D@std@@@0@AEAV10@AEAV?$complex@M@0@@Z(ptr ptr) basic_istream_char_read_complex_float
@ stub -arch=win32 ??$?5MGU?$char_traits@G@std@@@std@@YAAAV?$basic_istream@GU?$char_traits@G@std@@@0@AAV10@AAV?$complex@M@0@@Z
@ stub -arch=win64 ??$?5MGU?$char_traits@G@std@@@std@@YAAEAV?$basic_istream@GU?$char_traits@G@std@@@0@AEAV10@AEAV?$complex@M@0@@Z
@ stub -arch=win32 ??$?5M_WU?$char_traits@_W@std@@@std@@YAAAV?$basic_istream@_WU?$char_traits@_W@std@@@0@AAV10@AAV?$complex@M@0@@Z
@ stub -arch=win64 ??$?5M_WU?$char_traits@_W@std@@@std@@YAAEAV?$basic_istream@_WU?$char_traits@_W@std@@@0@AEAV10@AEAV?$complex@M@0@@Z
@ stub -arch=win32 ??$?5NDU?$char_traits@D@std@@@std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@AAV?$complex@N@0@@Z
@ stub -arch=win64 ??$?5NDU?$char_traits@D@std@@@std@@YAAEAV?$basic_istream@DU?$char_traits@D@std@@@0@AEAV10@AEAV?$complex@N@0@@Z
@ cdecl -arch=win32 ??$?5NDU?$char_traits@D@std@@@std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@AAV?$complex@N@0@@Z(ptr ptr) basic_istream_char_read_complex_double
@ cdecl -arch=win64 ??$?5NDU?$char_traits@D@std@@@std@@YAAEAV?$basic_istream@DU?$char_traits@D@std@@@0@AEAV10@AEAV?$complex@N@0@@Z(ptr ptr) basic_istream_char_read_complex_double
@ stub -arch=win32 ??$?5NGU?$char_traits@G@std@@@std@@YAAAV?$basic_istream@GU?$char_traits@G@std@@@0@AAV10@AAV?$complex@N@0@@Z
@ stub -arch=win64 ??$?5NGU?$char_traits@G@std@@@std@@YAAEAV?$basic_istream@GU?$char_traits@G@std@@@0@AEAV10@AEAV?$complex@N@0@@Z
@ stub -arch=win32 ??$?5N_WU?$char_traits@_W@std@@@std@@YAAAV?$basic_istream@_WU?$char_traits@_W@std@@@0@AAV10@AAV?$complex@N@0@@Z
@ stub -arch=win64 ??$?5N_WU?$char_traits@_W@std@@@std@@YAAEAV?$basic_istream@_WU?$char_traits@_W@std@@@0@AEAV10@AEAV?$complex@N@0@@Z
@ stub -arch=win32 ??$?5ODU?$char_traits@D@std@@@std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@AAV?$complex@O@0@@Z
@ stub -arch=win64 ??$?5ODU?$char_traits@D@std@@@std@@YAAEAV?$basic_istream@DU?$char_traits@D@std@@@0@AEAV10@AEAV?$complex@O@0@@Z
@ cdecl -arch=win32 ??$?5ODU?$char_traits@D@std@@@std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@AAV?$complex@O@0@@Z(ptr ptr) basic_istream_char_read_complex_ldouble
@ cdecl -arch=win64 ??$?5ODU?$char_traits@D@std@@@std@@YAAEAV?$basic_istream@DU?$char_traits@D@std@@@0@AEAV10@AEAV?$complex@O@0@@Z(ptr ptr) basic_istream_char_read_complex_ldouble
@ stub -arch=win32 ??$?5OGU?$char_traits@G@std@@@std@@YAAAV?$basic_istream@GU?$char_traits@G@std@@@0@AAV10@AAV?$complex@O@0@@Z
@ stub -arch=win64 ??$?5OGU?$char_traits@G@std@@@std@@YAAEAV?$basic_istream@GU?$char_traits@G@std@@@0@AEAV10@AEAV?$complex@O@0@@Z
@ stub -arch=win32 ??$?5O_WU?$char_traits@_W@std@@@std@@YAAAV?$basic_istream@_WU?$char_traits@_W@std@@@0@AAV10@AAV?$complex@O@0@@Z
......
......@@ -457,6 +457,8 @@ static void (*__thiscall p_basic_fstream_wchar_vbase_dtor)(basic_fstream_wchar*)
static basic_istream_char* (*__thiscall p_basic_istream_char_read_uint64)(basic_istream_char*, unsigned __int64*);
static basic_istream_char* (*__thiscall p_basic_istream_char_read_float)(basic_istream_char*, float*);
static basic_istream_char* (*__thiscall p_basic_istream_char_read_double)(basic_istream_char*, double*);
static basic_istream_char* (*__cdecl p_basic_istream_char_read_str)(basic_istream_char*, char*);
static basic_istream_char* (*__cdecl p_basic_istream_char_read_complex_double)(basic_istream_char*, complex_double*);
static int (*__thiscall p_basic_istream_char_get)(basic_istream_char*);
static MSVCP_bool (*__thiscall p_basic_istream_char_ipfx)(basic_istream_char*, MSVCP_bool);
static basic_istream_char* (*__thiscall p_basic_istream_char_ignore)(basic_istream_char*, streamsize, int);
......@@ -672,6 +674,10 @@ static BOOL init(void)
"??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAM@Z");
SET(p_basic_istream_char_read_double,
"??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAN@Z");
SET(p_basic_istream_char_read_str,
"??$?5DU?$char_traits@D@std@@@std@@YAAEAV?$basic_istream@DU?$char_traits@D@std@@@0@AEAV10@PEAD@Z");
SET(p_basic_istream_char_read_complex_double,
"??$?5NDU?$char_traits@D@std@@@std@@YAAEAV?$basic_istream@DU?$char_traits@D@std@@@0@AEAV10@AEAV?$complex@N@0@@Z");
SET(p_basic_istream_char_get,
"?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAHXZ");
SET(p_basic_istream_char_ipfx,
......@@ -800,6 +806,10 @@ static BOOL init(void)
"??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAAAAV01@AAM@Z");
SET(p_basic_istream_char_read_double,
"??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAAAAV01@AAN@Z");
SET(p_basic_istream_char_read_str,
"??$?5DU?$char_traits@D@std@@@std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@PAD@Z");
SET(p_basic_istream_char_read_complex_double,
"??$?5NDU?$char_traits@D@std@@@std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@AAV?$complex@N@0@@Z");
SET(p_basic_istream_char_get,
"?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAAHXZ");
SET(p_basic_istream_char_ipfx,
......@@ -927,6 +937,10 @@ static BOOL init(void)
"??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAM@Z");
SET(p_basic_istream_char_read_double,
"??5?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV01@AAN@Z");
SET(p_basic_istream_char_read_str,
"??$?5DU?$char_traits@D@std@@@std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@PAD@Z");
SET(p_basic_istream_char_read_complex_double,
"??$?5NDU?$char_traits@D@std@@@std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@AAV?$complex@N@0@@Z");
SET(p_basic_istream_char_get,
"?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEHXZ");
SET(p_basic_istream_char_ipfx,
......@@ -2241,6 +2255,95 @@ static void test_ostream_print_complex_ldouble(void)
call_func1(p_basic_stringstream_char_vbase_dtor, &ss);
}
static void test_istream_read_complex_double(void)
{
basic_string_char str;
IOSB_iostate state;
complex_double val;
locale lcl, retlcl;
basic_stringstream_char ss;
int i;
char next[100];
const char deadbeef_str[] = "(3.14159,3456.7890)";
const complex_double deadbeef = {3.14159, 3456.7890};
const IOSB_iostate IOSTATE_faileof = IOSTATE_failbit|IOSTATE_eofbit;
struct _test_istream_read_complex_double {
const char *complex_double_str;
const char *lcl;
complex_double correct_val;
IOSB_iostate state;
const char *str;
} tests[] = {
/* supported format: real */
{ "-12 3", NULL, {-12 , 0}, IOSTATE_goodbit, "3"},
{ "1e2,3", NULL, {100 , 0}, IOSTATE_goodbit, ",3"},
{ "3E2,,", NULL, {300 , 0}, IOSTATE_goodbit, ",,"},
/* supported format: (real) */
{ "(3.)", NULL, {3., 0}, IOSTATE_goodbit, "" },
{ "(3E10)1", NULL, {3e+10, 0}, IOSTATE_goodbit, "1"},
/* supported format: (real,imaginary) */
{ "(3, -.4)", NULL, {3, -0.4} , IOSTATE_goodbit, ""},
{ " (6.6,\n1.1\t)", NULL, {6.6, 1.1}, IOSTATE_goodbit, ""},
{ "(6.666 , 7.77)mark", NULL, {6.666, 7.77}, IOSTATE_goodbit, "mark"},
/* different locales */
{ "1,234e10", "English", {1234.0e10, 0}, IOSTATE_eofbit, ""},
{ "1,234e10", "German" , {1.234e10, 0}, IOSTATE_eofbit, ""},
{ "1,234,567,890", "English", {1234567890.0, 0}, IOSTATE_eofbit , ""},
{ "1,234,567,890", "German" , {1.234, 0} , IOSTATE_goodbit, ",567,890"},
{ "(0.123,-4.5)", "English", {0.123,-4.5}, IOSTATE_goodbit, ""},
{ "(0,123,4,5)" , "German" , {0.123,4.5 }, IOSTATE_goodbit, ""},
{ "(123,456.,4.5678)", "English", {123456,4.5678}, IOSTATE_goodbit, ""},
{ "(123.456,,4,5678)", "German" , {123456,4.5678}, IOSTATE_goodbit, ""},
/* eofbit */
{ ".09", NULL, {0.09, 0}, IOSTATE_eofbit, ""},
{ "\t-1e2", NULL, {-100, 0}, IOSTATE_eofbit, ""},
{ "+", NULL, deadbeef, IOSTATE_faileof, ""},
{ "(-1.1,3 \t " , NULL, deadbeef, IOSTATE_faileof, ""},
{ "(-1.1 , \t -3.4E3 \t ", NULL, deadbeef, IOSTATE_faileof, ""},
/* nonsupported formats */
{ "(*)" , NULL, deadbeef, IOSTATE_failbit, ""},
{ "(\n*" , NULL, deadbeef, IOSTATE_failbit, ""},
{ "(6..)" , NULL, deadbeef, IOSTATE_failbit, ""},
{ "(3.12,*", NULL, deadbeef, IOSTATE_failbit, ""},
{ "(3.12,)", NULL, deadbeef, IOSTATE_failbit, ""},
{ "(1.0eE10, 3)" , NULL, deadbeef, IOSTATE_failbit, ""},
};
for(i=0; i<sizeof(tests)/sizeof(tests[0]); i++) {
call_func2(p_basic_string_char_ctor_cstr, &str, deadbeef_str);
call_func4(p_basic_stringstream_char_ctor_str, &ss, &str, OPENMODE_out|OPENMODE_in, TRUE);
p_basic_istream_char_read_complex_double(&ss.base.base1, &val);
call_func2(p_basic_string_char_ctor_cstr, &str, tests[i].complex_double_str);
call_func4(p_basic_stringstream_char_ctor_str, &ss, &str, OPENMODE_out|OPENMODE_in, TRUE);
if(tests[i].lcl) {
call_func3(p_locale_ctor_cstr, &lcl, tests[i].lcl, 0x3f /* FIXME: support categories */);
call_func3(p_basic_ios_char_imbue, &ss.basic_ios, &retlcl, &lcl);
}
p_basic_istream_char_read_complex_double(&ss.base.base1, &val);
state = (IOSB_iostate)call_func1(p_ios_base_rdstate, &ss.basic_ios.base);
memset(next, 0, sizeof(next));
p_basic_istream_char_read_str(&ss.base.base1, next);
ok(tests[i].state == state, "test %d fail, wrong state, expected = %x found = %x\n", i+1, tests[i].state, state);
ok(tests[i].correct_val.real == val.real, "test %d fail, wrong val, expected = %g found %g\n", i+1, tests[i].correct_val.real, val.real);
ok(tests[i].correct_val.imag == val.imag, "test %d fail, wrong val, expected = %g found %g\n", i+1, tests[i].correct_val.imag, val.imag);
ok(!strcmp(tests[i].str, next), "test %d fail, wrong next, expected = %s found %s\n", i+1, tests[i].str, next);
if(tests[i].lcl)
call_func1(p_locale_dtor, &lcl);
call_func1(p_basic_stringstream_char_vbase_dtor, &ss);
call_func1(p_basic_string_char_dtor, &str);
}
}
START_TEST(ios)
{
if(!init())
......@@ -2265,6 +2368,7 @@ START_TEST(ios)
test_ostream_print_complex_float();
test_ostream_print_complex_double();
test_ostream_print_complex_ldouble();
test_istream_read_complex_double();
ok(!invalid_parameter, "invalid_parameter_handler was invoked too many times\n");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment