56#if defined(__oaidl_h__) && defined(V_VT)
57static inline const char *wine_dbgstr_vt(
VARTYPE vt )
59 static const char *
const variant_types[] =
61 "VT_EMPTY",
"VT_NULL",
"VT_I2",
"VT_I4",
"VT_R4",
"VT_R8",
"VT_CY",
"VT_DATE",
62 "VT_BSTR",
"VT_DISPATCH",
"VT_ERROR",
"VT_BOOL",
"VT_VARIANT",
"VT_UNKNOWN",
63 "VT_DECIMAL",
"15",
"VT_I1",
"VT_UI1",
"VT_UI2",
"VT_UI4",
"VT_I8",
"VT_UI8",
64 "VT_INT",
"VT_UINT",
"VT_VOID",
"VT_HRESULT",
"VT_PTR",
"VT_SAFEARRAY",
65 "VT_CARRAY",
"VT_USERDEFINED",
"VT_LPSTR",
"VT_LPWSTR",
"32",
"33",
"34",
"35",
66 "VT_RECORD",
"VT_INT_PTR",
"VT_UINT_PTR",
"39",
"40",
"41",
"42",
"43",
"44",
"45",
67 "46",
"47",
"48",
"49",
"50",
"51",
"52",
"53",
"54",
"55",
"56",
"57",
"58",
"59",
"60",
68 "61",
"62",
"63",
"VT_FILETIME",
"VT_BLOB",
"VT_STREAM",
"VT_STORAGE",
69 "VT_STREAMED_OBJECT",
"VT_STORED_OBJECT",
"VT_BLOB_OBJECT",
"VT_CF",
"VT_CLSID",
73 static const char *
const variant_flags[16] =
78 "|VT_VECTOR|VT_ARRAY",
80 "|VT_VECTOR|VT_BYREF",
82 "|VT_VECTOR|VT_ARRAY|VT_BYREF",
84 "|VT_VECTOR|VT_RESERVED",
85 "|VT_ARRAY|VT_RESERVED",
86 "|VT_VECTOR|VT_ARRAY|VT_RESERVED",
87 "|VT_BYREF|VT_RESERVED",
88 "|VT_VECTOR|VT_BYREF|VT_RESERVED",
89 "|VT_ARRAY|VT_BYREF|VT_RESERVED",
90 "|VT_VECTOR|VT_ARRAY|VT_BYREF|VT_RESERVED",
96 if (
vt <
sizeof(variant_types)/
sizeof(*variant_types))
97 return variant_types[
vt];
100 return "VT_BSTR_BLOB";
115#define CHECKPTR(func) p##func = (void*)GetProcAddress(hOleaut32, #func); \
116 if (!p##func) { win_skip("function " # func " not available, not testing it\n"); return; }
124#define EQ_DOUBLE(a,b) (fabs((a)-(b)) / (1.0+fabs(a)+fabs(b)) < 1e-14)
125#define EQ_FLOAT(a,b) (fabs((a)-(b)) / (1.0+fabs(a)+fabs(b)) < 1e-7)
127#define SKIPTESTS(a) if((a > VT_CLSID+10) && (a < VT_BSTR_BLOB-10)) continue
130#define V_EMPTY(v) V_I4(v)
131#define V_NULL(v) V_I4(v)
135#define I1_MIN ((-I1_MAX)-1)
139#define I2_MIN ((-I2_MAX)-1)
140#define UI2_MAX 0xffff
142#define I4_MAX 0x7fffffff
143#define I4_MIN ((-I4_MAX)-1)
144#define UI4_MAX 0xffffffff
146#define I8_MAX (((LONGLONG)I4_MAX << 32) | UI4_MAX)
147#define I8_MIN ((-I8_MAX)-1)
148#define UI8_MAX (((ULONGLONG)UI4_MAX << 32) | UI4_MAX)
150#define DATE_MAX 2958465
151#define DATE_MIN -657434
152#define R4_MAX FLT_MAX
153#define R4_MIN FLT_MIN
154#define R8_MAX DBL_MAX
155#define R8_MIN DBL_MIN
157#define DEFINE_EXPECT(func) \
158 static BOOL expect_ ## func = FALSE, called_ ## func = FALSE
160#define SET_EXPECT(func) \
161 do { called_ ## func = FALSE; expect_ ## func = TRUE; } while(0)
163#define CHECK_EXPECT2(func) \
165 ok(expect_ ##func, "unexpected call " #func "\n"); \
166 called_ ## func = TRUE; \
169#define CHECK_EXPECT(func) \
171 CHECK_EXPECT2(func); \
172 expect_ ## func = FALSE; \
175#define CHECK_CALLED(func) \
177 ok(called_ ## func, "expected " #func "\n"); \
178 expect_ ## func = called_ ## func = FALSE; \
215 IDispatch_AddRef(iface);
223 ok(0,
"Unexpected call\n");
229 ok(0,
"Unexpected call\n");
236 ok(0,
"Unexpected call\n");
252 ok(dispid == DISPID_VALUE,
"got dispid %ld\n", dispid);
263 ok(ei ==
NULL,
"got %p\n", ei);
264 ok(arg_err ==
NULL,
"got %p\n", arg_err);
324 IRecordInfo_AddRef(iface);
350 ok(0,
"unexpected call\n");
366 ok(
src == (
void*)0xdeadbeef,
"wrong src pointer %p\n",
src);
372 ok(0,
"unexpected call\n");
378 ok(0,
"unexpected call\n");
392 ok(0,
"unexpected call\n");
397 LPCOLESTR szFieldName,
VARIANT *pvarField)
399 ok(0,
"unexpected call\n");
404 LPCOLESTR szFieldName,
VARIANT *pvarField,
PVOID *ppvDataCArray)
406 ok(0,
"unexpected call\n");
411 LPCOLESTR szFieldName,
VARIANT *pvarField)
413 ok(0,
"unexpected call\n");
420 ok(0,
"unexpected call\n");
427 ok(0,
"unexpected call\n");
433 ok(0,
"unexpected call\n");
439 ok(0,
"unexpected call\n");
446 ok(0,
"unexpected call\n");
452 ok(0,
"unexpected call\n");
499 ok(
res ==
S_OK && bstr[0],
"Expected localized string for 'True'\n");
506 ok(
res ==
S_OK && bstr[0],
"Expected localized string for 'False'\n");
514 skip(
"No support for I8 and UI8 data types\n");
544#define CASE(vt) case VT_##vt: return (V_##vt(result) == V_##vt(expected))
571 ok(0,
"unhandled variant type %s\n",wine_dbgstr_vt(
V_VT(
expected)));
588 "got %s expected %s\n", wine_dbgstr_variant(&
result), wine_dbgstr_variant(
expected) );
590 wine_dbgstr_variant(&old_arg), wine_dbgstr_variant(
arg));
606 "got %s expected %s\n", wine_dbgstr_variant(&
result), wine_dbgstr_variant(
expected) );
608 wine_dbgstr_variant(&old_left), wine_dbgstr_variant(
left));
610 wine_dbgstr_variant(&old_right), wine_dbgstr_variant(
right));
614#define test_bstr_var(a,b) _test_bstr_var(__LINE__,a,b)
736 "VariantClear: Type set to %d, res %08lx\n",
V_VT(&
v),
hres);
737 ok(
V_UI4(&
v) == ~0
u,
"VariantClear: Overwrote value\n");
761 ok(
hres == hExpected,
"VariantClear: expected 0x%lX, got 0x%lX for vt %d | 0x%X\n",
790 ok(i4 == 0x4321,
"i4 changed %08lx\n", i4);
852 ok(recinfo->
ref == 1,
"got %ld\n", recinfo->
ref);
876 memset(&vSrc, 0,
sizeof(vSrc));
887 "Copy(src==dst): expected 0x%lX, got 0x%lX for src==dest vt %d|0x%X\n",
895 memset(&vSrc, 0,
sizeof(vSrc));
906 memset(&vDst, 0,
sizeof(vDst));
915 "Copy(bad dst): expected 0x%lX, got 0x%lX for dest vt %d|0x%X\n",
919 "Copy(bad dst): expected vt = VT_UI1, got %d\n",
V_VT(&vDst));
932 memset(&vDst, 0,
sizeof(vDst));
935 memset(&vSrc, 0,
sizeof(vSrc));
945 "Copy(bad src): expected 0x%lX, got 0x%lX for src vt %d|0x%X\n",
950 "Copy(bad src): expected vt = %d, got %d\n",
958 memset(&vDst, 0,
sizeof(vDst));
960 memset(&vSrc, 0,
sizeof(vSrc));
963 ok(
hres ==
S_OK,
"Copy(NULL BSTR): Failed to copy a NULL BSTR\n");
967 "Copy(NULL BSTR): should have non-NULL result\n");
970 ok(*
V_BSTR(&vDst) == 0,
"Copy(NULL BSTR): result not empty\n");
978 memset(&vDst, 0,
sizeof(vDst));
983 V_RECORD(&vSrc) = (
void*)0xdeadbeef;
1035 memset(&vSrc, 0,
sizeof(vSrc));
1067 "CopyInd(src==dst): expected 0x%lX, got 0x%lX for src==dst vt %d|0x%X\n",
1073 memset(&vSrc, 0,
sizeof(vSrc));
1083 memset(&vDst, 0,
sizeof(vDst));
1094 "CopyInd(bad dst): expected 0x%lX, got 0x%lX for dst vt %d|0x%X\n",
1098 "CopyInd(bad dst): expected vt = VT_UI1, got %d\n",
V_VT(&vDst));
1112 memset(&vDst, 0,
sizeof(vDst));
1115 memset(&vSrc, 0,
sizeof(vSrc));
1148 "CopyInd(bad src): expected 0x%lX, got 0x%lX for src vt %d|0x%X\n",
1159 "CopyInd(bad src): expected dst vt = VT_EMPTY, got %d|0x%X\n",
1165 "CopyInd(bad src): expected dst vt = %d|0x%X, got %d|0x%X\n",
1176 V_UI1(&vRef) = 0x77;
1184 "CopyInd(deref): expected dst vt = VT_UI1, val 0x77, got %d|0x%X, 0x%2X\n",
1197 "CopyInd(deref): expected dst vt = VT_UI1, val 0x77, got %d|0x%X, 0x%2X\n",
1202 V_UI1(&vRef2) = 0x77;
1211 "CopyInd(ref->ref): expected E_INVALIDARG, got 0x%08lx\n",
hres);
1221 memset( np, 255,
sizeof(*np) );
1250#define WCONVERTN(str,dig,flags) hres = wconvert_str( str, dig, flags, &np, rgb, lcid, LOCALE_NOUSEROVERRIDE )
1251#define WCONVERT(str,flags) WCONVERTN(str,sizeof(rgb),flags)
1252#define CONVERTN(str,dig,flags) hres = convert_str( str, dig, flags, &np, rgb, lcid )
1253#define CONVERT(str,flags) CONVERTN(str,sizeof(rgb),flags)
1254#define EXPECT(a,b,c,d,e,f) expect_NumFromStr( __LINE__, hres, &np, a, b, c, d, e, f )
1255#define EXPECTRGB(a,b) ok(rgb[a] == b, "Digit[%d], expected %d, got %d\n", a, b, rgb[a])
1256#define EXPECTFAIL ok(hres == DISP_E_TYPEMISMATCH, "Call succeeded, hres = %08lx\n", hres)
1257#define EXPECT2(a,b) EXPECTRGB(0,a); EXPECTRGB(1,b)
1267 OLECHAR spaces[] =
L" \xa0\f\n\r\t\v";
1913 OLECHAR spaces[] =
L" \xa0\f\n\r\t\v";
1934 if (spaces[
i] ==
' ' || spaces[
i] == 0xa0 )
1947 if (spaces[
i] ==
' ' || spaces[
i] == 0xa0 )
1984 if (spaces[
i] ==
' ' || spaces[
i] == 0xa0 )
2056 if (spaces[
i] ==
' ' || spaces[
i] == 0xa0 )
2070 if (spaces[
i] ==
' ' || spaces[
i] == 0xa0 )
2143 OLECHAR currency[8], t1000[8], mont1000[8],
dec[8], mondec[8];
2444#define SETRGB(indx,val) if (!indx) memset(rgb, FAILDIG, sizeof(rgb)); rgb[indx] = val
2446#define CONVERT(a,b,c,d,e,f,bits) \
2447 np.cDig = (a); np.dwInFlags = (b); np.dwOutFlags = (c); np.cchUsed = (d); \
2448 np.nBaseShift = (e); np.nPwr10 = (f); hres = VarNumFromParseNum(&np, rgb, bits, &vOut)
2450#define EXPECT_OVERFLOW ok(hres == DISP_E_OVERFLOW, szFailOverflow, hres)
2451static const char *
szFailOk =
"Call failed, hres = %08x\n";
2452#define EXPECT_OK ok(hres == S_OK, szFailOk, hres); \
2454#define EXPECT_TYPE(typ) ok(V_VT(&vOut) == typ,"Expected Type = " #typ ", got %d\n", V_VT(&vOut))
2455#define EXPECT_I1(val) EXPECT_OK { EXPECT_TYPE(VT_I1); \
2456 ok(V_I1(&vOut) == val, "Expected i1 = %d, got %d\n", (signed char)val, V_I1(&vOut)); }
2457#define EXPECT_UI1(val) EXPECT_OK { EXPECT_TYPE(VT_UI1); \
2458 ok(V_UI1(&vOut) == val, "Expected ui1 = %d, got %d\n", (BYTE)val, V_UI1(&vOut)); }
2459#define EXPECT_I2(val) EXPECT_OK { EXPECT_TYPE(VT_I2); \
2460 ok(V_I2(&vOut) == val, "Expected i2 = %d, got %d\n", (SHORT)val, V_I2(&vOut)); }
2461#define EXPECT_UI2(val) EXPECT_OK { EXPECT_TYPE(VT_UI2); \
2462 ok(V_UI2(&vOut) == val, "Expected ui2 = %d, got %d\n", (USHORT)val, V_UI2(&vOut)); }
2463#define EXPECT_I4(val) EXPECT_OK { EXPECT_TYPE(VT_I4); \
2464 ok(V_I4(&vOut) == val, "Expected i4 = %ld, got %ld\n", (LONG)val, V_I4(&vOut)); }
2465#define EXPECT_UI4(val) EXPECT_OK { EXPECT_TYPE(VT_UI4); \
2466 ok(V_UI4(&vOut) == val, "Expected ui4 = %d, got %d\n", (ULONG)val, V_UI4(&vOut)); }
2467#define EXPECT_I8(val) EXPECT_OK { EXPECT_TYPE(VT_I8); \
2468 ok(V_I8(&vOut) == val, "Expected i8 = %#I64x, got %#I64x\n", (LONG64)val, V_I8(&vOut)); }
2469#define EXPECT_UI8(val) EXPECT_OK { EXPECT_TYPE(VT_UI8); \
2470 ok(V_UI8(&vOut) == val, "Expected ui8 = %#I64x, got %#I64x\n", (ULONG64)val, V_UI8(&vOut); }
2471#define EXPECT_R4(val) EXPECT_OK { EXPECT_TYPE(VT_R4); \
2472 ok(V_R4(&vOut) == val, "Expected r4 = %f, got %f\n", val, V_R4(&vOut)); }
2473#define EXPECT_R8(val) EXPECT_OK { EXPECT_TYPE(VT_R8); \
2474 ok(V_R8(&vOut) == val, "Expected r8 = %g, got %g\n", val, V_R8(&vOut)); }
2475#define CY_MULTIPLIER 10000
2476#define EXPECT_CY(val) EXPECT_OK { EXPECT_TYPE(VT_CY); \
2477 ok(V_CY(&vOut).int64 == (LONG64)(val * CY_MULTIPLIER), "Expected r8 = %#I64x, got %#I64x\n", \
2478 (LONG64)val, V_CY(&vOut).int64); }
2479#define EXPECT_DECIMAL(valHi, valMid, valLo) EXPECT_OK { EXPECT_TYPE(VT_DECIMAL); \
2480 ok(V_DECIMAL(&vOut).Hi32 == valHi && V_DECIMAL(&vOut).Mid32 == valMid && \
2481 V_DECIMAL(&vOut).Lo32 == valLo, \
2482 "Expected decimal = %x/0x%x%08x, got %lx/0x%lx%08lx\n", valHi, valMid, valLo, \
2483 V_DECIMAL(&vOut).Hi32, V_DECIMAL(&vOut).Mid32, V_DECIMAL(&vOut).Lo32); }
2501#define INTEGER_VTBITS (VTBIT_I1|VTBIT_UI1|VTBIT_I2|VTBIT_UI2|VTBIT_I4|VTBIT_UI4|VTBIT_I8|VTBIT_UI8)
2662 memset(&ud, 0,
sizeof(ud));
2667 "%.16g expected res(%lx) %d,%d,%d,%d,%d,%d,%d %d %d, got res(%lx) %d,%d,%d,%d,%d,%d,%d %d %d\n",
2668 dt,
r,
d,
m,
y,
h, mn,
s, ms,
dw,
dy,
2672#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)
2676 DT2UD(29221.0,0,
S_OK,1,1,1980,0,0,0,0,2,1);
2677 DT2UD(29222.0,0,
S_OK,2,1,1980,0,0,0,0,3,2);
2678 DT2UD(33238.0,0,
S_OK,31,12,1990,0,0,0,0,1,365);
2679 DT2UD(0.0,0,
S_OK,30,12,1899,0,0,0,0,6,364);
2680 DT2UD(-657434.0,0,
S_OK,1,1,100,0,0,0,0,5,1);
2681 DT2UD(-657435.0,0,
E_INVALIDARG,0,0,0,0,0,0,0,0,0);
2682 DT2UD(2958465.0,0,
S_OK,31,12,9999,0,0,0,0,5,365);
2683 DT2UD(2958466.0,0,
E_INVALIDARG,0,0,0,0,0,0,0,0,0);
2686 DT2UD(-657435.0,
VAR_VALIDDATE,
E_INVALIDARG,0,0,0,0,0,0,0,0,0);
2687 DT2UD(2958466.0,
VAR_VALIDDATE,
E_INVALIDARG,0,0,0,0,0,0,0,0,0);
2690 DT2UD(29221.25,0,
S_OK,1,1,1980,6,0,0,0,2,1);
2691 DT2UD(29221.33333333,0,
S_OK,1,1,1980,8,0,0,0,2,1);
2692 DT2UD(29221.5,0,
S_OK,1,1,1980,12,0,0,0,2,1);
2693 DT2UD(29221.9888884444,0,
S_OK,1,1,1980,23,44,0,0,2,1);
2694 DT2UD(29221.7508765432,0,
S_OK,1,1,1980,18,1,16,0,2,1);
2697 DT2UD(-5.25,0,
S_OK,25,12,1899,6,0,0,0,1,359);
2698 DT2UD(-5.9999884259259,0,
S_OK,25,12,1899,23,59,59,0,1,359);
2700 DT2UD(-4.0,0,
S_OK,26,12,1899,0,0,0,0,2,360);
2702 DT2UD(-0.25,0,
S_OK,30,12,1899,6,0,0,0,6,364);
2703 DT2UD(0.25,0,
S_OK,30,12,1899,6,0,0,0,6,364);
2725 "expected %lx, %.16g, got %lx, %.16g\n",
r, dt,
res,
out);
2727#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)
2731 UD2T(1,1,1980,0,0,0,0,2,1,0,
S_OK,29221.0);
2732 UD2T(2,1,1980,0,0,0,0,3,2,0,
S_OK,29222.0);
2733 UD2T(2,1,1980,0,0,0,0,4,5,0,
S_OK,29222.0);
2734 UD2T(31,12,1990,0,0,0,0,0,0,0,
S_OK,33238.0);
2735 UD2T(31,12,90,0,0,0,0,0,0,0,
S_OK,33238.0);
2736 UD2T(30,12,1899,0,0,0,0,6,364,0,
S_OK,0.0);
2737 UD2T(1,1,100,0,0,0,0,0,0,0,
S_OK,-657434.0);
2738 UD2T(31,12,9999,0,0,0,0,0,0,0,
S_OK,2958465.0);
2739 UD2T(1,1,10000,0,0,0,0,0,0,0,
E_INVALIDARG,0.0);
2740 UD2T(1,1,-10000,0,0,0,0,0,0,0,
E_INVALIDARG,0.0);
2742 UD2T(30,12,1899,0,0,0,0,0,0,0,
S_OK,0.0);
2743 UD2T(30,12,1899,0,0,0,999,0,0,0,
S_OK,0.0);
2745 UD2T(1,1,1980,18,1,16,0,2,1,0,
S_OK,29221.75087962963);
2746 UD2T(1,300,1980,18,1,16,0,2,1,0,
S_OK,38322.75087962963);
2747 UD2T(300,1,1980,18,1,16,0,2,1,0,
S_OK,29520.75087962963);
2748 UD2T(0,1,1980,42,1,16,0,2,1,0,
S_OK,29221.75087962963);
2749 UD2T(1,1,1980,17,61,16,0,2,1,0,
S_OK,29221.75087962963);
2750 UD2T(1,1,1980,18,0,76,0,2,1,0,
S_OK,29221.75087962963);
2751 UD2T(1,-300,1980,18,1,16,0,2,1,0,
S_OK,20059.75087962963);
2752 UD2T(-300,1,1980,18,1,16,0,2,1,0,
S_OK,28920.75087962963);
2753 UD2T(3,1,1980,-30,1,16,0,2,1,0,
S_OK,29221.75087962963);
2754 UD2T(1,1,1980,20,-119,16,0,2,1,0,
S_OK,29221.75087962963);
2755 UD2T(1,1,1980,18,3,-104,0,2,1,0,
S_OK,29221.75087962963);
2756 UD2T(1,12001,-1020,18,1,16,0,0,0,0,
S_OK,29221.75087962963);
2757 UD2T(1,-23,1982,18,1,16,0,0,0,0,
S_OK,29221.75087962963);
2758 UD2T(-59,3,1980,18,1,16,0,0,0,0,
S_OK,29221.75087962963);
2759 UD2T(1,1,0,0,0,0,0,0,0,0,
S_OK,36526);
2760 UD2T(0,0,1980,0,0,0,0,0,0,0,
S_OK,29189);
2761 UD2T(0,1,1980,0,0,0,0,2,1,0,
S_OK,29220.0);
2762 UD2T(-1,1,1980,18,1,16,0,0,0,0,
S_OK,29219.75087962963);
2763 UD2T(1,1,-1,18,1,16,0,0,0,0,
S_OK,36161.75087962963);
2764 UD2T(1,-1,1980,18,1,16,0,0,0,0,
S_OK,29160.7508796296);
2765 UD2T(1,13,1980,0,0,0,0,2,1,0,
S_OK,29587.0);
2768 UD2T(25,12,1899,6,0,0,0,1,359,0,
S_OK,-5.25);
2769 UD2T(25,12,1899,23,59,59,0,1,359,0,
S_OK,-5.9999884259259);
2771 UD2T(26,12,1899,0,0,0,0,2,360,0,
S_OK,-4.0);
2774 UD2T(30,12,1899,6,0,0,0,6,364,0,
S_OK,0.25);
2776 UD2T(1,1,1980,18,1,16,0,2,1,
VAR_TIMEVALUEONLY,
S_OK,0.7508796296296296);
2777 UD2T(1,1,1980,18,1,16,0,2,1,
VAR_DATEVALUEONLY,
S_OK,29221.0);
2778 UD2T(25,12,1899,6,0,0,0,1,359,
VAR_TIMEVALUEONLY,
S_OK,0.25);
2779 UD2T(25,12,1899,6,0,0,0,1,359,
VAR_DATEVALUEONLY,
S_OK,-5.0);
2780 UD2T(1,-1,1980,18,1,16,0,0,0,
VAR_TIMEVALUEONLY|
VAR_DATEVALUEONLY,
S_OK,0.7508796296296296);
2802 "expected %.16g or %.16g, got %.16g\n", dt, dt2,
out);
2804#define ST2DT(d,m,y,h,mn,s,ms,r,dt,dt2) test_st2dt(__LINE__,d,m,y,h,mn,s,ms,r,dt,dt2)
2808 ST2DT(1,1,1980,0,0,0,0,
TRUE,29221.0,0.0);
2809 ST2DT(2,1,1980,0,0,0,0,
TRUE,29222.0,0.0);
2810 ST2DT(0,1,1980,0,0,0,0,
TRUE,29220.0,0.0);
2815 ST2DT(1,1,9999,0,0,0,0,
TRUE,2958101.0,0.0);
2822 ST2DT(1,1,30,0,0,0,0,
TRUE,47484.0,10959.0);
2824 ST2DT(1,1,49,0,0,0,0,
TRUE,54424.0,17899.0);
2826 ST2DT(31,12,99,0,0,0,0,
TRUE,36525.0,0.0);
2835 memset(&st, 0,
sizeof(st));
2841 "%.16g expected %d, %d,%d,%d,%d,%d,%d,%d, got %d, %d,%d,%d,%d,%d,%d,%d\n",
2842 dt,
r,
d,
m,
y,
h, mn,
s, ms,
res, st.
wDay, st.
wMonth,
2846#define DT2ST(dt,r,d,m,y,h,mn,s,ms) test_dt2st(__LINE__,dt,r,d,m,y,h,mn,s,ms)
2850 DT2ST(29221.0,1,1,1,1980,0,0,0,0);
2851 DT2ST(29222.0,1,2,1,1980,0,0,0,0);
2854#define MKDOSDATE(d,m,y) ((d & 0x1f) | ((m & 0xf) << 5) | (((y-1980) & 0x7f) << 9))
2855#define MKDOSTIME(h,m,s) (((s>>1) & 0x1f) | ((m & 0x3f) << 5) | ((h & 0x1f) << 11))
2860 unsigned short dosDate, dosTime;
2869 "expected %d, %.16g, got %d, %.16g\n",
r, dt,
res,
out);
2871#define DOS2DT(d,m,y,h,mn,s,r,dt) test_dos2dt(__LINE__,d,m,y,h,mn,s,r,dt)
2876 DOS2DT(1,1,1980,0,0,0,1,29221.0);
2877 DOS2DT(31,12,2099,0,0,0,1,73050.0);
2879 DOS2DT(31,12,2100,0,0,0,0,0.0);
2881 DOS2DT(0,1,1980,0,0,0,1,29220.0);
2882 DOS2DT(1,0,1980,0,0,0,1,29190.0);
2883 DOS2DT(0,0,1980,0,0,0,1,29189.0);
2885 DOS2DT(29,2,1981,0,0,0,1,29646.0);
2886 DOS2DT(30,2,1981,0,0,0,1,29647.0);
2888 DOS2DT(29,2,1980,0,0,0,1,29280.0);
2890 DOS2DT(2,13,1980,0,0,0,0,0.0);
2893 DOS2DT(1,1,1980,0,0,29,1,29221.00032407407);
2894 DOS2DT(1,1,1980,0,0,31,1,29221.00034722222);
2895 DOS2DT(1,1,1980,0,59,0,1,29221.04097222222);
2896 DOS2DT(1,1,1980,0,60,0,0,0.0);
2897 DOS2DT(1,1,1980,0,0,60,0,0.0);
2898 DOS2DT(1,1,1980,23,0,0,1,29221.95833333333);
2899 DOS2DT(1,1,1980,24,0,0,0,0.0);
2901 DOS2DT(1,1,1980,0,0,1,1,29221.0);
2902 DOS2DT(2,1,1980,0,0,0,1,29222.0);
2903 DOS2DT(2,1,1980,0,0,0,1,29222.0);
2904 DOS2DT(31,12,1990,0,0,0,1,33238.0);
2905 DOS2DT(31,12,90,0,0,0,1,40543.0);
2906 DOS2DT(30,12,1899,0,0,0,1,46751.0);
2907 DOS2DT(1,1,100,0,0,0,1,43831.0);
2908 DOS2DT(31,12,9999,0,0,0,1,59901.0);
2909 DOS2DT(1,1,10000,0,0,0,1,59902.0);
2910 DOS2DT(1,1,-10000,0,0,0,1,48214.0);
2912 DOS2DT(30,12,1899,0,0,0,1,46751.0);
2913 DOS2DT(30,12,1899,0,0,1,1,46751.0);
2915 DOS2DT(1,1,1980,18,1,16,1,29221.75087962963);
2916 DOS2DT(1,300,1980,18,1,16,1,29556.75087962963);
2917 DOS2DT(300,1,1980,18,1,16,1,29232.75087962963);
2918 DOS2DT(0,1,1980,42,1,16,1,29220.4175462963);
2919 DOS2DT(1,1,1980,17,61,16,0,0.0);
2920 DOS2DT(1,1,1980,18,0,76,1,29221.75013888889);
2921 DOS2DT(1,-300,1980,18,1,16,1,29312.75087962963);
2922 DOS2DT(-300,1,1980,18,1,16,1,29240.75087962963);
2923 DOS2DT(3,1,1980,-30,1,16,1,29223.08421296296);
2924 DOS2DT(1,1,1980,20,-119,16,1,29221.83976851852);
2925 DOS2DT(1,1,1980,18,3,-104,1,29221.75236111111);
2926 DOS2DT(1,12001,-1020,18,1,16,1,55519.75087962963);
2927 DOS2DT(1,-23,1982,18,1,16,1,30195.75087962963);
2928 DOS2DT(-59,3,1980,18,1,16,1,29285.75087962963);
2929 DOS2DT(1,1,0,0,0,0,1,54058.0);
2930 DOS2DT(0,0,1980,0,0,0,1,29189.0);
2931 DOS2DT(0,1,1980,0,0,0,1,29220.0);
2932 DOS2DT(-1,1,1980,18,1,16,1,29251.75087962963);
2933 DOS2DT(1,1,-1,18,1,16,1,53693.75087962963);
2934 DOS2DT(1,-1,1980,18,1,16,0,0);
2940 unsigned short dosDate, dosTime, expDosDate, expDosTime;
2943 dosTime = dosDate = 0;
2947 ok_(__FILE__,
line)(
r ==
res && (!
r || (dosTime == expDosTime && dosDate == expDosDate)),
2948 "%g: expected %d,%d(%d/%d/%d),%d(%d:%d:%d) got %d,%d(%d/%d/%d),%d(%d:%d:%d)\n",
2949 dt,
r, expDosDate, expDosDate & 0x1f,
2950 (expDosDate >> 5) & 0xf, 1980 + (expDosDate >> 9),
2951 expDosTime, expDosTime >> 11, (expDosTime >> 5) & 0x3f,
2952 (expDosTime & 0x1f),
2953 res, dosDate, dosDate & 0x1f, (dosDate >> 5) & 0xf,
2954 1980 + (dosDate >> 9), dosTime, dosTime >> 11,
2955 (dosTime >> 5) & 0x3f, (dosTime & 0x1f));
2957#define DT2DOS(dt,r,d,m,y,h,mn,s) test_dt2dos(__LINE__,dt,r,d,m,y,h,mn,s)
2962 DT2DOS(29221.0,1,1,1,1980,0,0,0);
2963 DT2DOS(73050.0,1,31,12,2099,0,0,0);
2964 DT2DOS(29220.0,0,0,0,0,0,0,0);
2965 DT2DOS(73415.0,0,0,0,0,0,0,0);
2968 DT2DOS(29221.00032407407,1,1,1,1980,0,0,29);
2969 DT2DOS(29221.00034722222,1,1,1,1980,0,0,31);
2970 DT2DOS(29221.04097222222,1,1,1,1980,0,59,0);
2971 DT2DOS(29221.95833333333,1,1,1,1980,23,0,0);
2976#define VARABS(vt,val,rvt,rval) \
2977 V_VT(&v) = VT_##vt; V_##vt(&v) = val; \
2978 V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \
2979 test_var_call1( __LINE__, pVarAbs, &v, &exp )
2983 static WCHAR szNum[] = {
'-',
'1',
'.',
'1',
'\0' };
3007 hres = pVarAbs(&
v,&vDst);
3027 ok(
hres == hExpected,
"VarAbs: expected 0x%lX, got 0x%lX for vt %d | 0x%X\n",
3048 VARABS(
R4,1.40129846432481707e-45,
R4,1.40129846432481707e-45);
3049 VARABS(
R8,4.94065645841246544e-324,
R8,4.94065645841246544e-324);
3053 V_CY(&
v).int64 = -10000;
3054 memset(&vDst,0,
sizeof(vDst));
3055 hres = pVarAbs(&
v,&vDst);
3057 "VarAbs(CY): expected 0x0 got 0x%lX\n",
hres);
3061 trace(
"Skipping VarAbs(BSTR) as decimal separator is '%s'\n",
buff);
3068 memset(&vDst,0,
sizeof(vDst));
3069 hres = pVarAbs(&
v,&vDst);
3071 "VarAbs: expected 0x0,%d,%g, got 0x%lX,%d,%g\n",
VT_R8, 1.1,
hres,
V_VT(&vDst),
V_R8(&vDst));
3075 memset(&vDst,0,
sizeof(vDst));
3076 hres = pVarAbs(&
v,&vDst);
3078 "VarAbs: expected 0x0,%d,%g, got 0x%lX,%d,%g\n",
VT_R8, 30000.0,
hres,
V_VT(&vDst),
V_R8(&vDst));
3084#define VARNOT(vt,val,rvt,rval) \
3085 V_VT(&v) = VT_##vt; V_##vt(&v) = val; \
3086 V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \
3087 test_var_call1( __LINE__, pVarNot, &v, &exp )
3091 static const WCHAR szNum0[] = {
'0',
'\0' };
3092 static const WCHAR szNum1[] = {
'1',
'\0' };
3093 static const WCHAR szFalse[] = {
'#',
'F',
'A',
'L',
'S',
'E',
'#',
'\0' };
3094 static const WCHAR szTrue[] = {
'#',
'T',
'R',
'U',
'E',
'#',
'\0' };
3143 hres = pVarNot(&
v,&vDst);
3144 ok(
hres == hExpected,
"VarNot: expected 0x%lX, got 0x%lX vt %d|0x%X\n",
3192 pdec->
sign = DECIMAL_NEG;
3211#define VARSUB(vt1,val1,vt2,val2,rvt,rval) \
3212 V_VT(&left) = VT_##vt1; V_##vt1(&left) = val1; \
3213 V_VT(&right) = VT_##vt2; V_##vt2(&right) = val2; \
3214 V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \
3215 test_var_call2( __LINE__, pVarSub, &left, &right, &exp )
3238 VARTYPE leftvt, rightvt, resvt;
3249 expectedhres =
S_OK;
3332 else if (leftvt ==
VT_CY || rightvt ==
VT_CY)
3334 else if (leftvt ==
VT_R8 || rightvt ==
VT_R8)
3338 }
else if (leftvt ==
VT_R4 || rightvt ==
VT_R4) {
3345 else if (leftvt ==
VT_I8 || rightvt ==
VT_I8)
3347 else if (leftvt ==
VT_I4 || rightvt ==
VT_I4)
3349 else if (leftvt ==
VT_I2 || rightvt ==
VT_I2 ||
3364 "VarSub: %d|0x%X, %d|0x%X: Expected failure 0x%lX, "
3365 "got 0x%lX, expected vt %d got vt %d\n",
3375 VARSUB(I2,-13,I4,5,I4,-18);
3376 VARSUB(I4,-13,I4,5,I4,-18);
3405 "VarSub: expected coerced type VT_R8, got %s!\n", wine_dbgstr_vt(
V_VT(&
result)));
3407 "VarSub: BSTR + BSTR, expected %f got %f\n", 0.0,
V_R8(&
result));
3425 "VarSub: expected coerced type VT_CY, got %s!\n", wine_dbgstr_vt(
V_VT(&
result)));
3431 "VarSub: expected coerced type VT_DECIMAL, got %s!\n", wine_dbgstr_vt(
V_VT(&
result)));
3449 ok_(__FILE__,
line)(
hres == expres,
"wrong result %lx/%lx\n",
hres, expres );
3453 "got %s expected %s\n", wine_dbgstr_variant(&
result), wine_dbgstr_variant(
expected) );
3462#define VARMOD(vt1,vt2,val1,val2,rvt,rval) \
3463 V_VT(&left) = VT_##vt1; V_##vt1(&left) = val1; \
3464 V_VT(&right) = VT_##vt2; V_##vt2(&right) = val2; \
3465 V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \
3466 test_var_call2( __LINE__, pVarMod, &left, &right, &exp )
3468#define VARMOD2(vt1,vt2,val1,val2,rvt,rval,hexpected) \
3469 V_VT(&left) = VT_##vt1; V_I4(&left) = val1; \
3470 V_VT(&right) = VT_##vt2; V_I4(&right) = val2; \
3471 V_VT(&exp) = VT_##rvt; V_I4(&exp) = rval; \
3472 test_Mod( __LINE__, &left, &right, &exp, hexpected )
3480 BOOL lFound, rFound;
3482 BSTR strNum0, strNum1;
3487 VARMOD(I1,I1,100,10,I4,0);
3488 VARMOD(I1,UI1,100,10,I4,0);
3489 VARMOD(I1,I2,100,10,I4,0);
3490 VARMOD(I1,UI2,100,10,I4,0);
3491 VARMOD(I1,I4,100,10,I4,0);
3492 VARMOD(I1,UI4,100,10,I4,0);
3497 VARMOD(UI1,I1,100,10,I4,0);
3498 VARMOD(UI1,UI1,100,10,UI1,0);
3499 VARMOD(UI1,I2,100,10,I2,0);
3500 VARMOD(UI1,UI2,100,10,I4,0);
3501 VARMOD(UI1,I4,100,10,I4,0);
3502 VARMOD(UI1,UI4,100,10,I4,0);
3507 VARMOD(I2,I1,100,10,I4,0);
3508 VARMOD(I2,UI1,100,10,I2,0);
3509 VARMOD(I2,I2,100,10,I2,0);
3510 VARMOD(I2,UI2,100,10,I4,0);
3511 VARMOD(I2,I4,100,10,I4,0);
3512 VARMOD(I2,UI4,100,10,I4,0);
3517 VARMOD(I4,I1,100,10,I4,0);
3518 VARMOD(I4,UI1,100,10,I4,0);
3519 VARMOD(I4,I2,100,10,I4,0);
3520 VARMOD(I4,UI2,100,10,I4,0);
3521 VARMOD(I4,I4,100,10,I4,0);
3522 VARMOD(I4,UI4,100,10,I4,0);
3526 VARMOD(UI4,I1,100,10,I4,0);
3527 VARMOD(UI4,UI1,100,10,I4,0);
3528 VARMOD(UI4,I2,100,10,I4,0);
3529 VARMOD(UI4,UI2,100,10,I4,0);
3530 VARMOD(UI4,I4,100,10,I4,0);
3531 VARMOD(UI4,UI4,100,10,I4,0);
3591 VARMOD(I1,I8,100,10,I8,0);
3592 VARMOD(UI1,I8,100,10,I8,0);
3593 VARMOD(I2,I8,100,10,I8,0);
3594 VARMOD(I4,I8,100,10,I8,0);
3595 VARMOD(UI4,I8,100,10,I8,0);
3601 VARMOD(I8,I1,100,10,I8,0);
3602 VARMOD(I8,UI1,100,10,I8,0);
3603 VARMOD(I8,I2,100,10,I8,0);
3604 VARMOD(I8,UI2,100,10,I8,0);
3605 VARMOD(I8,I4,100,10,I8,0);
3606 VARMOD(I8,UI4,100,10,I8,0);
3609 VARMOD(I8,I8,100,10,I8,0);
3712 }
else if((
r ==
VT_EMPTY) && lFound && lValid)
3736 }
else if((
l ==
VT_NULL) && rFound)
3742 }
else if((
r ==
VT_RECORD) && lValid && lFound)
3748 }
else if((
l ==
VT_CY) && !rFound)
3751 }
else if(lFound && !rFound)
3754 }
else if(!lFound && rFound)
3757 }
else if((
r ==
VT_NULL) && lFound && lValid)
3766 }
else if(!lFound && !rFound)
3775 V_CY(&
v1).int64 = 1000000;
3822 "VarMod: expected 0x%lx, got 0x%lX for l type of %d, r type of %d,\n", hexpected,
hres,
l,
r);
3830 VARMOD(I4,I4,-1,-1,I4,0);
3864 V_CY(&
v1).int64 = 100000;
3865 V_CY(&
v2).int64 = 100000;
3868 "VarMod: expected 0x%lx,%d,%d, got 0x%lX,%d,%ld\n",
S_OK,
VT_I4, 0,
hres,
V_VT(&vDst),
V_I4(&vDst));
3873 V_CY(&
v2).int64 = 100000;
3876 "VarMod: expected 0x%lx,%d,%d, got 0x%lX,%d,%ld\n",
S_OK,
VT_I4, 0,
hres,
V_VT(&vDst),
V_I4(&vDst));
3885 "VarMod: expected 0x%lx,%d,%d, got 0x%lX,%d,%ld\n",
S_OK,
VT_I4, 0,
hres,
V_VT(&vDst),
V_I4(&vDst));
3893 "VarMod: expected 0x%lx,%d,%d, got 0x%lX,%d,%ld\n",
S_OK,
VT_I4, 0,
hres,
V_VT(&vDst),
V_I4(&vDst));
3901 V_CY(&
v2).int64 = 100000;
3906 "VarMod: expected 0x%lx,%d,%d, got 0x%lX,%d,%ld\n",
DISP_E_TYPEMISMATCH,
VT_EMPTY, 1231,
hres,
V_VT(&vDst),
V_I4(&vDst));
3955#define VARFIX(vt,val,rvt,rval) \
3956 V_VT(&v) = VT_##vt; V_##vt(&v) = val; \
3957 V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \
3958 test_var_call1( __LINE__, pVarFix, &v, &exp )
3998 hres = pVarFix(&
v,&vDst);
4001 "VarFix: expected failure, got 0x%lX vt %d|0x%X\n",
4004 ok(
hres ==
S_OK,
"VarFix: expected S_OK, got 0x%lX vt %d|0x%X\n",
4031 hres = pVarFix(&
v,&vDst);
4033 "VarFix: expected 0x0,%d,0 got 0x%lX,%d,%d\n",
VT_EMPTY,
4037 hres = pVarFix(&
v,&vDst);
4039 "VarFix: expected 0x0,%d got 0x%lX,%d\n",
VT_NULL,
hres,
V_VT(&vDst));
4042 pdec->
sign = DECIMAL_NEG;
4047 hres = pVarFix(&
v,&vDst);
4049 "VarFix: expected 0x0,%d,identical, got 0x%lX,%d\n",
VT_DECIMAL,
4055 pcy->
int64 = -10000;
4056 hres = pVarFix(&
v,&vDst);
4058 "VarFix: VT_CY wrong, hres=0x%lX\n",
hres);
4061 pcy->
int64 = -16000;
4062 hres = pVarFix(&
v,&vDst);
4064 "VarFix: VT_CY wrong, hres=0x%lX\n",
hres);
4069#define VARINT(vt,val,rvt,rval) \
4070 V_VT(&v) = VT_##vt; V_##vt(&v) = val; \
4071 V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \
4072 test_var_call1( __LINE__, pVarInt, &v, &exp )
4112 hres = pVarInt(&
v,&vDst);
4115 "VarInt: expected failure, got 0x%lX vt %d|0x%X\n",
4118 ok(
hres ==
S_OK,
"VarInt: expected S_OK, got 0x%lX vt %d|0x%X\n",
4145 hres = pVarInt(&
v,&vDst);
4147 "VarInt: expected 0x0,%d,0 got 0x%lX,%d,%d\n",
VT_EMPTY,
4151 hres = pVarInt(&
v,&vDst);
4153 "VarInt: expected 0x0,%d got 0x%lX,%d\n",
VT_NULL,
hres,
V_VT(&vDst));
4156 pdec->
sign = DECIMAL_NEG;
4161 hres = pVarInt(&
v,&vDst);
4163 "VarInt: expected 0x0,%d,identical, got 0x%lX,%d\n",
VT_DECIMAL,
4169 pcy->
int64 = -10000;
4170 hres = pVarInt(&
v,&vDst);
4172 "VarInt: VT_CY wrong, hres=0x%lX\n",
hres);
4175 pcy->
int64 = -11000;
4176 hres = pVarInt(&
v,&vDst);
4178 "VarInt: VT_CY wrong, hres=%#lX %#I64x\n",
4184#define VARNEG(vt,val,rvt,rval) \
4185 V_VT(&v) = VT_##vt; V_##vt(&v) = val; \
4186 V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \
4187 test_var_call1( __LINE__, pVarNeg, &v, &exp )
4231 hres = pVarNeg(&
v,&vDst);
4234 "VarNeg: expected failure, got 0x%lX vt %d|0x%X\n",
4237 ok(
hres ==
S_OK,
"VarNeg: expected S_OK, got 0x%lX vt %d|0x%X\n",
4247 VARNEG(I2,-32768,I4,32768);
4250 VARNEG(I4,-((
int)(~0
u >> 1)) - 1,
R8,-2147483648u);
4268 hres = pVarNeg(&
v,&vDst);
4270 "VarNeg: expected 0x0,%d,0 got 0x%lX,%d,%d\n",
VT_EMPTY,
4274 hres = pVarNeg(&
v,&vDst);
4276 "VarNeg: expected 0x0,%d got 0x%lX,%d\n",
VT_NULL,
hres,
V_VT(&vDst));
4279 pdec->
sign = DECIMAL_NEG;
4284 hres = pVarNeg(&
v,&vDst);
4287 "VarNeg: expected 0x0,%d,0x00, got 0x%lX,%d,%02x\n",
VT_DECIMAL,
4291 hres = pVarNeg(&
v,&vDst);
4294 "VarNeg: expected 0x0,%d,0x7f, got 0x%lX,%d,%02x\n",
VT_DECIMAL,
4298 pcy->
int64 = -10000;
4299 hres = pVarNeg(&
v,&vDst);
4301 "VarNeg: VT_CY wrong, hres=0x%lX\n",
hres);
4314 "got %s expected %s\n", wine_dbgstr_variant(&
result), wine_dbgstr_variant(
expected) );
4316#define VARROUND(vt,val,deci,rvt,rval) \
4317 V_VT(&v) = VT_##vt; V_##vt(&v) = val; \
4318 V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \
4319 test_Round( __LINE__, &v, deci, &exp )
4336 {{ 0, DECIMAL_NEG, 0, 0, 1 }, { 0, DECIMAL_NEG, 0, 0, 1 }, 0},
4337 {{ 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 1 }, 0},
4338 {{ 2, 0, 0, 0, 155 }, { 0, 0, 0, 0, 16 }, 1},
4339 {{ 2, 0, 0, 0, 155 }, { 1, 0, 0, 0, 2 }, 0},
4340 {{ 2, 0, 0, 0, 199 }, { 1, 0, 0, 0, 20 }, 1},
4341 {{ 2, 0, 0, 0, 199 }, { 2, 0, 0, 0, 199 }, 2},
4342 {{ 2, DECIMAL_NEG, 0, 0, 199 }, { 2, DECIMAL_NEG, 0, 0, 199 }, 2},
4343 {{ 2, DECIMAL_NEG, 0, 0, 55 }, { 2, DECIMAL_NEG, 0, 0, 6 }, 1},
4344 {{ 2, 0, 0, 0, 55 }, { 2, 0, 0, 0, 6 }, 1},
4345 {{ 2, 0, 0, 0, 1999 }, { 1, 0, 0, 0, 200 }, 1},
4350 static WCHAR szNumMin[] = {
'-',
'1',
'.',
'4',
'4',
'9',
'\0' };
4351 static WCHAR szNum[] = {
'1',
'.',
'4',
'5',
'1',
'\0' };
4367 VARROUND(I4,-((
int)(~0
u >> 1)) - 1,0,I4,-((
int)(~0
u >> 1)) - 1);
4390 szNumMin[2] =
buff[0];
4395 skip(
"Skipping VarRound(BSTR) as decimal separator is '%s'\n",
buff);
4423 "VarRound: expected 0x0,%d,0 got 0x%lX,%d,%d\n",
VT_EMPTY,
4429 "VarRound: expected 0x0,%d got 0x%lX,%d\n",
VT_NULL,
hres,
V_VT(&vDst));
4439 pdec->
sign =
ptr->source.sign;
4441 pdec->
Hi32 =
ptr->source.Hi32;
4443 pdec->
Lo32 =
ptr->source.Lo32;
4452 ok(
V_DECIMAL(&vDst).Hi32 ==
ptr->ret.Hi32,
"%d: got Hi32 %ld, expected %ld\n",
4454 ok(
V_DECIMAL(&vDst).Mid32 ==
ptr->ret.Mid32,
"%d: got Mid32 %ld, expected %ld\n",
4456 ok(
V_DECIMAL(&vDst).Lo32 ==
ptr->ret.Lo32,
"%d: got Lo32 %ld, expected %ld\n",
4466 "VarRound: VT_CY wrong, hres=0x%lX\n",
hres);
4471#define VARXOR(vt1,val1,vt2,val2,rvt,rval) \
4472 V_VT(&left) = VT_##vt1; V_##vt1(&left) = val1; \
4473 V_VT(&right) = VT_##vt2; V_##vt2(&right) = val2; \
4474 V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \
4475 test_var_call2( __LINE__, pVarXor, &left, &right, &exp )
4477#define VARXORCY(vt1,val1,val2,rvt,rval) \
4478 V_VT(&left) = VT_##vt1; V_##vt1(&left) = val1; \
4479 V_VT(&right) = VT_CY; V_CY(&right).int64 = val2; \
4480 V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \
4481 test_var_call2( __LINE__, pVarXor, &left, &right, &exp )
4485 static const WCHAR szFalse[] = {
'#',
'F',
'A',
'L',
'S',
'E',
'#',
'\0' };
4486 static const WCHAR szTrue[] = {
'#',
'T',
'R',
'U',
'E',
'#',
'\0' };
4497 VARTYPE leftvt, rightvt, resvt;
4534 if (leftvt == rightvt ||
4541 else if (leftvt ==
VT_I8 || rightvt ==
VT_I8)
4550 if (leftvt == rightvt)
4552 else if (leftvt == rightvt ||
4558 else if (leftvt ==
VT_I8 || rightvt ==
VT_I8)
4561 else if (leftvt ==
VT_I2 || rightvt ==
VT_I2)
4563 if (leftvt == rightvt ||
4566 else if (leftvt ==
VT_I8 || rightvt ==
VT_I8)
4573 else if (leftvt ==
VT_I8 || rightvt ==
VT_I8)
4583 "VarXor: %d|0x%X, %d|0x%X: Expected failure, got 0x%lX vt %d\n",
4588 "VarXor: %d|0x%X, %d|0x%X: expected S_OK, vt %d, got 0x%lX vt %d\n",
4693 VARXOR(
BOOL,VARIANT_TRUE,UI2,65535,I4,-65536);
4699 VARXOR(
BOOL,VARIANT_TRUE,UI4,0xffffffff,I4,0);
4741 VARXOR(I1,-1,I1,-1,I4,0);
4742 VARXOR(I1,-1,I1,0,I4,-1);
4744 VARXOR(I1,-1,UI1,255,I4,-256);
4745 VARXOR(I1,-1,UI1,0,I4,-1);
4747 VARXOR(I1,-1,I2,-1,I4,0);
4748 VARXOR(I1,-1,I2,0,I4,-1);
4750 VARXOR(I1,-1,UI2,65535,I4,-65536);
4751 VARXOR(I1,-1,UI2,0,I4,-1);
4753 VARXOR(I1,-1,I4,-1,I4,0);
4754 VARXOR(I1,-1,I4,0,I4,-1);
4756 VARXOR(I1,-1,UI4,0xffffffff,I4,0);
4757 VARXOR(I1,-1,UI4,0,I4,-1);
4770 VARXOR(I1,-1,I8,-1,I8,0);
4771 VARXOR(I1,-1,I8,0,I8,-1);
4773 VARXOR(I1,-1,UI8,0,I4,-1);
4794 VARXOR(UI1,255,UI1,255,UI1,0);
4795 VARXOR(UI1,255,UI1,0,UI1,255);
4796 VARXOR(UI1,0,UI1,0,UI1,0);
4797 VARXOR(UI1,255,I2,-1,I2,-256);
4798 VARXOR(UI1,255,I2,0,I2,255);
4800 VARXOR(UI1,255,UI2,65535,I4,65280);
4801 VARXOR(UI1,255,UI2,0,I4,255);
4802 VARXOR(UI1,0,UI2,0,I4,0);
4803 VARXOR(UI1,255,I4,-1,I4,-256);
4804 VARXOR(UI1,255,I4,0,I4,255);
4806 VARXOR(UI1,255,UI4,0xffffffff,I4,-256);
4807 VARXOR(UI1,255,UI4,0,I4,255);
4808 VARXOR(UI1,0,UI4,0,I4,0);
4820 VARXOR(UI1,255,I8,-1,I8,-256);
4821 VARXOR(UI1,255,I8,0,I8,255);
4823 VARXOR(UI1,255,UI8,0,I4,255);
4824 VARXOR(UI1,0,UI8,0,I4,0);
4844 VARXOR(I2,-1,I2,-1,I2,0);
4845 VARXOR(I2,-1,I2,0,I2,-1);
4847 VARXOR(I2,-1,UI2,65535,I4,-65536);
4848 VARXOR(I2,-1,UI2,0,I4,-1);
4850 VARXOR(I2,-1,I4,-1,I4,0);
4851 VARXOR(I2,-1,I4,0,I4,-1);
4853 VARXOR(I2,-1,UI4,0xffffffff,I4,0);
4854 VARXOR(I2,-1,UI4,0,I4,-1);
4867 VARXOR(I2,-1,I8,-1,I8,0);
4868 VARXOR(I2,-1,I8,0,I8,-1);
4870 VARXOR(I2,-1,UI8,0,I4,-1);
4891 VARXOR(UI2,65535,UI2,65535,I4,0);
4892 VARXOR(UI2,65535,UI2,0,I4,65535);
4893 VARXOR(UI2,0,UI2,0,I4,0);
4894 VARXOR(UI2,65535,I4,-1,I4,-65536);
4895 VARXOR(UI2,65535,I4,0,I4,65535);
4897 VARXOR(UI2,65535,UI4,0xffffffff,I4,-65536);
4898 VARXOR(UI2,65535,UI4,0,I4,65535);
4899 VARXOR(UI2,0,UI4,0,I4,0);
4911 VARXOR(UI2,65535,I8,-1,I8,-65536);
4912 VARXOR(UI2,65535,I8,0,I8,65535);
4914 VARXOR(UI2,65535,UI8,0,I4,65535);
4915 VARXOR(UI2,0,UI8,0,I4,0);
4931 VARXORCY(UI2,65535,10000,I4,65534);
4935 VARXOR(I4,-1,I4,-1,I4,0);
4936 VARXOR(I4,-1,I4,0,I4,-1);
4938 VARXOR(I4,-1,UI4,0xffffffff,I4,0);
4939 VARXOR(I4,-1,UI4,0,I4,-1);
4952 VARXOR(I4,-1,I8,-1,I8,0);
4953 VARXOR(I4,-1,I8,0,I8,-1);
4955 VARXOR(I4,-1,UI8,0,I4,-1);
4976 VARXOR(UI4,0xffffffff,UI4,0xffffffff,I4,0);
4977 VARXOR(UI4,0xffffffff,UI4,0,I4,-1);
4978 VARXOR(UI4,0,UI4,0,I4,0);
4990 VARXOR(UI4,0xffffffff,I8,0,I8,0xffffffff);
4991 VARXOR(UI4,VARIANT_FALSE,I8,VARIANT_FALSE,I8,0);
4993 VARXOR(UI4,0xffffffff,UI8,0,I4,-1);
4994 VARXOR(UI4,0,UI8,0,I4,0);
5010 VARXORCY(UI4,0xffffffff,10000,I4,-2);
5112 VARXOR(I8,-1,I8,-1,I8,0);
5113 VARXOR(I8,-1,I8,0,I8,-1);
5115 VARXOR(I8,-1,UI8,0,I8,-1);
5131 VARXOR(UI8,0xffff,UI8,0xffff,I4,0);
5132 VARXOR(UI8,0xffff,UI8,0,I4,0xffff);
5133 VARXOR(UI8,0,UI8,0,I4,0);
5148 VARXORCY(UI8,0xffff,10000,I4,65534);
5205#define VAROR(vt1,val1,vt2,val2,rvt,rval) \
5206 V_VT(&left) = VT_##vt1; V_##vt1(&left) = val1; \
5207 V_VT(&right) = VT_##vt2; V_##vt2(&right) = val2; \
5208 V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \
5209 test_var_call2( __LINE__, pVarOr, &left, &right, &exp )
5211#define VARORCY(vt1,val1,val2,rvt,rval) \
5212 V_VT(&left) = VT_##vt1; V_##vt1(&left) = val1; \
5213 V_VT(&right) = VT_CY; V_CY(&right).int64 = val2; \
5214 V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \
5215 test_var_call2( __LINE__, pVarOr, &left, &right, &exp )
5219 static const WCHAR szFalse[] = {
'#',
'F',
'A',
'L',
'S',
'E',
'#',
'\0' };
5220 static const WCHAR szTrue[] = {
'#',
'T',
'R',
'U',
'E',
'#',
'\0' };
5231 VARTYPE leftvt, rightvt, resvt;
5268 if (leftvt == rightvt ||
5275 else if (leftvt ==
VT_I8 || rightvt ==
VT_I8)
5284 if (leftvt == rightvt)
5286 else if (leftvt == rightvt ||
5292 else if (leftvt ==
VT_I8 || rightvt ==
VT_I8)
5295 else if (leftvt ==
VT_I2 || rightvt ==
VT_I2)
5297 if (leftvt == rightvt ||
5300 else if (leftvt ==
VT_I8 || rightvt ==
VT_I8)
5307 else if (leftvt ==
VT_I8 || rightvt ==
VT_I8)
5317 "VarOr: %d|0x%X, %d|0x%X: Expected failure, got 0x%lX vt %d\n",
5322 "VarOr: %d|0x%X, %d|0x%X: expected S_OK, vt %d, got 0x%lX vt %d\n",
5429 VAROR(
BOOL,VARIANT_TRUE,UI2,65535,I4,-1);
5435 VAROR(
BOOL,VARIANT_TRUE,UI4,0xffffffff,I4,-1);
5477 VAROR(I1,-1,I1,-1,I4,-1);
5478 VAROR(I1,-1,I1,0,I4,-1);
5479 VAROR(I1,0,I1,0,I4,0);
5480 VAROR(I1,-1,UI1,255,I4,-1);
5481 VAROR(I1,-1,UI1,0,I4,-1);
5482 VAROR(I1,0,UI1,0,I4,0);
5483 VAROR(I1,-1,I2,-1,I4,-1);
5484 VAROR(I1,-1,I2,0,I4,-1);
5485 VAROR(I1,0,I2,0,I4,0);
5486 VAROR(I1,-1,UI2,65535,I4,-1);
5487 VAROR(I1,-1,UI2,0,I4,-1);
5488 VAROR(I1,0,UI2,0,I4,0);
5489 VAROR(I1,-1,I4,-1,I4,-1);
5490 VAROR(I1,-1,I4,0,I4,-1);
5491 VAROR(I1,0,I4,0,I4,0);
5492 VAROR(I1,-1,UI4,0xffffffff,I4,-1);
5493 VAROR(I1,-1,UI4,0,I4,-1);
5494 VAROR(I1,0,UI4,0,I4,0);
5506 VAROR(I1,-1,I8,-1,I8,-1);
5507 VAROR(I1,-1,I8,0,I8,-1);
5508 VAROR(I1,0,I8,0,I8,0);
5509 VAROR(I1,-1,UI8,0,I4,-1);
5510 VAROR(I1,0,UI8,0,I4,0);
5530 VAROR(UI1,255,UI1,255,UI1,255);
5531 VAROR(UI1,255,UI1,0,UI1,255);
5532 VAROR(UI1,0,UI1,0,UI1,0);
5533 VAROR(UI1,255,I2,-1,I2,-1);
5534 VAROR(UI1,255,I2,0,I2,255);
5535 VAROR(UI1,0,I2,0,I2,0);
5536 VAROR(UI1,255,UI2,65535,I4,65535);
5537 VAROR(UI1,255,UI2,0,I4,255);
5538 VAROR(UI1,0,UI2,0,I4,0);
5539 VAROR(UI1,255,I4,-1,I4,-1);
5540 VAROR(UI1,255,I4,0,I4,255);
5541 VAROR(UI1,0,I4,0,I4,0);
5542 VAROR(UI1,255,UI4,0xffffffff,I4,-1);
5543 VAROR(UI1,255,UI4,0,I4,255);
5544 VAROR(UI1,0,UI4,0,I4,0);
5556 VAROR(UI1,255,I8,-1,I8,-1);
5557 VAROR(UI1,255,I8,0,I8,255);
5558 VAROR(UI1,0,I8,0,I8,0);
5559 VAROR(UI1,255,UI8,0,I4,255);
5560 VAROR(UI1,0,UI8,0,I4,0);
5576 VARORCY(UI1,255,10000,I4,255);
5580 VAROR(I2,-1,I2,-1,I2,-1);
5581 VAROR(I2,-1,I2,0,I2,-1);
5582 VAROR(I2,0,I2,0,I2,0);
5583 VAROR(I2,-1,UI2,65535,I4,-1);
5584 VAROR(I2,-1,UI2,0,I4,-1);
5585 VAROR(I2,0,UI2,0,I4,0);
5586 VAROR(I2,-1,I4,-1,I4,-1);
5587 VAROR(I2,-1,I4,0,I4,-1);
5588 VAROR(I2,0,I4,0,I4,0);
5589 VAROR(I2,-1,UI4,0xffffffff,I4,-1);
5590 VAROR(I2,-1,UI4,0,I4,-1);
5591 VAROR(I2,0,UI4,0,I4,0);
5603 VAROR(I2,-1,I8,-1,I8,-1);
5604 VAROR(I2,-1,I8,0,I8,-1);
5605 VAROR(I2,0,I8,0,I8,0);
5606 VAROR(I2,-1,UI8,0,I4,-1);
5607 VAROR(I2,0,UI8,0,I4,0);
5627 VAROR(UI2,65535,UI2,65535,I4,65535);
5628 VAROR(UI2,65535,UI2,0,I4,65535);
5629 VAROR(UI2,0,UI2,0,I4,0);
5630 VAROR(UI2,65535,I4,-1,I4,-1);
5631 VAROR(UI2,65535,I4,0,I4,65535);
5632 VAROR(UI2,0,I4,0,I4,0);
5633 VAROR(UI2,65535,UI4,0xffffffff,I4,-1);
5634 VAROR(UI2,65535,UI4,0,I4,65535);
5635 VAROR(UI2,0,UI4,0,I4,0);
5637 VAROR(UI2,65535,
R4,0,I4,65535);
5640 VAROR(UI2,65535,
R8,0,I4,65535);
5647 VAROR(UI2,65535,I8,-1,I8,-1);
5648 VAROR(UI2,65535,I8,0,I8,65535);
5649 VAROR(UI2,0,I8,0,I8,0);
5650 VAROR(UI2,65535,UI8,0,I4,65535);
5651 VAROR(UI2,0,UI8,0,I4,0);
5667 VARORCY(UI2,65535,10000,I4,65535);
5668 VARORCY(UI2,65535,0,I4,65535);
5671 VAROR(I4,-1,I4,-1,I4,-1);
5672 VAROR(I4,-1,I4,0,I4,-1);
5673 VAROR(I4,0,I4,0,I4,0);
5674 VAROR(I4,-1,UI4,0xffffffff,I4,-1);
5675 VAROR(I4,-1,UI4,0,I4,-1);
5676 VAROR(I4,0,UI4,0,I4,0);
5688 VAROR(I4,-1,I8,-1,I8,-1);
5689 VAROR(I4,-1,I8,0,I8,-1);
5690 VAROR(I4,0,I8,0,I8,0);
5691 VAROR(I4,-1,UI8,0,I4,-1);
5692 VAROR(I4,0,UI8,0,I4,0);
5712 VAROR(UI4,0xffffffff,UI4,0xffffffff,I4,-1);
5713 VAROR(UI4,0xffffffff,UI4,0,I4,-1);
5714 VAROR(UI4,0,UI4,0,I4,0);
5715 VAROR(UI4,0xffffffff,
R4,-1,I4,-1);
5716 VAROR(UI4,0xffffffff,
R4,0,I4,-1);
5718 VAROR(UI4,0xffffffff,
R8,-1,I4,-1);
5719 VAROR(UI4,0xffffffff,
R8,0,I4,-1);
5726 VAROR(UI4,0xffffffff,I8,-1,I8,-1);
5727 VAROR(UI4,0xffffffff,I8,0,I8,0xffffffff);
5728 VAROR(UI4,0,I8,0,I8,0);
5729 VAROR(UI4,0xffffffff,UI8,0,I4,-1);
5730 VAROR(UI4,0,UI8,0,I4,0);
5732 VAROR(UI4,0xffffffff,
INT,-1,I4,-1);
5735 VAROR(UI4,0xffffffff,
UINT,0xffffffff,I4,-1);
5746 VARORCY(UI4,0xffffffff,10000,I4,-1);
5747 VARORCY(UI4,0xffffffff,0,I4,-1);
5848 VAROR(I8,-1,I8,-1,I8,-1);
5849 VAROR(I8,-1,I8,0,I8,-1);
5850 VAROR(I8,0,I8,0,I8,0);
5851 VAROR(I8,-1,UI8,0,I8,-1);
5852 VAROR(I8,0,UI8,0,I8,0);
5872 VAROR(UI8,0xffff,UI8,0xffff,I4,0xffff);
5873 VAROR(UI8,0xffff,UI8,0,I4,0xffff);
5874 VAROR(UI8,0,UI8,0,I4,0);
5878 VAROR(UI8,0xffff,
UINT,0xffff,I4,0xffff);
5889 VARORCY(UI8,0xffff,10000,I4,0xffff);
5890 VARORCY(UI8,0xffff,0,I4,0xffff);
5946#define VAREQV(vt1,val1,vt2,val2,rvt,rval) \
5947 V_VT(&left) = VT_##vt1; V_##vt1(&left) = val1; \
5948 V_VT(&right) = VT_##vt2; V_##vt2(&right) = val2; \
5949 V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \
5950 test_var_call2( __LINE__, pVarEqv, &left, &right, &exp )
5963 VARTYPE leftvt, rightvt, resvt;
5999 if (leftvt == rightvt ||
6006 else if (leftvt ==
VT_I8 || rightvt ==
VT_I8)
6015 if (leftvt == rightvt)
6017 else if (leftvt == rightvt ||
6023 else if (leftvt ==
VT_I8 || rightvt ==
VT_I8)
6026 else if (leftvt ==
VT_I2 || rightvt ==
VT_I2)
6028 if (leftvt == rightvt ||
6031 else if (leftvt ==
VT_I8 || rightvt ==
VT_I8)
6038 else if (leftvt ==
VT_I8 || rightvt ==
VT_I8)
6048 "VarEqv: %d|0x%X, %d|0x%X: Expected failure, got 0x%lX vt %d\n",
6053 "VarEqv: %d|0x%X, %d|0x%X: expected S_OK, vt %d, got 0x%lX vt %d\n",
6069 VAREQV(
BOOL,VARIANT_TRUE,I2,VARIANT_TRUE,I2,VARIANT_TRUE);
6070 VAREQV(
BOOL,VARIANT_TRUE,I2,VARIANT_FALSE,I2,VARIANT_FALSE);
6072 VAREQV(UI1,1,UI1,1,UI1,255);
6073 VAREQV(UI1,1,UI1,0,UI1,254);
6074 VAREQV(UI1,0,UI1,1,UI1,254);
6077 VAREQV(UI4,VARIANT_FALSE,I8,VARIANT_FALSE,I8,-1);
6078 VAREQV(UI4,5,I8,19,I8,-23);
6079 VAREQV(UI4,VARIANT_FALSE,UI8,VARIANT_FALSE,I4,-1);
6085#define VARMUL(vt1,val1,vt2,val2,rvt,rval) \
6086 V_VT(&left) = VT_##vt1; V_##vt1(&left) = val1; \
6087 V_VT(&right) = VT_##vt2; V_##vt2(&right) = val2; \
6088 V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \
6089 test_var_call2( __LINE__, pVarMul, &left, &right, &exp )
6107 VARTYPE leftvt, rightvt, resvt;
6158 else if (leftvt ==
VT_R8 || rightvt ==
VT_R8 ||
6162 else if (leftvt ==
VT_R4 || rightvt ==
VT_R4) {
6169 }
else if (leftvt ==
VT_CY || rightvt ==
VT_CY)
6171 else if (leftvt ==
VT_I8 || rightvt ==
VT_I8)
6173 else if (leftvt ==
VT_I4 || rightvt ==
VT_I4)
6175 else if (leftvt ==
VT_I2 || rightvt ==
VT_I2 ||
6185 "VarMul: %d|0x%X, %d|0x%X: Expected failure, got 0x%lX vt %d\n",
6190 "VarMul: %d|0x%X, %d|0x%X: expected S_OK, vt %d, got 0x%lX vt %d\n",
6201 VARMUL(I2,-13,I4,5,I4,-65);
6202 VARMUL(I4,-13,I4,5,I4,-65);
6256#define VARADD(vt1,val1,vt2,val2,rvt,rval) \
6257 V_VT(&left) = VT_##vt1; V_##vt1(&left) = val1; \
6258 V_VT(&right) = VT_##vt2; V_##vt2(&right) = val2; \
6259 V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \
6260 test_var_call2( __LINE__, pVarAdd, &left, &right, &exp )
6278 VARTYPE leftvt, rightvt, resvt;
6332 else if (leftvt ==
VT_CY || rightvt ==
VT_CY)
6334 else if (leftvt ==
VT_R8 || rightvt ==
VT_R8)
6342 }
else if (leftvt ==
VT_R4 || rightvt ==
VT_R4) {
6349 else if (leftvt ==
VT_I8 || rightvt ==
VT_I8)
6351 else if (leftvt ==
VT_I4 || rightvt ==
VT_I4)
6353 else if (leftvt ==
VT_I2 || rightvt ==
VT_I2 ||
6363 "VarAdd: %d|0x%X, %d|0x%X: Expected failure, got 0x%lX vt %d\n",
6368 "VarAdd: %d|0x%X, %d|0x%X: expected S_OK, vt %d, got 0x%lX vt %d\n",
6381 VARADD(I2,-13,I4,5,I4,-8);
6382 VARADD(I4,-13,I4,5,I4,-8);
6450 CHAR orig_date_format[128];
6451 VARTYPE leftvt, rightvt, resultvt;
6480 expected_error_num =
S_OK;
6486 leftvt == 15 || rightvt == 15 )
6498 else if ((leftvt ==
VT_I2 || leftvt ==
VT_I4 ||
6575 ok(
hres == expected_error_num,
6576 "VarCat: %d, %d returned error, 0x%lX expected 0x%lX.\n",
6577 leftvt, rightvt,
hres, expected_error_num);
6581 "VarCat: %d, %d: expected vt %d, got vt %d\n",
6613 "VarCat: VT_ERROR concat with VT_BSTR should have returned VT_EMPTY\n");
6625 "VarCat: VT_BSTR concat with VT_ERROR should have returned VT_EMPTY\n");
6849#define VARAND(vt1,val1,vt2,val2,rvt,rval) \
6850 V_VT(&left) = VT_##vt1; V_##vt1(&left) = val1; \
6851 V_VT(&right) = VT_##vt2; V_##vt2(&right) = val2; \
6852 V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \
6853 test_var_call2( __LINE__, pVarAnd, &left, &right, &exp )
6855#define VARANDCY(vt1,val1,val2,rvt,rval) \
6856 V_VT(&left) = VT_##vt1; V_##vt1(&left) = val1; \
6857 V_VT(&right) = VT_CY; V_CY(&right).int64 = val2; \
6858 V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \
6859 test_var_call2( __LINE__, pVarAnd, &left, &right, &exp )
6862#define SKIPTESTAND(a) \
6863 if (a == VT_ERROR || a == VT_VARIANT || \
6864 a == VT_DISPATCH || a == VT_UNKNOWN || \
6865 a > VT_UINT || a == 15 ) \
6870 static const WCHAR szFalse[] = {
'#',
'F',
'A',
'L',
'S',
'E',
'#',
'\0' };
6871 static const WCHAR szTrue[] = {
'#',
'T',
'R',
'U',
'E',
'#',
'\0' };
6873 BSTR false_str, true_str;
6885 VARTYPE leftvt, rightvt, resvt;
6924 else if (leftvt ==
VT_I8 || rightvt ==
VT_I8)
6926 else if (leftvt ==
VT_I4 || rightvt ==
VT_I4 ||
6962 "VarAnd: %s|0x%X, %s|0x%X: got vt %s hr 0x%lX\n",
6967 "VarAnd: %s|0x%X, %s|0x%X: expected vt %s hr 0x%lX, got vt %s hr 0x%lX\n",
7083 VARAND(
BOOL,VARIANT_TRUE,UI2,65535,I4,65535);
7089 VARAND(
BOOL,VARIANT_TRUE,UI4,0xffffffff,I4,-1);
7122 VARAND(I1,-1,I1,-1,I4,-1);
7125 VARAND(I1,-1,UI1,255,I4,255);
7126 VARAND(I1,-1,UI1,0,I4,0);
7128 VARAND(I1,-1,I2,-1,I4,-1);
7131 VARAND(I1,-1,UI2,65535,I4,65535);
7132 VARAND(I1,-1,UI2,0,I4,0);
7134 VARAND(I1,-1,I4,-1,I4,-1);
7137 VARAND(I1,-1,UI4,0xffffffff,I4,-1);
7138 VARAND(I1,-1,UI4,0,I4,0);
7151 VARAND(I1,-1,I8,-1,I8,-1);
7154 VARAND(I1,-1,UI8,0,I4,0);
7171 VARAND(UI1,255,UI1,255,UI1,255);
7172 VARAND(UI1,255,UI1,0,UI1,0);
7173 VARAND(UI1,0,UI1,0,UI1,0);
7174 VARAND(UI1,255,I2,-1,I2,255);
7175 VARAND(UI1,255,I2,0,I2,0);
7177 VARAND(UI1,255,UI2,65535,I4,255);
7178 VARAND(UI1,255,UI2,0,I4,0);
7179 VARAND(UI1,0,UI2,0,I4,0);
7180 VARAND(UI1,255,I4,-1,I4,255);
7181 VARAND(UI1,255,I4,0,I4,0);
7183 VARAND(UI1,255,UI4,0xffffffff,I4,255);
7184 VARAND(UI1,255,UI4,0,I4,0);
7185 VARAND(UI1,0,UI4,0,I4,0);
7197 VARAND(UI1,255,I8,-1,I8,255);
7198 VARAND(UI1,255,I8,0,I8,0);
7200 VARAND(UI1,255,UI8,0,I4,0);
7201 VARAND(UI1,0,UI8,0,I4,0);
7217 VARAND(I2,-1,I2,-1,I2,-1);
7220 VARAND(I2,-1,UI2,65535,I4,65535);
7221 VARAND(I2,-1,UI2,0,I4,0);
7223 VARAND(I2,-1,I4,-1,I4,-1);
7226 VARAND(I2,-1,UI4,0xffffffff,I4,-1);
7227 VARAND(I2,-1,UI4,0,I4,0);
7240 VARAND(I2,-1,I8,-1,I8,-1);
7243 VARAND(I2,-1,UI8,0,I4,0);
7260 VARAND(UI2,65535,UI2,65535,I4,65535);
7261 VARAND(UI2,65535,UI2,0,I4,0);
7262 VARAND(UI2,0,UI2,0,I4,0);
7263 VARAND(UI2,65535,I4,-1,I4,65535);
7264 VARAND(UI2,65535,I4,0,I4,0);
7266 VARAND(UI2,65535,UI4,0xffffffff,I4,65535);
7267 VARAND(UI2,65535,UI4,0,I4,0);
7268 VARAND(UI2,0,UI4,0,I4,0);
7280 VARAND(UI2,65535,I8,-1,I8,65535);
7281 VARAND(UI2,65535,I8,0,I8,0);
7283 VARAND(UI2,65535,UI8,0,I4,0);
7284 VARAND(UI2,0,UI8,0,I4,0);
7300 VARAND(I4,-1,I4,-1,I4,-1);
7303 VARAND(I4,-1,UI4,0xffffffff,I4,-1);
7304 VARAND(I4,-1,UI4,0,I4,0);
7317 VARAND(I4,-1,I8,-1,I8,-1);
7320 VARAND(I4,-1,UI8,0,I4,0);
7337 VARAND(UI4,0xffffffff,UI4,0xffffffff,I4,-1);
7338 VARAND(UI4,0xffffffff,UI4,0,I4,0);
7339 VARAND(UI4,0,UI4,0,I4,0);
7340 VARAND(UI4,0xffffffff,
R4,-1,I4,-1);
7343 VARAND(UI4,0xffffffff,
R8,-1,I4,-1);
7351 VARAND(UI4,0xffffffff,I8,0,I8,0);
7353 VARAND(UI4,0xffffffff,UI8,0,I4,0);
7354 VARAND(UI4,0,UI8,0,I4,0);
7359 VARAND(UI4,0xffffffff,
UINT,0xffffffff,I4,-1);
7366 VARANDCY(UI4,0xffffffff,10000,I4,1);
7456 VARAND(I8,-1,I8,-1,I8,-1);
7459 VARAND(I8,-1,UI8,0,I8,0);
7471 VARAND(UI8,0xffff,UI8,0xffff,I4,0xffff);
7472 VARAND(UI8,0xffff,UI8,0,I4,0);
7473 VARAND(UI8,0,UI8,0,I4,0);
7529 ok_(__FILE__,
line)(
hres ==
result,
"VarCmp(%s,%s): expected 0x%lx, got hres=0x%lx\n",
7548#define _VARCMP(vt1,val1,vtfl1,vt2,val2,vtfl2,lcid,flags,result) \
7549 V_##vt1(&left) = val1; V_VT(&left) = VT_##vt1 | vtfl1; \
7550 V_##vt2(&right) = val2; V_VT(&right) = VT_##vt2 | vtfl2; \
7551 test_cmp( __LINE__, lcid, flags, &left, &right, result )
7552#define VARCMPEX(vt1,val1,vt2,val2,res1,res2,res3,res4) \
7553 V_##vt1(&left) = val1; V_VT(&left) = VT_##vt1; \
7554 V_##vt2(&right) = val2; V_VT(&right) = VT_##vt2; \
7555 test_cmpex( __LINE__, lcid, &left, &right, res1, res2, res3, res4 )
7556#define VARCMP(vt1,val1,vt2,val2,result) \
7557 VARCMPEX(vt1,val1,vt2,val2,result,result,result,result)
7559#define V_NULL_ V_NULL
7560#define VT_NULL_ VT_NULL
7569 BSTR bstrhuh, bstrempty, bstr0, bstr1, bstr7, bstr42, bstr1neg, bstr666neg;
7570 BSTR bstr2cents, bstr1few;
7658 "VarCmp: %d|0x%X, %d|0x%X: Expected failure, got 0x%lX\n",
7662 "VarCmp: %d|0x%X, %d|0x%X: Expected 0x%lX, got 0x%lX\n",
7748 setdec64(&
dec,0,0,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF);
7751 setdec64(&
dec,0,0x80,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF);
7792#define VARPOW(vt1,val1,vt2,val2,rvt,rval) \
7793 V_VT(&left) = VT_##vt1; V_##vt1(&left) = val1; \
7794 V_VT(&right) = VT_##vt2; V_##vt2(&right) = val2; \
7795 V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \
7796 test_var_call2( __LINE__, pVarPow, &left, &right, &exp )
7799#define SKIPTESTPOW(a) \
7800 if (a == VT_ERROR || a == VT_VARIANT || \
7801 a == VT_DISPATCH || a == VT_UNKNOWN || \
7802 a == VT_RECORD || a > VT_UINT || \
7809 BSTR num2_str, num3_str;
7821 VARTYPE leftvt, rightvt, resvt;
7882 "VarPow: %s|0x%X, %s|0x%X: got vt %s hr 0x%lX\n",
7887 "VarPow: %s|0x%X, %s|0x%X: expected vt %s hr 0x%lX, got vt %s hr 0x%lX\n",
8248 "VARPOW: expected coerced hres 0x%lX type VT_R8, got hres 0x%lX type %s!\n",
8251 "VARPOW: CY value %f, expected %f\n",
V_R8(&
result), 4.0);
8257 "VARPOW: expected coerced hres 0x%lX type VT_R8, got hres 0x%lX type %s!\n",
8260 "VARPOW: CY value %f, expected %f\n",
V_R8(&
result), 4.0);
8265 "VARPOW: expected coerced hres 0x%lX type VT_EMPTY, got hres 0x%lX type %s!\n",
8271 "VARPOW: expected coerced hres 0x%lX type VT_R8, got hres 0x%lX type %s!\n",
8274 "VARPOW: CY value %f, expected %f\n",
V_R8(&
result), 10000.0);
8278 "VARPOW: expected coerced hres 0x%lX type VT_R8, got hres 0x%lX type %s!\n",
8281 "VARPOW: DECIMAL value %f, expected %f\n",
V_R8(&
result), 10000.0);
8285 "VARPOW: expected coerced hres 0x%lX type VT_R8, got hres 0x%lX type %s!\n",
8288 "VARPOW: DECIMAL value %f, expected %f\n",
V_R8(&
result), 4.0);
8294 "VARPOW: expected coerced hres 0x%lX type VT_R8, got hres 0x%lX type %s!\n",
8297 "VARPOW: DECIMAL value %f, expected %f\n",
V_R8(&
result), 4.0);
8302 "VARPOW: expected coerced hres 0x%lX type VT_EMPTY, got hres 0x%lX type %s!\n",
8312#define VARDIV(vt1,val1,vt2,val2,rvt,rval) \
8313 V_VT(&left) = VT_##vt1; V_##vt1(&left) = val1; \
8314 V_VT(&right) = VT_##vt2; V_##vt2(&right) = val2; \
8315 V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \
8316 test_var_call2( __LINE__, pVarDiv, &left, &right, &exp )
8319#define SKIPTESTDIV(a) \
8320 if (a == VT_ERROR || a == VT_VARIANT || \
8321 a == VT_DISPATCH || a == VT_UNKNOWN || \
8322 a == VT_RECORD || a > VT_UINT || \
8323 a == VT_I1 || a == VT_UI8 || \
8324 a == VT_INT || a == VT_UINT || \
8325 a == VT_UI2 || a == VT_UI4 || \
8331 static const WCHAR str1[] = {
'1',
'\0' };
8332 static const WCHAR str2[] = {
'2',
'\0' };
8334 BSTR num1_str, num2_str;
8347 VARTYPE leftvt, rightvt, resvt;
8416 else if (leftvt ==
VT_I8 || rightvt ==
VT_I8 ||
8436 else if (leftvt ==
VT_R4 || rightvt ==
VT_R4)
8454 "VarDiv: %s|0x%X, %s|0x%X: got vt %s hr 0x%lX\n",
8459 "VarDiv: %s|0x%X, %s|0x%X: expected vt %s hr 0x%lX, got vt %s hr 0x%lX\n",
8629 "VARDIV: expected coerced type VT_R8, got %s!\n", wine_dbgstr_vt(
V_VT(&
result)));
8631 "VARDIV: CY value %f, expected %f\n",
V_R8(&
result), 1.0);
8635 "VARDIV: expected coerced type VT_R8, got %s!\n", wine_dbgstr_vt(
V_VT(&
result)));
8637 "VARDIV: CY value %f, expected %f\n",
V_R8(&
result), 5000.0);
8641 "VARDIV: expected coerced type VT_R8, got %s!\n", wine_dbgstr_vt(
V_VT(&
result)));
8643 "VARDIV: CY value %f, expected %f\n",
V_R8(&
result), 0.01);
8647 "VARDIV: expected coerced type VT_DECIMAL, got %s!\n", wine_dbgstr_vt(
V_VT(&
result)));
8653 "VARDIV: expected coerced type VT_DECIMAL, got %s!\n", wine_dbgstr_vt(
V_VT(&
result)));
8659 "VARDIV: expected coerced type VT_DECIMAL, got %s!\n", wine_dbgstr_vt(
V_VT(&
result)));
8670 "VARDIV: Division by (1.0/0.0) should result in DISP_E_DIVBYZERO but got 0x%lX\n",
hres);
8678 "VARDIV: Division by (0.0/0.0) should result in DISP_E_OVERFLOW but got 0x%lX\n",
hres);
8686#define VARIDIV(vt1,val1,vt2,val2,rvt,rval) \
8687 V_VT(&left) = VT_##vt1; V_##vt1(&left) = val1; \
8688 V_VT(&right) = VT_##vt2; V_##vt2(&right) = val2; \
8689 V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \
8690 test_var_call2( __LINE__, pVarIdiv, &left, &right, &exp )
8693#define SKIPTESTIDIV(a) \
8694 if (a == VT_ERROR || a == VT_VARIANT || \
8695 a == VT_DISPATCH || a == VT_UNKNOWN || \
8696 a == VT_RECORD || a > VT_UINT || \
8703 BSTR num1_str, num2_str;
8715 VARTYPE leftvt, rightvt, resvt;
8798 else if (leftvt ==
VT_I8 || rightvt ==
VT_I8)
8800 else if (leftvt ==
VT_I4 || rightvt ==
VT_I4 ||
8814 else if (leftvt ==
VT_I2 || rightvt ==
VT_I2 ||
8829 "VarIdiv: %s|0x%X, %s|0x%X: got vt %s hr 0x%lX\n",
8834 "VarIdiv: %s|0x%X, %s|0x%X: expected vt %s hr 0x%lX, got vt %s hr 0x%lX\n",
9178 "VARIDIV: expected coerced hres 0x%lX type VT_I4, got hres 0x%lX type %s!\n",
9181 "VARIDIV: CY value %ld, expected %d\n",
V_I4(&
result), 1);
9187 "VARIDIV: expected coerced hres 0x%lX type VT_I8, got hres 0x%lX type %s!\n",
9190 "VARIDIV: CY value %#I64x, expected %#x\n",
9196 "VARIDIV: expected coerced hres 0x%lX type VT_I4, got hres 0x%lX type %s!\n",
9199 "VARIDIV: CY value %ld, expected %d\n",
V_I4(&
result), 0);
9203 "VARIDIV: expected coerced hres 0x%lX type VT_I4, got hres 0x%lX type %s!\n",
9206 "VARIDIV: DECIMAL value %ld, expected %d\n",
V_I4(&
result), 50);
9210 "VARIDIV: expected coerced hres 0x%lX type VT_I4, got hres 0x%lX type %s!\n",
9213 "VARIDIV: DECIMAL value %ld, expected %d\n",
V_I4(&
result), 1);
9219 "VARIDIV: expected coerced hres 0x%lX type VT_I8, got hres 0x%lX type %s!\n",
9222 "VARIDIV: DECIMAL value %I64d, expected %d\n",
9233 "VARIDIV: Division by 0 should result in DISP_E_DIVBYZERO but got 0x%lX\n",
hres);
9241 "VARIDIV: Division by 0 should result in DISP_E_DIVBYZERO but got 0x%lX\n",
hres);
9250#define VARIMP(vt1,val1,vt2,val2,rvt,rval) \
9251 V_VT(&left) = VT_##vt1; V_##vt1(&left) = val1; \
9252 V_VT(&right) = VT_##vt2; V_##vt2(&right) = val2; \
9253 V_VT(&exp) = VT_##rvt; V_##rvt(&exp) = rval; \
9254 test_var_call2( __LINE__, pVarImp, &left, &right, &exp )
9257#define SKIPTESTIMP(a) \
9258 if (a == VT_ERROR || a == VT_VARIANT || \
9259 a == VT_DISPATCH || a == VT_UNKNOWN || \
9260 a == VT_RECORD || a > VT_UINT || \
9266 static const WCHAR szFalse[] = {
'#',
'F',
'A',
'L',
'S',
'E',
'#',
'\0' };
9267 static const WCHAR szTrue[] = {
'#',
'T',
'R',
'U',
'E',
'#',
'\0' };
9269 BSTR true_str, false_str;
9281 VARTYPE leftvt, rightvt, resvt;
9362 else if (leftvt ==
VT_I8 || rightvt ==
VT_I8)
9364 else if (leftvt ==
VT_I4 || rightvt ==
VT_I4 ||
9394 "VarImp: %s|0x%X, %s|0x%X: got vt %s hr 0x%lX\n",
9399 "VarImp: %s|0x%X, %s|0x%X: expected vt %s hr 0x%lX, got vt %s hr 0x%lX\n",
9447 VARIMP(I2,-1,I2,-1,I2,-1);
9448 VARIMP(I2,-1,I4,-1,I4,-1);
9455 VARIMP(I2,-1,UI1,1,I2,1);
9456 VARIMP(I2,-1,UI2,1,I4,1);
9457 VARIMP(I2,-1,UI4,1,I4,1);
9461 VARIMP(I2,-1,UI8,1,I4,1);
9467 VARIMP(I4,2,I2,-1,I4,-1);
9468 VARIMP(I4,2,I4,-1,I4,-1);
9475 VARIMP(I4,2,UI1,1,I4,-3);
9476 VARIMP(I4,2,UI2,1,I4,-3);
9477 VARIMP(I4,2,UI4,1,I4,-3);
9481 VARIMP(I4,2,UI8,1,I4,-3);
9587 VARIMP(I1,-1,I2,-1,I4,-1);
9588 VARIMP(I1,-1,I4,-1,I4,-1);
9595 VARIMP(I1,-1,UI1,1,I4,1);
9596 VARIMP(I1,-1,UI2,1,I4,1);
9597 VARIMP(I1,-1,UI4,1,I4,1);
9601 VARIMP(I1,-1,UI8,1,I4,1);
9607 VARIMP(UI1,0,I2,-1,I2,-1);
9608 VARIMP(UI1,0,I4,-1,I4,-1);
9614 VARIMP(UI1,0,I1,0,I4,-1);
9615 VARIMP(UI1,0,UI1,1,UI1,255);
9616 VARIMP(UI1,0,UI2,1,I4,-1);
9617 VARIMP(UI1,0,UI4,1,I4,-1);
9620 VARIMP(UI1,0,I8,1,I8,-1);
9621 VARIMP(UI1,0,UI8,1,I4,-1);
9627 VARIMP(UI2,0,I2,-1,I4,-1);
9628 VARIMP(UI2,0,I4,-1,I4,-1);
9634 VARIMP(UI2,0,I1,0,I4,-1);
9635 VARIMP(UI2,0,UI1,1,I4,-1);
9636 VARIMP(UI2,0,UI2,1,I4,-1);
9637 VARIMP(UI2,0,UI4,1,I4,-1);
9640 VARIMP(UI2,0,I8,1,I8,-1);
9641 VARIMP(UI2,0,UI8,1,I4,-1);
9647 VARIMP(UI4,0,I2,-1,I4,-1);
9648 VARIMP(UI4,0,I4,-1,I4,-1);
9654 VARIMP(UI4,0,I1,0,I4,-1);
9655 VARIMP(UI4,0,UI1,1,I4,-1);
9656 VARIMP(UI4,0,UI2,1,I4,-1);
9657 VARIMP(UI4,0,UI4,1,I4,-1);
9660 VARIMP(UI4,0,I8,1,I8,-1);
9661 VARIMP(UI4,0,UI8,1,I4,-1);
9669 VARIMP(I8,-1,I2,-1,I8,-1);
9670 VARIMP(I8,-1,I4,-1,I8,-1);
9677 VARIMP(I8,-1,UI1,1,I8,1);
9678 VARIMP(I8,-1,UI2,1,I8,1);
9679 VARIMP(I8,-1,UI4,1,I8,1);
9681 VARIMP(I8,-1,UI8,1,I8,1);
9685 VARIMP(UI8,0,I2,-1,I4,-1);
9686 VARIMP(UI8,0,I4,-1,I4,-1);
9692 VARIMP(UI8,0,I1,0,I4,-1);
9693 VARIMP(UI8,0,UI1,1,I4,-1);
9694 VARIMP(UI8,0,UI2,1,I4,-1);
9695 VARIMP(UI8,0,UI4,1,I4,-1);
9696 VARIMP(UI8,0,I8,1,I8,-1);
9697 VARIMP(UI8,0,UI8,1,I4,-1);
9758 "VARIMP: expected coerced hres 0x%lX type VT_I4, got hres 0x%lX type %s!\n",
9761 "VARIMP: CY value %ld, expected %d\n",
V_I4(&
result), -1);
9767 "VARIMP: expected coerced hres 0x%lX type VT_I8, got hres 0x%lX type %s!\n",
9770 "VARIMP: CY value %I64d, expected %d\n",
9776 "VARIMP: expected coerced hres 0x%lX type VT_I4, got hres 0x%lX type %s!\n",
9779 "VARIMP: CY value %ld, expected %d\n",
V_I4(&
result), -1);
9783 "VARIMP: expected coerced hres 0x%lX type VT_I4, got hres 0x%lX type %s!\n",
9786 "VARIMP: DECIMAL value %ld, expected %d\n",
V_I4(&
result), -1);
9790 "VARIMP: expected coerced hres 0x%lX type VT_I4, got hres 0x%lX type %s!\n",
9793 "VARIMP: DECIMAL value %ld, expected %d\n",
V_I4(&
result), -1);
9799 "VARIMP: expected coerced hres 0x%lX type VT_I8, got hres 0x%lX type %s!\n",
9802 "VARIMP: DECIMAL value %#I64x, expected %d\n",
ios_base &_STLP_CALL dec(ios_base &__s)
#define InterlockedIncrement
#define InterlockedDecrement
void dispatch(HANDLE hStopEvent)
const char * wine_dbg_sprintf(const char *format,...)
#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)
INT WINAPI GetLocaleInfoW(LCID lcid, LCTYPE lctype, LPWSTR buffer, INT len)
BOOL WINAPI SetLocaleInfoA(LCID lcid, LCTYPE lctype, LPCSTR data)
BOOL WINAPI SetLocaleInfoW(LCID lcid, LCTYPE lctype, LPCWSTR data)
static REFPROPVARIANT PROPVAR_CHANGE_FLAGS VARTYPE vt
_ACRTIMP int __cdecl wcscmp(const wchar_t *, const wchar_t *)
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
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)
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
GLfloat GLfloat GLfloat GLfloat v3
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
void __cdecl void __cdecl void __cdecl void __cdecl void __cdecl void winetest_pop_context(void)
void __cdecl void __cdecl void __cdecl void __cdecl void __cdecl winetest_push_context(const char *fmt,...) __WINE_PRINTF_ATTR(1
#define memcpy(s1, s2, n)
#define cmp(status, error)
static VARIANTARG static DISPID
_In_ LPWSTR _In_ DWORD _In_ LPCVOID pvData
#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_FRENCH_SWISS
#define SUBLANG_POLISH_POLAND
#define SUBLANG_ARABIC_MOROCCO
#define SUBLANG_ENGLISH_US
static __inline const char * wine_dbgstr_guid(const GUID *id)
XML_HIDDEN void xmlParserErrors const char const xmlChar const xmlChar * str2
XML_HIDDEN void xmlParserErrors const char const xmlChar * str1
#define R4(v, w, x, y, z, i)
static const char *static const char const char DWORD void DWORD *static const char const char DWORD void DWORD *static const char DWORD DWORD void * buff
IDispatch IDispatch_iface
IRecordInfo IRecordInfo_iface
#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)
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 void test_cmpex(int line, LCID lcid, VARIANT *left, VARIANT *right, HRESULT res1, HRESULT res2, HRESULT res3, HRESULT res4)
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_VarParseNumFromStrMisc(void)
static void test_st2dt(int line, WORD d, WORD m, WORD y, WORD h, WORD mn, WORD s, WORD ms, INT r, double dt, double dt2)
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_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 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 void _test_bstr_var(unsigned line, const VARIANT *v, const WCHAR *str)
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)
#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 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)
#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 HRESULT wconvert_str(const OLECHAR *str, INT dig, ULONG npflags, NUMPARSE *np, BYTE rgb[128], LCID lcid, ULONG flags)
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 const WCHAR sz12[]
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 void test_VarParseNumFromStrFr(void)
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 void test_VarParseNumFromStrEn(void)
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 WCONVERT(str, flags)
#define _VARCMP(vt1, val1, vtfl1, vt2, val2, vtfl2, lcid, flags, result)
static void test_VariantClear(void)
#define VARAND(vt1, val1, vt2, val2, rvt, rval)
#define ST2DT(d, m, y, h, mn, s, ms, r, dt, dt2)
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
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
WINBASEAPI _In_ DWORD _Out_ _In_ WORD wFlags
_In_ ULONG _In_ ULONG rgb
#define DISP_E_BADVARTYPE
#define DISP_E_TYPEMISMATCH
#define LOCALE_SSHORTDATE
#define LOCALE_SMONDECIMALSEP
#define LOCALE_SMONTHOUSANDSEP
#define LOCALE_NOUSEROVERRIDE
int WINAPIV wsprintfW(_Out_ LPWSTR, _In_ _Printf_format_string_ LPCWSTR,...)