Author: cwittich
Date: Sat Aug 22 19:05:58 2009
New Revision: 42857
URL:
http://svn.reactos.org/svn/reactos?rev=42857&view=rev
Log:
sync oleaut32 winetest with wine 1.1.28
Modified:
trunk/rostests/winetests/oleaut32/tmarshal.c
trunk/rostests/winetests/oleaut32/tmarshal.idl
trunk/rostests/winetests/oleaut32/tmarshal_dispids.h
trunk/rostests/winetests/oleaut32/typelib.c
trunk/rostests/winetests/oleaut32/usrmarshal.c
trunk/rostests/winetests/oleaut32/varformat.c
trunk/rostests/winetests/oleaut32/vartest.c
trunk/rostests/winetests/oleaut32/vartype.c
Modified: trunk/rostests/winetests/oleaut32/tmarshal.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/oleaut32/tmarsh…
==============================================================================
--- trunk/rostests/winetests/oleaut32/tmarshal.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/oleaut32/tmarshal.c [iso-8859-1] Sat Aug 22 19:05:58 2009
@@ -44,82 +44,6 @@
{0x5a5b5c5d, ULL_CONST(0x5e5f5051, 0x52535455)},
};
-/* Debugging functions from wine/libs/wine/debug.c */
-
-/* allocate some tmp string space */
-/* FIXME: this is not 100% thread-safe */
-static char *get_tmp_space( int size )
-{
- static char *list[32];
- static long pos;
- char *ret;
- int idx;
-
- idx = ++pos % (sizeof(list)/sizeof(list[0]));
- if ((ret = realloc( list[idx], size ))) list[idx] = ret;
- return ret;
-}
-
-/* default implementation of wine_dbgstr_wn */
-static const char *default_dbgstr_wn( const WCHAR *str, int n )
-{
- char *dst, *res;
-
- if (!HIWORD(str))
- {
- if (!str) return "(null)";
- res = get_tmp_space( 6 );
- sprintf( res, "#%04x", LOWORD(str) );
- return res;
- }
- if (n == -1) n = lstrlenW(str);
- if (n < 0) n = 0;
- else if (n > 200) n = 200;
- dst = res = get_tmp_space( n * 5 + 7 );
- *dst++ = 'L';
- *dst++ = '"';
- while (n-- > 0)
- {
- WCHAR c = *str++;
- switch (c)
- {
- case '\n': *dst++ = '\\'; *dst++ = 'n'; break;
- case '\r': *dst++ = '\\'; *dst++ = 'r'; break;
- case '\t': *dst++ = '\\'; *dst++ = 't'; break;
- case '"': *dst++ = '\\'; *dst++ = '"'; break;
- case '\\': *dst++ = '\\'; *dst++ = '\\'; break;
- default:
- if (c >= ' ' && c <= 126)
- *dst++ = (char)c;
- else
- {
- *dst++ = '\\';
- sprintf(dst,"%04x",c);
- dst+=4;
- }
- }
- }
- *dst++ = '"';
- if (*str)
- {
- *dst++ = '.';
- *dst++ = '.';
- *dst++ = '.';
- }
- *dst = 0;
- return res;
-}
-
-const char *wine_dbgstr_wn( const WCHAR *s, int n )
-{
- return default_dbgstr_wn(s, n);
-}
-
-const char *wine_dbgstr_w( const WCHAR *s )
-{
- return default_dbgstr_wn( s, -1 );
-}
-
#define RELEASEMARSHALDATA WM_USER
@@ -617,6 +541,40 @@
{
trace("CloneInterface()\n");
*ppVal = 0;
+ return S_OK;
+}
+
+static HRESULT WINAPI Widget_put_prop_with_lcid(
+ IWidget* iface, LONG lcid, INT i)
+{
+ trace("put_prop_with_lcid(%08x, %x)\n", lcid, i);
+ ok(lcid == MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), "got lcid %08x\n",
lcid);
+ ok(i == 0xcafe, "got %08x\n", i);
+ return S_OK;
+}
+
+static HRESULT WINAPI Widget_get_prop_with_lcid(
+ IWidget* iface, LONG lcid, INT *i)
+{
+ trace("get_prop_with_lcid(%08x, %p)\n", lcid, i);
+ ok(lcid == MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), "got lcid %08x\n",
lcid);
+ *i = lcid;
+ return S_OK;
+}
+
+static HRESULT WINAPI Widget_get_prop_int(
+ IWidget* iface, INT *i)
+{
+ trace("get_prop_int(%p)\n", i);
+ *i = -13;
+ return S_OK;
+}
+
+static HRESULT WINAPI Widget_get_prop_uint(
+ IWidget* iface, UINT *i)
+{
+ trace("get_prop_uint(%p)\n", i);
+ *i = 42;
return S_OK;
}
@@ -647,7 +605,11 @@
Widget_VarArg,
Widget_StructArgs,
Widget_Error,
- Widget_CloneInterface
+ Widget_CloneInterface,
+ Widget_put_prop_with_lcid,
+ Widget_get_prop_with_lcid,
+ Widget_get_prop_int,
+ Widget_get_prop_uint
};
static HRESULT WINAPI StaticWidget_QueryInterface(IStaticWidget *iface, REFIID riid, void
**ppvObject)
@@ -1324,6 +1286,59 @@
hr = IDispatch_Invoke(pDispatch, DISPID_TM_STATE, &IID_NULL, LOCALE_NEUTRAL,
DISPATCH_PROPERTYGET, &dispparams, &varresult, &excepinfo, NULL);
ok(hr == DISP_E_NOTACOLLECTION, "IDispatch_Invoke should have returned
DISP_E_NOTACOLLECTION instead of 0x%08x\n", hr);
+ /* test propput with lcid */
+
+ /* the lcid passed to the function is the first lcid in the typelib header.
+ Since we don't explicitly set an lcid in the idl, it'll default to US
English. */
+ VariantInit(&vararg[0]);
+ V_VT(&vararg[0]) = VT_I4;
+ V_I4(&vararg[0]) = 0xcafe;
+ dispparams.cNamedArgs = 1;
+ dispparams.rgdispidNamedArgs = &dispidNamed;
+ dispparams.cArgs = 1;
+ dispparams.rgvarg = vararg;
+ VariantInit(&varresult);
+ hr = IDispatch_Invoke(pDispatch, DISPID_TM_PROP_WITH_LCID, &IID_NULL, 0x40c,
DISPATCH_PROPERTYPUT, &dispparams, &varresult, &excepinfo, NULL);
+todo_wine
+ ok_ole_success(hr, ITypeInfo_Invoke);
+ VariantClear(&varresult);
+
+ /* test propget with lcid */
+ dispparams.cNamedArgs = 0;
+ dispparams.cArgs = 0;
+ dispparams.rgvarg = NULL;
+ dispparams.rgdispidNamedArgs = NULL;
+ hr = IDispatch_Invoke(pDispatch, DISPID_TM_PROP_WITH_LCID, &IID_NULL, 0x40c,
DISPATCH_PROPERTYGET, &dispparams, &varresult, &excepinfo, NULL);
+todo_wine
+{
+ ok_ole_success(hr, ITypeInfo_Invoke);
+ ok(V_VT(&varresult) == VT_I4, "got %x\n", V_VT(&varresult));
+ ok(V_I4(&varresult) == 0x409, "got %x\n", V_I4(&varresult));
+}
+ VariantClear(&varresult);
+
+ /* test propget of INT value */
+ dispparams.cNamedArgs = 0;
+ dispparams.cArgs = 0;
+ dispparams.rgvarg = NULL;
+ dispparams.rgdispidNamedArgs = NULL;
+ hr = IDispatch_Invoke(pDispatch, DISPID_TM_PROP_INT, &IID_NULL, 0x40c,
DISPATCH_PROPERTYGET, &dispparams, &varresult, &excepinfo, NULL);
+ ok_ole_success(hr, ITypeInfo_Invoke);
+ ok(V_VT(&varresult) == VT_I4, "got %x\n", V_VT(&varresult));
+ ok(V_I4(&varresult) == -13, "got %x\n", V_I4(&varresult));
+ VariantClear(&varresult);
+
+ /* test propget of INT value */
+ dispparams.cNamedArgs = 0;
+ dispparams.cArgs = 0;
+ dispparams.rgvarg = NULL;
+ dispparams.rgdispidNamedArgs = NULL;
+ hr = IDispatch_Invoke(pDispatch, DISPID_TM_PROP_UINT, &IID_NULL, 0x40c,
DISPATCH_PROPERTYGET, &dispparams, &varresult, &excepinfo, NULL);
+ ok_ole_success(hr, ITypeInfo_Invoke);
+ ok(V_VT(&varresult) == VT_UI4, "got %x\n", V_VT(&varresult));
+ ok(V_UI4(&varresult) == 42, "got %x\n", V_UI4(&varresult));
+ VariantClear(&varresult);
+
IDispatch_Release(pDispatch);
IWidget_Release(pWidget);
@@ -1352,7 +1367,7 @@
V_VT(&varref) = VT_ERROR;
V_ERROR(&varref) = DISP_E_PARAMNOTFOUND;
VariantInit(&varresult);
- hr = DispCallFunc(pWidget, 36, CC_STDCALL, VT_UI4, 4, rgvt, rgpvarg,
&varresult);
+ hr = DispCallFunc(pWidget, 9*sizeof(void*), CC_STDCALL, VT_UI4, 4, rgvt, rgpvarg,
&varresult);
ok_ole_success(hr, DispCallFunc);
VariantClear(&varresult);
VariantClear(&vararg[1]);
@@ -1401,7 +1416,8 @@
test_DispCallFunc();
test_StaticWidget();
- hr = UnRegisterTypeLib(&LIBID_TestTypelib, 1, 0, LOCALE_NEUTRAL, 1);
+ hr = UnRegisterTypeLib(&LIBID_TestTypelib, 1, 0, LOCALE_NEUTRAL,
+ sizeof(void*) == 8 ? SYS_WIN64 : SYS_WIN32);
ok_ole_success(hr, UnRegisterTypeLib);
CoUninitialize();
Modified: trunk/rostests/winetests/oleaut32/tmarshal.idl
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/oleaut32/tmarsh…
==============================================================================
--- trunk/rostests/winetests/oleaut32/tmarshal.idl [iso-8859-1] (original)
+++ trunk/rostests/winetests/oleaut32/tmarshal.idl [iso-8859-1] Sat Aug 22 19:05:58 2009
@@ -125,6 +125,18 @@
[propget, id(DISPID_TM_CLONEINTERFACE)]
HRESULT CloneInterface([out, retval] ISomethingFromDispatch **ppVal);
+
+ [id(DISPID_TM_PROP_WITH_LCID), propput]
+ HRESULT prop_with_lcid([in,lcid] long lcid, [in] INT i);
+
+ [id(DISPID_TM_PROP_WITH_LCID), propget]
+ HRESULT prop_with_lcid([in,lcid] long lcid, [out,retval] INT *i);
+
+ [id(DISPID_TM_PROP_INT), propget]
+ HRESULT prop_int([out,retval] INT *i);
+
+ [id(DISPID_TM_PROP_UINT), propget]
+ HRESULT prop_uint([out,retval] UINT *i);
}
[
Modified: trunk/rostests/winetests/oleaut32/tmarshal_dispids.h
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/oleaut32/tmarsh…
==============================================================================
--- trunk/rostests/winetests/oleaut32/tmarshal_dispids.h [iso-8859-1] (original)
+++ trunk/rostests/winetests/oleaut32/tmarshal_dispids.h [iso-8859-1] Sat Aug 22 19:05:58
2009
@@ -34,5 +34,8 @@
#define DISPID_TM_CLONEINTERFACE 15
#define DISPID_TM_TESTDUAL 16
#define DISPID_TM_STRUCTARGS 17
+#define DISPID_TM_PROP_WITH_LCID 18
+#define DISPID_TM_PROP_INT 19
+#define DISPID_TM_PROP_UINT 20
#define DISPID_NOA_BSTRRET 1
Modified: trunk/rostests/winetests/oleaut32/typelib.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/oleaut32/typeli…
==============================================================================
--- trunk/rostests/winetests/oleaut32/typelib.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/oleaut32/typelib.c [iso-8859-1] Sat Aug 22 19:05:58 2009
@@ -33,8 +33,8 @@
#include "tmarshal.h"
#define expect_eq(expr, value, type, format) { type _ret = (expr); ok((value) == _ret,
#expr " expected " format " got " format "\n", value, _ret);
}
-#define expect_int(expr, value) expect_eq(expr, (int)value, int, "%d")
-#define expect_hex(expr, value) expect_eq(expr, (int)value, int, "0x%x")
+#define expect_int(expr, value) expect_eq(expr, (int)(value), int, "%d")
+#define expect_hex(expr, value) expect_eq(expr, (int)(value), int, "0x%x")
#define expect_null(expr) expect_eq(expr, NULL, const void *, "%p")
#define expect_wstr_acpval(expr, value) \
@@ -1090,7 +1090,7 @@
CALLCONV callconv;
short cParams;
short cParamsOpt;
- short oVft;
+ short vtbl_index;
short cScodes;
WORD wFuncFlags;
element_info ret_type;
@@ -1115,7 +1115,7 @@
{
"IDualIface",
/*kind*/ TKIND_DISPATCH, /*flags*/ 0x1040, /*align*/ 4, /*size*/ 4,
- /*#vtbl*/ 28, /*#func*/ 8,
+ /*#vtbl*/ 7, /*#func*/ 8,
{
{
0x60000000, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ 0x4,
@@ -1135,7 +1135,7 @@
},
{
0x60000001, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ 0x4,
- /*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 4, /*#scodes*/ 0, /*flags*/ 0x1,
+ /*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 1, /*#scodes*/ 0, /*flags*/ 0x1,
{19, 0}, /* ret */
{ /* params */
{-1, -1}
@@ -1147,7 +1147,7 @@
},
{
0x60000002, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ 0x4,
- /*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 8, /*#scodes*/ 0, /*flags*/ 0x1,
+ /*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 2, /*#scodes*/ 0, /*flags*/ 0x1,
{19, 0}, /* ret */
{ /* params */
{-1, -1}
@@ -1159,7 +1159,7 @@
},
{
0x60010000, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ 0x4,
- /*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 12, /*#scodes*/ 0, /*flags*/ 0x1,
+ /*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 3, /*#scodes*/ 0, /*flags*/ 0x1,
{24, 0}, /* ret */
{ /* params */
{26, 2},
@@ -1173,7 +1173,7 @@
},
{
0x60010001, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ 0x4,
- /*#param*/ 3, /*#opt*/ 0, /*vtbl*/ 16, /*#scodes*/ 0, /*flags*/ 0x1,
+ /*#param*/ 3, /*#opt*/ 0, /*vtbl*/ 4, /*#scodes*/ 0, /*flags*/ 0x1,
{24, 0}, /* ret */
{ /* params */
{23, 1},
@@ -1191,7 +1191,7 @@
},
{
0x60010002, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ 0x4,
- /*#param*/ 5, /*#opt*/ 0, /*vtbl*/ 20, /*#scodes*/ 0, /*flags*/ 0x1,
+ /*#param*/ 5, /*#opt*/ 0, /*vtbl*/ 5, /*#scodes*/ 0, /*flags*/ 0x1,
{24, 0}, /* ret */
{ /* params */
{26, 1},
@@ -1213,7 +1213,7 @@
},
{
0x60010003, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ 0x4,
- /*#param*/ 8, /*#opt*/ 0, /*vtbl*/ 24, /*#scodes*/ 0, /*flags*/ 0x1,
+ /*#param*/ 8, /*#opt*/ 0, /*vtbl*/ 6, /*#scodes*/ 0, /*flags*/ 0x1,
{24, 0}, /* ret */
{ /* params */
{3, 1},
@@ -1241,7 +1241,7 @@
},
{
0x60020000, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ 0x4,
- /*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 28, /*#scodes*/ 0, /*flags*/ 0x0,
+ /*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 7, /*#scodes*/ 0, /*flags*/ 0x0,
{24, 0}, /* ret */
{ /* params */
{-1, -1}
@@ -1256,11 +1256,11 @@
{
"ISimpleIface",
/*kind*/ TKIND_INTERFACE, /*flags*/ 0x1000, /*align*/ 4, /*size*/ 4,
- /*#vtbl*/ 32, /*#func*/ 1,
+ /*#vtbl*/ 8, /*#func*/ 1,
{
{
0x60020000, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ 0x4,
- /*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 28, /*#scodes*/ 0, /*flags*/ 0x0,
+ /*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 7, /*#scodes*/ 0, /*flags*/ 0x0,
{25, 0}, /* ret */
{ /* params */
{-1, -1}
@@ -1307,7 +1307,7 @@
expect_hex(typeattr->wTypeFlags, if_info->wTypeFlags);
expect_int(typeattr->cbAlignment, if_info->cbAlignment);
expect_int(typeattr->cbSizeInstance, if_info->cbSizeInstance);
- expect_int(typeattr->cbSizeVft, if_info->cbSizeVft);
+ expect_int(typeattr->cbSizeVft, if_info->cbSizeVft * sizeof(void*));
expect_int(typeattr->cFuncs, if_info->cFuncs);
for (func = 0; func < typeattr->cFuncs; func++)
@@ -1326,7 +1326,9 @@
expect_int(desc->callconv, fn_info->callconv);
expect_int(desc->cParams, fn_info->cParams);
expect_int(desc->cParamsOpt, fn_info->cParamsOpt);
- expect_int(desc->oVft, fn_info->oVft);
+ ok( desc->oVft == fn_info->vtbl_index * sizeof(void*) ||
+ broken(desc->oVft == fn_info->vtbl_index * 4), /* xp64 */
+ "desc->oVft got %u\n", desc->oVft );
expect_int(desc->cScodes, fn_info->cScodes);
expect_int(desc->wFuncFlags, fn_info->wFuncFlags);
ole_check(ITypeInfo_GetNames(typeinfo, desc->memid, namesTab, 256,
&cNames));
@@ -1376,6 +1378,58 @@
return filename;
}
+static void test_create_typelib_lcid(LCID lcid)
+{
+ char filename[MAX_PATH];
+ WCHAR name[MAX_PATH];
+ HRESULT hr;
+ ICreateTypeLib2 *tl;
+ HANDLE file;
+ DWORD msft_header[5]; /* five is enough for now */
+ DWORD read;
+
+ GetTempFileNameA( ".", "tlb", 0, filename );
+ MultiByteToWideChar(CP_ACP, 0, filename, -1, name, MAX_PATH);
+
+ hr = CreateTypeLib2(SYS_WIN32, name, &tl);
+ ok(hr == S_OK, "got %08x\n", hr);
+
+ hr = ICreateTypeLib2_SetLcid(tl, lcid);
+ ok(hr == S_OK, "got %08x\n", hr);
+
+ hr = ICreateTypeLib2_SaveAllChanges(tl);
+ ICreateTypeLib2_Release(tl);
+
+ file = CreateFileA( filename, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, 0 );
+ ok( file != INVALID_HANDLE_VALUE, "file creation failed\n" );
+
+ ReadFile( file, msft_header, sizeof(msft_header), &read, NULL );
+ ok(read == sizeof(msft_header), "read %d\n", read);
+ CloseHandle( file );
+
+ ok(msft_header[0] == 0x5446534d, "got %08x\n", msft_header[0]);
+ ok(msft_header[1] == 0x00010002, "got %08x\n", msft_header[1]);
+ ok(msft_header[2] == 0xffffffff, "got %08x\n", msft_header[2]);
+ ok(msft_header[3] == (lcid ? lcid : 0x409), "got %08x (lcid %08x)\n",
msft_header[3], lcid);
+ ok(msft_header[4] == lcid, "got %08x (lcid %08x)\n", msft_header[4],
lcid);
+
+ DeleteFileA(filename);
+}
+
+static void test_create_typelibs(void)
+{
+ test_create_typelib_lcid(LOCALE_SYSTEM_DEFAULT);
+ test_create_typelib_lcid(LOCALE_USER_DEFAULT);
+ test_create_typelib_lcid(LOCALE_NEUTRAL);
+
+ test_create_typelib_lcid(0x009);
+ test_create_typelib_lcid(0x409);
+ test_create_typelib_lcid(0x809);
+
+ test_create_typelib_lcid(0x007);
+ test_create_typelib_lcid(0x407);
+}
+
START_TEST(typelib)
{
const char *filename;
@@ -1392,4 +1446,7 @@
test_dump_typelib( filename );
DeleteFile( filename );
}
-}
+
+ test_create_typelibs();
+
+}
Modified: trunk/rostests/winetests/oleaut32/usrmarshal.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/oleaut32/usrmar…
==============================================================================
--- trunk/rostests/winetests/oleaut32/usrmarshal.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/oleaut32/usrmarshal.c [iso-8859-1] Sat Aug 22 19:05:58 2009
@@ -118,7 +118,7 @@
if(!lpsa)
{
- ok(*(void **)wiresa == NULL, "wiresa + 0x0 should be NULL instead of
0x%08x\n", *(DWORD *)wiresa);
+ ok(*(DWORD *)wiresa == 0, "wiresa + 0x0 should be NULL instead of
0x%08x\n", *(DWORD *)wiresa);
return;
}
@@ -134,19 +134,19 @@
wiresa += sizeof(DWORD);
ok(*(WORD *)wiresa == lpsa->cDims, "wiresa + 0x8 should be lpsa->cDims
instead of 0x%04x\n", *(WORD *)wiresa);
wiresa += sizeof(WORD);
- ok(*(WORD *)wiresa == lpsa->fFeatures, "wiresa + 0xc should be
lpsa->fFeatures instead of 0x%08x\n", *(WORD *)wiresa);
+ ok(*(WORD *)wiresa == lpsa->fFeatures, "wiresa + 0xa should be
lpsa->fFeatures instead of 0x%08x\n", *(WORD *)wiresa);
wiresa += sizeof(WORD);
- ok(*(DWORD *)wiresa == lpsa->cbElements, "wiresa + 0x10 should be
lpsa->cbElements instead of 0x%08x\n", *(DWORD *)wiresa);
+ ok(*(DWORD *)wiresa == lpsa->cbElements, "wiresa + 0xc should be
lpsa->cbElements instead of 0x%08x\n", *(DWORD *)wiresa);
wiresa += sizeof(DWORD);
- ok(*(WORD *)wiresa == lpsa->cLocks, "wiresa + 0x16 should be lpsa->cLocks
instead of 0x%04x\n", *(WORD *)wiresa);
+ ok(*(WORD *)wiresa == lpsa->cLocks, "wiresa + 0x10 should be lpsa->cLocks
instead of 0x%04x\n", *(WORD *)wiresa);
wiresa += sizeof(WORD);
- ok(*(WORD *)wiresa == vt, "wiresa + 0x14 should be %04x instead of
0x%04x\n", vt, *(WORD *)wiresa);
+ ok(*(WORD *)wiresa == vt, "wiresa + 0x12 should be %04x instead of
0x%04x\n", vt, *(WORD *)wiresa);
wiresa += sizeof(WORD);
- ok(*(DWORD *)wiresa == sftype, "wiresa + 0x18 should be %08x instead of
0x%08x\n", (DWORD)sftype, *(DWORD *)wiresa);
+ ok(*(DWORD *)wiresa == sftype, "wiresa + 0x14 should be %08x instead of
0x%08x\n", (DWORD)sftype, *(DWORD *)wiresa);
wiresa += sizeof(DWORD);
- ok(*(DWORD *)wiresa == cell_count, "wiresa + 0x1c should be %u instead of
%u\n", cell_count, *(DWORD *)wiresa);
+ ok(*(DWORD *)wiresa == cell_count, "wiresa + 0x18 should be %u instead of
%u\n", cell_count, *(DWORD *)wiresa);
wiresa += sizeof(DWORD);
- ok(*(DWORD *)wiresa, "wiresa + 0x20 should be non-zero instead of
0x%08x\n", *(DWORD *)wiresa);
+ ok(*(DWORD *)wiresa, "wiresa + 0x1c should be non-zero instead of
0x%08x\n", *(DWORD *)wiresa);
wiresa += sizeof(DWORD);
if(sftype == SF_HAVEIID)
{
@@ -158,7 +158,7 @@
ok(!memcmp(wiresa, lpsa->rgsabound, sizeof(lpsa->rgsabound[0]) *
lpsa->cDims), "bounds mismatch\n");
wiresa += sizeof(lpsa->rgsabound[0]) * lpsa->cDims;
- ok(*(DWORD *)wiresa == cell_count, "wiresa + 0x2c should be %u instead of
%u\n", cell_count, *(DWORD*)wiresa);
+ ok(*(DWORD *)wiresa == cell_count, "wiresa + 0x28 should be %u instead of
%u\n", cell_count, *(DWORD*)wiresa);
wiresa += sizeof(DWORD);
/* elements are now pointed to by wiresa */
}
@@ -198,7 +198,7 @@
static void test_marshal_LPSAFEARRAY(void)
{
unsigned char *buffer;
- ULONG size;
+ ULONG size, expected;
LPSAFEARRAY lpsa;
LPSAFEARRAY lpsa2 = NULL;
SAFEARRAYBOUND sab;
@@ -217,10 +217,15 @@
lpsa->cLocks = 7;
init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0,
MSHCTX_DIFFERENTMACHINE);
size = LPSAFEARRAY_UserSize(&umcb.Flags, 1, &lpsa);
- ok(size == 68, "size should be 68 bytes, not %d\n", size);
+ expected = (44 + 1 + sizeof(ULONG) - 1) & ~(sizeof(ULONG) - 1);
+ expected += sab.cElements * sizeof(USHORT);
+ ok(size == expected || size == expected + 12, /* win64 */
+ "size should be %u bytes, not %u\n", expected, size);
init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0,
MSHCTX_DIFFERENTMACHINE);
size = LPSAFEARRAY_UserSize(&umcb.Flags, 0, &lpsa);
- ok(size == 64, "size should be 64 bytes, not %d\n", size);
+ expected = 44 + sab.cElements * sizeof(USHORT);
+ ok(size == expected || size == expected + 12, /* win64 */
+ "size should be %u bytes, not %u\n", expected, size);
buffer = HeapAlloc(GetProcessHeap(), 0, size);
init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size,
MSHCTX_DIFFERENTMACHINE);
LPSAFEARRAY_UserMarshal(&umcb.Flags, buffer, &lpsa);
@@ -273,10 +278,16 @@
lpsa->cLocks = 7;
init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0,
MSHCTX_DIFFERENTMACHINE);
size = LPSAFEARRAY_UserSize(&umcb.Flags, 1, &lpsa);
- ok(size == 128, "size should be 128 bytes, not %d\n", size);
+ expected = (44 + 1 + (sizeof(double) - 1)) & ~(sizeof(double) - 1);
+ expected += sab.cElements * sizeof(double);
+ ok(size == expected || size == expected + 16, /* win64 */
+ "size should be %u bytes, not %u\n", expected, size);
init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0,
MSHCTX_DIFFERENTMACHINE);
+ expected = (44 + (sizeof(double) - 1)) & ~(sizeof(double) - 1);
+ expected += sab.cElements * sizeof(double);
size = LPSAFEARRAY_UserSize(&umcb.Flags, 0, &lpsa);
- ok(size == 128, "size should be 128 bytes, not %d\n", size);
+ ok(size == expected || size == expected + 8, /* win64 */
+ "size should be %u bytes, not %u\n", expected, size);
buffer = HeapAlloc(GetProcessHeap(), 0, size);
init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size,
MSHCTX_DIFFERENTMACHINE);
LPSAFEARRAY_UserMarshal(&umcb.Flags, buffer, &lpsa);
@@ -301,7 +312,10 @@
init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0,
MSHCTX_DIFFERENTMACHINE);
size = LPSAFEARRAY_UserSize(&umcb.Flags, 0, &lpsa);
- ok(size == 432, "size %d\n", size);
+ expected = (44 + lpsa->cbElements - 1) & ~(lpsa->cbElements - 1);
+ expected += lpsa->cbElements * lpsa->rgsabound[0].cElements;
+ ok(size == expected || size == expected + 8, /* win64 */
+ "size should be %u bytes, not %u\n", expected, size);
buffer = HeapAlloc(GetProcessHeap(), 0, size);
init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size,
MSHCTX_DIFFERENTMACHINE);
LPSAFEARRAY_UserMarshal(&umcb.Flags, buffer, &lpsa);
@@ -313,7 +327,7 @@
/* VARTYPE-less arrays with FADF_VARIANT */
hr = SafeArrayAllocDescriptor(1, &lpsa);
ok(hr == S_OK, "saad failed %08x\n", hr);
- lpsa->cbElements = 16;
+ lpsa->cbElements = sizeof(VARIANT);
lpsa->fFeatures = FADF_VARIANT;
lpsa->rgsabound[0].lLbound = 2;
lpsa->rgsabound[0].cElements = 48;
@@ -325,11 +339,14 @@
init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0,
MSHCTX_DIFFERENTMACHINE);
size = LPSAFEARRAY_UserSize(&umcb.Flags, 0, &lpsa);
+ expected = 44 + 28 * lpsa->rgsabound[0].cElements;
todo_wine
- ok(size == 1388, "size %d\n", size);
+ ok(size == expected || size == expected + 8, /* win64 */
+ "size should be %u bytes, not %u\n", expected, size);
buffer = HeapAlloc(GetProcessHeap(), 0, size);
init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size,
MSHCTX_DIFFERENTMACHINE);
LPSAFEARRAY_UserMarshal(&umcb.Flags, buffer, &lpsa);
+ lpsa->cbElements = 16; /* VARIANT wire size */
check_safearray(buffer, lpsa);
HeapFree(GetProcessHeap(), 0, buffer);
SafeArrayDestroyData(lpsa);
@@ -555,6 +572,15 @@
ok(*wirev == switch_is, "switch_is %08x expected %08x\n", *wirev,
switch_is);
}
+/* Win9x and WinME don't always align as needed. Variants have
+ * an alignment of 8.
+ */
+static void *alloc_aligned(SIZE_T size, void **buf)
+{
+ *buf = HeapAlloc(GetProcessHeap(), 0, size + 7);
+ return (void *)(((UINT_PTR)*buf + 7) & ~7);
+}
+
static void test_marshal_VARIANT(void)
{
VARIANT v, v2;
@@ -562,6 +588,7 @@
RPC_MESSAGE rpcMsg = { 0 };
USER_MARSHAL_CB umcb = { 0 };
unsigned char *buffer, *next;
+ void *oldbuffer;
ULONG ul;
short s;
double d;
@@ -572,6 +599,7 @@
LPSAFEARRAY lpsa;
DECIMAL dec, dec2;
HeapUnknown *heap_unknown;
+ DWORD expected;
stubMsg.RpcMsg = &rpcMsg;
@@ -600,7 +628,7 @@
rpcMsg.BufferLength = stubMsg.BufferLength = VARIANT_UserSize(&umcb.Flags, 0,
&v);
ok(stubMsg.BufferLength == 21, "size %d\n", stubMsg.BufferLength);
- buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart =
HeapAlloc(GetProcessHeap(), 0, stubMsg.BufferLength);
+ buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart =
alloc_aligned(stubMsg.BufferLength, &oldbuffer);
stubMsg.BufferEnd = stubMsg.Buffer + stubMsg.BufferLength;
next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v);
ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next,
buffer + stubMsg.BufferLength);
@@ -620,7 +648,7 @@
VARIANT_UserFree(&umcb.Flags, &v2);
}
- HeapFree(GetProcessHeap(), 0, buffer);
+ HeapFree(GetProcessHeap(), 0, oldbuffer);
/*** I2 ***/
VariantInit(&v);
@@ -630,7 +658,7 @@
rpcMsg.BufferLength = stubMsg.BufferLength = VARIANT_UserSize(&umcb.Flags, 0,
&v);
ok(stubMsg.BufferLength == 22, "size %d\n", stubMsg.BufferLength);
- buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart =
HeapAlloc(GetProcessHeap(), 0, stubMsg.BufferLength);
+ buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart =
alloc_aligned(stubMsg.BufferLength, &oldbuffer);
stubMsg.BufferEnd = stubMsg.Buffer + stubMsg.BufferLength;
next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v);
ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next,
buffer + stubMsg.BufferLength);
@@ -650,7 +678,7 @@
VARIANT_UserFree(&umcb.Flags, &v2);
}
- HeapFree(GetProcessHeap(), 0, buffer);
+ HeapFree(GetProcessHeap(), 0, oldbuffer);
/*** I2 BYREF ***/
VariantInit(&v);
@@ -661,7 +689,7 @@
rpcMsg.BufferLength = stubMsg.BufferLength = VARIANT_UserSize(&umcb.Flags, 0,
&v);
ok(stubMsg.BufferLength == 26, "size %d\n", stubMsg.BufferLength);
- buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart =
HeapAlloc(GetProcessHeap(), 0, stubMsg.BufferLength);
+ buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart =
alloc_aligned(stubMsg.BufferLength, &oldbuffer);
stubMsg.BufferEnd = stubMsg.Buffer + stubMsg.BufferLength;
next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v);
ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next,
buffer + stubMsg.BufferLength);
@@ -687,7 +715,7 @@
VARIANT_UserFree(&umcb.Flags, &v2);
}
- HeapFree(GetProcessHeap(), 0, buffer);
+ HeapFree(GetProcessHeap(), 0, oldbuffer);
/*** I4 ***/
VariantInit(&v);
@@ -697,7 +725,7 @@
rpcMsg.BufferLength = stubMsg.BufferLength = VARIANT_UserSize(&umcb.Flags, 0,
&v);
ok(stubMsg.BufferLength == 24, "size %d\n", stubMsg.BufferLength);
- buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart =
HeapAlloc(GetProcessHeap(), 0, stubMsg.BufferLength);
+ buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart =
alloc_aligned(stubMsg.BufferLength, &oldbuffer);
stubMsg.BufferEnd = stubMsg.Buffer + stubMsg.BufferLength;
next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v);
ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next,
buffer + stubMsg.BufferLength);
@@ -718,8 +746,7 @@
VARIANT_UserFree(&umcb.Flags, &v2);
}
-
- HeapFree(GetProcessHeap(), 0, buffer);
+ HeapFree(GetProcessHeap(), 0, oldbuffer);
/*** UI4 ***/
VariantInit(&v);
@@ -729,7 +756,7 @@
rpcMsg.BufferLength = stubMsg.BufferLength = VARIANT_UserSize(&umcb.Flags, 0,
&v);
ok(stubMsg.BufferLength == 24, "size %d\n", stubMsg.BufferLength);
- buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart =
HeapAlloc(GetProcessHeap(), 0, stubMsg.BufferLength);
+ buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart =
alloc_aligned(stubMsg.BufferLength, &oldbuffer);
stubMsg.BufferEnd = stubMsg.Buffer + stubMsg.BufferLength;
next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v);
ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next,
buffer + stubMsg.BufferLength);
@@ -749,8 +776,7 @@
VARIANT_UserFree(&umcb.Flags, &v2);
}
-
- HeapFree(GetProcessHeap(), 0, buffer);
+ HeapFree(GetProcessHeap(), 0, oldbuffer);
/*** UI4 BYREF ***/
VariantInit(&v);
@@ -761,7 +787,7 @@
rpcMsg.BufferLength = stubMsg.BufferLength = VARIANT_UserSize(&umcb.Flags, 0,
&v);
ok(stubMsg.BufferLength == 28, "size %d\n", stubMsg.BufferLength);
- buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart =
HeapAlloc(GetProcessHeap(), 0, stubMsg.BufferLength);
+ buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart =
alloc_aligned(stubMsg.BufferLength, &oldbuffer);
stubMsg.BufferEnd = stubMsg.Buffer + stubMsg.BufferLength;
next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v);
ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next,
buffer + stubMsg.BufferLength);
@@ -784,7 +810,7 @@
VARIANT_UserFree(&umcb.Flags, &v2);
}
- HeapFree(GetProcessHeap(), 0, buffer);
+ HeapFree(GetProcessHeap(), 0, oldbuffer);
/*** R4 ***/
VariantInit(&v);
@@ -794,7 +820,7 @@
rpcMsg.BufferLength = stubMsg.BufferLength = VARIANT_UserSize(&umcb.Flags, 0,
&v);
ok(stubMsg.BufferLength == 24, "size %d\n", stubMsg.BufferLength);
- buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart =
HeapAlloc(GetProcessHeap(), 0, stubMsg.BufferLength);
+ buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart =
alloc_aligned(stubMsg.BufferLength, &oldbuffer);
stubMsg.BufferEnd = stubMsg.Buffer + stubMsg.BufferLength;
next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v);
ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next,
buffer + stubMsg.BufferLength);
@@ -814,7 +840,7 @@
VARIANT_UserFree(&umcb.Flags, &v2);
}
- HeapFree(GetProcessHeap(), 0, buffer);
+ HeapFree(GetProcessHeap(), 0, oldbuffer);
/*** R8 ***/
VariantInit(&v);
@@ -824,7 +850,7 @@
rpcMsg.BufferLength = stubMsg.BufferLength = VARIANT_UserSize(&umcb.Flags, 0,
&v);
ok(stubMsg.BufferLength == 32, "size %d\n", stubMsg.BufferLength);
- buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart =
HeapAlloc(GetProcessHeap(), 0, stubMsg.BufferLength);
+ buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart =
alloc_aligned(stubMsg.BufferLength, &oldbuffer);
stubMsg.BufferEnd = stubMsg.Buffer + stubMsg.BufferLength;
memset(buffer, 0xcc, stubMsg.BufferLength);
next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v);
@@ -847,7 +873,7 @@
VARIANT_UserFree(&umcb.Flags, &v2);
}
- HeapFree(GetProcessHeap(), 0, buffer);
+ HeapFree(GetProcessHeap(), 0, oldbuffer);
/*** R8 BYREF ***/
VariantInit(&v);
@@ -858,7 +884,7 @@
rpcMsg.BufferLength = stubMsg.BufferLength = VARIANT_UserSize(&umcb.Flags, 0,
&v);
ok(stubMsg.BufferLength == 32, "size %d\n", stubMsg.BufferLength);
- buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart =
HeapAlloc(GetProcessHeap(), 0, stubMsg.BufferLength);
+ buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart =
alloc_aligned(stubMsg.BufferLength, &oldbuffer);
stubMsg.BufferEnd = stubMsg.Buffer + stubMsg.BufferLength;
next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v);
ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next,
buffer + stubMsg.BufferLength);
@@ -880,7 +906,7 @@
VARIANT_UserFree(&umcb.Flags, &v2);
}
- HeapFree(GetProcessHeap(), 0, buffer);
+ HeapFree(GetProcessHeap(), 0, oldbuffer);
/*** VARIANT_BOOL ***/
VariantInit(&v);
@@ -890,7 +916,7 @@
rpcMsg.BufferLength = stubMsg.BufferLength = VARIANT_UserSize(&umcb.Flags, 0,
&v);
ok(stubMsg.BufferLength == 22, "size %d\n", stubMsg.BufferLength);
- buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart =
HeapAlloc(GetProcessHeap(), 0, stubMsg.BufferLength);
+ buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart =
alloc_aligned(stubMsg.BufferLength, &oldbuffer);
stubMsg.BufferEnd = stubMsg.Buffer + stubMsg.BufferLength;
next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v);
ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next,
buffer + stubMsg.BufferLength);
@@ -910,7 +936,7 @@
VARIANT_UserFree(&umcb.Flags, &v2);
}
- HeapFree(GetProcessHeap(), 0, buffer);
+ HeapFree(GetProcessHeap(), 0, oldbuffer);
/*** DECIMAL ***/
VarDecFromI4(0x12345678, &dec);
@@ -922,7 +948,7 @@
rpcMsg.BufferLength = stubMsg.BufferLength = VARIANT_UserSize(&umcb.Flags, 0,
&v);
ok(stubMsg.BufferLength == 40, "size %d\n", stubMsg.BufferLength);
- buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart =
HeapAlloc(GetProcessHeap(), 0, stubMsg.BufferLength);
+ buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart =
alloc_aligned(stubMsg.BufferLength, &oldbuffer);
stubMsg.BufferEnd = stubMsg.Buffer + stubMsg.BufferLength;
memset(buffer, 0xcc, stubMsg.BufferLength);
next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v);
@@ -948,7 +974,7 @@
VARIANT_UserFree(&umcb.Flags, &v2);
}
- HeapFree(GetProcessHeap(), 0, buffer);
+ HeapFree(GetProcessHeap(), 0, oldbuffer);
/*** DECIMAL BYREF ***/
VariantInit(&v);
@@ -958,7 +984,7 @@
rpcMsg.BufferLength = stubMsg.BufferLength = VARIANT_UserSize(&umcb.Flags, 0,
&v);
ok(stubMsg.BufferLength == 40, "size %d\n", stubMsg.BufferLength);
- buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart =
HeapAlloc(GetProcessHeap(), 0, stubMsg.BufferLength);
+ buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart =
alloc_aligned(stubMsg.BufferLength, &oldbuffer);
stubMsg.BufferEnd = stubMsg.Buffer + stubMsg.BufferLength;
next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v);
ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next,
buffer + stubMsg.BufferLength);
@@ -987,7 +1013,7 @@
VARIANT_UserFree(&umcb.Flags, &v2);
}
- HeapFree(GetProcessHeap(), 0, buffer);
+ HeapFree(GetProcessHeap(), 0, oldbuffer);
/*** EMPTY ***/
VariantInit(&v);
@@ -996,24 +1022,24 @@
rpcMsg.BufferLength = stubMsg.BufferLength = VARIANT_UserSize(&umcb.Flags, 0,
&v);
ok(stubMsg.BufferLength == 20, "size %d\n", stubMsg.BufferLength);
- buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart =
HeapAlloc(GetProcessHeap(), 0, stubMsg.BufferLength);
- stubMsg.BufferEnd = stubMsg.Buffer + stubMsg.BufferLength;
- next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v);
- ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next,
buffer + stubMsg.BufferLength);
- wirev = (DWORD*)buffer;
-
- check_variant_header(wirev, &v, stubMsg.BufferLength);
- if (VARIANT_UNMARSHAL_WORKS)
- {
- VariantInit(&v2);
- stubMsg.Buffer = buffer;
- next = VARIANT_UserUnmarshal(&umcb.Flags, buffer, &v2);
- ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next,
buffer + stubMsg.BufferLength);
- ok(V_VT(&v) == V_VT(&v2), "got vt %d expect %d\n",
V_VT(&v), V_VT(&v2));
-
- VARIANT_UserFree(&umcb.Flags, &v2);
- }
- HeapFree(GetProcessHeap(), 0, buffer);
+ buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart =
alloc_aligned(stubMsg.BufferLength, &oldbuffer);
+ stubMsg.BufferEnd = stubMsg.Buffer + stubMsg.BufferLength;
+ next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v);
+ ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next,
buffer + stubMsg.BufferLength);
+ wirev = (DWORD*)buffer;
+
+ check_variant_header(wirev, &v, stubMsg.BufferLength);
+ if (VARIANT_UNMARSHAL_WORKS)
+ {
+ VariantInit(&v2);
+ stubMsg.Buffer = buffer;
+ next = VARIANT_UserUnmarshal(&umcb.Flags, buffer, &v2);
+ ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next,
buffer + stubMsg.BufferLength);
+ ok(V_VT(&v) == V_VT(&v2), "got vt %d expect %d\n",
V_VT(&v), V_VT(&v2));
+
+ VARIANT_UserFree(&umcb.Flags, &v2);
+ }
+ HeapFree(GetProcessHeap(), 0, oldbuffer);
/*** NULL ***/
VariantInit(&v);
@@ -1022,24 +1048,24 @@
rpcMsg.BufferLength = stubMsg.BufferLength = VARIANT_UserSize(&umcb.Flags, 0,
&v);
ok(stubMsg.BufferLength == 20, "size %d\n", stubMsg.BufferLength);
- buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart =
HeapAlloc(GetProcessHeap(), 0, stubMsg.BufferLength);
- stubMsg.BufferEnd = stubMsg.Buffer + stubMsg.BufferLength;
- next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v);
- ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next,
buffer + stubMsg.BufferLength);
- wirev = (DWORD*)buffer;
-
- check_variant_header(wirev, &v, stubMsg.BufferLength);
- if (VARIANT_UNMARSHAL_WORKS)
- {
- VariantInit(&v2);
- stubMsg.Buffer = buffer;
- next = VARIANT_UserUnmarshal(&umcb.Flags, buffer, &v2);
- ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next,
buffer + stubMsg.BufferLength);
- ok(V_VT(&v) == V_VT(&v2), "got vt %d expect %d\n",
V_VT(&v), V_VT(&v2));
-
- VARIANT_UserFree(&umcb.Flags, &v2);
- }
- HeapFree(GetProcessHeap(), 0, buffer);
+ buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart =
alloc_aligned(stubMsg.BufferLength, &oldbuffer);
+ stubMsg.BufferEnd = stubMsg.Buffer + stubMsg.BufferLength;
+ next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v);
+ ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next,
buffer + stubMsg.BufferLength);
+ wirev = (DWORD*)buffer;
+
+ check_variant_header(wirev, &v, stubMsg.BufferLength);
+ if (VARIANT_UNMARSHAL_WORKS)
+ {
+ VariantInit(&v2);
+ stubMsg.Buffer = buffer;
+ next = VARIANT_UserUnmarshal(&umcb.Flags, buffer, &v2);
+ ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next,
buffer + stubMsg.BufferLength);
+ ok(V_VT(&v) == V_VT(&v2), "got vt %d expect %d\n",
V_VT(&v), V_VT(&v2));
+
+ VARIANT_UserFree(&umcb.Flags, &v2);
+ }
+ HeapFree(GetProcessHeap(), 0, oldbuffer);
/*** BSTR ***/
b = SysAllocString(str);
@@ -1049,7 +1075,7 @@
rpcMsg.BufferLength = stubMsg.BufferLength = VARIANT_UserSize(&umcb.Flags, 0,
&v);
ok(stubMsg.BufferLength == 60, "size %d\n", stubMsg.BufferLength);
- buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart =
HeapAlloc(GetProcessHeap(), 0, stubMsg.BufferLength);
+ buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart =
alloc_aligned(stubMsg.BufferLength, &oldbuffer);
stubMsg.BufferEnd = stubMsg.Buffer + stubMsg.BufferLength;
next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v);
ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next,
buffer + stubMsg.BufferLength);
@@ -1072,7 +1098,7 @@
VARIANT_UserFree(&umcb.Flags, &v2);
}
- HeapFree(GetProcessHeap(), 0, buffer);
+ HeapFree(GetProcessHeap(), 0, oldbuffer);
/*** BSTR BYREF ***/
VariantInit(&v);
@@ -1081,7 +1107,7 @@
rpcMsg.BufferLength = stubMsg.BufferLength = VARIANT_UserSize(&umcb.Flags, 0,
&v);
ok(stubMsg.BufferLength == 64, "size %d\n", stubMsg.BufferLength);
- buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart =
HeapAlloc(GetProcessHeap(), 0, stubMsg.BufferLength);
+ buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart =
alloc_aligned(stubMsg.BufferLength, &oldbuffer);
stubMsg.BufferEnd = stubMsg.Buffer + stubMsg.BufferLength;
next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v);
ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next,
buffer + stubMsg.BufferLength);
@@ -1106,7 +1132,7 @@
VARIANT_UserFree(&umcb.Flags, &v2);
}
- HeapFree(GetProcessHeap(), 0, buffer);
+ HeapFree(GetProcessHeap(), 0, oldbuffer);
SysFreeString(b);
/*** ARRAY ***/
@@ -1122,14 +1148,16 @@
V_ARRAY(&v) = lpsa;
rpcMsg.BufferLength = stubMsg.BufferLength = VARIANT_UserSize(&umcb.Flags, 0,
&v);
- ok(stubMsg.BufferLength == 152, "size %d\n", stubMsg.BufferLength);
- buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart =
HeapAlloc(GetProcessHeap(), 0, stubMsg.BufferLength);
- stubMsg.BufferEnd = stubMsg.Buffer + stubMsg.BufferLength;
- next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v);
- ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next,
buffer + stubMsg.BufferLength);
+ expected = 152;
+ ok(stubMsg.BufferLength == expected || stubMsg.BufferLength == expected + 8, /* win64
*/
+ "size %u instead of %u\n", stubMsg.BufferLength, expected);
+ buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart =
alloc_aligned(stubMsg.BufferLength, &oldbuffer);
+ stubMsg.BufferEnd = stubMsg.Buffer + stubMsg.BufferLength;
+ next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v);
+ ok(next == buffer + expected, "got %p expect %p\n", next, buffer +
expected);
wirev = (DWORD*)buffer;
- check_variant_header(wirev, &v, stubMsg.BufferLength);
+ check_variant_header(wirev, &v, expected);
wirev += 5;
ok(*wirev, "wv[5] %08x\n", *wirev); /* win2k: this is lpsa. winxp: this is
(char*)lpsa + 1 */
wirev++;
@@ -1141,7 +1169,7 @@
VariantInit(&v2);
stubMsg.Buffer = buffer;
next = VARIANT_UserUnmarshal(&umcb.Flags, buffer, &v2);
- ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next,
buffer + stubMsg.BufferLength);
+ ok(next == buffer + expected, "got %p expect %p\n", next, buffer +
expected);
ok(V_VT(&v) == V_VT(&v2), "got vt %d expect %d\n",
V_VT(&v), V_VT(&v2));
ok(SafeArrayGetDim(V_ARRAY(&v)) == SafeArrayGetDim(V_ARRAY(&v)),
"array dims differ\n");
SafeArrayGetLBound(V_ARRAY(&v), 1, &bound);
@@ -1155,7 +1183,7 @@
ok(vt == vt2, "array vts differ %x %x\n", vt, vt2);
VARIANT_UserFree(&umcb.Flags, &v2);
}
- HeapFree(GetProcessHeap(), 0, buffer);
+ HeapFree(GetProcessHeap(), 0, oldbuffer);
/*** ARRAY BYREF ***/
VariantInit(&v);
@@ -1163,14 +1191,16 @@
V_ARRAYREF(&v) = &lpsa;
rpcMsg.BufferLength = stubMsg.BufferLength = VARIANT_UserSize(&umcb.Flags, 0,
&v);
- ok(stubMsg.BufferLength == 152, "size %d\n", stubMsg.BufferLength);
- buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart =
HeapAlloc(GetProcessHeap(), 0, stubMsg.BufferLength);
- stubMsg.BufferEnd = stubMsg.Buffer + stubMsg.BufferLength;
- next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v);
- ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next,
buffer + stubMsg.BufferLength);
- wirev = (DWORD*)buffer;
-
- check_variant_header(wirev, &v, stubMsg.BufferLength);
+ expected = 152;
+ ok(stubMsg.BufferLength == expected || stubMsg.BufferLength == expected + 16, /*
win64 */
+ "size %u instead of %u\n", stubMsg.BufferLength, expected);
+ buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart =
alloc_aligned(stubMsg.BufferLength, &oldbuffer);
+ stubMsg.BufferEnd = stubMsg.Buffer + stubMsg.BufferLength;
+ next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v);
+ ok(next == buffer + expected, "got %p expect %p\n", next, buffer +
expected);
+ wirev = (DWORD*)buffer;
+
+ check_variant_header(wirev, &v, expected);
wirev += 5;
ok(*wirev == 4, "wv[5] %08x\n", *wirev);
wirev++;
@@ -1184,7 +1214,7 @@
VariantInit(&v2);
stubMsg.Buffer = buffer;
next = VARIANT_UserUnmarshal(&umcb.Flags, buffer, &v2);
- ok(next == buffer + stubMsg.BufferLength, "got %p expect %p\n", next,
buffer + stubMsg.BufferLength);
+ ok(next == buffer + expected, "got %p expect %p\n", next, buffer +
expected);
ok(V_VT(&v) == V_VT(&v2), "got vt %d expect %d\n",
V_VT(&v), V_VT(&v2));
ok(SafeArrayGetDim(*V_ARRAYREF(&v)) == SafeArrayGetDim(*V_ARRAYREF(&v)),
"array dims differ\n");
SafeArrayGetLBound(*V_ARRAYREF(&v), 1, &bound);
@@ -1198,7 +1228,7 @@
ok(vt == vt2, "array vts differ %x %x\n", vt, vt2);
VARIANT_UserFree(&umcb.Flags, &v2);
}
- HeapFree(GetProcessHeap(), 0, buffer);
+ HeapFree(GetProcessHeap(), 0, oldbuffer);
SafeArrayDestroy(lpsa);
/*** VARIANT BYREF ***/
@@ -1211,7 +1241,7 @@
rpcMsg.BufferLength = stubMsg.BufferLength = VARIANT_UserSize(&umcb.Flags, 0,
&v);
ok(stubMsg.BufferLength == 64, "size %d\n", stubMsg.BufferLength);
- buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart =
HeapAlloc(GetProcessHeap(), 0, stubMsg.BufferLength);
+ buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart =
alloc_aligned(stubMsg.BufferLength, &oldbuffer);
stubMsg.BufferEnd = stubMsg.Buffer + stubMsg.BufferLength;
memset(buffer, 0xcc, stubMsg.BufferLength);
next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v);
@@ -1220,7 +1250,7 @@
check_variant_header(wirev, &v, stubMsg.BufferLength);
wirev += 5;
- ok(*wirev == 16, "wv[5] %08x\n", *wirev);
+ ok(*wirev == sizeof(VARIANT), "wv[5] %08x\n", *wirev);
wirev++;
ok(*wirev == ('U' | 's' << 8 | 'e' << 16 |
'r' << 24), "wv[6] %08x\n", *wirev); /* 'User' */
wirev++;
@@ -1244,7 +1274,7 @@
ok(V_R8(V_VARIANTREF(&v)) == V_R8(V_VARIANTREF(&v3)), "r8s
differ\n");
VARIANT_UserFree(&umcb.Flags, &v3);
}
- HeapFree(GetProcessHeap(), 0, buffer);
+ HeapFree(GetProcessHeap(), 0, oldbuffer);
/*** UNKNOWN ***/
heap_unknown = HeapAlloc(GetProcessHeap(), 0, sizeof(*heap_unknown));
@@ -1257,7 +1287,7 @@
rpcMsg.BufferLength = stubMsg.BufferLength = VARIANT_UserSize(&umcb.Flags, 0,
&v);
ok(stubMsg.BufferLength > 32, "size %d\n", stubMsg.BufferLength);
- buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart =
HeapAlloc(GetProcessHeap(), 0, stubMsg.BufferLength);
+ buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart =
alloc_aligned(stubMsg.BufferLength, &oldbuffer);
stubMsg.BufferEnd = stubMsg.Buffer + stubMsg.BufferLength;
memset(buffer, 0xcc, stubMsg.BufferLength);
next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v);
@@ -1292,7 +1322,7 @@
ok(heap_unknown->refs == 1, "%d refcounts of IUnknown leaked\n",
heap_unknown->refs - 1);
IUnknown_Release((IUnknown *)heap_unknown);
}
- HeapFree(GetProcessHeap(), 0, buffer);
+ HeapFree(GetProcessHeap(), 0, oldbuffer);
/*** UNKNOWN BYREF ***/
heap_unknown = HeapAlloc(GetProcessHeap(), 0, sizeof(*heap_unknown));
@@ -1305,7 +1335,7 @@
rpcMsg.BufferLength = stubMsg.BufferLength = VARIANT_UserSize(&umcb.Flags, 0,
&v);
ok(stubMsg.BufferLength > 36, "size %d\n", stubMsg.BufferLength);
- buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart =
HeapAlloc(GetProcessHeap(), 0, stubMsg.BufferLength);
+ buffer = rpcMsg.Buffer = stubMsg.Buffer = stubMsg.BufferStart =
alloc_aligned(stubMsg.BufferLength, &oldbuffer);
stubMsg.BufferEnd = stubMsg.Buffer + stubMsg.BufferLength;
memset(buffer, 0xcc, stubMsg.BufferLength);
next = VARIANT_UserMarshal(&umcb.Flags, buffer, &v);
@@ -1342,7 +1372,7 @@
ok(heap_unknown->refs == 1, "%d refcounts of IUnknown leaked\n",
heap_unknown->refs - 1);
IUnknown_Release((IUnknown *)heap_unknown);
}
- HeapFree(GetProcessHeap(), 0, buffer);
+ HeapFree(GetProcessHeap(), 0, oldbuffer);
}
Modified: trunk/rostests/winetests/oleaut32/varformat.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/oleaut32/varfor…
==============================================================================
--- trunk/rostests/winetests/oleaut32/varformat.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/oleaut32/varformat.c [iso-8859-1] Sat Aug 22 19:05:58 2009
@@ -379,6 +379,10 @@
VARFMT(VT_R8,V_R8,-1.57,"0.00",S_OK,"-1.57");
VARFMT(VT_R8,V_R8,-1.57,"#.##",S_OK,"-1.57");
VARFMT(VT_R8,V_R8,-0.1,".#",S_OK,"-.1");
+ VARFMT(VT_R8,V_R8,0.099,"#.#",S_OK,".1");
+ VARFMT(VT_R8,V_R8,0.0999,"#.##",S_OK,".1");
+ /* for large negative exponents, wine truncates instead of rounding */
+ todo_wine VARFMT(VT_R8,V_R8,0.099,"#.##",S_OK,".1");
/* 'out' is not cleared */
Modified: trunk/rostests/winetests/oleaut32/vartest.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/oleaut32/vartes…
==============================================================================
--- trunk/rostests/winetests/oleaut32/vartest.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/oleaut32/vartest.c [iso-8859-1] Sat Aug 22 19:05:58 2009
@@ -5234,11 +5234,13 @@
static void test_VarCat(void)
{
LCID lcid;
- VARIANT left, right, result, expected;
+ VARIANT left, right, result, expected, expected_broken;
static const WCHAR sz34[] = {'3','4','\0'};
static const WCHAR sz1234[] =
{'1','2','3','4','\0'};
static const WCHAR date_sz12[] =
{'9','/','3','0','/','1','9','8','0','1','2','\0'};
+ static const WCHAR date_sz12_broken[] =
{'9','/','3','0','/','8','0','1','2','\0'};
static const WCHAR sz12_date[] =
{'1','2','9','/','3','0','/','1','9','8','0','\0'};
+ static const WCHAR sz12_date_broken[] =
{'1','2','9','/','3','0','/','8','0','\0'};
static const WCHAR sz_empty[] = {'\0'};
TCHAR orig_date_format[128];
VARTYPE leftvt, rightvt, resultvt;
@@ -5468,7 +5470,7 @@
hres = VarCat(&left,&right,&result);
ok(hres == S_OK, "VarCat failed with error 0x%08x\n", hres);
ok(VarCmp(&result,&expected,lcid,0) == VARCMP_EQ,
- "VarCat: NUMBER concat with NUMBER returned inncorrect result\n");
+ "VarCat: NUMBER concat with NUMBER returned incorrect result\n");
VariantClear(&left);
VariantClear(&right);
@@ -5482,7 +5484,7 @@
hres = VarCat(&left,&right,&result);
ok(hres == S_OK, "VarCat failed with error 0x%08x\n", hres);
ok(VarCmp(&result,&expected,lcid,0) == VARCMP_EQ,
- "VarCat: NUMBER concat with VT_BSTR, inncorrect result\n");
+ "VarCat: NUMBER concat with VT_BSTR, incorrect result\n");
VariantClear(&left);
VariantClear(&right);
@@ -5495,7 +5497,7 @@
hres = VarCat(&left,&right,&result);
ok(hres == S_OK, "VarCat failed with error 0x%08x\n", hres);
ok(VarCmp(&result,&expected,lcid,0) == VARCMP_EQ,
- "VarCat: VT_BSTR concat with NUMBER, inncorrect result\n");
+ "VarCat: VT_BSTR concat with NUMBER, incorrect result\n");
VariantClear(&left);
VariantClear(&right);
@@ -5506,34 +5508,42 @@
V_VT(&left) = VT_BSTR;
V_VT(&right) = VT_DATE;
V_VT(&expected) = VT_BSTR;
+ V_VT(&expected_broken) = VT_BSTR;
V_BSTR(&left) = SysAllocString(sz12);
V_DATE(&right) = 29494.0;
V_BSTR(&expected)= SysAllocString(sz12_date);
+ V_BSTR(&expected_broken)= SysAllocString(sz12_date_broken);
hres = VarCat(&left,&right,&result);
ok(hres == S_OK, "VarCat failed with error 0x%08x\n", hres);
- ok(VarCmp(&result,&expected,lcid,0) == VARCMP_EQ,
- "VarCat: VT_BSTR concat with VT_DATE returned inncorrect result\n");
+ ok(VarCmp(&result,&expected,lcid,0) == VARCMP_EQ ||
+ broken(VarCmp(&result,&expected_broken,lcid,0) == VARCMP_EQ), /* Some W98
and NT4 (intermittent) */
+ "VarCat: VT_BSTR concat with VT_DATE returned incorrect result\n");
VariantClear(&left);
VariantClear(&right);
VariantClear(&result);
VariantClear(&expected);
+ VariantClear(&expected_broken);
V_VT(&left) = VT_DATE;
V_VT(&right) = VT_BSTR;
V_VT(&expected) = VT_BSTR;
+ V_VT(&expected_broken) = VT_BSTR;
V_DATE(&left) = 29494.0;
V_BSTR(&right) = SysAllocString(sz12);
V_BSTR(&expected)= SysAllocString(date_sz12);
+ V_BSTR(&expected_broken)= SysAllocString(date_sz12_broken);
hres = VarCat(&left,&right,&result);
ok(hres == S_OK, "VarCat failed with error 0x%08x\n", hres);
- ok(VarCmp(&result,&expected,lcid,0) == VARCMP_EQ,
- "VarCat: VT_DATE concat with VT_BSTR returned inncorrect result\n");
+ ok(VarCmp(&result,&expected,lcid,0) == VARCMP_EQ ||
+ broken(VarCmp(&result,&expected_broken,lcid,0) == VARCMP_EQ), /* Some W98
and NT4 (intermittent) */
+ "VarCat: VT_DATE concat with VT_BSTR returned incorrect result\n");
VariantClear(&left);
VariantClear(&right);
VariantClear(&result);
VariantClear(&expected);
+ VariantClear(&expected_broken);
/* Test of both expressions are empty */
V_VT(&left) = VT_BSTR;
Modified: trunk/rostests/winetests/oleaut32/vartype.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/oleaut32/vartyp…
==============================================================================
--- trunk/rostests/winetests/oleaut32/vartype.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/oleaut32/vartype.c [iso-8859-1] Sat Aug 22 19:05:58 2009
@@ -3434,6 +3434,11 @@
DFS("1/2/1970"); EXPECT_DBL(25570.0);
DFS("1-2-1970"); EXPECT_DBL(25570.0);
/* Native fails "1999 January 3, 9AM". I consider that a bug in native */
+
+ /* test a none english data string */
+ DFS("02.01.1970 00:00:00"); EXPECT_MISMATCH;
+ lcid = MAKELCID(MAKELANGID(LANG_GERMAN,SUBLANG_GERMAN),SORT_DEFAULT);
+ DFS("02.01.1970 00:00:00"); todo_wine EXPECT_DBL(25570.0);
}
static void test_VarDateCopy(void)
@@ -4408,9 +4413,104 @@
MATHVARS1;
CHECKPTR(VarDecCmp);
+
SETDEC(l,0,0,0,1); SETDEC(out,0,0,0,1); MATH1(VarDecCmp); EXPECT_EQ;
SETDEC(l,0,0,0,1); SETDEC(out,0,0,0,0); MATH1(VarDecCmp); EXPECT_GT;
+ SETDEC(l,0,0,0,1); SETDEC(out,0,0,-1,-1); MATH1(VarDecCmp); EXPECT_LT;
+
+ SETDEC(l,0,0,0,1); SETDEC(out,0,DECIMAL_NEG,0,1); MATH1(VarDecCmp); EXPECT_GT;
+ SETDEC(l,0,0,0,1); SETDEC(out,0,DECIMAL_NEG,0,0); MATH1(VarDecCmp); EXPECT_GT;
+ SETDEC(l,0,0,0,1); SETDEC(out,0,DECIMAL_NEG,-1,-1); MATH1(VarDecCmp); EXPECT_GT;
+
+ SETDEC(l,0,DECIMAL_NEG,0,1); SETDEC(out,0,0,0,1); MATH1(VarDecCmp); EXPECT_LT;
+ SETDEC(l,0,DECIMAL_NEG,0,1); SETDEC(out,0,0,0,0); MATH1(VarDecCmp); EXPECT_LT;
+ SETDEC(l,0,DECIMAL_NEG,0,1); SETDEC(out,0,0,-1,-1); MATH1(VarDecCmp); EXPECT_LT;
+
+ SETDEC(l,0,DECIMAL_NEG,0,1); SETDEC(out,0,DECIMAL_NEG,0,1); MATH1(VarDecCmp);
EXPECT_EQ;
+ SETDEC(l,0,DECIMAL_NEG,0,1); SETDEC(out,0,DECIMAL_NEG,0,0); MATH1(VarDecCmp);
EXPECT_LT;
+ SETDEC(l,0,DECIMAL_NEG,0,1); SETDEC(out,0,DECIMAL_NEG,-1,-1); MATH1(VarDecCmp);
EXPECT_GT;
+
SETDEC(l,0,0,0,0); SETDEC(out,0,0,0,1); MATH1(VarDecCmp); EXPECT_LT;
+ SETDEC(l,0,0,0,0); SETDEC(out,0,0,0,0); MATH1(VarDecCmp); EXPECT_EQ;
+ SETDEC(l,0,0,0,0); SETDEC(out,0,0,-1,-1); MATH1(VarDecCmp); EXPECT_LT;
+
+ SETDEC(l,0,0,0,0); SETDEC(out,0,DECIMAL_NEG,0,1); MATH1(VarDecCmp); EXPECT_GT;
+ SETDEC(l,0,0,0,0); SETDEC(out,0,DECIMAL_NEG,0,0); MATH1(VarDecCmp); EXPECT_EQ;
+ SETDEC(l,0,0,0,0); SETDEC(out,0,DECIMAL_NEG,-1,-1); MATH1(VarDecCmp); EXPECT_GT;
+
+ SETDEC(l,0,DECIMAL_NEG,0,0); SETDEC(out,0,0,0,1); MATH1(VarDecCmp); EXPECT_LT;
+ SETDEC(l,0,DECIMAL_NEG,0,0); SETDEC(out,0,0,0,0); MATH1(VarDecCmp); EXPECT_EQ;
+ SETDEC(l,0,DECIMAL_NEG,0,0); SETDEC(out,0,0,-1,-1); MATH1(VarDecCmp); EXPECT_LT;
+
+ SETDEC(l,0,DECIMAL_NEG,0,0); SETDEC(out,0,DECIMAL_NEG,0,1); MATH1(VarDecCmp);
EXPECT_GT;
+ SETDEC(l,0,DECIMAL_NEG,0,0); SETDEC(out,0,DECIMAL_NEG,0,0); MATH1(VarDecCmp);
EXPECT_EQ;
+ SETDEC(l,0,DECIMAL_NEG,0,0); SETDEC(out,0,DECIMAL_NEG,-1,-1); MATH1(VarDecCmp);
EXPECT_GT;
+
+ SETDEC(l,0,0,-1,-1); SETDEC(out,0,0,0,1); MATH1(VarDecCmp); EXPECT_GT;
+ SETDEC(l,0,0,-1,-1); SETDEC(out,0,0,0,0); MATH1(VarDecCmp); EXPECT_GT;
+ SETDEC(l,0,0,-1,-1); SETDEC(out,0,0,-1,-1); MATH1(VarDecCmp); EXPECT_EQ;
+
+ SETDEC(l,0,0,-1,-1); SETDEC(out,0,DECIMAL_NEG,0,1); MATH1(VarDecCmp); EXPECT_GT;
+ SETDEC(l,0,0,-1,-1); SETDEC(out,0,DECIMAL_NEG,0,0); MATH1(VarDecCmp); EXPECT_GT;
+ SETDEC(l,0,0,-1,-1); SETDEC(out,0,DECIMAL_NEG,-1,-1); MATH1(VarDecCmp); EXPECT_GT;
+
+ SETDEC(l,0,DECIMAL_NEG,-1,-1); SETDEC(out,0,0,0,1); MATH1(VarDecCmp); EXPECT_LT;
+ SETDEC(l,0,DECIMAL_NEG,-1,-1); SETDEC(out,0,0,0,0); MATH1(VarDecCmp); EXPECT_LT;
+ SETDEC(l,0,DECIMAL_NEG,-1,-1); SETDEC(out,0,0,-1,-1); MATH1(VarDecCmp); EXPECT_LT;
+
+ SETDEC(l,0,DECIMAL_NEG,-1,-1); SETDEC(out,0,DECIMAL_NEG,0,1); MATH1(VarDecCmp);
EXPECT_LT;
+ SETDEC(l,0,DECIMAL_NEG,-1,-1); SETDEC(out,0,DECIMAL_NEG,0,0); MATH1(VarDecCmp);
EXPECT_LT;
+ SETDEC(l,0,DECIMAL_NEG,-1,-1); SETDEC(out,0,DECIMAL_NEG,-1,-1); MATH1(VarDecCmp);
EXPECT_EQ;
+
+
+ SETDEC(out,0,0,0,1); SETDEC(l,0,0,0,1); MATH1(VarDecCmp); EXPECT_EQ;
+ SETDEC(out,0,0,0,1); SETDEC(l,0,0,0,0); MATH1(VarDecCmp); EXPECT_LT;
+ SETDEC(out,0,0,0,1); SETDEC(l,0,0,-1,-1); MATH1(VarDecCmp); EXPECT_GT;
+
+ SETDEC(out,0,0,0,1); SETDEC(l,0,DECIMAL_NEG,0,1); MATH1(VarDecCmp); EXPECT_LT;
+ SETDEC(out,0,0,0,1); SETDEC(l,0,DECIMAL_NEG,0,0); MATH1(VarDecCmp); EXPECT_LT;
+ SETDEC(out,0,0,0,1); SETDEC(l,0,DECIMAL_NEG,-1,-1); MATH1(VarDecCmp); EXPECT_LT;
+
+ SETDEC(out,0,DECIMAL_NEG,0,1); SETDEC(l,0,0,0,1); MATH1(VarDecCmp); EXPECT_GT;
+ SETDEC(out,0,DECIMAL_NEG,0,1); SETDEC(l,0,0,0,0); MATH1(VarDecCmp); EXPECT_GT;
+ SETDEC(out,0,DECIMAL_NEG,0,1); SETDEC(l,0,0,-1,-1); MATH1(VarDecCmp); EXPECT_GT;
+
+ SETDEC(out,0,DECIMAL_NEG,0,1); SETDEC(l,0,DECIMAL_NEG,0,1); MATH1(VarDecCmp);
EXPECT_EQ;
+ SETDEC(out,0,DECIMAL_NEG,0,1); SETDEC(l,0,DECIMAL_NEG,0,0); MATH1(VarDecCmp);
EXPECT_GT;
+ SETDEC(out,0,DECIMAL_NEG,0,1); SETDEC(l,0,DECIMAL_NEG,-1,-1); MATH1(VarDecCmp);
EXPECT_LT;
+
+ SETDEC(out,0,0,0,0); SETDEC(l,0,0,0,1); MATH1(VarDecCmp); EXPECT_GT;
+ SETDEC(out,0,0,0,0); SETDEC(l,0,0,0,0); MATH1(VarDecCmp); EXPECT_EQ;
+ SETDEC(out,0,0,0,0); SETDEC(l,0,0,-1,-1); MATH1(VarDecCmp); EXPECT_GT;
+
+ SETDEC(out,0,0,0,0); SETDEC(l,0,DECIMAL_NEG,0,1); MATH1(VarDecCmp); EXPECT_LT;
+ SETDEC(out,0,0,0,0); SETDEC(l,0,DECIMAL_NEG,0,0); MATH1(VarDecCmp); EXPECT_EQ;
+ SETDEC(out,0,0,0,0); SETDEC(l,0,DECIMAL_NEG,-1,-1); MATH1(VarDecCmp); EXPECT_LT;
+
+ SETDEC(out,0,DECIMAL_NEG,0,0); SETDEC(l,0,0,0,1); MATH1(VarDecCmp); EXPECT_GT;
+ SETDEC(out,0,DECIMAL_NEG,0,0); SETDEC(l,0,0,0,0); MATH1(VarDecCmp); EXPECT_EQ;
+ SETDEC(out,0,DECIMAL_NEG,0,0); SETDEC(l,0,0,-1,-1); MATH1(VarDecCmp); EXPECT_GT;
+
+ SETDEC(out,0,DECIMAL_NEG,0,0); SETDEC(l,0,DECIMAL_NEG,0,1); MATH1(VarDecCmp);
EXPECT_LT;
+ SETDEC(out,0,DECIMAL_NEG,0,0); SETDEC(l,0,DECIMAL_NEG,0,0); MATH1(VarDecCmp);
EXPECT_EQ;
+ SETDEC(out,0,DECIMAL_NEG,0,0); SETDEC(l,0,DECIMAL_NEG,-1,-1); MATH1(VarDecCmp);
EXPECT_LT;
+
+ SETDEC(out,0,0,-1,-1); SETDEC(l,0,0,0,1); MATH1(VarDecCmp); EXPECT_LT;
+ SETDEC(out,0,0,-1,-1); SETDEC(l,0,0,0,0); MATH1(VarDecCmp); EXPECT_LT;
+ SETDEC(out,0,0,-1,-1); SETDEC(l,0,0,-1,-1); MATH1(VarDecCmp); EXPECT_EQ;
+
+ SETDEC(out,0,0,-1,-1); SETDEC(l,0,DECIMAL_NEG,0,1); MATH1(VarDecCmp); EXPECT_LT;
+ SETDEC(out,0,0,-1,-1); SETDEC(l,0,DECIMAL_NEG,0,0); MATH1(VarDecCmp); EXPECT_LT;
+ SETDEC(out,0,0,-1,-1); SETDEC(l,0,DECIMAL_NEG,-1,-1); MATH1(VarDecCmp); EXPECT_LT;
+
+ SETDEC(out,0,DECIMAL_NEG,-1,-1); SETDEC(l,0,0,0,1); MATH1(VarDecCmp); EXPECT_GT;
+ SETDEC(out,0,DECIMAL_NEG,-1,-1); SETDEC(l,0,0,0,0); MATH1(VarDecCmp); EXPECT_GT;
+ SETDEC(out,0,DECIMAL_NEG,-1,-1); SETDEC(l,0,0,-1,-1); MATH1(VarDecCmp); EXPECT_GT;
+
+ SETDEC(out,0,DECIMAL_NEG,-1,-1); SETDEC(l,0,DECIMAL_NEG,0,1); MATH1(VarDecCmp);
EXPECT_GT;
+ SETDEC(out,0,DECIMAL_NEG,-1,-1); SETDEC(l,0,DECIMAL_NEG,0,0); MATH1(VarDecCmp);
EXPECT_GT;
+ SETDEC(out,0,DECIMAL_NEG,-1,-1); SETDEC(l,0,DECIMAL_NEG,-1,-1); MATH1(VarDecCmp);
EXPECT_EQ;
+
}
/*