diff options
-rw-r--r-- | test/float_ops_precise.cpp | 45 | ||||
-rw-r--r-- | test/float_ops_precise.emcc | 1 | ||||
-rw-r--r-- | test/float_ops_precise.post.js | 78 | ||||
-rw-r--r-- | test/float_ops_precise.txt | 345 |
4 files changed, 469 insertions, 0 deletions
diff --git a/test/float_ops_precise.cpp b/test/float_ops_precise.cpp new file mode 100644 index 000000000..ddd8bcae6 --- /dev/null +++ b/test/float_ops_precise.cpp @@ -0,0 +1,45 @@ +#include <cmath> +#include <algorithm> +#include <emscripten.h> + +extern "C" { + +// unary +double EMSCRIPTEN_KEEPALIVE dneg(double x) { return -x; } +double EMSCRIPTEN_KEEPALIVE dfloor(double x) { return floor(x); } + +// binary +double EMSCRIPTEN_KEEPALIVE dadd(double x, double y) { return x + y; } +double EMSCRIPTEN_KEEPALIVE dsub(double x, double y) { return x - y; } +double EMSCRIPTEN_KEEPALIVE dmul(double x, double y) { return x * y; } +double EMSCRIPTEN_KEEPALIVE ddiv(double x, double y) { return x / y; } +double EMSCRIPTEN_KEEPALIVE dcopysign(double x, double y) { return std::copysign(x, y); } +double EMSCRIPTEN_KEEPALIVE dmin(double x, double y) { return std::min(x, y); } +double EMSCRIPTEN_KEEPALIVE dmax(double x, double y) { return std::max(x, y); } + +// comparisons +int EMSCRIPTEN_KEEPALIVE deq(double x, double y) { return x == y; } +int EMSCRIPTEN_KEEPALIVE dne(double x, double y) { return x != y; } +int EMSCRIPTEN_KEEPALIVE dlt(double x, double y) { return x < y; } +int EMSCRIPTEN_KEEPALIVE dle(double x, double y) { return x <= y; } +int EMSCRIPTEN_KEEPALIVE dgt(double x, double y) { return x > y; } +int EMSCRIPTEN_KEEPALIVE dge(double x, double y) { return x >= y; } + +double EMSCRIPTEN_KEEPALIVE int_to_double(int x) { + double d = x; + return d + 1.23; +} + +double EMSCRIPTEN_KEEPALIVE uint_to_double(unsigned x) { + double d = x; + return d + 1.23; +} + +int EMSCRIPTEN_KEEPALIVE double_to_int(double d) { + d += 1.23; + int x = d; + return x; +} + +} + diff --git a/test/float_ops_precise.emcc b/test/float_ops_precise.emcc new file mode 100644 index 000000000..68a64d12d --- /dev/null +++ b/test/float_ops_precise.emcc @@ -0,0 +1 @@ +["-s", "ASSERTIONS=0", "-s", "PRECISE_F32=1"] diff --git a/test/float_ops_precise.post.js b/test/float_ops_precise.post.js new file mode 100644 index 000000000..117175ffd --- /dev/null +++ b/test/float_ops_precise.post.js @@ -0,0 +1,78 @@ + +// unary +function testUnary(name) { + Module.print(name); + function doTest(x) { + Module.print(' ' + [x] + ' ==> ' + Module['_' + name](x)); + } + doTest(0); + doTest(1); + doTest(-1); + doTest(0.5); + doTest(-0.5); + doTest(1.4); + doTest(-1.4); + doTest(1.6); + doTest(-1.6); + doTest(5.1); + doTest(5.3); + doTest(5.7); + doTest(5.9); + doTest(-1 | 0); + doTest((-1 | 0) + 1); + doTest((-1 | 0) - 1); +} +testUnary('dfloor'); + +// binary +function testBinary(name) { + Module.print(name); + function doTest(x, y) { + Module.print(' ' + [x, y] + ' ==> ' + Module['_' + name](x, y)); + } + doTest(0, 0); + doTest(0, 1); + doTest(1, 0); + doTest(1, 1); + doTest(5, 6); + doTest(6, 5); + doTest(101, -12); + doTest(-12, 101); + doTest(-1, 5); + doTest(5, -1); + doTest(-1, -1); + doTest(0.12, 0.12); + doTest(0.812, 1); + doTest(1.821, 0); + doTest(1, 1.212); + doTest(5.543, 6); + doTest(6, 5.121); + doTest(101.001, -12); + doTest(-12.001, 101); + doTest(-1, 5.123); + doTest(5, -1.123); + doTest(-1, -1.123); +} +testBinary('dadd'); +testBinary('dsub'); +testBinary('dmul'); +testBinary('ddiv'); +//testBinary('dcopysign'); // TODO this uses tempDoublePtr, a global, which is not yet functional +testBinary('dmin'); +testBinary('dmax'); + +// comparisons +testBinary('deq'); +testBinary('dne'); +testBinary('dlt'); +testBinary('dle'); +testBinary('dgt'); +testBinary('dge'); + +// conversions +testUnary('int_to_double'); +testUnary('uint_to_double'); +testUnary('double_to_int'); + +Module.print('done.'); + diff --git a/test/float_ops_precise.txt b/test/float_ops_precise.txt new file mode 100644 index 000000000..aa28b7eb6 --- /dev/null +++ b/test/float_ops_precise.txt @@ -0,0 +1,345 @@ +dfloor + 0 ==> 0 + 1 ==> 1 + -1 ==> -1 + 0.5 ==> 0 + -0.5 ==> -1 + 1.4 ==> 1 + -1.4 ==> -2 + 1.6 ==> 1 + -1.6 ==> -2 + 5.1 ==> 5 + 5.3 ==> 5 + 5.7 ==> 5 + 5.9 ==> 5 + -1 ==> -1 + 0 ==> 0 + -2 ==> -2 +dadd + 0,0 ==> 0 + 0,1 ==> 1 + 1,0 ==> 1 + 1,1 ==> 2 + 5,6 ==> 11 + 6,5 ==> 11 + 101,-12 ==> 89 + -12,101 ==> 89 + -1,5 ==> 4 + 5,-1 ==> 4 + -1,-1 ==> -2 + 0.12,0.12 ==> 0.24 + 0.812,1 ==> 1.812 + 1.821,0 ==> 1.821 + 1,1.212 ==> 2.2119999999999997 + 5.543,6 ==> 11.543 + 6,5.121 ==> 11.121 + 101.001,-12 ==> 89.001 + -12.001,101 ==> 88.999 + -1,5.123 ==> 4.123 + 5,-1.123 ==> 3.877 + -1,-1.123 ==> -2.123 +dsub + 0,0 ==> 0 + 0,1 ==> -1 + 1,0 ==> 1 + 1,1 ==> 0 + 5,6 ==> -1 + 6,5 ==> 1 + 101,-12 ==> 113 + -12,101 ==> -113 + -1,5 ==> -6 + 5,-1 ==> 6 + -1,-1 ==> 0 + 0.12,0.12 ==> 0 + 0.812,1 ==> -0.18799999999999994 + 1.821,0 ==> 1.821 + 1,1.212 ==> -0.21199999999999997 + 5.543,6 ==> -0.45699999999999985 + 6,5.121 ==> 0.8789999999999996 + 101.001,-12 ==> 113.001 + -12.001,101 ==> -113.001 + -1,5.123 ==> -6.123 + 5,-1.123 ==> 6.123 + -1,-1.123 ==> 0.123 +dmul + 0,0 ==> 0 + 0,1 ==> 0 + 1,0 ==> 0 + 1,1 ==> 1 + 5,6 ==> 30 + 6,5 ==> 30 + 101,-12 ==> -1212 + -12,101 ==> -1212 + -1,5 ==> -5 + 5,-1 ==> -5 + -1,-1 ==> 1 + 0.12,0.12 ==> 0.0144 + 0.812,1 ==> 0.812 + 1.821,0 ==> 0 + 1,1.212 ==> 1.212 + 5.543,6 ==> 33.258 + 6,5.121 ==> 30.726000000000003 + 101.001,-12 ==> -1212.0120000000002 + -12.001,101 ==> -1212.1009999999999 + -1,5.123 ==> -5.123 + 5,-1.123 ==> -5.615 + -1,-1.123 ==> 1.123 +ddiv + 0,0 ==> NaN + 0,1 ==> 0 + 1,0 ==> Infinity + 1,1 ==> 1 + 5,6 ==> 0.8333333333333334 + 6,5 ==> 1.2 + 101,-12 ==> -8.416666666666666 + -12,101 ==> -0.1188118811881188 + -1,5 ==> -0.2 + 5,-1 ==> -5 + -1,-1 ==> 1 + 0.12,0.12 ==> 1 + 0.812,1 ==> 0.812 + 1.821,0 ==> Infinity + 1,1.212 ==> 0.8250825082508251 + 5.543,6 ==> 0.9238333333333334 + 6,5.121 ==> 1.1716461628588166 + 101.001,-12 ==> -8.41675 + -12.001,101 ==> -0.11882178217821782 + -1,5.123 ==> -0.19519812609798945 + 5,-1.123 ==> -4.452359750667854 + -1,-1.123 ==> 0.8904719501335708 +dmin + 0,0 ==> 0 + 0,1 ==> 0 + 1,0 ==> 0 + 1,1 ==> 1 + 5,6 ==> 5 + 6,5 ==> 5 + 101,-12 ==> -12 + -12,101 ==> -12 + -1,5 ==> -1 + 5,-1 ==> -1 + -1,-1 ==> -1 + 0.12,0.12 ==> 0.12 + 0.812,1 ==> 0.812 + 1.821,0 ==> 0 + 1,1.212 ==> 1 + 5.543,6 ==> 5.543 + 6,5.121 ==> 5.121 + 101.001,-12 ==> -12 + -12.001,101 ==> -12.001 + -1,5.123 ==> -1 + 5,-1.123 ==> -1.123 + -1,-1.123 ==> -1.123 +dmax + 0,0 ==> 0 + 0,1 ==> 1 + 1,0 ==> 1 + 1,1 ==> 1 + 5,6 ==> 6 + 6,5 ==> 6 + 101,-12 ==> 101 + -12,101 ==> 101 + -1,5 ==> 5 + 5,-1 ==> 5 + -1,-1 ==> -1 + 0.12,0.12 ==> 0.12 + 0.812,1 ==> 1 + 1.821,0 ==> 1.821 + 1,1.212 ==> 1.212 + 5.543,6 ==> 6 + 6,5.121 ==> 6 + 101.001,-12 ==> 101.001 + -12.001,101 ==> 101 + -1,5.123 ==> 5.123 + 5,-1.123 ==> 5 + -1,-1.123 ==> -1 +deq + 0,0 ==> 1 + 0,1 ==> 0 + 1,0 ==> 0 + 1,1 ==> 1 + 5,6 ==> 0 + 6,5 ==> 0 + 101,-12 ==> 0 + -12,101 ==> 0 + -1,5 ==> 0 + 5,-1 ==> 0 + -1,-1 ==> 1 + 0.12,0.12 ==> 1 + 0.812,1 ==> 0 + 1.821,0 ==> 0 + 1,1.212 ==> 0 + 5.543,6 ==> 0 + 6,5.121 ==> 0 + 101.001,-12 ==> 0 + -12.001,101 ==> 0 + -1,5.123 ==> 0 + 5,-1.123 ==> 0 + -1,-1.123 ==> 0 +dne + 0,0 ==> 0 + 0,1 ==> 1 + 1,0 ==> 1 + 1,1 ==> 0 + 5,6 ==> 1 + 6,5 ==> 1 + 101,-12 ==> 1 + -12,101 ==> 1 + -1,5 ==> 1 + 5,-1 ==> 1 + -1,-1 ==> 0 + 0.12,0.12 ==> 0 + 0.812,1 ==> 1 + 1.821,0 ==> 1 + 1,1.212 ==> 1 + 5.543,6 ==> 1 + 6,5.121 ==> 1 + 101.001,-12 ==> 1 + -12.001,101 ==> 1 + -1,5.123 ==> 1 + 5,-1.123 ==> 1 + -1,-1.123 ==> 1 +dlt + 0,0 ==> 0 + 0,1 ==> 1 + 1,0 ==> 0 + 1,1 ==> 0 + 5,6 ==> 1 + 6,5 ==> 0 + 101,-12 ==> 0 + -12,101 ==> 1 + -1,5 ==> 1 + 5,-1 ==> 0 + -1,-1 ==> 0 + 0.12,0.12 ==> 0 + 0.812,1 ==> 1 + 1.821,0 ==> 0 + 1,1.212 ==> 1 + 5.543,6 ==> 1 + 6,5.121 ==> 0 + 101.001,-12 ==> 0 + -12.001,101 ==> 1 + -1,5.123 ==> 1 + 5,-1.123 ==> 0 + -1,-1.123 ==> 0 +dle + 0,0 ==> 1 + 0,1 ==> 1 + 1,0 ==> 0 + 1,1 ==> 1 + 5,6 ==> 1 + 6,5 ==> 0 + 101,-12 ==> 0 + -12,101 ==> 1 + -1,5 ==> 1 + 5,-1 ==> 0 + -1,-1 ==> 1 + 0.12,0.12 ==> 1 + 0.812,1 ==> 1 + 1.821,0 ==> 0 + 1,1.212 ==> 1 + 5.543,6 ==> 1 + 6,5.121 ==> 0 + 101.001,-12 ==> 0 + -12.001,101 ==> 1 + -1,5.123 ==> 1 + 5,-1.123 ==> 0 + -1,-1.123 ==> 0 +dgt + 0,0 ==> 0 + 0,1 ==> 0 + 1,0 ==> 1 + 1,1 ==> 0 + 5,6 ==> 0 + 6,5 ==> 1 + 101,-12 ==> 1 + -12,101 ==> 0 + -1,5 ==> 0 + 5,-1 ==> 1 + -1,-1 ==> 0 + 0.12,0.12 ==> 0 + 0.812,1 ==> 0 + 1.821,0 ==> 1 + 1,1.212 ==> 0 + 5.543,6 ==> 0 + 6,5.121 ==> 1 + 101.001,-12 ==> 1 + -12.001,101 ==> 0 + -1,5.123 ==> 0 + 5,-1.123 ==> 1 + -1,-1.123 ==> 1 +dge + 0,0 ==> 1 + 0,1 ==> 0 + 1,0 ==> 1 + 1,1 ==> 1 + 5,6 ==> 0 + 6,5 ==> 1 + 101,-12 ==> 1 + -12,101 ==> 0 + -1,5 ==> 0 + 5,-1 ==> 1 + -1,-1 ==> 1 + 0.12,0.12 ==> 1 + 0.812,1 ==> 0 + 1.821,0 ==> 1 + 1,1.212 ==> 0 + 5.543,6 ==> 0 + 6,5.121 ==> 1 + 101.001,-12 ==> 1 + -12.001,101 ==> 0 + -1,5.123 ==> 0 + 5,-1.123 ==> 1 + -1,-1.123 ==> 1 +int_to_double + 0 ==> 1.23 + 1 ==> 2.23 + -1 ==> 0.22999999999999998 + 0.5 ==> 1.23 + -0.5 ==> 1.23 + 1.4 ==> 2.23 + -1.4 ==> 0.22999999999999998 + 1.6 ==> 2.23 + -1.6 ==> 0.22999999999999998 + 5.1 ==> 6.23 + 5.3 ==> 6.23 + 5.7 ==> 6.23 + 5.9 ==> 6.23 + -1 ==> 0.22999999999999998 + 0 ==> 1.23 + -2 ==> -0.77 +uint_to_double + 0 ==> 1.23 + 1 ==> 2.23 + -1 ==> 4294967296.23 + 0.5 ==> 1.23 + -0.5 ==> 1.23 + 1.4 ==> 2.23 + -1.4 ==> 4294967296.23 + 1.6 ==> 2.23 + -1.6 ==> 4294967296.23 + 5.1 ==> 6.23 + 5.3 ==> 6.23 + 5.7 ==> 6.23 + 5.9 ==> 6.23 + -1 ==> 4294967296.23 + 0 ==> 1.23 + -2 ==> 4294967295.23 +double_to_int + 0 ==> 1 + 1 ==> 2 + -1 ==> 0 + 0.5 ==> 1 + -0.5 ==> 0 + 1.4 ==> 2 + -1.4 ==> 0 + 1.6 ==> 2 + -1.6 ==> 0 + 5.1 ==> 6 + 5.3 ==> 6 + 5.7 ==> 6 + 5.9 ==> 7 + -1 ==> 0 + 0 ==> 1 + -2 ==> 0 +done. |