Lukacs T. Berki | 8796230 | 2016-04-01 15:34:12 +0200 | [diff] [blame^] | 1 | #include "double_conversion.h" |
| 2 | #include <math.h> |
| 3 | #include <stdio.h> |
| 4 | |
| 5 | static const double testvalues[] = { |
| 6 | 0.0, -0.0, 0.1, -0.1, |
| 7 | M_PI, -M_PI, 123456.789, -123456.789, |
| 8 | INFINITY, -INFINITY, NAN, INFINITY - INFINITY, |
| 9 | 1e38, -1e38, 1e39, -1e39, |
| 10 | 1e-38, -1e-38, 1e-39, -1e-39, |
| 11 | 3.14159e-37,-3.14159e-37, 3.14159e-43, -3.14159e-43, |
| 12 | 1e-60, -1e-60, 1e-45, -1e-45, |
| 13 | 0.99999999999999, -0.99999999999999, 127.999999999999, -127.999999999999 |
| 14 | }; |
| 15 | |
| 16 | #define TESTVALUES_COUNT (sizeof(testvalues)/sizeof(testvalues[0])) |
| 17 | |
| 18 | int main() |
| 19 | { |
| 20 | int status = 0; |
| 21 | int i; |
| 22 | for (i = 0; i < TESTVALUES_COUNT; i++) |
| 23 | { |
| 24 | double orig = testvalues[i]; |
| 25 | float expected_float = (float)orig; |
| 26 | double expected_double = (double)expected_float; |
| 27 | |
| 28 | float got_float = double_to_float(*(uint64_t*)&orig); |
| 29 | uint64_t got_double = float_to_double(got_float); |
| 30 | |
| 31 | uint32_t e1 = *(uint32_t*)&expected_float; |
| 32 | uint32_t g1 = *(uint32_t*)&got_float; |
| 33 | uint64_t e2 = *(uint64_t*)&expected_double; |
| 34 | uint64_t g2 = got_double; |
| 35 | |
| 36 | if (g1 != e1) |
| 37 | { |
| 38 | printf("%3d double_to_float fail: %08x != %08x\n", i, g1, e1); |
| 39 | status = 1; |
| 40 | } |
| 41 | |
| 42 | if (g2 != e2) |
| 43 | { |
| 44 | printf("%3d float_to_double fail: %016llx != %016llx\n", i, |
| 45 | (unsigned long long)g2, |
| 46 | (unsigned long long)e2); |
| 47 | status = 1; |
| 48 | } |
| 49 | } |
| 50 | |
| 51 | return status; |
| 52 | } |
| 53 | |
| 54 | |
| 55 | |
| 56 | |