summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2015-11-01 19:13:24 -0800
committerAlon Zakai <alonzakai@gmail.com>2015-11-01 19:13:24 -0800
commitc8cbfbeb8d1cc108bbb0f1a7f145a50c06059c0e (patch)
tree92423d6d4a10fe5e3bba371ac8b053fbbf698225
parentc0a332693eceec4171c4e2fef30924e4f22771fc (diff)
downloadbinaryen-c8cbfbeb8d1cc108bbb0f1a7f145a50c06059c0e.tar.gz
binaryen-c8cbfbeb8d1cc108bbb0f1a7f145a50c06059c0e.tar.bz2
binaryen-c8cbfbeb8d1cc108bbb0f1a7f145a50c06059c0e.zip
add mem test
-rw-r--r--test/mem.cpp29
-rw-r--r--test/mem.emcc1
-rw-r--r--test/mem.post.js51
-rw-r--r--test/mem.txt192
4 files changed, 273 insertions, 0 deletions
diff --git a/test/mem.cpp b/test/mem.cpp
new file mode 100644
index 000000000..a48d2e3d2
--- /dev/null
+++ b/test/mem.cpp
@@ -0,0 +1,29 @@
+#include <stdint.h>
+#include <emscripten.h>
+
+extern "C" {
+
+int EMSCRIPTEN_KEEPALIVE loadi8(size_t addr) { return ((int8_t*)addr)[0]; }
+int EMSCRIPTEN_KEEPALIVE loadi16(size_t addr) { return ((int16_t*)addr)[0]; }
+int EMSCRIPTEN_KEEPALIVE loadi32(size_t addr) { return ((int32_t*)addr)[0]; }
+
+int EMSCRIPTEN_KEEPALIVE loadu8(size_t addr) { return ((uint8_t*)addr)[0]; }
+int EMSCRIPTEN_KEEPALIVE loadu16(size_t addr) { return ((uint16_t*)addr)[0]; }
+int EMSCRIPTEN_KEEPALIVE loadu32(size_t addr) { return ((uint32_t*)addr)[0]; }
+
+double EMSCRIPTEN_KEEPALIVE loadf32(size_t addr) { return ((float*)addr)[0]; }
+double EMSCRIPTEN_KEEPALIVE loadf64(size_t addr) { return ((double*)addr)[0]; }
+
+void EMSCRIPTEN_KEEPALIVE storei8(size_t addr, int8_t v) { ((int8_t*)addr)[0] = v; }
+void EMSCRIPTEN_KEEPALIVE storei16(size_t addr, int16_t v) { ((int16_t*)addr)[0] = v; }
+void EMSCRIPTEN_KEEPALIVE storei32(size_t addr, int32_t v) { ((int32_t*)addr)[0] = v; }
+
+void EMSCRIPTEN_KEEPALIVE storeu8(size_t addr, uint8_t v) { ((uint8_t*)addr)[0] = v; }
+void EMSCRIPTEN_KEEPALIVE storeu16(size_t addr, uint16_t v) { ((uint16_t*)addr)[0] = v; }
+void EMSCRIPTEN_KEEPALIVE storeu32(size_t addr, uint32_t v) { ((uint32_t*)addr)[0] = v; }
+
+void EMSCRIPTEN_KEEPALIVE storef32(size_t addr, float v) { ((float*)addr)[0] = v; }
+void EMSCRIPTEN_KEEPALIVE storef64(size_t addr, double v) { ((double*)addr)[0] = v; }
+
+}
+
diff --git a/test/mem.emcc b/test/mem.emcc
new file mode 100644
index 000000000..40c421eee
--- /dev/null
+++ b/test/mem.emcc
@@ -0,0 +1 @@
+["-s", "ASSERTIONS=0"]
diff --git a/test/mem.post.js b/test/mem.post.js
new file mode 100644
index 000000000..00eda262c
--- /dev/null
+++ b/test/mem.post.js
@@ -0,0 +1,51 @@
+
+function test(name) {
+ Module.print(name);
+ function doTest(x) {
+ // write to 0, as 0-8 is normally unused anyhow
+ Module['_store' + name](0, x);
+ Module.print(' ' + [x] + ' ==> ' + Module['_load' + name](0));
+ }
+ 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 << 10);
+ doTest(1 << 20);
+ doTest(-1 | 0);
+ doTest((-1 | 0) + 1);
+ doTest((-1 | 0) - 1);
+ doTest(-1 >>> 0);
+ doTest((-1 >>> 0) + 1);
+ doTest((-1 >>> 0) - 1);
+
+ Module.print(' pre ==> ' + Module['_load' + name](0));
+ HEAPU8[0] = 10;
+ HEAPU8[1] = 20;
+ HEAPU8[2] = 30;
+ HEAPU8[3] = 40;
+ HEAPU8[4] = 50;
+ HEAPU8[5] = 99;
+ HEAPU8[6] = 125;
+ HEAPU8[7] = 250;
+ Module.print(' post ==> ' + Module['_load' + name](0));
+}
+
+test('i8');
+test('i16');
+test('i32');
+test('u8');
+test('u16');
+test('u32');
+test('f32');
+test('f64');
+
diff --git a/test/mem.txt b/test/mem.txt
new file mode 100644
index 000000000..ae087e142
--- /dev/null
+++ b/test/mem.txt
@@ -0,0 +1,192 @@
+i8
+ 0 ==> 0
+ 1 ==> 1
+ -1 ==> -1
+ 0.5 ==> 0
+ -0.5 ==> 0
+ 1.4 ==> 1
+ -1.4 ==> -1
+ 1.6 ==> 1
+ -1.6 ==> -1
+ 5.1 ==> 5
+ 5.3 ==> 5
+ 5.7 ==> 5
+ 5.9 ==> 5
+ 1024 ==> 0
+ 1048576 ==> 0
+ -1 ==> -1
+ 0 ==> 0
+ -2 ==> -2
+ 4294967295 ==> -1
+ 4294967296 ==> 0
+ 4294967294 ==> -2
+ pre ==> -2
+ post ==> 10
+i16
+ 0 ==> 0
+ 1 ==> 1
+ -1 ==> -1
+ 0.5 ==> 0
+ -0.5 ==> 0
+ 1.4 ==> 1
+ -1.4 ==> -1
+ 1.6 ==> 1
+ -1.6 ==> -1
+ 5.1 ==> 5
+ 5.3 ==> 5
+ 5.7 ==> 5
+ 5.9 ==> 5
+ 1024 ==> 1024
+ 1048576 ==> 0
+ -1 ==> -1
+ 0 ==> 0
+ -2 ==> -2
+ 4294967295 ==> -1
+ 4294967296 ==> 0
+ 4294967294 ==> -2
+ pre ==> -2
+ post ==> 5130
+i32
+ 0 ==> 0
+ 1 ==> 1
+ -1 ==> -1
+ 0.5 ==> 0
+ -0.5 ==> 0
+ 1.4 ==> 1
+ -1.4 ==> -1
+ 1.6 ==> 1
+ -1.6 ==> -1
+ 5.1 ==> 5
+ 5.3 ==> 5
+ 5.7 ==> 5
+ 5.9 ==> 5
+ 1024 ==> 1024
+ 1048576 ==> 1048576
+ -1 ==> -1
+ 0 ==> 0
+ -2 ==> -2
+ 4294967295 ==> -1
+ 4294967296 ==> 0
+ 4294967294 ==> -2
+ pre ==> -2
+ post ==> 673059850
+u8
+ 0 ==> 0
+ 1 ==> 1
+ -1 ==> 255
+ 0.5 ==> 0
+ -0.5 ==> 0
+ 1.4 ==> 1
+ -1.4 ==> 255
+ 1.6 ==> 1
+ -1.6 ==> 255
+ 5.1 ==> 5
+ 5.3 ==> 5
+ 5.7 ==> 5
+ 5.9 ==> 5
+ 1024 ==> 0
+ 1048576 ==> 0
+ -1 ==> 255
+ 0 ==> 0
+ -2 ==> 254
+ 4294967295 ==> 255
+ 4294967296 ==> 0
+ 4294967294 ==> 254
+ pre ==> 254
+ post ==> 10
+u16
+ 0 ==> 0
+ 1 ==> 1
+ -1 ==> 65535
+ 0.5 ==> 0
+ -0.5 ==> 0
+ 1.4 ==> 1
+ -1.4 ==> 65535
+ 1.6 ==> 1
+ -1.6 ==> 65535
+ 5.1 ==> 5
+ 5.3 ==> 5
+ 5.7 ==> 5
+ 5.9 ==> 5
+ 1024 ==> 1024
+ 1048576 ==> 0
+ -1 ==> 65535
+ 0 ==> 0
+ -2 ==> 65534
+ 4294967295 ==> 65535
+ 4294967296 ==> 0
+ 4294967294 ==> 65534
+ pre ==> 65534
+ post ==> 5130
+u32
+ 0 ==> 0
+ 1 ==> 1
+ -1 ==> -1
+ 0.5 ==> 0
+ -0.5 ==> 0
+ 1.4 ==> 1
+ -1.4 ==> -1
+ 1.6 ==> 1
+ -1.6 ==> -1
+ 5.1 ==> 5
+ 5.3 ==> 5
+ 5.7 ==> 5
+ 5.9 ==> 5
+ 1024 ==> 1024
+ 1048576 ==> 1048576
+ -1 ==> -1
+ 0 ==> 0
+ -2 ==> -2
+ 4294967295 ==> -1
+ 4294967296 ==> 0
+ 4294967294 ==> -2
+ pre ==> -2
+ post ==> 673059850
+f32
+ 0 ==> 0
+ 1 ==> 1
+ -1 ==> -1
+ 0.5 ==> 0.5
+ -0.5 ==> -0.5
+ 1.4 ==> 1.399999976158142
+ -1.4 ==> -1.399999976158142
+ 1.6 ==> 1.600000023841858
+ -1.6 ==> -1.600000023841858
+ 5.1 ==> 5.099999904632568
+ 5.3 ==> 5.300000190734863
+ 5.7 ==> 5.699999809265137
+ 5.9 ==> 5.900000095367432
+ 1024 ==> 1024
+ 1048576 ==> 1048576
+ -1 ==> -1
+ 0 ==> 0
+ -2 ==> -2
+ 4294967295 ==> 4294967296
+ 4294967296 ==> 4294967296
+ 4294967294 ==> 4294967296
+ pre ==> 4294967296
+ post ==> 8.775107173558151e-15
+f64
+ 0 ==> 0
+ 1 ==> 1
+ -1 ==> -1
+ 0.5 ==> 0.5
+ -0.5 ==> -0.5
+ 1.4 ==> 1.4
+ -1.4 ==> -1.4
+ 1.6 ==> 1.6
+ -1.6 ==> -1.6
+ 5.1 ==> 5.1
+ 5.3 ==> 5.3
+ 5.7 ==> 5.7
+ 5.9 ==> 5.9
+ 1024 ==> 1024
+ 1048576 ==> 1048576
+ -1 ==> -1
+ 0 ==> 0
+ -2 ==> -2
+ 4294967295 ==> 4294967295
+ 4294967296 ==> 4294967296
+ 4294967294 ==> 4294967294
+ pre ==> 4294967294
+ post ==> -1.066886858533604e+282