Index: tests/MathTest.cpp |
diff --git a/tests/MathTest.cpp b/tests/MathTest.cpp |
index 24e46f3097aea20d0f62277dd74aae2dd44eb5c2..de7ad1db78ed3a82c2e43aeaa87c3d11b6827a72 100644 |
--- a/tests/MathTest.cpp |
+++ b/tests/MathTest.cpp |
@@ -382,14 +382,15 @@ static void unittest_half(skiatest::Reporter* reporter) { |
} |
-static void test_rsqrt(skiatest::Reporter* reporter) { |
+template <typename RSqrtFn> |
+static void test_rsqrt(skiatest::Reporter* reporter, RSqrtFn rsqrt) { |
const float maxRelativeError = 6.50196699e-4f; |
// test close to 0 up to 1 |
float input = 0.000001f; |
for (int i = 0; i < 1000; ++i) { |
float exact = 1.0f/sk_float_sqrt(input); |
- float estimate = sk_float_rsqrt(input); |
+ float estimate = rsqrt(input); |
float relativeError = sk_float_abs(exact - estimate)/exact; |
REPORTER_ASSERT(reporter, relativeError <= maxRelativeError); |
input += 0.001f; |
@@ -399,7 +400,7 @@ static void test_rsqrt(skiatest::Reporter* reporter) { |
input = 1.0f; |
for (int i = 0; i < 1000; ++i) { |
float exact = 1.0f/sk_float_sqrt(input); |
- float estimate = sk_float_rsqrt(input); |
+ float estimate = rsqrt(input); |
float relativeError = sk_float_abs(exact - estimate)/exact; |
REPORTER_ASSERT(reporter, relativeError <= maxRelativeError); |
input += 0.01f; |
@@ -409,7 +410,7 @@ static void test_rsqrt(skiatest::Reporter* reporter) { |
input = 1000000.0f; |
for (int i = 0; i < 100; ++i) { |
float exact = 1.0f/sk_float_sqrt(input); |
- float estimate = sk_float_rsqrt(input); |
+ float estimate = rsqrt(input); |
float relativeError = sk_float_abs(exact - estimate)/exact; |
REPORTER_ASSERT(reporter, relativeError <= maxRelativeError); |
input += 754326.f; |
@@ -555,7 +556,8 @@ DEF_TEST(Math, reporter) { |
unittest_fastfloat(reporter); |
unittest_isfinite(reporter); |
unittest_half(reporter); |
- test_rsqrt(reporter); |
+ test_rsqrt(reporter, sk_float_rsqrt); |
+ test_rsqrt(reporter, sk_float_rsqrt_portable); |
for (i = 0; i < 10000; i++) { |
SkFixed numer = rand.nextS(); |