From: Nikolay Sivov nsivov@codeweavers.com
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/propsys/tests/propsys.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+)
diff --git a/dlls/propsys/tests/propsys.c b/dlls/propsys/tests/propsys.c index 441bb68de52..540c84a32d8 100644 --- a/dlls/propsys/tests/propsys.c +++ b/dlls/propsys/tests/propsys.c @@ -1579,6 +1579,14 @@ static void test_PropVariantToDouble(void) ok(hr == S_OK, "PropVariantToDouble failed: 0x%08lx.\n", hr); ok(value == 15.0, "Unexpected value: %f.\n", value);
+ PropVariantInit(&propvar); + propvar.vt = VT_R8; + propvar.dblVal = 15.1; + hr = PropVariantToDouble(&propvar, &value); + ok(hr == S_OK, "PropVariantToDouble failed: 0x%08lx.\n", hr); + todo_wine + ok(value == 15.1, "Unexpected value: %f.\n", value); + PropVariantClear(&propvar); propvar.vt = VT_I4; propvar.lVal = 123; @@ -1620,6 +1628,24 @@ static void test_PropVariantToDouble(void) hr = PropVariantToDouble(&propvar, &value); ok(hr == S_OK, "PropVariantToDouble failed: 0x%08lx.\n", hr); ok(value == 8.0, "Unexpected value: %f.\n", value); + + PropVariantClear(&propvar); + propvar.vt = VT_R4; + propvar.fltVal = 8.1f; + hr = PropVariantToDouble(&propvar, &value); + todo_wine + ok(hr == S_OK, "PropVariantToDouble failed: 0x%08lx.\n", hr); + todo_wine + ok(value == 8.1f, "Unexpected value: %f.\n", value); + + PropVariantClear(&propvar); + propvar.vt = VT_R4; + propvar.fltVal = 8.6f; + hr = PropVariantToDouble(&propvar, &value); + todo_wine + ok(hr == S_OK, "PropVariantToDouble failed: 0x%08lx.\n", hr); + todo_wine + ok(value == 8.6f, "Unexpected value: %f.\n", value); }
static void test_PropVariantToString(void)
From: Nikolay Sivov nsivov@codeweavers.com
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/propsys/tests/propsys.c | 106 +++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+)
diff --git a/dlls/propsys/tests/propsys.c b/dlls/propsys/tests/propsys.c index 540c84a32d8..a599d7df73e 100644 --- a/dlls/propsys/tests/propsys.c +++ b/dlls/propsys/tests/propsys.c @@ -1513,10 +1513,116 @@ static void test_PropVariantChangeType_UI4(void) } }
+static void test_PropVariantChangeType_R8(void) +{ + PROPVARIANT src, dest; + HRESULT hr; + + src.vt = VT_R8; + src.dblVal = 10.1; + dest.vt = VT_EMPTY; + hr = PropVariantChangeType(&dest, &src, 0, VT_R8); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(dest.vt == VT_R8, "Unexpected type %d.\n", dest.vt); + ok(dest.dblVal == 10.1, "Unexpected value %f.\n", dest.dblVal); + + src.vt = VT_R4; + src.fltVal = 10.1f; + dest.vt = VT_EMPTY; + hr = PropVariantChangeType(&dest, &src, 0, VT_R8); +todo_wine { + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(dest.vt == VT_R8, "Unexpected type %d.\n", dest.vt); + ok(dest.dblVal == 10.1f, "Unexpected value %f.\n", dest.dblVal); +} + src.vt = VT_I4; + src.lVal = 123; + dest.vt = VT_EMPTY; + hr = PropVariantChangeType(&dest, &src, 0, VT_R8); +todo_wine { + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(dest.vt == VT_R8, "Unexpected type %d.\n", dest.vt); + ok(dest.dblVal == 123.0, "Unexpected value %f.\n", dest.dblVal); +} + src.vt = VT_I4; + src.lVal = -256; + dest.vt = VT_EMPTY; + hr = PropVariantChangeType(&dest, &src, 0, VT_R8); +todo_wine { + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(dest.vt == VT_R8, "Unexpected type %d.\n", dest.vt); + ok(dest.dblVal == -256.0, "Unexpected value %f.\n", dest.dblVal); +} + src.vt = VT_I8; + src.hVal.QuadPart = -256; + dest.vt = VT_EMPTY; + hr = PropVariantChangeType(&dest, &src, 0, VT_R8); +todo_wine { + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(dest.vt == VT_R8, "Unexpected type %d.\n", dest.vt); + ok(dest.dblVal == -256.0, "Unexpected value %f.\n", dest.dblVal); +} + src.vt = VT_I8; + src.hVal.QuadPart = 65536; + dest.vt = VT_EMPTY; + hr = PropVariantChangeType(&dest, &src, 0, VT_R8); +todo_wine { + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(dest.vt == VT_R8, "Unexpected type %d.\n", dest.vt); + ok(dest.dblVal == 65536.0, "Unexpected value %f.\n", dest.dblVal); +} + src.vt = VT_I8; + src.hVal.QuadPart = -321; + dest.vt = VT_EMPTY; + hr = PropVariantChangeType(&dest, &src, 0, VT_R8); +todo_wine { + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(dest.vt == VT_R8, "Unexpected type %d.\n", dest.vt); + ok(dest.dblVal == -321.0, "Unexpected value %f.\n", dest.dblVal); +} + src.vt = VT_UI4; + src.ulVal = 6; + dest.vt = VT_EMPTY; + hr = PropVariantChangeType(&dest, &src, 0, VT_R8); +todo_wine { + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(dest.vt == VT_R8, "Unexpected type %d.\n", dest.vt); + ok(dest.dblVal == 6.0, "Unexpected value %f.\n", dest.dblVal); +} + src.vt = VT_UI8; + src.uhVal.QuadPart = 8; + dest.vt = VT_EMPTY; + hr = PropVariantChangeType(&dest, &src, 0, VT_R8); +todo_wine { + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(dest.vt == VT_R8, "Unexpected type %d.\n", dest.vt); + ok(dest.dblVal == 8.0, "Unexpected value %f.\n", dest.dblVal); +} + src.vt = VT_R4; + src.fltVal = 8.1f; + dest.vt = VT_EMPTY; + hr = PropVariantChangeType(&dest, &src, 0, VT_R8); +todo_wine { + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(dest.vt == VT_R8, "Unexpected type %d.\n", dest.vt); + ok(dest.dblVal == 8.1f, "Unexpected value %f.\n", dest.dblVal); +} + src.vt = VT_R4; + src.fltVal = 8.6f; + dest.vt = VT_EMPTY; + hr = PropVariantChangeType(&dest, &src, 0, VT_R8); +todo_wine { + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + ok(dest.vt == VT_R8, "Unexpected type %d.\n", dest.vt); + ok(dest.dblVal == 8.6f, "Unexpected value %f.\n", dest.dblVal); +} +} + static void test_PropVariantChangeType(void) { test_PropVariantChangeType_LPWSTR(); test_PropVariantChangeType_UI4(); + test_PropVariantChangeType_R8(); }
static void test_InitPropVariantFromCLSID(void)
From: Nikolay Sivov nsivov@codeweavers.com
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/propsys/tests/propsys.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/dlls/propsys/tests/propsys.c b/dlls/propsys/tests/propsys.c index a599d7df73e..ef2d9f6b6b5 100644 --- a/dlls/propsys/tests/propsys.c +++ b/dlls/propsys/tests/propsys.c @@ -1709,17 +1709,17 @@ static void test_PropVariantToDouble(void)
PropVariantClear(&propvar); propvar.vt = VT_I8; - propvar.lVal = 65536; + propvar.hVal.QuadPart = 65536; hr = PropVariantToDouble(&propvar, &value); ok(hr == S_OK, "PropVariantToDouble failed: 0x%08lx.\n", hr); ok(value == 65536.0, "Unexpected value: %f.\n", value);
PropVariantClear(&propvar); propvar.vt = VT_I8; - propvar.lVal = -321; + propvar.hVal.QuadPart = -321; hr = PropVariantToDouble(&propvar, &value); ok(hr == S_OK, "PropVariantToDouble failed: 0x%08lx.\n", hr); - ok(value == 4294966975.0, "Unexpected value: %f.\n", value); + ok(value == -321.0, "Unexpected value: %f.\n", value);
PropVariantClear(&propvar); propvar.vt = VT_UI4;
From: Nikolay Sivov nsivov@codeweavers.com
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/propsys/propvar.c | 17 ++++++++++++++--- dlls/propsys/tests/propsys.c | 5 ----- 2 files changed, 14 insertions(+), 8 deletions(-)
diff --git a/dlls/propsys/propvar.c b/dlls/propsys/propvar.c index 5d776ed8dcf..7dff5045f2d 100644 --- a/dlls/propsys/propvar.c +++ b/dlls/propsys/propvar.c @@ -180,13 +180,24 @@ static HRESULT PROPVAR_ConvertNumber(REFPROPVARIANT pv, int dest_bits,
HRESULT WINAPI PropVariantToDouble(REFPROPVARIANT propvarIn, double *ret) { + HRESULT hr = S_OK; LONGLONG res; - HRESULT hr;
TRACE("(%p, %p)\n", propvarIn, ret);
- hr = PROPVAR_ConvertNumber(propvarIn, 64, TRUE, &res); - if (SUCCEEDED(hr)) *ret = (double)res; + switch (propvarIn->vt) + { + case VT_R8: + *ret = propvarIn->dblVal; + break; + case VT_R4: + *ret = propvarIn->fltVal; + break; + default: + hr = PROPVAR_ConvertNumber(propvarIn, 64, TRUE, &res); + if (SUCCEEDED(hr)) *ret = (double)res; + } + return hr; }
diff --git a/dlls/propsys/tests/propsys.c b/dlls/propsys/tests/propsys.c index ef2d9f6b6b5..e05ea615d3b 100644 --- a/dlls/propsys/tests/propsys.c +++ b/dlls/propsys/tests/propsys.c @@ -1690,7 +1690,6 @@ static void test_PropVariantToDouble(void) propvar.dblVal = 15.1; hr = PropVariantToDouble(&propvar, &value); ok(hr == S_OK, "PropVariantToDouble failed: 0x%08lx.\n", hr); - todo_wine ok(value == 15.1, "Unexpected value: %f.\n", value);
PropVariantClear(&propvar); @@ -1739,18 +1738,14 @@ static void test_PropVariantToDouble(void) propvar.vt = VT_R4; propvar.fltVal = 8.1f; hr = PropVariantToDouble(&propvar, &value); - todo_wine ok(hr == S_OK, "PropVariantToDouble failed: 0x%08lx.\n", hr); - todo_wine ok(value == 8.1f, "Unexpected value: %f.\n", value);
PropVariantClear(&propvar); propvar.vt = VT_R4; propvar.fltVal = 8.6f; hr = PropVariantToDouble(&propvar, &value); - todo_wine ok(hr == S_OK, "PropVariantToDouble failed: 0x%08lx.\n", hr); - todo_wine ok(value == 8.6f, "Unexpected value: %f.\n", value); }
From: Nikolay Sivov nsivov@codeweavers.com
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/propsys/propvar.c | 11 +++++++++++ dlls/propsys/tests/propsys.c | 29 +++++++++-------------------- 2 files changed, 20 insertions(+), 20 deletions(-)
diff --git a/dlls/propsys/propvar.c b/dlls/propsys/propvar.c index 7dff5045f2d..342764a661c 100644 --- a/dlls/propsys/propvar.c +++ b/dlls/propsys/propvar.c @@ -717,6 +717,17 @@ HRESULT WINAPI PropVariantChangeType(PROPVARIANT *ppropvarDest, REFPROPVARIANT p } return hr; } + case VT_R8: + { + double res; + hr = PropVariantToDouble(propvarSrc, &res); + if (SUCCEEDED(hr)) + { + ppropvarDest->vt = VT_R8; + ppropvarDest->dblVal = res; + } + return hr; + }
case VT_LPWSTR: case VT_BSTR: diff --git a/dlls/propsys/tests/propsys.c b/dlls/propsys/tests/propsys.c index e05ea615d3b..e0caa37566a 100644 --- a/dlls/propsys/tests/propsys.c +++ b/dlls/propsys/tests/propsys.c @@ -1530,93 +1530,82 @@ static void test_PropVariantChangeType_R8(void) src.fltVal = 10.1f; dest.vt = VT_EMPTY; hr = PropVariantChangeType(&dest, &src, 0, VT_R8); -todo_wine { ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(dest.vt == VT_R8, "Unexpected type %d.\n", dest.vt); ok(dest.dblVal == 10.1f, "Unexpected value %f.\n", dest.dblVal); -} + src.vt = VT_I4; src.lVal = 123; dest.vt = VT_EMPTY; hr = PropVariantChangeType(&dest, &src, 0, VT_R8); -todo_wine { ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(dest.vt == VT_R8, "Unexpected type %d.\n", dest.vt); ok(dest.dblVal == 123.0, "Unexpected value %f.\n", dest.dblVal); -} + src.vt = VT_I4; src.lVal = -256; dest.vt = VT_EMPTY; hr = PropVariantChangeType(&dest, &src, 0, VT_R8); -todo_wine { ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(dest.vt == VT_R8, "Unexpected type %d.\n", dest.vt); ok(dest.dblVal == -256.0, "Unexpected value %f.\n", dest.dblVal); -} + src.vt = VT_I8; src.hVal.QuadPart = -256; dest.vt = VT_EMPTY; hr = PropVariantChangeType(&dest, &src, 0, VT_R8); -todo_wine { ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(dest.vt == VT_R8, "Unexpected type %d.\n", dest.vt); ok(dest.dblVal == -256.0, "Unexpected value %f.\n", dest.dblVal); -} + src.vt = VT_I8; src.hVal.QuadPart = 65536; dest.vt = VT_EMPTY; hr = PropVariantChangeType(&dest, &src, 0, VT_R8); -todo_wine { ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(dest.vt == VT_R8, "Unexpected type %d.\n", dest.vt); ok(dest.dblVal == 65536.0, "Unexpected value %f.\n", dest.dblVal); -} + src.vt = VT_I8; src.hVal.QuadPart = -321; dest.vt = VT_EMPTY; hr = PropVariantChangeType(&dest, &src, 0, VT_R8); -todo_wine { ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(dest.vt == VT_R8, "Unexpected type %d.\n", dest.vt); ok(dest.dblVal == -321.0, "Unexpected value %f.\n", dest.dblVal); -} + src.vt = VT_UI4; src.ulVal = 6; dest.vt = VT_EMPTY; hr = PropVariantChangeType(&dest, &src, 0, VT_R8); -todo_wine { ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(dest.vt == VT_R8, "Unexpected type %d.\n", dest.vt); ok(dest.dblVal == 6.0, "Unexpected value %f.\n", dest.dblVal); -} + src.vt = VT_UI8; src.uhVal.QuadPart = 8; dest.vt = VT_EMPTY; hr = PropVariantChangeType(&dest, &src, 0, VT_R8); -todo_wine { ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(dest.vt == VT_R8, "Unexpected type %d.\n", dest.vt); ok(dest.dblVal == 8.0, "Unexpected value %f.\n", dest.dblVal); -} + src.vt = VT_R4; src.fltVal = 8.1f; dest.vt = VT_EMPTY; hr = PropVariantChangeType(&dest, &src, 0, VT_R8); -todo_wine { ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(dest.vt == VT_R8, "Unexpected type %d.\n", dest.vt); ok(dest.dblVal == 8.1f, "Unexpected value %f.\n", dest.dblVal); -} + src.vt = VT_R4; src.fltVal = 8.6f; dest.vt = VT_EMPTY; hr = PropVariantChangeType(&dest, &src, 0, VT_R8); -todo_wine { ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); ok(dest.vt == VT_R8, "Unexpected type %d.\n", dest.vt); ok(dest.dblVal == 8.6f, "Unexpected value %f.\n", dest.dblVal); } -}
static void test_PropVariantChangeType(void) {