d3dx10_43/tests: Use compare_uint() in compare_float() instead of abs().

The result of abs(INT_MIN) is INT_MIN, which breaks the ulps comparison.
This commit is contained in:
Jeff Smith 2023-08-02 22:39:28 -05:00 committed by Alexandre Julliard
parent c449da64e1
commit 11516e7cee

View file

@ -1120,6 +1120,13 @@ static ULONG get_refcount(void *iface)
return IUnknown_Release(unknown); return IUnknown_Release(unknown);
} }
static BOOL compare_uint(unsigned int x, unsigned int y, unsigned int max_diff)
{
unsigned int diff = x > y ? x - y : y - x;
return diff <= max_diff;
}
static BOOL compare_float(float f, float g, unsigned int ulps) static BOOL compare_float(float f, float g, unsigned int ulps)
{ {
int x = *(int *)&f; int x = *(int *)&f;
@ -1130,10 +1137,7 @@ static BOOL compare_float(float f, float g, unsigned int ulps)
if (y < 0) if (y < 0)
y = INT_MIN - y; y = INT_MIN - y;
if (abs(x - y) > ulps) return compare_uint(x, y, ulps);
return FALSE;
return TRUE;
} }
static char *get_str_a(const WCHAR *wstr) static char *get_str_a(const WCHAR *wstr)