summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/float_ops_precise.cpp45
-rw-r--r--test/float_ops_precise.emcc1
-rw-r--r--test/float_ops_precise.post.js78
-rw-r--r--test/float_ops_precise.txt345
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.