58#define CHECKPTR(func) p##func = (void*)GetProcAddress(hOleaut32, #func); \
59 if (!p##func) { win_skip("function " # func " not available, not testing it\n"); return; }
67#define EQ_DOUBLE(a,b) (fabs((a)-(b)) / (1.0+fabs(a)+fabs(b)) < 1e-14)
68#define EQ_FLOAT(a,b) (fabs((a)-(b)) / (1.0+fabs(a)+fabs(b)) < 1e-7)
70#define SKIPTESTS(a) if((a > VT_CLSID+10) && (a < VT_BSTR_BLOB-10)) continue
73#define V_EMPTY(v) V_I4(v)
74#define V_NULL(v) V_I4(v)
78#define I1_MIN ((-I1_MAX)-1)
82#define I2_MIN ((-I2_MAX)-1)
85#define I4_MAX 0x7fffffff
86#define I4_MIN ((-I4_MAX)-1)
87#define UI4_MAX 0xffffffff
89#define I8_MAX (((LONGLONG)I4_MAX << 32) | UI4_MAX)
90#define I8_MIN ((-I8_MAX)-1)
91#define UI8_MAX (((ULONGLONG)UI4_MAX << 32) | UI4_MAX)
93#define DATE_MAX 2958465
94#define DATE_MIN -657434
100#define DEFINE_EXPECT(func) \
101 static BOOL expect_ ## func = FALSE, called_ ## func = FALSE
103#define SET_EXPECT(func) \
104 do { called_ ## func = FALSE; expect_ ## func = TRUE; } while(0)
106#define CHECK_EXPECT2(func) \
108 ok(expect_ ##func, "unexpected call " #func "\n"); \
109 called_ ## func = TRUE; \
112#define CHECK_EXPECT(func) \
114 CHECK_EXPECT2(func); \
115 expect_ ## func = FALSE; \
118#define CHECK_CALLED(func) \
120 ok(called_ ## func, "expected " #func "\n"); \
121 expect_ ## func = called_ ## func = FALSE; \
158 IDispatch_AddRef(iface);
166 ok(0,
"Unexpected call\n");
172 ok(0,
"Unexpected call\n");
179 ok(0,
"Unexpected call\n");
195 ok(dispid == DISPID_VALUE,
"got dispid %d\n", dispid);
206 ok(ei ==
NULL,
"got %p\n", ei);
207 ok(arg_err ==
NULL,
"got %p\n", arg_err);
267 IRecordInfo_AddRef(iface);
293 ok(0,
"unexpected call\n");
309 ok(
src == (
void*)0xdeadbeef,
"wrong src pointer %p\n",
src);
315 ok(0,
"unexpected call\n");
321 ok(0,
"unexpected call\n");
335 ok(0,
"unexpected call\n");
340 LPCOLESTR szFieldName,
VARIANT *pvarField)
342 ok(0,
"unexpected call\n");
347 LPCOLESTR szFieldName,
VARIANT *pvarField,
PVOID *ppvDataCArray)
349 ok(0,
"unexpected call\n");
354 LPCOLESTR szFieldName,
VARIANT *pvarField)
356 ok(0,
"unexpected call\n");
363 ok(0,
"unexpected call\n");
370 ok(0,
"unexpected call\n");
376 ok(0,
"unexpected call\n");
382 ok(0,
"unexpected call\n");
389 ok(0,
"unexpected call\n");
395 ok(0,
"unexpected call\n");
442 ok(
res ==
S_OK && bstr[0],
"Expected localized string for 'True'\n");
449 ok(
res ==
S_OK && bstr[0],
"Expected localized string for 'False'\n");
457 skip(
"No support for I8 and UI8 data types\n");
463 S(
U(*
dec)).scale = scl;
466 U1(*dec).Lo64 = lo64;
471 S(
U(*
dec)).scale = scl;
484#define CASE(vt) case VT_##vt: return #vt
523 CASE(STREAMED_OBJECT);
528 CASE(VERSIONED_STREAM);
537 return "VT_BSTR_BLOB/VT_ILLEGALMASKED/VT_TYPEMASK";
594#define CASE(vt) case VT_##vt: return (V_##vt(result) == V_##vt(expected))
671#define test_bstr_var(a,b) _test_bstr_var(__LINE__,a,b)
788 "VariantClear: Type set to %d, res %08x\n",
V_VT(&
v),
hres);
789 ok(
V_UI4(&
v) == ~0
u,
"VariantClear: Overwrote value\n");
813 ok(
hres == hExpected,
"VariantClear: expected 0x%X, got 0x%X for vt %d | 0x%X\n",
842 ok(i4 == 0x4321,
"i4 changed %08x\n", i4);
897 rec->pvRecord = (
void*)0xdeadbeef;
903 ok(rec->pvRecord ==
NULL,
"got %p\n", rec->pvRecord);
905 ok(recinfo->
ref == 1,
"got %d\n", recinfo->
ref);
930 memset(&vSrc, 0,
sizeof(vSrc));
941 "Copy(src==dst): expected 0x%X, got 0x%X for src==dest vt %d|0x%X\n",
949 memset(&vSrc, 0,
sizeof(vSrc));
960 memset(&vDst, 0,
sizeof(vDst));
969 "Copy(bad dst): expected 0x%X, got 0x%X for dest vt %d|0x%X\n",
973 "Copy(bad dst): expected vt = VT_UI1, got %d\n",
V_VT(&vDst));
986 memset(&vDst, 0,
sizeof(vDst));
989 memset(&vSrc, 0,
sizeof(vSrc));
999 "Copy(bad src): expected 0x%X, got 0x%X for src vt %d|0x%X\n",
1004 "Copy(bad src): expected vt = %d, got %d\n",
1012 memset(&vDst, 0,
sizeof(vDst));
1014 memset(&vSrc, 0,
sizeof(vSrc));
1017 ok(
hres ==
S_OK,
"Copy(NULL BSTR): Failed to copy a NULL BSTR\n");
1021 "Copy(NULL BSTR): should have non-NULL result\n");
1024 ok(*
V_BSTR(&vDst) == 0,
"Copy(NULL BSTR): result not empty\n");
1032 memset(&vDst, 0,
sizeof(vDst));
1036 rec = &
V_UNION(&vSrc, brecVal);
1038 rec->pvRecord = (
void*)0xdeadbeef;
1047 rec = &
V_UNION(&vDst, brecVal);
1048 ok(rec->pvRecord != (
void*)0xdeadbeef && rec->pvRecord !=
NULL,
"got %p\n", rec->pvRecord);
1091 memset(&vSrc, 0,
sizeof(vSrc));
1123 "CopyInd(src==dst): expected 0x%X, got 0x%X for src==dst vt %d|0x%X\n",
1129 memset(&vSrc, 0,
sizeof(vSrc));
1139 memset(&vDst, 0,
sizeof(vDst));
1150 "CopyInd(bad dst): expected 0x%X, got 0x%X for dst vt %d|0x%X\n",
1154 "CopyInd(bad dst): expected vt = VT_UI1, got %d\n",
V_VT(&vDst));
1168 memset(&vDst, 0,
sizeof(vDst));
1171 memset(&vSrc, 0,
sizeof(vSrc));
1204 "CopyInd(bad src): expected 0x%X, got 0x%X for src vt %d|0x%X\n",
1215 "CopyInd(bad src): expected dst vt = VT_EMPTY, got %d|0x%X\n",
1221 "CopyInd(bad src): expected dst vt = %d|0x%X, got %d|0x%X\n",
1232 V_UI1(&vRef) = 0x77;
1240 "CopyInd(deref): expected dst vt = VT_UI1, val 0x77, got %d|0x%X, 0x%2X\n",
1253 "CopyInd(deref): expected dst vt = VT_UI1, val 0x77, got %d|0x%X, 0x%2X\n",
1258 V_UI1(&vRef2) = 0x77;
1267 "CopyInd(ref->ref): expected E_INVALIDARG, got 0x%08x\n",
hres);
1281 memset( np, 255,
sizeof(*np) );
1301#define CONVERTN(str,dig,flags) hres = convert_str( str, dig, flags, &np, rgb, lcid )
1302#define CONVERT(str,flags) CONVERTN(str,sizeof(rgb),flags)
1303#define EXPECT(a,b,c,d,e,f) expect_NumFromStr( __LINE__, hres, &np, a, b, c, d, e, f )
1304#define EXPECTRGB(a,b) ok(rgb[a] == b, "Digit[%d], expected %d, got %d\n", a, b, rgb[a])
1305#define EXPECTFAIL ok(hres == (HRESULT)DISP_E_TYPEMISMATCH, "Call succeeded, hres = %08x\n", hres)
1306#define EXPECT2(a,b) EXPECTRGB(0,a); EXPECTRGB(1,b)
1742#define SETRGB(indx,val) if (!indx) memset(rgb, FAILDIG, sizeof(rgb)); rgb[indx] = val
1744#define CONVERT(a,b,c,d,e,f,bits) \
1745 np.cDig = (a); np.dwInFlags = (b); np.dwOutFlags = (c); np.cchUsed = (d); \
1746 np.nBaseShift = (e); np.nPwr10 = (f); hres = pVarNumFromParseNum(&np, rgb, bits, &vOut)
1748#define EXPECT_OVERFLOW ok(hres == (HRESULT)DISP_E_OVERFLOW, szFailOverflow, hres)
1749static const char *
szFailOk =
"Call failed, hres = %08x\n";
1750#define EXPECT_OK ok(hres == (HRESULT)S_OK, szFailOk, hres); \
1751 if (hres == (HRESULT)S_OK)
1752#define EXPECT_TYPE(typ) ok(V_VT(&vOut) == typ,"Expected Type = " #typ ", got %d\n", V_VT(&vOut))
1753#define EXPECT_I1(val) EXPECT_OK { EXPECT_TYPE(VT_I1); \
1754 ok(V_I1(&vOut) == val, "Expected i1 = %d, got %d\n", (signed char)val, V_I1(&vOut)); }
1755#define EXPECT_UI1(val) EXPECT_OK { EXPECT_TYPE(VT_UI1); \
1756 ok(V_UI1(&vOut) == val, "Expected ui1 = %d, got %d\n", (BYTE)val, V_UI1(&vOut)); }
1757#define EXPECT_I2(val) EXPECT_OK { EXPECT_TYPE(VT_I2); \
1758 ok(V_I2(&vOut) == val, "Expected i2 = %d, got %d\n", (SHORT)val, V_I2(&vOut)); }
1759#define EXPECT_UI2(val) EXPECT_OK { EXPECT_TYPE(VT_UI2); \
1760 ok(V_UI2(&vOut) == val, "Expected ui2 = %d, got %d\n", (USHORT)val, V_UI2(&vOut)); }
1761#define EXPECT_I4(val) EXPECT_OK { EXPECT_TYPE(VT_I4); \
1762 ok(V_I4(&vOut) == val, "Expected i4 = %d, got %d\n", (LONG)val, V_I4(&vOut)); }
1763#define EXPECT_UI4(val) EXPECT_OK { EXPECT_TYPE(VT_UI4); \
1764 ok(V_UI4(&vOut) == val, "Expected ui4 = %d, got %d\n", (ULONG)val, V_UI4(&vOut)); }
1765#define EXPECT_I8(high,low) EXPECT_OK { EXPECT_TYPE(VT_I8); \
1766 ok(V_I8(&vOut) == ((((ULONG64)(high))<<32)|(low)), "Expected i8 = %x%08x, got %x%08x\n", \
1767 (LONG)(high), (LONG)(low), (LONG)(V_I8(&vOut)>>32), (LONG)V_I8(&vOut) ); }
1768#define EXPECT_UI8(val) EXPECT_OK { EXPECT_TYPE(VT_UI8); \
1769 ok(V_UI8(&vOut) == val, "Expected ui8 = 0x%x%08x, got 0x%x%08x\n", \
1770 (DWORD)((ULONG64)val >> 32), (DWORD)(ULONG64)val, (DWORD)(V_UI8(&vOut) >> 32), (DWORD)V_UI8(&vOut)); }
1771#define EXPECT_R4(val) EXPECT_OK { EXPECT_TYPE(VT_R4); \
1772 ok(V_R4(&vOut) == val, "Expected r4 = %f, got %f\n", val, V_R4(&vOut)); }
1773#define EXPECT_R8(val) EXPECT_OK { EXPECT_TYPE(VT_R8); \
1774 ok(V_R8(&vOut) == val, "Expected r8 = %g, got %g\n", val, V_R8(&vOut)); }
1775#define CY_MULTIPLIER 10000
1776#define EXPECT_CY(val) EXPECT_OK { EXPECT_TYPE(VT_CY); \
1777 ok(V_CY(&vOut).int64 == (LONG64)(val * CY_MULTIPLIER), "Expected r8 = 0x%x%08x, got 0x%x%08x\n", \
1778 (DWORD)((LONG64)val >> 23), (DWORD)(LONG64)val, (DWORD)(V_CY(&vOut).int64 >>32), (DWORD)V_CY(&vOut).int64); }
1779#define EXPECT_DECIMAL(valHi, valMid, valLo) EXPECT_OK { EXPECT_TYPE(VT_DECIMAL); \
1780 ok((V_DECIMAL(&vOut).Hi32 == valHi) && (S1(U1(V_DECIMAL(&vOut))).Mid32 == valMid) && \
1781 (S1(U1(V_DECIMAL(&vOut))).Lo32 == valLo), \
1782 "Expected decimal = %x/0x%x%08x, got %x/0x%x%08x\n", valHi, valMid, valLo, \
1783 V_DECIMAL(&vOut).Hi32, S1(U1(V_DECIMAL(&vOut))).Mid32, S1(U1(V_DECIMAL(&vOut))).Lo32); }
1803#define INTEGER_VTBITS (VTBIT_I1|VTBIT_UI1|VTBIT_I2|VTBIT_UI2|VTBIT_I4|VTBIT_UI4|VTBIT_I8|VTBIT_UI8)
1964 memset(&ud, 0,
sizeof(ud));
1965 res = pVarUdateFromDate(dt,
flags, &ud);
1969 "%.16g expected res(%x) %d,%d,%d,%d,%d,%d,%d %d %d, got res(%x) %d,%d,%d,%d,%d,%d,%d %d %d\n",
1970 dt,
r,
d,
m,
y,
h, mn,
s, ms,
dw,
dy,
1974#define DT2UD(dt,flags,r,d,m,y,h,mn,s,ms,dw,dy) test_UdateFromDate(__LINE__,dt,flags,r,d,m,y,h,mn,s,ms,dw,dy)
1979 DT2UD(29221.0,0,
S_OK,1,1,1980,0,0,0,0,2,1);
1980 DT2UD(29222.0,0,
S_OK,2,1,1980,0,0,0,0,3,2);
1981 DT2UD(33238.0,0,
S_OK,31,12,1990,0,0,0,0,1,365);
1982 DT2UD(0.0,0,
S_OK,30,12,1899,0,0,0,0,6,364);
1983 DT2UD(-657434.0,0,
S_OK,1,1,100,0,0,0,0,5,1);
1984 DT2UD(-657435.0,0,
E_INVALIDARG,0,0,0,0,0,0,0,0,0);
1985 DT2UD(2958465.0,0,
S_OK,31,12,9999,0,0,0,0,5,365);
1986 DT2UD(2958466.0,0,
E_INVALIDARG,0,0,0,0,0,0,0,0,0);
1989 DT2UD(-657435.0,
VAR_VALIDDATE,
E_INVALIDARG,0,0,0,0,0,0,0,0,0);
1990 DT2UD(2958466.0,
VAR_VALIDDATE,
E_INVALIDARG,0,0,0,0,0,0,0,0,0);
1993 DT2UD(29221.25,0,
S_OK,1,1,1980,6,0,0,0,2,1);
1994 DT2UD(29221.33333333,0,
S_OK,1,1,1980,8,0,0,0,2,1);
1995 DT2UD(29221.5,0,
S_OK,1,1,1980,12,0,0,0,2,1);
1996 DT2UD(29221.9888884444,0,
S_OK,1,1,1980,23,44,0,0,2,1);
1997 DT2UD(29221.7508765432,0,
S_OK,1,1,1980,18,1,16,0,2,1);
2000 DT2UD(-5.25,0,
S_OK,25,12,1899,6,0,0,0,1,359);
2001 DT2UD(-5.9999884259259,0,
S_OK,25,12,1899,23,59,59,0,1,359);
2003 DT2UD(-4.0,0,
S_OK,26,12,1899,0,0,0,0,2,360);
2005 DT2UD(-0.25,0,
S_OK,30,12,1899,6,0,0,0,6,364);
2006 DT2UD(0.25,0,
S_OK,30,12,1899,6,0,0,0,6,364);
2028 "expected %x, %.16g, got %x, %.16g\n",
r, dt,
res,
out);
2030#define UD2T(d,m,y,h,mn,s,ms,dw,dy,flags,r,dt) test_DateFromUDate(__LINE__,d,m,y,h,mn,s,ms,dw,dy,flags,r,dt)
2035 UD2T(1,1,1980,0,0,0,0,2,1,0,
S_OK,29221.0);
2036 UD2T(2,1,1980,0,0,0,0,3,2,0,
S_OK,29222.0);
2037 UD2T(2,1,1980,0,0,0,0,4,5,0,
S_OK,29222.0);
2038 UD2T(31,12,1990,0,0,0,0,0,0,0,
S_OK,33238.0);
2039 UD2T(31,12,90,0,0,0,0,0,0,0,
S_OK,33238.0);
2040 UD2T(30,12,1899,0,0,0,0,6,364,0,
S_OK,0.0);
2041 UD2T(1,1,100,0,0,0,0,0,0,0,
S_OK,-657434.0);
2042 UD2T(31,12,9999,0,0,0,0,0,0,0,
S_OK,2958465.0);
2043 UD2T(1,1,10000,0,0,0,0,0,0,0,
E_INVALIDARG,0.0);
2044 UD2T(1,1,-10000,0,0,0,0,0,0,0,
E_INVALIDARG,0.0);
2046 UD2T(30,12,1899,0,0,0,0,0,0,0,
S_OK,0.0);
2047 UD2T(30,12,1899,0,0,0,999,0,0,0,
S_OK,0.0);
2049 UD2T(1,1,1980,18,1,16,0,2,1,0,
S_OK,29221.75087962963);
2050 UD2T(1,300,1980,18,1,16,0,2,1,0,
S_OK,38322.75087962963);
2051 UD2T(300,1,1980,18,1,16,0,2,1,0,
S_OK,29520.75087962963);
2052 UD2T(0,1,1980,42,1,16,0,2,1,0,
S_OK,29221.75087962963);
2053 UD2T(1,1,1980,17,61,16,0,2,1,0,
S_OK,29221.75087962963);
2054 UD2T(1,1,1980,18,0,76,0,2,1,0,
S_OK,29221.75087962963);
2055 UD2T(1,-300,1980,18,1,16,0,2,1,0,
S_OK,20059.75087962963);
2056 UD2T(-300,1,1980,18,1,16,0,2,1,0,
S_OK,28920.75087962963);
2057 UD2T(3,1,1980,-30,1,16,0,2,1,0,
S_OK,29221.75087962963);
2058 UD2T(1,1,1980,20,-119,16,0,2,1,0,
S_OK,29221.75087962963);
2059 UD2T(1,1,1980,18,3,-104,0,2,1,0,
S_OK,29221.75087962963);
2060 UD2T(1,12001,-1020,18,1,16,0,0,0,0,
S_OK,29221.75087962963);
2061 UD2T(1,-23,1982,18,1,16,0,0,0,0,
S_OK,29221.75087962963);
2062 UD2T(-59,3,1980,18,1,16,0,0,0,0,
S_OK,29221.75087962963);
2063 UD2T(1,1,0,0,0,0,0,0,0,0,
S_OK,36526);
2064 UD2T(0,0,1980,0,0,0,0,0,0,0,
S_OK,29189);
2065 UD2T(0,1,1980,0,0,0,0,2,1,0,
S_OK,29220.0);
2066 UD2T(-1,1,1980,18,1,16,0,0,0,0,
S_OK,29219.75087962963);
2067 UD2T(1,1,-1,18,1,16,0,0,0,0,
S_OK,36161.75087962963);
2068 UD2T(1,-1,1980,18,1,16,0,0,0,0,
S_OK,29160.7508796296);
2069 UD2T(1,13,1980,0,0,0,0,2,1,0,
S_OK,29587.0);
2072 UD2T(25,12,1899,6,0,0,0,1,359,0,
S_OK,-5.25);
2073 UD2T(25,12,1899,23,59,59,0,1,359,0,
S_OK,-5.9999884259259);
2075 UD2T(26,12,1899,0,0,0,0,2,360,0,
S_OK,-4.0);
2078 UD2T(30,12,1899,6,0,0,0,6,364,0,
S_OK,0.25);
2080 UD2T(1,1,1980,18,1,16,0,2,1,
VAR_TIMEVALUEONLY,
S_OK,0.7508796296296296);
2081 UD2T(1,1,1980,18,1,16,0,2,1,
VAR_DATEVALUEONLY,
S_OK,29221.0);
2082 UD2T(25,12,1899,6,0,0,0,1,359,
VAR_TIMEVALUEONLY,
S_OK,0.25);
2083 UD2T(25,12,1899,6,0,0,0,1,359,
VAR_DATEVALUEONLY,
S_OK,-5.0);
2084 UD2T(1,-1,1980,18,1,16,0,0,0,
VAR_TIMEVALUEONLY|
VAR_DATEVALUEONLY,
S_OK,0.7508796296296296);
2102 res = pSystemTimeToVariantTime(&st, &
out);
2104 "expected %d, %.16g, got %d, %.16g\n",
r, dt,
res,
out);
2106#define ST2DT(d,m,y,h,mn,s,ms,r,dt) test_st2dt(__LINE__,d,m,y,h,mn,s,ms,r,dt)
2131 memset(&st, 0,
sizeof(st));
2132 res = pVariantTimeToSystemTime(dt, &st);
2137 "%.16g expected %d, %d,%d,%d,%d,%d,%d,%d, got %d, %d,%d,%d,%d,%d,%d,%d\n",
2138 dt,
r,
d,
m,
y,
h, mn,
s, ms,
res, st.
wDay, st.
wMonth,
2142#define DT2ST(dt,r,d,m,y,h,mn,s,ms) test_dt2st(__LINE__,dt,r,d,m,y,h,mn,s,ms)
2147 DT2ST(29221.0,1,1,1,1980,0,0,0,0);
2148 DT2ST(29222.0,1,2,1,1980,0,0,0,0);
2151#define MKDOSDATE(d,m,y) ((d & 0x1f) | ((m & 0xf) << 5) | (((y-1980) & 0x7f) << 9))
2152#define MKDOSTIME(h,m,s) (((s>>1) & 0x1f) | ((m & 0x3f) << 5) | ((h & 0x1f) << 11))
2157 unsigned short dosDate, dosTime;
2164 res = pDosDateTimeToVariantTime(dosDate, dosTime, &
out);
2166 "expected %d, %.16g, got %d, %.16g\n",
r, dt,
res,
out);
2168#define DOS2DT(d,m,y,h,mn,s,r,dt) test_dos2dt(__LINE__,d,m,y,h,mn,s,r,dt)
2175 DOS2DT(1,1,1980,0,0,0,1,29221.0);
2176 DOS2DT(31,12,2099,0,0,0,1,73050.0);
2178 DOS2DT(31,12,2100,0,0,0,0,0.0);
2180 DOS2DT(0,1,1980,0,0,0,1,29220.0);
2181 DOS2DT(1,0,1980,0,0,0,1,29190.0);
2182 DOS2DT(0,0,1980,0,0,0,1,29189.0);
2184 DOS2DT(29,2,1981,0,0,0,1,29646.0);
2185 DOS2DT(30,2,1981,0,0,0,1,29647.0);
2187 DOS2DT(29,2,1980,0,0,0,1,29280.0);
2189 DOS2DT(2,13,1980,0,0,0,0,0.0);
2192 DOS2DT(1,1,1980,0,0,29,1,29221.00032407407);
2193 DOS2DT(1,1,1980,0,0,31,1,29221.00034722222);
2194 DOS2DT(1,1,1980,0,59,0,1,29221.04097222222);
2195 DOS2DT(1,1,1980,0,60,0,0,0.0);
2196 DOS2DT(1,1,1980,0,0,60,0,0.0);
2197 DOS2DT(1,1,1980,23,0,0,1,29221.95833333333);
2198 DOS2DT(1,1,1980,24,0,0,0,0.0);
2200 DOS2DT(1,1,1980,0,0,1,1,29221.0);
2201 DOS2DT(2,1,1980,0,0,0,1,29222.0);
2202 DOS2DT(2,1,1980,0,0,0,1,29222.0);
2203 DOS2DT(31,12,1990,0,0,0,1,33238.0);
2204 DOS2DT(31,12,90,0,0,0,1,40543.0);
2205 DOS2DT(30,12,1899,0,0,0,1,46751.0);
2206 DOS2DT(1,1,100,0,0,0,1,43831.0);
2207 DOS2DT(31,12,9999,0,0,0,1,59901.0);
2208 DOS2DT(1,1,10000,0,0,0,1,59902.0);
2209 DOS2DT(1,1,-10000,0,0,0,1,48214.0);
2211 DOS2DT(30,12,1899,0,0,0,1,46751.0);
2212 DOS2DT(30,12,1899,0,0,1,1,46751.0);
2214 DOS2DT(1,1,1980,18,1,16,1,29221.75087962963);
2215 DOS2DT(1,300,1980,18,1,16,1,29556.75087962963);
2216 DOS2DT(300,1,1980,18,1,16,1,29232.75087962963);
2217 DOS2DT(0,1,1980,42,1,16,1,29220.4175462963);
2218 DOS2DT(1,1,1980,17,61,16,0,0.0);
2219 DOS2DT(1,1,1980,18,0,76,1,29221.75013888889);
2220 DOS2DT(1,-300,1980,18,1,16,1,29312.75087962963);
2221 DOS2DT(-300,1,1980,18,1,16,1,29240.75087962963);
2222 DOS2DT(3,1,1980,-30,1,16,1,29223.08421296296);
2223 DOS2DT(1,1,1980,20,-119,16,1,29221.83976851852);
2224 DOS2DT(1,1,1980,18,3,-104,1,29221.75236111111);
2225 DOS2DT(1,12001,-1020,18,1,16,1,55519.75087962963);
2226 DOS2DT(1,-23,1982,18,1,16,1,30195.75087962963);
2227 DOS2DT(-59,3,1980,18,1,16,1,29285.75087962963);
2228 DOS2DT(1,1,0,0,0,0,1,54058.0);
2229 DOS2DT(0,0,1980,0,0,0,1,29189.0);
2230 DOS2DT(0,1,1980,0,0,0,1,29220.0);
2231 DOS2DT(-1,1,1980,18,1,16,1,29251.75087962963);
2232 DOS2DT(1,1,-1,18,1,16,1,53693.75087962963);
2233 DOS2DT(1,-1,1980,18,1,16,0,0);
2239 unsigned short dosDate, dosTime, expDosDate, expDosTime;
2242 dosTime = dosDate = 0;
2245 res = pVariantTimeToDosDateTime(dt, &dosDate, &dosTime);
2246 ok_(__FILE__,
line)(
r ==
res && (!
r || (dosTime == expDosTime && dosDate == expDosDate)),
2247 "%g: expected %d,%d(%d/%d/%d),%d(%d:%d:%d) got %d,%d(%d/%d/%d),%d(%d:%d:%d)\n",
2248 dt,
r, expDosDate, expDosDate & 0x1f,
2249 (expDosDate >> 5) & 0xf, 1980 + (expDosDate >> 9),
2250 expDosTime, expDosTime >> 11, (expDosTime >> 5) & 0x3f,
2251 (expDosTime & 0x1f),
2252 res, dosDate, dosDate & 0x1f, (dosDate >> 5) & 0xf,
2253 1980 + (dosDate >> 9), dosTime, dosTime >> 11,
2254 (dosTime >> 5) & 0x3f, (dosTime & 0x1f));
2256#define DT2DOS(dt,r,d,m,y,h,mn,s) test_dt2dos(__LINE__,dt,r,d,m,y,h,mn,s)
2263 DT2DOS(29221.0,1,1,1,1980,0,0,0);
2264 DT2DOS(73050.0,1,31,12,2099,0,0,0);
2265 DT2DOS(29220.0,0,0,0,0,0,0,0);
2266 DT2DOS(73415.0,0,0,0,0,0,0,0);
2269 DT2DOS(29221.00032407407,1,1,1,1980,0,0,29);
2270 DT2DOS(29221.00034722222,1,1,1,1980,0,0,31);
2271 DT2DOS(29221.04097222222,1,1,1,1980,0,59,0);
2272 DT2DOS(29221.95833333333,1,1,1,1980,23,0,0);
2277#define VARABS(vt,val,rvt,rval) \
2278 V_VT(&v) = VT_##vt; V_##vt(&v) = val; \
2279 V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \
2280 test_var_call1( __LINE__, pVarAbs, &v, &exp )
2284 static WCHAR szNum[] = {
'-',
'1',
'.',
'1',
'\0' };
2308 hres = pVarAbs(&
v,&vDst);
2328 ok(
hres == hExpected,
"VarAbs: expected 0x%X, got 0x%X for vt %d | 0x%X\n",
2352 V_CY(&
v).int64 = -10000;
2353 memset(&vDst,0,
sizeof(vDst));
2354 hres = pVarAbs(&
v,&vDst);
2356 "VarAbs(CY): expected 0x0 got 0x%X\n",
hres);
2360 trace(
"Skipping VarAbs(BSTR) as decimal separator is '%s'\n",
buff);
2367 memset(&vDst,0,
sizeof(vDst));
2368 hres = pVarAbs(&
v,&vDst);
2370 "VarAbs: expected 0x0,%d,%g, got 0x%X,%d,%g\n",
VT_R8, 1.1,
hres,
V_VT(&vDst),
V_R8(&vDst));
2375#define VARNOT(vt,val,rvt,rval) \
2376 V_VT(&v) = VT_##vt; V_##vt(&v) = val; \
2377 V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \
2378 test_var_call1( __LINE__, pVarNot, &v, &exp )
2382 static const WCHAR szNum0[] = {
'0',
'\0' };
2383 static const WCHAR szNum1[] = {
'1',
'\0' };
2384 static const WCHAR szFalse[] = {
'#',
'F',
'A',
'L',
'S',
'E',
'#',
'\0' };
2385 static const WCHAR szTrue[] = {
'#',
'T',
'R',
'U',
'E',
'#',
'\0' };
2434 hres = pVarNot(&
v,&vDst);
2435 ok(
hres == hExpected,
"VarNot: expected 0x%X, got 0x%X vt %d|0x%X\n",
2483 S(
U(*pdec)).sign = DECIMAL_NEG;
2484 S(
U(*pdec)).scale = 0;
2486 S1(
U1(*pdec)).Mid32 = 0;
2487 S1(
U1(*pdec)).Lo32 = 1;
2502#define VARSUB(vt1,val1,vt2,val2,rvt,rval) \
2503 V_VT(&left) = VT_##vt1; V_##vt1(&left) = val1; \
2504 V_VT(&right) = VT_##vt2; V_##vt2(&right) = val2; \
2505 V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \
2506 test_var_call2( __LINE__, pVarSub, &left, &right, &exp )
2529 VARTYPE leftvt, rightvt, resvt;
2540 expectedhres =
S_OK;
2623 else if (leftvt ==
VT_CY || rightvt ==
VT_CY)
2625 else if (leftvt ==
VT_R8 || rightvt ==
VT_R8)
2629 }
else if (leftvt ==
VT_R4 || rightvt ==
VT_R4) {
2636 else if (leftvt ==
VT_I8 || rightvt ==
VT_I8)
2638 else if (leftvt ==
VT_I4 || rightvt ==
VT_I4)
2640 else if (leftvt ==
VT_I2 || rightvt ==
VT_I2 ||
2655 "VarSub: %d|0x%X, %d|0x%X: Expected failure 0x%X, "
2656 "got 0x%X, expected vt %d got vt %d\n",
2666 VARSUB(I2,-13,I4,5,I4,-18);
2667 VARSUB(I4,-13,I4,5,I4,-18);
2696 "VarSub: expected coerced type VT_R8, got %s!\n",
vtstr(
V_VT(&
result)));
2698 "VarSub: BSTR + BSTR, expected %f got %f\n", 0.0,
V_R8(&
result));
2716 "VarSub: expected coerced type VT_CY, got %s!\n",
vtstr(
V_VT(&
result)));
2722 "VarSub: expected coerced type VT_DECIMAL, got %s!\n",
vtstr(
V_VT(&
result)));
2739 ok_(__FILE__,
line)(
hres == expres,
"wrong result %x/%x\n",
hres, expres );
2745#define VARMOD(vt1,vt2,val1,val2,rvt,rval) \
2746 V_VT(&left) = VT_##vt1; V_##vt1(&left) = val1; \
2747 V_VT(&right) = VT_##vt2; V_##vt2(&right) = val2; \
2748 V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \
2749 test_var_call2( __LINE__, pVarMod, &left, &right, &exp )
2751#define VARMOD2(vt1,vt2,val1,val2,rvt,rval,hexpected) \
2752 V_VT(&left) = VT_##vt1; V_I4(&left) = val1; \
2753 V_VT(&right) = VT_##vt2; V_I4(&right) = val2; \
2754 V_VT(&exp) = VT_##rvt; V_I4(&exp) = rval; \
2755 test_Mod( __LINE__, &left, &right, &exp, hexpected )
2762 static const WCHAR szNum0[] = {
'1',
'2',
'5',
'\0'};
2763 static const WCHAR szNum1[] = {
'1',
'0',
'\0'};
2765 BOOL lFound, rFound;
2767 BSTR strNum0, strNum1;
2772 VARMOD(I1,I1,100,10,I4,0);
2773 VARMOD(I1,UI1,100,10,I4,0);
2774 VARMOD(I1,I2,100,10,I4,0);
2775 VARMOD(I1,UI2,100,10,I4,0);
2776 VARMOD(I1,I4,100,10,I4,0);
2777 VARMOD(I1,UI4,100,10,I4,0);
2782 VARMOD(UI1,I1,100,10,I4,0);
2783 VARMOD(UI1,UI1,100,10,UI1,0);
2784 VARMOD(UI1,I2,100,10,I2,0);
2785 VARMOD(UI1,UI2,100,10,I4,0);
2786 VARMOD(UI1,I4,100,10,I4,0);
2787 VARMOD(UI1,UI4,100,10,I4,0);
2792 VARMOD(I2,I1,100,10,I4,0);
2793 VARMOD(I2,UI1,100,10,I2,0);
2794 VARMOD(I2,I2,100,10,I2,0);
2795 VARMOD(I2,UI2,100,10,I4,0);
2796 VARMOD(I2,I4,100,10,I4,0);
2797 VARMOD(I2,UI4,100,10,I4,0);
2802 VARMOD(I4,I1,100,10,I4,0);
2803 VARMOD(I4,UI1,100,10,I4,0);
2804 VARMOD(I4,I2,100,10,I4,0);
2805 VARMOD(I4,UI2,100,10,I4,0);
2806 VARMOD(I4,I4,100,10,I4,0);
2807 VARMOD(I4,UI4,100,10,I4,0);
2811 VARMOD(UI4,I1,100,10,I4,0);
2812 VARMOD(UI4,UI1,100,10,I4,0);
2813 VARMOD(UI4,I2,100,10,I4,0);
2814 VARMOD(UI4,UI2,100,10,I4,0);
2815 VARMOD(UI4,I4,100,10,I4,0);
2816 VARMOD(UI4,UI4,100,10,I4,0);
2876 VARMOD(I1,I8,100,10,I8,0);
2877 VARMOD(UI1,I8,100,10,I8,0);
2878 VARMOD(I2,I8,100,10,I8,0);
2879 VARMOD(I4,I8,100,10,I8,0);
2880 VARMOD(UI4,I8,100,10,I8,0);
2886 VARMOD(I8,I1,100,10,I8,0);
2887 VARMOD(I8,UI1,100,10,I8,0);
2888 VARMOD(I8,I2,100,10,I8,0);
2889 VARMOD(I8,UI2,100,10,I8,0);
2890 VARMOD(I8,I4,100,10,I8,0);
2891 VARMOD(I8,UI4,100,10,I8,0);
2894 VARMOD(I8,I8,100,10,I8,0);
2997 }
else if((
r ==
VT_EMPTY) && lFound && lValid)
3021 }
else if((
l ==
VT_NULL) && rFound)
3027 }
else if((
r ==
VT_RECORD) && lValid && lFound)
3033 }
else if((
l ==
VT_CY) && !rFound)
3036 }
else if(lFound && !rFound)
3039 }
else if(!lFound && rFound)
3042 }
else if((
r ==
VT_NULL) && lFound && lValid)
3051 }
else if(!lFound && !rFound)
3060 V_CY(&
v1).int64 = 1000000;
3105 "VarMod: expected 0x%x, got 0x%X for l type of %d, r type of %d,\n", hexpected,
hres,
l,
r);
3113 VARMOD(I4,I4,-1,-1,I4,0);
3147 V_CY(&
v1).int64 = 100000;
3148 V_CY(&
v2).int64 = 100000;
3151 "VarMod: expected 0x%x,%d,%d, got 0x%X,%d,%d\n",
S_OK,
VT_I4, 0,
hres,
V_VT(&vDst),
V_I4(&vDst));
3156 V_CY(&
v2).int64 = 100000;
3159 "VarMod: expected 0x%x,%d,%d, got 0x%X,%d,%d\n",
S_OK,
VT_I4, 0,
hres,
V_VT(&vDst),
V_I4(&vDst));
3168 "VarMod: expected 0x%x,%d,%d, got 0x%X,%d,%d\n",
S_OK,
VT_I4, 0,
hres,
V_VT(&vDst),
V_I4(&vDst));
3176 "VarMod: expected 0x%x,%d,%d, got 0x%X,%d,%d\n",
S_OK,
VT_I4, 0,
hres,
V_VT(&vDst),
V_I4(&vDst));
3184 V_CY(&
v2).int64 = 100000;
3189 "VarMod: expected 0x%x,%d,%d, got 0x%X,%d,%d\n",
DISP_E_TYPEMISMATCH,
VT_EMPTY, 1231,
hres,
V_VT(&vDst),
V_I4(&vDst));
3238#define VARFIX(vt,val,rvt,rval) \
3239 V_VT(&v) = VT_##vt; V_##vt(&v) = val; \
3240 V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \
3241 test_var_call1( __LINE__, pVarFix, &v, &exp )
3245 static const WCHAR szNumMinus1[] = {
'-',
'1',
'\0' };
3282 hres = pVarFix(&
v,&vDst);
3285 "VarFix: expected failure, got 0x%X vt %d|0x%X\n",
3288 ok(
hres ==
S_OK,
"VarFix: expected S_OK, got 0x%X vt %d|0x%X\n",
3315 hres = pVarFix(&
v,&vDst);
3317 "VarFix: expected 0x0,%d,0 got 0x%X,%d,%d\n",
VT_EMPTY,
3321 hres = pVarFix(&
v,&vDst);
3326 S(
U(*pdec)).sign = DECIMAL_NEG;
3327 S(
U(*pdec)).scale = 0;
3329 S1(
U1(*pdec)).Mid32 = 0;
3330 S1(
U1(*pdec)).Lo32 = 1;
3331 hres = pVarFix(&
v,&vDst);
3333 "VarFix: expected 0x0,%d,identical, got 0x%X,%d\n",
VT_DECIMAL,
3339 pcy->
int64 = -10000;
3340 hres = pVarFix(&
v,&vDst);
3342 "VarFix: VT_CY wrong, hres=0x%X\n",
hres);
3345 pcy->
int64 = -16000;
3346 hres = pVarFix(&
v,&vDst);
3348 "VarFix: VT_CY wrong, hres=0x%X\n",
hres);
3353#define VARINT(vt,val,rvt,rval) \
3354 V_VT(&v) = VT_##vt; V_##vt(&v) = val; \
3355 V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \
3356 test_var_call1( __LINE__, pVarInt, &v, &exp )
3360 static const WCHAR szNumMinus1[] = {
'-',
'1',
'\0' };
3397 hres = pVarInt(&
v,&vDst);
3400 "VarInt: expected failure, got 0x%X vt %d|0x%X\n",
3403 ok(
hres ==
S_OK,
"VarInt: expected S_OK, got 0x%X vt %d|0x%X\n",
3430 hres = pVarInt(&
v,&vDst);
3432 "VarInt: expected 0x0,%d,0 got 0x%X,%d,%d\n",
VT_EMPTY,
3436 hres = pVarInt(&
v,&vDst);
3441 S(
U(*pdec)).sign = DECIMAL_NEG;
3442 S(
U(*pdec)).scale = 0;
3444 S1(
U1(*pdec)).Mid32 = 0;
3445 S1(
U1(*pdec)).Lo32 = 1;
3446 hres = pVarInt(&
v,&vDst);
3448 "VarInt: expected 0x0,%d,identical, got 0x%X,%d\n",
VT_DECIMAL,
3454 pcy->
int64 = -10000;
3455 hres = pVarInt(&
v,&vDst);
3457 "VarInt: VT_CY wrong, hres=0x%X\n",
hres);
3460 pcy->
int64 = -11000;
3461 hres = pVarInt(&
v,&vDst);
3463 "VarInt: VT_CY wrong, hres=0x%X 0x%x%08x\n",
3469#define VARNEG(vt,val,rvt,rval) \
3470 V_VT(&v) = VT_##vt; V_##vt(&v) = val; \
3471 V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \
3472 test_var_call1( __LINE__, pVarNeg, &v, &exp )
3476 static const WCHAR szNumMinus1[] = {
'-',
'1',
'\0' };
3477 static const WCHAR szNum1[] = {
'1',
'\0' };
3518 hres = pVarNeg(&
v,&vDst);
3521 "VarNeg: expected failure, got 0x%X vt %d|0x%X\n",
3524 ok(
hres ==
S_OK,
"VarNeg: expected S_OK, got 0x%X vt %d|0x%X\n",
3534 VARNEG(I2,-32768,I4,32768);
3537 VARNEG(I4,-((
int)(~0
u >> 1)) - 1,
R8,-2147483648u);
3555 hres = pVarNeg(&
v,&vDst);
3557 "VarNeg: expected 0x0,%d,0 got 0x%X,%d,%d\n",
VT_EMPTY,
3561 hres = pVarNeg(&
v,&vDst);
3566 S(
U(*pdec)).sign = DECIMAL_NEG;
3567 S(
U(*pdec)).scale = 0;
3569 S1(
U1(*pdec)).Mid32 = 0;
3570 S1(
U1(*pdec)).Lo32 = 1;
3571 hres = pVarNeg(&
v,&vDst);
3574 "VarNeg: expected 0x0,%d,0x00, got 0x%X,%d,%02x\n",
VT_DECIMAL,
3577 S(
U(*pdec)).sign = 0;
3578 hres = pVarNeg(&
v,&vDst);
3581 "VarNeg: expected 0x0,%d,0x7f, got 0x%X,%d,%02x\n",
VT_DECIMAL,
3585 pcy->
int64 = -10000;
3586 hres = pVarNeg(&
v,&vDst);
3588 "VarNeg: VT_CY wrong, hres=0x%X\n",
hres);
3605#define VARROUND(vt,val,deci,rvt,rval) \
3606 V_VT(&v) = VT_##vt; V_##vt(&v) = val; \
3607 V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \
3608 test_Round( __LINE__, &v, deci, &exp )
3625 {{ 0, DECIMAL_NEG, 0, 0, 1 }, { 0, DECIMAL_NEG, 0, 0, 1 }, 0},
3626 {{ 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 1 }, 0},
3627 {{ 2, 0, 0, 0, 155 }, { 0, 0, 0, 0, 16 }, 1},
3628 {{ 2, 0, 0, 0, 155 }, { 1, 0, 0, 0, 2 }, 0},
3629 {{ 2, 0, 0, 0, 199 }, { 1, 0, 0, 0, 20 }, 1},
3630 {{ 2, 0, 0, 0, 199 }, { 2, 0, 0, 0, 199 }, 2},
3631 {{ 2, DECIMAL_NEG, 0, 0, 199 }, { 2, DECIMAL_NEG, 0, 0, 199 }, 2},
3632 {{ 2, DECIMAL_NEG, 0, 0, 55 }, { 2, DECIMAL_NEG, 0, 0, 6 }, 1},
3633 {{ 2, 0, 0, 0, 55 }, { 2, 0, 0, 0, 6 }, 1},
3634 {{ 2, 0, 0, 0, 1999 }, { 1, 0, 0, 0, 200 }, 1},
3639 static WCHAR szNumMin[] = {
'-',
'1',
'.',
'4',
'4',
'9',
'\0' };
3640 static WCHAR szNum[] = {
'1',
'.',
'4',
'5',
'1',
'\0' };
3658 VARROUND(I4,-((
int)(~0
u >> 1)) - 1,0,I4,-((
int)(~0
u >> 1)) - 1);
3681 szNumMin[2] =
buff[0];
3686 skip(
"Skipping VarRound(BSTR) as decimal separator is '%s'\n",
buff);
3712 hres = pVarRound(&
v,0,&vDst);
3714 "VarRound: expected 0x0,%d,0 got 0x%X,%d,%d\n",
VT_EMPTY,
3718 hres = pVarRound(&
v,0,&vDst);
3720 "VarRound: expected 0x0,%d got 0x%X,%d\n",
VT_NULL,
hres,
V_VT(&vDst));
3730 S(
U(*pdec)).sign =
ptr->source.sign;
3731 S(
U(*pdec)).scale =
ptr->source.scale;
3732 pdec->
Hi32 =
ptr->source.Hi32;
3733 S1(
U1(*pdec)).Mid32 =
ptr->source.Mid32;
3734 S1(
U1(*pdec)).Lo32 =
ptr->source.Lo32;
3736 hres = pVarRound(&
v,
ptr->dec, &vDst);
3743 ok(
V_DECIMAL(&vDst).Hi32 ==
ptr->ret.Hi32,
"%d: got Hi32 %d, expected %d\n",
3745 ok(
S1(
U1(
V_DECIMAL(&vDst))).Mid32 ==
ptr->ret.Mid32,
"%d: got Mid32 %d, expected %d\n",
3755 hres = pVarRound(&
v,0,&vDst);
3757 "VarRound: VT_CY wrong, hres=0x%X\n",
hres);
3763#define VARXOR(vt1,val1,vt2,val2,rvt,rval) \
3764 V_VT(&left) = VT_##vt1; V_##vt1(&left) = val1; \
3765 V_VT(&right) = VT_##vt2; V_##vt2(&right) = val2; \
3766 V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \
3767 test_var_call2( __LINE__, pVarXor, &left, &right, &exp )
3769#define VARXORCY(vt1,val1,val2,rvt,rval) \
3770 V_VT(&left) = VT_##vt1; V_##vt1(&left) = val1; \
3771 V_VT(&right) = VT_CY; V_CY(&right).int64 = val2; \
3772 V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \
3773 test_var_call2( __LINE__, pVarXor, &left, &right, &exp )
3777 static const WCHAR szFalse[] = {
'#',
'F',
'A',
'L',
'S',
'E',
'#',
'\0' };
3778 static const WCHAR szTrue[] = {
'#',
'T',
'R',
'U',
'E',
'#',
'\0' };
3789 VARTYPE leftvt, rightvt, resvt;
3826 if (leftvt == rightvt ||
3833 else if (leftvt ==
VT_I8 || rightvt ==
VT_I8)
3842 if (leftvt == rightvt)
3844 else if (leftvt == rightvt ||
3850 else if (leftvt ==
VT_I8 || rightvt ==
VT_I8)
3853 else if (leftvt ==
VT_I2 || rightvt ==
VT_I2)
3855 if (leftvt == rightvt ||
3858 else if (leftvt ==
VT_I8 || rightvt ==
VT_I8)
3865 else if (leftvt ==
VT_I8 || rightvt ==
VT_I8)
3875 "VarXor: %d|0x%X, %d|0x%X: Expected failure, got 0x%X vt %d\n",
3880 "VarXor: %d|0x%X, %d|0x%X: expected S_OK, vt %d, got 0x%X vt %d\n",
3985 VARXOR(
BOOL,VARIANT_TRUE,UI2,65535,I4,-65536);
3991 VARXOR(
BOOL,VARIANT_TRUE,UI4,0xffffffff,I4,0);
4033 VARXOR(I1,-1,I1,-1,I4,0);
4034 VARXOR(I1,-1,I1,0,I4,-1);
4036 VARXOR(I1,-1,UI1,255,I4,-256);
4037 VARXOR(I1,-1,UI1,0,I4,-1);
4039 VARXOR(I1,-1,I2,-1,I4,0);
4040 VARXOR(I1,-1,I2,0,I4,-1);
4042 VARXOR(I1,-1,UI2,65535,I4,-65536);
4043 VARXOR(I1,-1,UI2,0,I4,-1);
4045 VARXOR(I1,-1,I4,-1,I4,0);
4046 VARXOR(I1,-1,I4,0,I4,-1);
4048 VARXOR(I1,-1,UI4,0xffffffff,I4,0);
4049 VARXOR(I1,-1,UI4,0,I4,-1);
4062 VARXOR(I1,-1,I8,-1,I8,0);
4063 VARXOR(I1,-1,I8,0,I8,-1);
4065 VARXOR(I1,-1,UI8,0,I4,-1);
4086 VARXOR(UI1,255,UI1,255,UI1,0);
4087 VARXOR(UI1,255,UI1,0,UI1,255);
4088 VARXOR(UI1,0,UI1,0,UI1,0);
4089 VARXOR(UI1,255,I2,-1,I2,-256);
4090 VARXOR(UI1,255,I2,0,I2,255);
4092 VARXOR(UI1,255,UI2,65535,I4,65280);
4093 VARXOR(UI1,255,UI2,0,I4,255);
4094 VARXOR(UI1,0,UI2,0,I4,0);
4095 VARXOR(UI1,255,I4,-1,I4,-256);
4096 VARXOR(UI1,255,I4,0,I4,255);
4098 VARXOR(UI1,255,UI4,0xffffffff,I4,-256);
4099 VARXOR(UI1,255,UI4,0,I4,255);
4100 VARXOR(UI1,0,UI4,0,I4,0);
4112 VARXOR(UI1,255,I8,-1,I8,-256);
4113 VARXOR(UI1,255,I8,0,I8,255);
4115 VARXOR(UI1,255,UI8,0,I4,255);
4116 VARXOR(UI1,0,UI8,0,I4,0);
4136 VARXOR(I2,-1,I2,-1,I2,0);
4137 VARXOR(I2,-1,I2,0,I2,-1);
4139 VARXOR(I2,-1,UI2,65535,I4,-65536);
4140 VARXOR(I2,-1,UI2,0,I4,-1);
4142 VARXOR(I2,-1,I4,-1,I4,0);
4143 VARXOR(I2,-1,I4,0,I4,-1);
4145 VARXOR(I2,-1,UI4,0xffffffff,I4,0);
4146 VARXOR(I2,-1,UI4,0,I4,-1);
4159 VARXOR(I2,-1,I8,-1,I8,0);
4160 VARXOR(I2,-1,I8,0,I8,-1);
4162 VARXOR(I2,-1,UI8,0,I4,-1);
4183 VARXOR(UI2,65535,UI2,65535,I4,0);
4184 VARXOR(UI2,65535,UI2,0,I4,65535);
4185 VARXOR(UI2,0,UI2,0,I4,0);
4186 VARXOR(UI2,65535,I4,-1,I4,-65536);
4187 VARXOR(UI2,65535,I4,0,I4,65535);
4189 VARXOR(UI2,65535,UI4,0xffffffff,I4,-65536);
4190 VARXOR(UI2,65535,UI4,0,I4,65535);
4191 VARXOR(UI2,0,UI4,0,I4,0);
4203 VARXOR(UI2,65535,I8,-1,I8,-65536);
4204 VARXOR(UI2,65535,I8,0,I8,65535);
4206 VARXOR(UI2,65535,UI8,0,I4,65535);
4207 VARXOR(UI2,0,UI8,0,I4,0);
4223 VARXORCY(UI2,65535,10000,I4,65534);
4227 VARXOR(I4,-1,I4,-1,I4,0);
4228 VARXOR(I4,-1,I4,0,I4,-1);
4230 VARXOR(I4,-1,UI4,0xffffffff,I4,0);
4231 VARXOR(I4,-1,UI4,0,I4,-1);
4244 VARXOR(I4,-1,I8,-1,I8,0);
4245 VARXOR(I4,-1,I8,0,I8,-1);
4247 VARXOR(I4,-1,UI8,0,I4,-1);
4268 VARXOR(UI4,0xffffffff,UI4,0xffffffff,I4,0);
4269 VARXOR(UI4,0xffffffff,UI4,0,I4,-1);
4270 VARXOR(UI4,0,UI4,0,I4,0);
4282 VARXOR(UI4,0xffffffff,I8,0,I8,0xffffffff);
4283 VARXOR(UI4,VARIANT_FALSE,I8,VARIANT_FALSE,I8,0);
4285 VARXOR(UI4,0xffffffff,UI8,0,I4,-1);
4286 VARXOR(UI4,0,UI8,0,I4,0);
4302 VARXORCY(UI4,0xffffffff,10000,I4,-2);
4404 VARXOR(I8,-1,I8,-1,I8,0);
4405 VARXOR(I8,-1,I8,0,I8,-1);
4407 VARXOR(I8,-1,UI8,0,I8,-1);
4423 VARXOR(UI8,0xffff,UI8,0xffff,I4,0);
4424 VARXOR(UI8,0xffff,UI8,0,I4,0xffff);
4425 VARXOR(UI8,0,UI8,0,I4,0);
4440 VARXORCY(UI8,0xffff,10000,I4,65534);
4497#define VAROR(vt1,val1,vt2,val2,rvt,rval) \
4498 V_VT(&left) = VT_##vt1; V_##vt1(&left) = val1; \
4499 V_VT(&right) = VT_##vt2; V_##vt2(&right) = val2; \
4500 V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \
4501 test_var_call2( __LINE__, pVarOr, &left, &right, &exp )
4503#define VARORCY(vt1,val1,val2,rvt,rval) \
4504 V_VT(&left) = VT_##vt1; V_##vt1(&left) = val1; \
4505 V_VT(&right) = VT_CY; V_CY(&right).int64 = val2; \
4506 V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \
4507 test_var_call2( __LINE__, pVarOr, &left, &right, &exp )
4511 static const WCHAR szFalse[] = {
'#',
'F',
'A',
'L',
'S',
'E',
'#',
'\0' };
4512 static const WCHAR szTrue[] = {
'#',
'T',
'R',
'U',
'E',
'#',
'\0' };
4523 VARTYPE leftvt, rightvt, resvt;
4560 if (leftvt == rightvt ||
4567 else if (leftvt ==
VT_I8 || rightvt ==
VT_I8)
4576 if (leftvt == rightvt)
4578 else if (leftvt == rightvt ||
4584 else if (leftvt ==
VT_I8 || rightvt ==
VT_I8)
4587 else if (leftvt ==
VT_I2 || rightvt ==
VT_I2)
4589 if (leftvt == rightvt ||
4592 else if (leftvt ==
VT_I8 || rightvt ==
VT_I8)
4599 else if (leftvt ==
VT_I8 || rightvt ==
VT_I8)
4609 "VarOr: %d|0x%X, %d|0x%X: Expected failure, got 0x%X vt %d\n",
4614 "VarOr: %d|0x%X, %d|0x%X: expected S_OK, vt %d, got 0x%X vt %d\n",
4721 VAROR(
BOOL,VARIANT_TRUE,UI2,65535,I4,-1);
4727 VAROR(
BOOL,VARIANT_TRUE,UI4,0xffffffff,I4,-1);
4769 VAROR(I1,-1,I1,-1,I4,-1);
4770 VAROR(I1,-1,I1,0,I4,-1);
4771 VAROR(I1,0,I1,0,I4,0);
4772 VAROR(I1,-1,UI1,255,I4,-1);
4773 VAROR(I1,-1,UI1,0,I4,-1);
4774 VAROR(I1,0,UI1,0,I4,0);
4775 VAROR(I1,-1,I2,-1,I4,-1);
4776 VAROR(I1,-1,I2,0,I4,-1);
4777 VAROR(I1,0,I2,0,I4,0);
4778 VAROR(I1,-1,UI2,65535,I4,-1);
4779 VAROR(I1,-1,UI2,0,I4,-1);
4780 VAROR(I1,0,UI2,0,I4,0);
4781 VAROR(I1,-1,I4,-1,I4,-1);
4782 VAROR(I1,-1,I4,0,I4,-1);
4783 VAROR(I1,0,I4,0,I4,0);
4784 VAROR(I1,-1,UI4,0xffffffff,I4,-1);
4785 VAROR(I1,-1,UI4,0,I4,-1);
4786 VAROR(I1,0,UI4,0,I4,0);
4798 VAROR(I1,-1,I8,-1,I8,-1);
4799 VAROR(I1,-1,I8,0,I8,-1);
4800 VAROR(I1,0,I8,0,I8,0);
4801 VAROR(I1,-1,UI8,0,I4,-1);
4802 VAROR(I1,0,UI8,0,I4,0);
4822 VAROR(UI1,255,UI1,255,UI1,255);
4823 VAROR(UI1,255,UI1,0,UI1,255);
4824 VAROR(UI1,0,UI1,0,UI1,0);
4825 VAROR(UI1,255,I2,-1,I2,-1);
4826 VAROR(UI1,255,I2,0,I2,255);
4827 VAROR(UI1,0,I2,0,I2,0);
4828 VAROR(UI1,255,UI2,65535,I4,65535);
4829 VAROR(UI1,255,UI2,0,I4,255);
4830 VAROR(UI1,0,UI2,0,I4,0);
4831 VAROR(UI1,255,I4,-1,I4,-1);
4832 VAROR(UI1,255,I4,0,I4,255);
4833 VAROR(UI1,0,I4,0,I4,0);
4834 VAROR(UI1,255,UI4,0xffffffff,I4,-1);
4835 VAROR(UI1,255,UI4,0,I4,255);
4836 VAROR(UI1,0,UI4,0,I4,0);
4848 VAROR(UI1,255,I8,-1,I8,-1);
4849 VAROR(UI1,255,I8,0,I8,255);
4850 VAROR(UI1,0,I8,0,I8,0);
4851 VAROR(UI1,255,UI8,0,I4,255);
4852 VAROR(UI1,0,UI8,0,I4,0);
4868 VARORCY(UI1,255,10000,I4,255);
4872 VAROR(I2,-1,I2,-1,I2,-1);
4873 VAROR(I2,-1,I2,0,I2,-1);
4874 VAROR(I2,0,I2,0,I2,0);
4875 VAROR(I2,-1,UI2,65535,I4,-1);
4876 VAROR(I2,-1,UI2,0,I4,-1);
4877 VAROR(I2,0,UI2,0,I4,0);
4878 VAROR(I2,-1,I4,-1,I4,-1);
4879 VAROR(I2,-1,I4,0,I4,-1);
4880 VAROR(I2,0,I4,0,I4,0);
4881 VAROR(I2,-1,UI4,0xffffffff,I4,-1);
4882 VAROR(I2,-1,UI4,0,I4,-1);
4883 VAROR(I2,0,UI4,0,I4,0);
4895 VAROR(I2,-1,I8,-1,I8,-1);
4896 VAROR(I2,-1,I8,0,I8,-1);
4897 VAROR(I2,0,I8,0,I8,0);
4898 VAROR(I2,-1,UI8,0,I4,-1);
4899 VAROR(I2,0,UI8,0,I4,0);
4919 VAROR(UI2,65535,UI2,65535,I4,65535);
4920 VAROR(UI2,65535,UI2,0,I4,65535);
4921 VAROR(UI2,0,UI2,0,I4,0);
4922 VAROR(UI2,65535,I4,-1,I4,-1);
4923 VAROR(UI2,65535,I4,0,I4,65535);
4924 VAROR(UI2,0,I4,0,I4,0);
4925 VAROR(UI2,65535,UI4,0xffffffff,I4,-1);
4926 VAROR(UI2,65535,UI4,0,I4,65535);
4927 VAROR(UI2,0,UI4,0,I4,0);
4929 VAROR(UI2,65535,
R4,0,I4,65535);
4932 VAROR(UI2,65535,
R8,0,I4,65535);
4939 VAROR(UI2,65535,I8,-1,I8,-1);
4940 VAROR(UI2,65535,I8,0,I8,65535);
4941 VAROR(UI2,0,I8,0,I8,0);
4942 VAROR(UI2,65535,UI8,0,I4,65535);
4943 VAROR(UI2,0,UI8,0,I4,0);
4959 VARORCY(UI2,65535,10000,I4,65535);
4960 VARORCY(UI2,65535,0,I4,65535);
4963 VAROR(I4,-1,I4,-1,I4,-1);
4964 VAROR(I4,-1,I4,0,I4,-1);
4965 VAROR(I4,0,I4,0,I4,0);
4966 VAROR(I4,-1,UI4,0xffffffff,I4,-1);
4967 VAROR(I4,-1,UI4,0,I4,-1);
4968 VAROR(I4,0,UI4,0,I4,0);
4980 VAROR(I4,-1,I8,-1,I8,-1);
4981 VAROR(I4,-1,I8,0,I8,-1);
4982 VAROR(I4,0,I8,0,I8,0);
4983 VAROR(I4,-1,UI8,0,I4,-1);
4984 VAROR(I4,0,UI8,0,I4,0);
5004 VAROR(UI4,0xffffffff,UI4,0xffffffff,I4,-1);
5005 VAROR(UI4,0xffffffff,UI4,0,I4,-1);
5006 VAROR(UI4,0,UI4,0,I4,0);
5007 VAROR(UI4,0xffffffff,
R4,-1,I4,-1);
5008 VAROR(UI4,0xffffffff,
R4,0,I4,-1);
5010 VAROR(UI4,0xffffffff,
R8,-1,I4,-1);
5011 VAROR(UI4,0xffffffff,
R8,0,I4,-1);
5018 VAROR(UI4,0xffffffff,I8,-1,I8,-1);
5019 VAROR(UI4,0xffffffff,I8,0,I8,0xffffffff);
5020 VAROR(UI4,0,I8,0,I8,0);
5021 VAROR(UI4,0xffffffff,UI8,0,I4,-1);
5022 VAROR(UI4,0,UI8,0,I4,0);
5024 VAROR(UI4,0xffffffff,
INT,-1,I4,-1);
5027 VAROR(UI4,0xffffffff,
UINT,0xffffffff,I4,-1);
5038 VARORCY(UI4,0xffffffff,10000,I4,-1);
5039 VARORCY(UI4,0xffffffff,0,I4,-1);
5140 VAROR(I8,-1,I8,-1,I8,-1);
5141 VAROR(I8,-1,I8,0,I8,-1);
5142 VAROR(I8,0,I8,0,I8,0);
5143 VAROR(I8,-1,UI8,0,I8,-1);
5144 VAROR(I8,0,UI8,0,I8,0);
5164 VAROR(UI8,0xffff,UI8,0xffff,I4,0xffff);
5165 VAROR(UI8,0xffff,UI8,0,I4,0xffff);
5166 VAROR(UI8,0,UI8,0,I4,0);
5170 VAROR(UI8,0xffff,
UINT,0xffff,I4,0xffff);
5181 VARORCY(UI8,0xffff,10000,I4,0xffff);
5182 VARORCY(UI8,0xffff,0,I4,0xffff);
5238#define VAREQV(vt1,val1,vt2,val2,rvt,rval) \
5239 V_VT(&left) = VT_##vt1; V_##vt1(&left) = val1; \
5240 V_VT(&right) = VT_##vt2; V_##vt2(&right) = val2; \
5241 V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \
5242 test_var_call2( __LINE__, pVarEqv, &left, &right, &exp )
5255 VARTYPE leftvt, rightvt, resvt;
5291 if (leftvt == rightvt ||
5298 else if (leftvt ==
VT_I8 || rightvt ==
VT_I8)
5307 if (leftvt == rightvt)
5309 else if (leftvt == rightvt ||
5315 else if (leftvt ==
VT_I8 || rightvt ==
VT_I8)
5318 else if (leftvt ==
VT_I2 || rightvt ==
VT_I2)
5320 if (leftvt == rightvt ||
5323 else if (leftvt ==
VT_I8 || rightvt ==
VT_I8)
5330 else if (leftvt ==
VT_I8 || rightvt ==
VT_I8)
5340 "VarEqv: %d|0x%X, %d|0x%X: Expected failure, got 0x%X vt %d\n",
5345 "VarEqv: %d|0x%X, %d|0x%X: expected S_OK, vt %d, got 0x%X vt %d\n",
5361 VAREQV(
BOOL,VARIANT_TRUE,I2,VARIANT_TRUE,I2,VARIANT_TRUE);
5362 VAREQV(
BOOL,VARIANT_TRUE,I2,VARIANT_FALSE,I2,VARIANT_FALSE);
5364 VAREQV(UI1,1,UI1,1,UI1,255);
5365 VAREQV(UI1,1,UI1,0,UI1,254);
5366 VAREQV(UI1,0,UI1,1,UI1,254);
5369 VAREQV(UI4,VARIANT_FALSE,I8,VARIANT_FALSE,I8,-1);
5370 VAREQV(UI4,5,I8,19,I8,-23);
5371 VAREQV(UI4,VARIANT_FALSE,UI8,VARIANT_FALSE,I4,-1);
5377#define VARMUL(vt1,val1,vt2,val2,rvt,rval) \
5378 V_VT(&left) = VT_##vt1; V_##vt1(&left) = val1; \
5379 V_VT(&right) = VT_##vt2; V_##vt2(&right) = val2; \
5380 V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \
5381 test_var_call2( __LINE__, pVarMul, &left, &right, &exp )
5399 VARTYPE leftvt, rightvt, resvt;
5450 else if (leftvt ==
VT_R8 || rightvt ==
VT_R8 ||
5454 else if (leftvt ==
VT_R4 || rightvt ==
VT_R4) {
5461 }
else if (leftvt ==
VT_CY || rightvt ==
VT_CY)
5463 else if (leftvt ==
VT_I8 || rightvt ==
VT_I8)
5465 else if (leftvt ==
VT_I4 || rightvt ==
VT_I4)
5467 else if (leftvt ==
VT_I2 || rightvt ==
VT_I2 ||
5477 "VarMul: %d|0x%X, %d|0x%X: Expected failure, got 0x%X vt %d\n",
5482 "VarMul: %d|0x%X, %d|0x%X: expected S_OK, vt %d, got 0x%X vt %d\n",
5493 VARMUL(I2,-13,I4,5,I4,-65);
5494 VARMUL(I4,-13,I4,5,I4,-65);
5548#define VARADD(vt1,val1,vt2,val2,rvt,rval) \
5549 V_VT(&left) = VT_##vt1; V_##vt1(&left) = val1; \
5550 V_VT(&right) = VT_##vt2; V_##vt2(&right) = val2; \
5551 V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \
5552 test_var_call2( __LINE__, pVarAdd, &left, &right, &exp )
5570 VARTYPE leftvt, rightvt, resvt;
5624 else if (leftvt ==
VT_CY || rightvt ==
VT_CY)
5626 else if (leftvt ==
VT_R8 || rightvt ==
VT_R8)
5634 }
else if (leftvt ==
VT_R4 || rightvt ==
VT_R4) {
5641 else if (leftvt ==
VT_I8 || rightvt ==
VT_I8)
5643 else if (leftvt ==
VT_I4 || rightvt ==
VT_I4)
5645 else if (leftvt ==
VT_I2 || rightvt ==
VT_I2 ||
5655 "VarAdd: %d|0x%X, %d|0x%X: Expected failure, got 0x%X vt %d\n",
5660 "VarAdd: %d|0x%X, %d|0x%X: expected S_OK, vt %d, got 0x%X vt %d\n",
5673 VARADD(I2,-13,I4,5,I4,-8);
5674 VARADD(I4,-13,I4,5,I4,-8);
5745 static const WCHAR sz34[] = {
'3',
'4',
'\0'};
5746 static const WCHAR sz1234[] = {
'1',
'2',
'3',
'4',
'\0'};
5747 static const WCHAR date_sz12[] = {
'9',
'/',
'3',
'0',
'/',
'1',
'9',
'8',
'0',
'1',
'2',
'\0'};
5748 static const WCHAR date_sz12_broken[] = {
'9',
'/',
'3',
'0',
'/',
'8',
'0',
'1',
'2',
'\0'};
5749 static const WCHAR sz12_date[] = {
'1',
'2',
'9',
'/',
'3',
'0',
'/',
'1',
'9',
'8',
'0',
'\0'};
5750 static const WCHAR sz12_date_broken[] = {
'1',
'2',
'9',
'/',
'3',
'0',
'/',
'8',
'0',
'\0'};
5751 static const WCHAR sz_empty[] = {
'\0'};
5752 CHAR orig_date_format[128];
5753 VARTYPE leftvt, rightvt, resultvt;
5785 expected_error_num =
S_OK;
5791 leftvt == 15 || rightvt == 15 )
5803 else if ((leftvt ==
VT_I2 || leftvt ==
VT_I4 ||
5880 ok(
hres == expected_error_num,
5881 "VarCat: %d, %d returned error, 0x%X expected 0x%X.\n",
5882 leftvt, rightvt,
hres, expected_error_num);
5886 "VarCat: %d, %d: expected vt %d, got vt %d\n",
5908 "VarCat: VT_BSTR concat with VT_BSTR failed to return correct result\n");
5921 "VarCat: VT_ERROR concat with VT_BSTR should have returned VT_EMPTY\n");
5933 "VarCat: VT_BSTR concat with VT_ERROR should have returned VT_EMPTY\n");
5992 "VarCat: NUMBER concat with NUMBER returned incorrect result\n");
6007 "VarCat: NUMBER concat with VT_BSTR, incorrect result\n");
6021 "VarCat: VT_BSTR concat with NUMBER, incorrect result\n");
6042 "VarCat: VT_BSTR concat with VT_DATE returned incorrect result\n");
6063 "VarCat: VT_DATE concat with VT_BSTR returned incorrect result\n");
6082 "VarCat: EMPTY concat with EMPTY did not return empty VT_BSTR\n");
6198#define VARAND(vt1,val1,vt2,val2,rvt,rval) \
6199 V_VT(&left) = VT_##vt1; V_##vt1(&left) = val1; \
6200 V_VT(&right) = VT_##vt2; V_##vt2(&right) = val2; \
6201 V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \
6202 test_var_call2( __LINE__, pVarAnd, &left, &right, &exp )
6204#define VARANDCY(vt1,val1,val2,rvt,rval) \
6205 V_VT(&left) = VT_##vt1; V_##vt1(&left) = val1; \
6206 V_VT(&right) = VT_CY; V_CY(&right).int64 = val2; \
6207 V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \
6208 test_var_call2( __LINE__, pVarAnd, &left, &right, &exp )
6211#define SKIPTESTAND(a) \
6212 if (a == VT_ERROR || a == VT_VARIANT || \
6213 a == VT_DISPATCH || a == VT_UNKNOWN || \
6214 a > VT_UINT || a == 15 ) \
6219 static const WCHAR szFalse[] = {
'#',
'F',
'A',
'L',
'S',
'E',
'#',
'\0' };
6220 static const WCHAR szTrue[] = {
'#',
'T',
'R',
'U',
'E',
'#',
'\0' };
6222 BSTR false_str, true_str;
6234 VARTYPE leftvt, rightvt, resvt;
6273 else if (leftvt ==
VT_I8 || rightvt ==
VT_I8)
6275 else if (leftvt ==
VT_I4 || rightvt ==
VT_I4 ||
6311 "VarAnd: %s|0x%X, %s|0x%X: got vt %s hr 0x%X\n",
6316 "VarAnd: %s|0x%X, %s|0x%X: expected vt %s hr 0x%X, got vt %s hr 0x%X\n",
6432 VARAND(
BOOL,VARIANT_TRUE,UI2,65535,I4,65535);
6438 VARAND(
BOOL,VARIANT_TRUE,UI4,0xffffffff,I4,-1);
6471 VARAND(I1,-1,I1,-1,I4,-1);
6474 VARAND(I1,-1,UI1,255,I4,255);
6475 VARAND(I1,-1,UI1,0,I4,0);
6477 VARAND(I1,-1,I2,-1,I4,-1);
6480 VARAND(I1,-1,UI2,65535,I4,65535);
6481 VARAND(I1,-1,UI2,0,I4,0);
6483 VARAND(I1,-1,I4,-1,I4,-1);
6486 VARAND(I1,-1,UI4,0xffffffff,I4,-1);
6487 VARAND(I1,-1,UI4,0,I4,0);
6500 VARAND(I1,-1,I8,-1,I8,-1);
6503 VARAND(I1,-1,UI8,0,I4,0);
6520 VARAND(UI1,255,UI1,255,UI1,255);
6521 VARAND(UI1,255,UI1,0,UI1,0);
6522 VARAND(UI1,0,UI1,0,UI1,0);
6523 VARAND(UI1,255,I2,-1,I2,255);
6524 VARAND(UI1,255,I2,0,I2,0);
6526 VARAND(UI1,255,UI2,65535,I4,255);
6527 VARAND(UI1,255,UI2,0,I4,0);
6528 VARAND(UI1,0,UI2,0,I4,0);
6529 VARAND(UI1,255,I4,-1,I4,255);
6530 VARAND(UI1,255,I4,0,I4,0);
6532 VARAND(UI1,255,UI4,0xffffffff,I4,255);
6533 VARAND(UI1,255,UI4,0,I4,0);
6534 VARAND(UI1,0,UI4,0,I4,0);
6546 VARAND(UI1,255,I8,-1,I8,255);
6547 VARAND(UI1,255,I8,0,I8,0);
6549 VARAND(UI1,255,UI8,0,I4,0);
6550 VARAND(UI1,0,UI8,0,I4,0);
6566 VARAND(I2,-1,I2,-1,I2,-1);
6569 VARAND(I2,-1,UI2,65535,I4,65535);
6570 VARAND(I2,-1,UI2,0,I4,0);
6572 VARAND(I2,-1,I4,-1,I4,-1);
6575 VARAND(I2,-1,UI4,0xffffffff,I4,-1);
6576 VARAND(I2,-1,UI4,0,I4,0);
6589 VARAND(I2,-1,I8,-1,I8,-1);
6592 VARAND(I2,-1,UI8,0,I4,0);
6609 VARAND(UI2,65535,UI2,65535,I4,65535);
6610 VARAND(UI2,65535,UI2,0,I4,0);
6611 VARAND(UI2,0,UI2,0,I4,0);
6612 VARAND(UI2,65535,I4,-1,I4,65535);
6613 VARAND(UI2,65535,I4,0,I4,0);
6615 VARAND(UI2,65535,UI4,0xffffffff,I4,65535);
6616 VARAND(UI2,65535,UI4,0,I4,0);
6617 VARAND(UI2,0,UI4,0,I4,0);
6629 VARAND(UI2,65535,I8,-1,I8,65535);
6630 VARAND(UI2,65535,I8,0,I8,0);
6632 VARAND(UI2,65535,UI8,0,I4,0);
6633 VARAND(UI2,0,UI8,0,I4,0);
6649 VARAND(I4,-1,I4,-1,I4,-1);
6652 VARAND(I4,-1,UI4,0xffffffff,I4,-1);
6653 VARAND(I4,-1,UI4,0,I4,0);
6666 VARAND(I4,-1,I8,-1,I8,-1);
6669 VARAND(I4,-1,UI8,0,I4,0);
6686 VARAND(UI4,0xffffffff,UI4,0xffffffff,I4,-1);
6687 VARAND(UI4,0xffffffff,UI4,0,I4,0);
6688 VARAND(UI4,0,UI4,0,I4,0);
6689 VARAND(UI4,0xffffffff,
R4,-1,I4,-1);
6692 VARAND(UI4,0xffffffff,
R8,-1,I4,-1);
6700 VARAND(UI4,0xffffffff,I8,0,I8,0);
6702 VARAND(UI4,0xffffffff,UI8,0,I4,0);
6703 VARAND(UI4,0,UI8,0,I4,0);
6708 VARAND(UI4,0xffffffff,
UINT,0xffffffff,I4,-1);
6715 VARANDCY(UI4,0xffffffff,10000,I4,1);
6805 VARAND(I8,-1,I8,-1,I8,-1);
6808 VARAND(I8,-1,UI8,0,I8,0);
6820 VARAND(UI8,0xffff,UI8,0xffff,I4,0xffff);
6821 VARAND(UI8,0xffff,UI8,0,I4,0);
6822 VARAND(UI8,0,UI8,0,I4,0);
6880 ok_(__FILE__,
line)(
hres ==
result,
"VarCmp(%s,%s): expected 0x%x, got hres=0x%x\n",
6899#define _VARCMP(vt1,val1,vtfl1,vt2,val2,vtfl2,lcid,flags,result) \
6900 V_##vt1(&left) = val1; V_VT(&left) = VT_##vt1 | vtfl1; \
6901 V_##vt2(&right) = val2; V_VT(&right) = VT_##vt2 | vtfl2; \
6902 test_cmp( __LINE__, lcid, flags, &left, &right, result )
6903#define VARCMPEX(vt1,val1,vt2,val2,res1,res2,res3,res4) \
6904 V_##vt1(&left) = val1; V_VT(&left) = VT_##vt1; \
6905 V_##vt2(&right) = val2; V_VT(&right) = VT_##vt2; \
6906 test_cmpex( __LINE__, lcid, &left, &right, res1, res2, res3, res4 )
6907#define VARCMP(vt1,val1,vt2,val2,result) \
6908 VARCMPEX(vt1,val1,vt2,val2,result,result,result,result)
6910#define V_NULL_ V_NULL
6911#define VT_NULL_ VT_NULL
6920 static const WCHAR szhuh[] = {
'h',
'u',
'h',
'?',
'\0'};
6921 static const WCHAR sz2cents[] = {
'2',
'c',
'e',
'n',
't',
's',
'\0'};
6922 static const WCHAR szempty[] = {
'\0'};
6923 static const WCHAR sz0[] = {
'0',
'\0'};
6924 static const WCHAR sz1[] = {
'1',
'\0'};
6925 static const WCHAR sz7[] = {
'7',
'\0'};
6926 static const WCHAR sz42[] = {
'4',
'2',
'\0'};
6927 static const WCHAR sz1neg[] = {
'-',
'1',
'\0'};
6928 static const WCHAR sz666neg[] = {
'-',
'6',
'6',
'6',
'\0'};
6929 static const WCHAR sz1few[] = {
'1',
'.',
'0',
'0',
'0',
'0',
'0',
'0',
'0',
'1',
'\0'};
6930 BSTR bstrhuh, bstrempty, bstr0, bstr1, bstr7, bstr42, bstr1neg, bstr666neg;
6931 BSTR bstr2cents, bstr1few;
7021 "VarCmp: %d|0x%X, %d|0x%X: Expected failure, got 0x%X\n",
7025 "VarCmp: %d|0x%X, %d|0x%X: Expected 0x%X, got 0x%X\n",
7111 setdec64(&
dec,0,0,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF);
7114 setdec64(&
dec,0,0x80,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF);
7155#define VARPOW(vt1,val1,vt2,val2,rvt,rval) \
7156 V_VT(&left) = VT_##vt1; V_##vt1(&left) = val1; \
7157 V_VT(&right) = VT_##vt2; V_##vt2(&right) = val2; \
7158 V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \
7159 test_var_call2( __LINE__, pVarPow, &left, &right, &exp )
7162#define SKIPTESTPOW(a) \
7163 if (a == VT_ERROR || a == VT_VARIANT || \
7164 a == VT_DISPATCH || a == VT_UNKNOWN || \
7165 a == VT_RECORD || a > VT_UINT || \
7171 static const WCHAR str2[] = {
'2',
'\0' };
7172 static const WCHAR str3[] = {
'3',
'\0' };
7174 BSTR num2_str, num3_str;
7186 VARTYPE leftvt, rightvt, resvt;
7247 "VarPow: %s|0x%X, %s|0x%X: got vt %s hr 0x%X\n",
7252 "VarPow: %s|0x%X, %s|0x%X: expected vt %s hr 0x%X, got vt %s hr 0x%X\n",
7613 "VARPOW: expected coerced hres 0x%X type VT_R8, got hres 0x%X type %s!\n",
7616 "VARPOW: CY value %f, expected %f\n",
V_R8(&
result), 4.0);
7622 "VARPOW: expected coerced hres 0x%X type VT_R8, got hres 0x%X type %s!\n",
7625 "VARPOW: CY value %f, expected %f\n",
V_R8(&
result), 4.0);
7630 "VARPOW: expected coerced hres 0x%X type VT_EMPTY, got hres 0x%X type %s!\n",
7636 "VARPOW: expected coerced hres 0x%X type VT_R8, got hres 0x%X type %s!\n",
7639 "VARPOW: CY value %f, expected %f\n",
V_R8(&
result), 10000.0);
7643 "VARPOW: expected coerced hres 0x%X type VT_R8, got hres 0x%X type %s!\n",
7646 "VARPOW: DECIMAL value %f, expected %f\n",
V_R8(&
result), 10000.0);
7650 "VARPOW: expected coerced hres 0x%X type VT_R8, got hres 0x%X type %s!\n",
7653 "VARPOW: DECIMAL value %f, expected %f\n",
V_R8(&
result), 4.0);
7659 "VARPOW: expected coerced hres 0x%X type VT_R8, got hres 0x%X type %s!\n",
7662 "VARPOW: DECIMAL value %f, expected %f\n",
V_R8(&
result), 4.0);
7667 "VARPOW: expected coerced hres 0x%X type VT_EMPTY, got hres 0x%X type %s!\n",
7677#define VARDIV(vt1,val1,vt2,val2,rvt,rval) \
7678 V_VT(&left) = VT_##vt1; V_##vt1(&left) = val1; \
7679 V_VT(&right) = VT_##vt2; V_##vt2(&right) = val2; \
7680 V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \
7681 test_var_call2( __LINE__, pVarDiv, &left, &right, &exp )
7684#define SKIPTESTDIV(a) \
7685 if (a == VT_ERROR || a == VT_VARIANT || \
7686 a == VT_DISPATCH || a == VT_UNKNOWN || \
7687 a == VT_RECORD || a > VT_UINT || \
7688 a == VT_I1 || a == VT_UI8 || \
7689 a == VT_INT || a == VT_UINT || \
7690 a == VT_UI2 || a == VT_UI4 || \
7696 static const WCHAR str1[] = {
'1',
'\0' };
7697 static const WCHAR str2[] = {
'2',
'\0' };
7699 BSTR num1_str, num2_str;
7712 VARTYPE leftvt, rightvt, resvt;
7781 else if (leftvt ==
VT_I8 || rightvt ==
VT_I8 ||
7801 else if (leftvt ==
VT_R4 || rightvt ==
VT_R4)
7819 "VarDiv: %s|0x%X, %s|0x%X: got vt %s hr 0x%X\n",
7824 "VarDiv: %s|0x%X, %s|0x%X: expected vt %s hr 0x%X, got vt %s hr 0x%X\n",
7994 "VARDIV: expected coerced type VT_R8, got %s!\n",
vtstr(
V_VT(&
result)));
7996 "VARDIV: CY value %f, expected %f\n",
V_R8(&
result), 1.0);
8000 "VARDIV: expected coerced type VT_R8, got %s!\n",
vtstr(
V_VT(&
result)));
8002 "VARDIV: CY value %f, expected %f\n",
V_R8(&
result), 5000.0);
8006 "VARDIV: expected coerced type VT_R8, got %s!\n",
vtstr(
V_VT(&
result)));
8008 "VARDIV: CY value %f, expected %f\n",
V_R8(&
result), 0.01);
8012 "VARDIV: expected coerced type VT_DECIMAL, got %s!\n",
vtstr(
V_VT(&
result)));
8018 "VARDIV: expected coerced type VT_DECIMAL, got %s!\n",
vtstr(
V_VT(&
result)));
8024 "VARDIV: expected coerced type VT_DECIMAL, got %s!\n",
vtstr(
V_VT(&
result)));
8035 "VARDIV: Division by (1.0/0.0) should result in DISP_E_DIVBYZERO but got 0x%X\n",
hres);
8043 "VARDIV: Division by (0.0/0.0) should result in DISP_E_OVERFLOW but got 0x%X\n",
hres);
8051#define VARIDIV(vt1,val1,vt2,val2,rvt,rval) \
8052 V_VT(&left) = VT_##vt1; V_##vt1(&left) = val1; \
8053 V_VT(&right) = VT_##vt2; V_##vt2(&right) = val2; \
8054 V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \
8055 test_var_call2( __LINE__, pVarIdiv, &left, &right, &exp )
8058#define SKIPTESTIDIV(a) \
8059 if (a == VT_ERROR || a == VT_VARIANT || \
8060 a == VT_DISPATCH || a == VT_UNKNOWN || \
8061 a == VT_RECORD || a > VT_UINT || \
8067 static const WCHAR str1[] = {
'1',
'\0' };
8068 static const WCHAR str2[] = {
'2',
'\0' };
8070 BSTR num1_str, num2_str;
8082 VARTYPE leftvt, rightvt, resvt;
8165 else if (leftvt ==
VT_I8 || rightvt ==
VT_I8)
8167 else if (leftvt ==
VT_I4 || rightvt ==
VT_I4 ||
8181 else if (leftvt ==
VT_I2 || rightvt ==
VT_I2 ||
8196 "VarIdiv: %s|0x%X, %s|0x%X: got vt %s hr 0x%X\n",
8201 "VarIdiv: %s|0x%X, %s|0x%X: expected vt %s hr 0x%X, got vt %s hr 0x%X\n",
8545 "VARIDIV: expected coerced hres 0x%X type VT_I4, got hres 0x%X type %s!\n",
8548 "VARIDIV: CY value %d, expected %d\n",
V_I4(&
result), 1);
8554 "VARIDIV: expected coerced hres 0x%X type VT_I8, got hres 0x%X type %s!\n",
8557 "VARIDIV: CY value 0x%x%08x, expected 0x%x\n",
8563 "VARIDIV: expected coerced hres 0x%X type VT_I4, got hres 0x%X type %s!\n",
8566 "VARIDIV: CY value %d, expected %d\n",
V_I4(&
result), 0);
8570 "VARIDIV: expected coerced hres 0x%X type VT_I4, got hres 0x%X type %s!\n",
8573 "VARIDIV: DECIMAL value %d, expected %d\n",
V_I4(&
result), 50);
8577 "VARIDIV: expected coerced hres 0x%X type VT_I4, got hres 0x%X type %s!\n",
8580 "VARIDIV: DECIMAL value %d, expected %d\n",
V_I4(&
result), 1);
8586 "VARIDIV: expected coerced hres 0x%X type VT_I8, got hres 0x%X type %s!\n",
8589 "VARIDIV: DECIMAL value 0x%x%08x, expected %d\n",
8600 "VARIDIV: Division by 0 should result in DISP_E_DIVBYZERO but got 0x%X\n",
hres);
8608 "VARIDIV: Division by 0 should result in DISP_E_DIVBYZERO but got 0x%X\n",
hres);
8617#define VARIMP(vt1,val1,vt2,val2,rvt,rval) \
8618 V_VT(&left) = VT_##vt1; V_##vt1(&left) = val1; \
8619 V_VT(&right) = VT_##vt2; V_##vt2(&right) = val2; \
8620 V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \
8621 test_var_call2( __LINE__, pVarImp, &left, &right, &exp )
8624#define SKIPTESTIMP(a) \
8625 if (a == VT_ERROR || a == VT_VARIANT || \
8626 a == VT_DISPATCH || a == VT_UNKNOWN || \
8627 a == VT_RECORD || a > VT_UINT || \
8633 static const WCHAR szFalse[] = {
'#',
'F',
'A',
'L',
'S',
'E',
'#',
'\0' };
8634 static const WCHAR szTrue[] = {
'#',
'T',
'R',
'U',
'E',
'#',
'\0' };
8636 BSTR true_str, false_str;
8648 VARTYPE leftvt, rightvt, resvt;
8729 else if (leftvt ==
VT_I8 || rightvt ==
VT_I8)
8731 else if (leftvt ==
VT_I4 || rightvt ==
VT_I4 ||
8761 "VarImp: %s|0x%X, %s|0x%X: got vt %s hr 0x%X\n",
8766 "VarImp: %s|0x%X, %s|0x%X: expected vt %s hr 0x%X, got vt %s hr 0x%X\n",
8814 VARIMP(I2,-1,I2,-1,I2,-1);
8815 VARIMP(I2,-1,I4,-1,I4,-1);
8822 VARIMP(I2,-1,UI1,1,I2,1);
8823 VARIMP(I2,-1,UI2,1,I4,1);
8824 VARIMP(I2,-1,UI4,1,I4,1);
8828 VARIMP(I2,-1,UI8,1,I4,1);
8834 VARIMP(I4,2,I2,-1,I4,-1);
8835 VARIMP(I4,2,I4,-1,I4,-1);
8842 VARIMP(I4,2,UI1,1,I4,-3);
8843 VARIMP(I4,2,UI2,1,I4,-3);
8844 VARIMP(I4,2,UI4,1,I4,-3);
8848 VARIMP(I4,2,UI8,1,I4,-3);
8954 VARIMP(I1,-1,I2,-1,I4,-1);
8955 VARIMP(I1,-1,I4,-1,I4,-1);
8962 VARIMP(I1,-1,UI1,1,I4,1);
8963 VARIMP(I1,-1,UI2,1,I4,1);
8964 VARIMP(I1,-1,UI4,1,I4,1);
8968 VARIMP(I1,-1,UI8,1,I4,1);
8974 VARIMP(UI1,0,I2,-1,I2,-1);
8975 VARIMP(UI1,0,I4,-1,I4,-1);
8981 VARIMP(UI1,0,I1,0,I4,-1);
8982 VARIMP(UI1,0,UI1,1,UI1,255);
8983 VARIMP(UI1,0,UI2,1,I4,-1);
8984 VARIMP(UI1,0,UI4,1,I4,-1);
8987 VARIMP(UI1,0,I8,1,I8,-1);
8988 VARIMP(UI1,0,UI8,1,I4,-1);
8994 VARIMP(UI2,0,I2,-1,I4,-1);
8995 VARIMP(UI2,0,I4,-1,I4,-1);
9001 VARIMP(UI2,0,I1,0,I4,-1);
9002 VARIMP(UI2,0,UI1,1,I4,-1);
9003 VARIMP(UI2,0,UI2,1,I4,-1);
9004 VARIMP(UI2,0,UI4,1,I4,-1);
9007 VARIMP(UI2,0,I8,1,I8,-1);
9008 VARIMP(UI2,0,UI8,1,I4,-1);
9014 VARIMP(UI4,0,I2,-1,I4,-1);
9015 VARIMP(UI4,0,I4,-1,I4,-1);
9021 VARIMP(UI4,0,I1,0,I4,-1);
9022 VARIMP(UI4,0,UI1,1,I4,-1);
9023 VARIMP(UI4,0,UI2,1,I4,-1);
9024 VARIMP(UI4,0,UI4,1,I4,-1);
9027 VARIMP(UI4,0,I8,1,I8,-1);
9028 VARIMP(UI4,0,UI8,1,I4,-1);
9036 VARIMP(I8,-1,I2,-1,I8,-1);
9037 VARIMP(I8,-1,I4,-1,I8,-1);
9044 VARIMP(I8,-1,UI1,1,I8,1);
9045 VARIMP(I8,-1,UI2,1,I8,1);
9046 VARIMP(I8,-1,UI4,1,I8,1);
9048 VARIMP(I8,-1,UI8,1,I8,1);
9052 VARIMP(UI8,0,I2,-1,I4,-1);
9053 VARIMP(UI8,0,I4,-1,I4,-1);
9059 VARIMP(UI8,0,I1,0,I4,-1);
9060 VARIMP(UI8,0,UI1,1,I4,-1);
9061 VARIMP(UI8,0,UI2,1,I4,-1);
9062 VARIMP(UI8,0,UI4,1,I4,-1);
9063 VARIMP(UI8,0,I8,1,I8,-1);
9064 VARIMP(UI8,0,UI8,1,I4,-1);
9125 "VARIMP: expected coerced hres 0x%X type VT_I4, got hres 0x%X type %s!\n",
9128 "VARIMP: CY value %d, expected %d\n",
V_I4(&
result), -1);
9134 "VARIMP: expected coerced hres 0x%X type VT_I8, got hres 0x%X type %s!\n",
9137 "VARIMP: CY value %x%08x, expected %d\n",
9143 "VARIMP: expected coerced hres 0x%X type VT_I4, got hres 0x%X type %s!\n",
9146 "VARIMP: CY value %d, expected %d\n",
V_I4(&
result), -1);
9150 "VARIMP: expected coerced hres 0x%X type VT_I4, got hres 0x%X type %s!\n",
9153 "VARIMP: DECIMAL value %d, expected %d\n",
V_I4(&
result), -1);
9157 "VARIMP: expected coerced hres 0x%X type VT_I4, got hres 0x%X type %s!\n",
9160 "VARIMP: DECIMAL value %d, expected %d\n",
V_I4(&
result), -1);
9166 "VARIMP: expected coerced hres 0x%X type VT_I8, got hres 0x%X type %s!\n",
9169 "VARIMP: DECIMAL value 0x%x%08x, expected %d\n",
ios_base &_STLP_CALL dec(ios_base &__s)
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
#define InterlockedIncrement
#define InterlockedDecrement
void dispatch(HANDLE hStopEvent)
#define GetProcAddress(x, y)
#define HeapFree(x, y, z)
#define MultiByteToWideChar
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
int WINAPI lstrcmpW(LPCWSTR str1, LPCWSTR str2)
INT WINAPI GetLocaleInfoA(LCID lcid, LCTYPE lctype, LPSTR buffer, INT len)
BOOL WINAPI SetLocaleInfoA(LCID lcid, LCTYPE lctype, LPCSTR data)
static REFPROPVARIANT PROPVAR_CHANGE_FLAGS VARTYPE vt
HRESULT WINAPI VarBstrFromBool(VARIANT_BOOL boolIn, LCID lcid, ULONG dwFlags, BSTR *pbstrOut)
HRESULT WINAPI VarR8FromCy(CY cyIn, double *pDblOut)
HRESULT WINAPI VarDecFromR8(double dblIn, DECIMAL *pDecOut)
HRESULT WINAPI VarDecFromI4(LONG lIn, DECIMAL *pDecOut)
HRESULT WINAPI VarCyFromI4(LONG lIn, CY *pCyOut)
HRESULT WINAPI VarR8FromDec(const DECIMAL *pDecIn, double *pDblOut)
HRESULT WINAPI VarR8FromStr(OLECHAR *strIn, LCID lcid, ULONG dwFlags, double *pDblOut)
static unsigned char buff[32768]
GLint GLint GLint GLint GLint x
GLint GLint GLint GLint GLint GLint y
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLdouble GLdouble GLdouble r
GLboolean GLboolean GLboolean b
GLenum const GLfloat * params
GLenum GLuint GLenum GLsizei const GLchar * buf
GLboolean GLboolean GLboolean GLboolean a
GLfloat GLfloat GLfloat v2
GLfloat GLfloat GLfloat GLfloat h
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble * u
REFIID LPVOID DWORD_PTR dw
#define memcpy(s1, s2, n)
#define sprintf(buf, format,...)
static const char * strw(LPCWSTR x)
static const char mbstate_t *static wchar_t const char mbstate_t *static const wchar_t int *static double
#define cmp(status, error)
static VARIANTARG static DISPID
unsigned __int3264 UINT_PTR
#define LOCALE_USER_DEFAULT
#define MAKELCID(lgid, srtid)
UINT WINAPI SysStringByteLen(BSTR str)
BSTR WINAPI SysAllocString(LPCOLESTR str)
UINT WINAPI SysStringLen(BSTR str)
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
BSTR WINAPI SysAllocStringLen(const OLECHAR *str, unsigned int len)
#define NUMPRS_LEADING_WHITE
#define VAR_DATEVALUEONLY
#define NUMPRS_TRAILING_WHITE
#define NUMPRS_TRAILING_MINUS
#define NUMPRS_LEADING_PLUS
#define NUMPRS_LEADING_MINUS
#define DISPATCH_PROPERTYGET
#define VAR_TIMEVALUEONLY
#define NUMPRS_TRAILING_PLUS
_Out_opt_ int _Out_opt_ int * cy
#define IsEqualIID(riid1, riid2)
#define SUBLANG_ENGLISH_US
static __inline const char * wine_dbgstr_guid(const GUID *id)
#define R4(v, w, x, y, z, i)
IDispatch IDispatch_iface
IRecordInfo IRecordInfo_iface
struct __tagBRECORD * rec
#define LANG_USER_DEFAULT
#define CONTAINING_RECORD(address, type, field)
HRESULT WINAPI VarUdateFromDate(DATE dateIn, ULONG dwFlags, UDATE *lpUdate)
HRESULT WINAPI VarNot(LPVARIANT pVarIn, LPVARIANT pVarOut)
HRESULT WINAPI VarMul(LPVARIANT left, LPVARIANT right, LPVARIANT result)
INT WINAPI VariantTimeToSystemTime(double dateIn, LPSYSTEMTIME lpSt)
HRESULT WINAPI VarAnd(LPVARIANT left, LPVARIANT right, LPVARIANT result)
INT WINAPI VariantTimeToDosDateTime(double dateIn, USHORT *pwDosDate, USHORT *pwDosTime)
HRESULT WINAPI VarXor(LPVARIANT pVarLeft, LPVARIANT pVarRight, LPVARIANT pVarOut)
HRESULT WINAPI VarDiv(LPVARIANT left, LPVARIANT right, LPVARIANT result)
HRESULT WINAPI VarSub(LPVARIANT left, LPVARIANT right, LPVARIANT result)
HRESULT WINAPI VarCat(LPVARIANT left, LPVARIANT right, LPVARIANT out)
INT WINAPI DosDateTimeToVariantTime(USHORT wDosDate, USHORT wDosTime, double *pDateOut)
HRESULT WINAPI VarOr(LPVARIANT pVarLeft, LPVARIANT pVarRight, LPVARIANT pVarOut)
HRESULT WINAPI VarAdd(LPVARIANT left, LPVARIANT right, LPVARIANT result)
HRESULT WINAPI VarRound(LPVARIANT pVarIn, int deci, LPVARIANT pVarOut)
HRESULT WINAPI VarImp(LPVARIANT left, LPVARIANT right, LPVARIANT result)
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
HRESULT WINAPI VarFix(LPVARIANT pVarIn, LPVARIANT pVarOut)
HRESULT WINAPI VarIdiv(LPVARIANT left, LPVARIANT right, LPVARIANT result)
HRESULT WINAPI VarAbs(LPVARIANT pVarIn, LPVARIANT pVarOut)
HRESULT WINAPI VarMod(LPVARIANT left, LPVARIANT right, LPVARIANT result)
HRESULT WINAPI VarEqv(LPVARIANT pVarLeft, LPVARIANT pVarRight, LPVARIANT pVarOut)
HRESULT WINAPI VarParseNumFromStr(OLECHAR *lpszStr, LCID lcid, ULONG dwFlags, NUMPARSE *pNumprs, BYTE *rgbDig)
HRESULT WINAPI VarCmp(LPVARIANT left, LPVARIANT right, LCID lcid, DWORD flags)
HRESULT WINAPI VarNumFromParseNum(NUMPARSE *pNumprs, BYTE *rgbDig, ULONG dwVtBits, VARIANT *pVarDst)
void WINAPI VariantInit(VARIANTARG *pVarg)
INT WINAPI SystemTimeToVariantTime(LPSYSTEMTIME lpSt, double *pDateOut)
HRESULT WINAPI VarNeg(LPVARIANT pVarIn, LPVARIANT pVarOut)
HRESULT WINAPI VarInt(LPVARIANT pVarIn, LPVARIANT pVarOut)
HRESULT WINAPI VariantCopyInd(VARIANT *pvargDest, VARIANTARG *pvargSrc)
HRESULT WINAPI VariantCopy(VARIANTARG *pvargDest, VARIANTARG *pvargSrc)
HRESULT WINAPI VarDateFromUdate(UDATE *pUdateIn, ULONG dwFlags, DATE *pDateOut)
HRESULT WINAPI VarPow(LPVARIANT left, LPVARIANT right, LPVARIANT result)
static WCHAR sz12_true[32]
static ULONG WINAPI VC_AddRef(LPUNKNOWN iface)
static void test_VarFix(void)
static void test_VarMul(void)
static const char * variantstr(const VARIANT *var)
static void test_cmpex(int line, LCID lcid, VARIANT *left, VARIANT *right, HRESULT res1, HRESULT res2, HRESULT res3, HRESULT res4)
#define ST2DT(d, m, y, h, mn, s, ms, r, dt)
static void test_VarOr(void)
#define VARADD(vt1, val1, vt2, val2, rvt, rval)
#define VARXORCY(vt1, val1, val2, rvt, rval)
static void test_VarRound(void)
static void test_VarPow(void)
static void test_dt2st(int line, double dt, INT r, WORD d, WORD m, WORD y, WORD h, WORD mn, WORD s, WORD ms)
static void test_VarAdd(void)
static void _test_bstr_var(unsigned line, const VARIANT *v, const char *str)
static void test_VarParseNumFromStr(void)
static void test_Round(int line, VARIANT *arg, int deci, VARIANT *expected)
#define SETRGB(indx, val)
static test_VariantClearImpl * impl_from_IUnknown(IUnknown *iface)
#define VARPOW(vt1, val1, vt2, val2, rvt, rval)
static HRESULT WINAPI RecordInfo_RecordCreateCopy(IRecordInfo *iface, PVOID pvSource, PVOID *ppvDest)
static void test_cmp(int line, LCID lcid, UINT flags, VARIANT *left, VARIANT *right, HRESULT result)
static void test_st2dt(int line, WORD d, WORD m, WORD y, WORD h, WORD mn, WORD s, WORD ms, INT r, double dt)
static UDATE *static DATE *static double *static LPSYSTEMTIME
static ULONG WINAPI DummyDispatch_Release(IDispatch *iface)
static void test_VarCmp(void)
static void test_var_call2(int line, HRESULT(WINAPI *func)(LPVARIANT, LPVARIANT, LPVARIANT), VARIANT *left, VARIANT *right, VARIANT *expected)
static HRESULT WINAPI DummyDispatch_GetIDsOfNames(IDispatch *iface, REFIID riid, LPOLESTR *names, UINT cnames, LCID lcid, DISPID *dispid)
static ULONG WINAPI RecordInfo_Release(IRecordInfo *iface)
#define VARIMP(vt1, val1, vt2, val2, rvt, rval)
static void test_VarInt(void)
static void test_VariantCopyInd(void)
static void test_VariantTimeToSystemTime(void)
#define VARROUND(vt, val, deci, rvt, rval)
static void test_VarIdiv(void)
static void setdec64(DECIMAL *dec, BYTE scl, BYTE sgn, ULONG hi32, ULONG mid32, ULONG lo32)
static IRecordInfoImpl * impl_from_IRecordInfo(IRecordInfo *iface)
static HRESULT WINAPI RecordInfo_RecordDestroy(IRecordInfo *iface, PVOID pvRecord)
#define VARABS(vt, val, rvt, rval)
static const VARTYPE ExtraFlags[16]
static const char * szFailOk
static HRESULT WINAPI RecordInfo_RecordClear(IRecordInfo *iface, void *data)
static void test_VarNot(void)
static HRESULT WINAPI RecordInfo_GetFieldNames(IRecordInfo *iface, ULONG *pcNames, BSTR *rgBstrNames)
static void test_VarNeg(void)
static void test_VarAnd(void)
#define EXPECT(a, b, c, d, e, f)
static HRESULT WINAPI RecordInfo_GetTypeInfo(IRecordInfo *iface, ITypeInfo **ppTypeInfo)
static ULONG WINAPI DummyDispatch_AddRef(IDispatch *iface)
#define CHECK_EXPECT(func)
static void test_dt2dos(int line, double dt, INT r, WORD d, WORD m, WORD y, WORD h, WORD mn, WORD s)
static BOOL is_expected_variant(const VARIANT *result, const VARIANT *expected)
static ULONG WINAPI RecordInfo_AddRef(IRecordInfo *iface)
static void expect_NumFromStr(int line, HRESULT hres, NUMPARSE *np, INT a, ULONG b, ULONG c, INT d, INT e, INT f)
#define DEFINE_EXPECT(func)
#define MKDOSDATE(d, m, y)
#define MKDOSTIME(h, m, s)
#define DT2UD(dt, flags, r, d, m, y, h, mn, s, ms, dw, dy)
static char vtstr_buffer[16][256]
#define DOS2DT(d, m, y, h, mn, s, r, dt)
static const IRecordInfoVtbl RecordInfoVtbl
static void test_VarAbs(void)
static void test_VarDateFromUdate(void)
#define DT2ST(dt, r, d, m, y, h, mn, s, ms)
#define CONVERTN(str, dig, flags)
static double *static USHORT USHORT *static const WCHAR sz12[]
static int strcmp_wa(const WCHAR *strw, const char *stra)
static void test_VarCat(void)
static void test_SystemTimeToVariantTime(void)
#define VARIDIV(vt1, val1, vt2, val2, rvt, rval)
#define VARDIV(vt1, val1, vt2, val2, rvt, rval)
static BOOL WINAPI RecordInfo_IsMatchingType(IRecordInfo *iface, IRecordInfo *info2)
static HRESULT WINAPI DummyDispatch_Invoke(IDispatch *iface, DISPID dispid, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *params, VARIANT *res, EXCEPINFO *ei, UINT *arg_err)
static void test_VariantTimeToDosDateTime(void)
static HRESULT WINAPI DummyDispatch_GetTypeInfo(IDispatch *iface, UINT tinfo, LCID lcid, ITypeInfo **ti)
static void test_DateFromUDate(int line, WORD d, WORD m, WORD y, WORD h, WORD mn, WORD s, WORD ms, WORD dw, WORD dy, ULONG flags, HRESULT r, DATE dt)
static const char * vtstr(int x)
#define VAROR(vt1, val1, vt2, val2, rvt, rval)
static HRESULT WINAPI RecordInfo_GetSize(IRecordInfo *iface, ULONG *size)
#define VARNOT(vt, val, rvt, rval)
static HRESULT WINAPI RecordInfo_GetGuid(IRecordInfo *iface, GUID *pguid)
static void init_test_dispatch(VARTYPE vt, DummyDispatch *dispatch)
static PVOID WINAPI RecordInfo_RecordCreate(IRecordInfo *iface)
static HRESULT WINAPI RecordInfo_GetField(IRecordInfo *iface, PVOID pvData, LPCOLESTR szFieldName, VARIANT *pvarField)
static test_VariantClearImpl test_myVariantClearImpl
static void test_VariantCopy(void)
static void test_VarXor(void)
static HRESULT WINAPI RecordInfo_GetFieldNoCopy(IRecordInfo *iface, PVOID pvData, LPCOLESTR szFieldName, VARIANT *pvarField, PVOID *ppvDataCArray)
#define CONVERT(str, flags)
#define VARMUL(vt1, val1, vt2, val2, rvt, rval)
static BOOL IsValidVariantCopyIndVT(VARTYPE vt, VARTYPE extraFlags)
#define test_bstr_var(a, b)
static void test_VarUdateFromDate(void)
#define VARCMPEX(vt1, val1, vt2, val2, res1, res2, res3, res4)
static void test_VarImp(void)
static HRESULT WINAPI DummyDispatch_GetTypeInfoCount(IDispatch *iface, UINT *pctinfo)
static WCHAR sz12_false[32]
#define VARINT(vt, val, rvt, rval)
#define VARFIX(vt, val, rvt, rval)
static void test_VarNumFromParseNum(void)
static HRESULT WINAPI RecordInfo_GetName(IRecordInfo *iface, BSTR *pbstrName)
#define CHECK_CALLED(func)
static const struct decimal_round_t decimal_round_data[]
static ULONG WINAPI VC_Release(LPUNKNOWN iface)
static void test_VarSub(void)
#define VARNEG(vt, val, rvt, rval)
#define VAREQV(vt1, val1, vt2, val2, rvt, rval)
#define VARSUB(vt1, val1, vt2, val2, rvt, rval)
static HRESULT WINAPI VC_QueryInterface(LPUNKNOWN iface, REFIID riid, LPVOID *ppobj)
static HRESULT WINAPI RecordInfo_QueryInterface(IRecordInfo *iface, REFIID riid, void **obj)
#define VARXOR(vt1, val1, vt2, val2, rvt, rval)
#define DT2DOS(dt, r, d, m, y, h, mn, s)
static BOOL IsValidVariantClearVT(VARTYPE vt, VARTYPE extraFlags)
static void test_VarEqv(void)
#define VARORCY(vt1, val1, val2, rvt, rval)
static void test_VariantInit(void)
static HRESULT WINAPI RecordInfo_RecordInit(IRecordInfo *iface, PVOID pvNew)
static HRESULT WINAPI DummyDispatch_QueryInterface(IDispatch *iface, REFIID riid, void **ppvObject)
#define _VARCMP(vt1, val1, vtfl1, vt2, val2, vtfl2, lcid, flags, result)
static void test_VariantClear(void)
#define VARAND(vt1, val1, vt2, val2, rvt, rval)
static void test_var_call1(int line, HRESULT(WINAPI *func)(LPVARIANT, LPVARIANT), VARIANT *arg, VARIANT *expected)
static HRESULT WINAPI RecordInfo_PutField(IRecordInfo *iface, ULONG wFlags, PVOID pvData, LPCOLESTR szFieldName, VARIANT *pvarField)
static const IDispatchVtbl DummyDispatch_VTable
#define EXPECT_I8(high, low)
static const char * szFailOverflow
#define VARMOD(vt1, vt2, val1, val2, rvt, rval)
static DummyDispatch * impl_from_IDispatch(IDispatch *iface)
static const IUnknownVtbl test_VariantClear_vtbl
static void test_Mod(int line, VARIANT *left, VARIANT *right, VARIANT *expected, HRESULT expres)
static HRESULT WINAPI RecordInfo_PutFieldNoCopy(IRecordInfo *iface, ULONG wFlags, PVOID pvData, LPCOLESTR szFieldName, VARIANT *pvarField)
#define VARANDCY(vt1, val1, val2, rvt, rval)
#define EXPECT_DECIMAL(valHi, valMid, valLo)
#define UD2T(d, m, y, h, mn, s, ms, dw, dy, flags, r, dt)
static void setdec(DECIMAL *dec, BYTE scl, BYTE sgn, ULONG hi32, ULONG64 lo64)
static void test_UdateFromDate(int line, DATE dt, ULONG flags, HRESULT r, WORD d, WORD m, WORD y, WORD h, WORD mn, WORD s, WORD ms, WORD dw, WORD dy)
static void test_DosDateTimeToVariantTime(void)
static void test_VarDiv(void)
#define VARCMP(vt1, val1, vt2, val2, result)
static HRESULT convert_str(const char *str, INT dig, ULONG flags, NUMPARSE *np, BYTE rgb[128], LCID lcid)
static void test_VarMod(void)
static IRecordInfoImpl * get_test_recordinfo(void)
#define VARMOD2(vt1, vt2, val1, val2, rvt, rval, hexpected)
static void test_dos2dt(int line, WORD d, WORD m, WORD y, WORD h, WORD mn, WORD s, INT r, double dt)
static HRESULT WINAPI RecordInfo_RecordCopy(IRecordInfo *iface, void *src, void *dest)
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
_In_ DWORD _Out_ _In_ WORD wFlags
_In_ void _In_ PCCERT_CONTEXT _In_opt_ LPFILETIME _In_ DWORD _In_ DWORD _Outptr_opt_ void ** ppvObject
_In_ ULONG _In_ ULONG rgb
_In_ ULONG _In_opt_ PVOID pvData
#define DISP_E_BADVARTYPE
#define DISP_E_TYPEMISMATCH
#define LOCALE_SSHORTDATE
#define LOCALE_NOUSEROVERRIDE