Index: tests/Float16Test.cpp |
diff --git a/tests/Float16Test.cpp b/tests/Float16Test.cpp |
index 8ab56048e9fac2cfc98a046c2575e92727d308a9..31fd861ca9de509d6f1dd086998378152ef17ef0 100644 |
--- a/tests/Float16Test.cpp |
+++ b/tests/Float16Test.cpp |
@@ -61,26 +61,37 @@ static uint32_t u(float f) { |
return x; |
} |
-DEF_TEST(HalfToFloat_finite, r) { |
+static bool is_ordinary(float f) { |
+ return f == 0.0f || isfinite(f); |
msarett
2016/08/18 13:19:55
nit: Why not sk_float_is_finite()?
nit: Change fu
|
+} |
+ |
+static bool is_denorm(uint16_t h) { |
+ return (h & 0x7fff) < 0x0400; |
+} |
+ |
+DEF_TEST(SkHalfToFloat_ordinary, r) { |
for (uint32_t h = 0; h <= 0xffff; h++) { |
+ if (is_denorm(h)) { |
+ continue; |
msarett
2016/08/18 13:19:55
Can we assert that this converts to zero here?
|
+ } |
float f = SkHalfToFloat(h); |
- if (isfinite(f)) { |
- float got = SkHalfToFloat_finite(h)[0]; |
+ if (is_ordinary(f)) { |
+ float got = SkHalfToFloat_ordinary(h)[0]; |
if (got != f) { |
SkDebugf("0x%04x -> 0x%08x (%g), want 0x%08x (%g)\n", |
h, |
u(got), got, |
u(f), f); |
} |
- REPORTER_ASSERT(r, SkHalfToFloat_finite(h)[0] == f); |
+ REPORTER_ASSERT(r, SkHalfToFloat_ordinary(h)[0] == f); |
uint64_t result; |
- SkFloatToHalf_finite(SkHalfToFloat_finite(h)).store(&result); |
+ SkFloatToHalf_ordinary(SkHalfToFloat_ordinary(h)).store(&result); |
REPORTER_ASSERT(r, result == h); |
} |
} |
} |
-DEF_TEST(FloatToHalf_finite, r) { |
+DEF_TEST(SkFloatToHalf_ordinary, r) { |
#if 0 |
for (uint64_t bits = 0; bits <= 0xffffffff; bits++) { |
#else |
@@ -90,9 +101,12 @@ DEF_TEST(FloatToHalf_finite, r) { |
#endif |
float f; |
memcpy(&f, &bits, 4); |
- if (isfinite(f) && isfinite(SkHalfToFloat(SkFloatToHalf(f)))) { |
- uint16_t h1 = SkFloatToHalf_finite(Sk4f(f,0,0,0))[0], |
+ if (is_ordinary(f) && is_ordinary(SkHalfToFloat(SkFloatToHalf(f)))) { |
msarett
2016/08/18 13:19:55
Will this case ever not be true?
is_ordinary(SkHal
|
+ uint16_t h1 = SkFloatToHalf_ordinary(Sk4f(f,0,0,0))[0], |
h2 = SkFloatToHalf(f); |
+ if (is_denorm(h2)) { |
+ continue; |
msarett
2016/08/18 13:19:55
Can we assert that h1 is zero in this case?
|
+ } |
bool ok = (h1 == h2 || h1 == h2-1); |
msarett
2016/08/18 13:19:55
Realize this is not new... But do we allow a tole
|
REPORTER_ASSERT(r, ok); |
if (!ok) { |