From: Eric Pouech <epouech@codeweavers.com> Signed-off-by: Eric Pouech <epouech@codeweavers.com> --- dlls/propsys/tests/propsys.c | 231 +++++++++++++++++++++++++++++++++++ 1 file changed, 231 insertions(+) diff --git a/dlls/propsys/tests/propsys.c b/dlls/propsys/tests/propsys.c index d6faee19add..82fdb59c5e9 100644 --- a/dlls/propsys/tests/propsys.c +++ b/dlls/propsys/tests/propsys.c @@ -1007,6 +1007,236 @@ static void test_PropVariantCompareEx(void) SysFreeString(str_b.bstrVal); } +static void test_VariantCompare(void) +{ + VARIANT empty, null, emptyarray, i2_0, i2_2, i4_large, i4_largeneg, i4_2, str_2, str_02, str_b; + VARIANT r4_0, r4_2, r4_21, r8_0, r8_2; + VARIANT ui4, ui4_large; + INT res; + static const WCHAR str_2W[] = {'2', 0}; + static const WCHAR str_02W[] = {'0', '2', 0}; + static const WCHAR str_bW[] = {'b', 0}; + SAFEARRAY emptysafearray; + + VariantInit(&empty); + VariantInit(&null); + VariantInit(&emptyarray); + VariantInit(&i2_0); + VariantInit(&i2_2); + VariantInit(&i4_large); + VariantInit(&i4_largeneg); + VariantInit(&i4_2); + VariantInit(&ui4); + VariantInit(&ui4_large); + VariantInit(&str_2); + VariantInit(&str_02); + VariantInit(&str_b); + VariantInit(&r4_0); + VariantInit(&r4_2); + VariantInit(&r4_2); + VariantInit(&r8_0); + VariantInit(&r8_2); + + empty.vt = VT_EMPTY; + null.vt = VT_NULL; + emptyarray.vt = VT_ARRAY | VT_I4; + emptyarray.parray = &emptysafearray; + emptysafearray.cDims = 1; + emptysafearray.fFeatures = FADF_FIXEDSIZE; + emptysafearray.cbElements = 4; + emptysafearray.cLocks = 0; + emptysafearray.pvData = NULL; + emptysafearray.rgsabound[0].cElements = 0; + emptysafearray.rgsabound[0].lLbound = 0; + i2_0.vt = VT_I2; + i2_0.iVal = 0; + i2_2.vt = VT_I2; + i2_2.iVal = 2; + i4_large.vt = VT_I4; + i4_large.lVal = 65536; + i4_largeneg.vt = VT_I4; + i4_largeneg.lVal = -65536; + i4_2.vt = VT_I4; + i4_2.lVal = 2; + ui4.vt = VT_UI4; + ui4.ulVal = 2; + ui4_large.vt = VT_UI4; + ui4_large.ulVal = 65536; + str_2.vt = VT_BSTR; + str_2.bstrVal = SysAllocString(str_2W); + str_02.vt = VT_BSTR; + str_02.bstrVal = SysAllocString(str_02W); + str_b.vt = VT_BSTR; + str_b.bstrVal = SysAllocString(str_bW); + r4_0.vt = VT_R4; + r4_0.fltVal = 0.0f; + r4_2.vt = VT_R4; + r4_2.fltVal = 2.0f; + r4_21.vt = VT_R4; + r4_21.fltVal = 2.1f; + r8_0.vt = VT_R8; + r8_0.dblVal = 0.0; + r8_2.vt = VT_R8; + r8_2.dblVal = 2.0; + + /* don't test NULL values, this segfaults on native */ + + res = VariantCompare(&empty, &empty); + ok(res == 0, "res=%i\n", res); + + res = VariantCompare(&empty, &null); + ok(res == 0, "res=%i\n", res); + + res = VariantCompare(&null, &emptyarray); + todo_wine + ok(res == -1, "res=%i\n", res); + + res = VariantCompare(&empty, &i2_0); + todo_wine + ok(res == -1, "res=%i\n", res); + + res = VariantCompare(&null, &i2_0); + todo_wine + ok(res == -1, "res=%i\n", res); + + res = VariantCompare(&i2_0, &null); + todo_wine + ok(res == 1, "res=%i\n", res); + + res = VariantCompare(&i2_0, &empty); + todo_wine + ok(res == 1, "res=%i\n", res); + + res = VariantCompare(&i2_2, &i2_0); + todo_wine + ok(res == 1, "res=%i\n", res); + + res = VariantCompare(&i2_0, &i2_2); + todo_wine + ok(res == -1, "res=%i\n", res); + + res = VariantCompare(&ui4, &ui4_large); + todo_wine + ok(res == -1, "res=%i\n", res); + + res = VariantCompare(&ui4_large, &ui4); + todo_wine + ok(res == 1, "res=%i\n", res); + + res = VariantCompare(&i2_0, &i4_large); + todo_wine + ok(res == -1, "res=%i\n", res); + + res = VariantCompare( &i4_large, &i2_0); + todo_wine + ok(res == 1, "res=%i\n", res); + + res = VariantCompare(&i2_0, &i4_largeneg); + todo_wine + ok(res == 1, "res=%i\n", res); + + res = VariantCompare(&i4_largeneg, &i2_0); + todo_wine + ok(res == -1, "res=%i\n", res); + + res = VariantCompare(&i4_large, &i2_0); + todo_wine + ok(res == 1, "res=%i\n", res); + + res = VariantCompare(&i4_largeneg, &i2_0); + todo_wine + ok(res == -1, "res=%i\n", res); + + res = VariantCompare(&i2_2, &i4_2); + ok(res == 0, "res=%i\n", res); + + res = VariantCompare(&i2_2, &str_2); + todo_wine + ok(res == -1, "res=%i\n", res); + + res = VariantCompare(&i2_2, &str_02); + todo_wine + ok(res == -1, "res=%i\n", res); + + res = VariantCompare(&str_2, &i2_2); + todo_wine + ok(res == 1, "res=%i\n", res); + + res = VariantCompare(&str_02, &i2_2); + todo_wine + ok(res == 1, "res=%i\n", res); + + res = VariantCompare(&str_02, &str_2); + todo_wine + ok(res == -1, "res=%i\n", res); + + res = VariantCompare(&str_02, &str_b); + todo_wine + ok(res == -1, "res=%i\n", res); + + res = VariantCompare(&str_2, &str_02); + todo_wine + ok(res == 1, "res=%i\n", res); + + res = VariantCompare(&i4_large, &str_b); + todo_wine + ok(res == -1, "res=%i\n", res); + + /* VT_R4/VT_R8 */ + res = VariantCompare(&r4_0, &r8_0); + ok(res == 0, "res=%i\n", res); + + res = VariantCompare(&r4_0, &r4_0); + ok(res == 0, "res=%i\n", res); + + res = VariantCompare(&r4_0, &r4_2); + todo_wine + ok(res == -1, "res=%i\n", res); + + res = VariantCompare(&r4_2, &r4_0); + todo_wine + ok(res == 1, "res=%i\n", res); + + res = VariantCompare(&r8_0, &r8_0); + ok(res == 0, "res=%i\n", res); + + res = VariantCompare(&r8_0, &r8_2); + todo_wine + ok(res == -1, "res=%i\n", res); + + res = VariantCompare(&r8_2, &r8_0); + todo_wine + ok(res == 1, "res=%i\n", res); + + /* float <> int */ + res = VariantCompare(&r4_2, &i4_largeneg); + todo_wine + ok(res == 1, "res=%i\n", res); + + res = VariantCompare(&r4_2, &i4_large); + todo_wine + ok(res == -1, "res=%i\n", res); + + res = VariantCompare(&i4_large, &r4_2); + todo_wine + ok(res == 1, "res=%i\n", res); + + res = VariantCompare(&i4_largeneg, &r4_2); + todo_wine + ok(res == -1, "res=%i\n", res); + + res = VariantCompare(&r4_21, &i2_2); + todo_wine + ok(res == 1, "res=%i\n", res); + + res = VariantCompare(&i2_2, &r4_21); + ok(res == 0, "res=%i\n", res); + + SysFreeString(str_2.bstrVal); + SysFreeString(str_02.bstrVal); + SysFreeString(str_b.bstrVal); +} + static void test_intconversions(void) { PROPVARIANT propvar; @@ -3276,6 +3506,7 @@ START_TEST(propsys) test_VariantToStringWithDefault(); test_VariantToString(); test_VariantToPropVariant(); + test_VariantCompare(); test_PropVariantToVariant(); test_PropVariantGetStringElem(); test_PropVariantToFileTime(); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10196