summaryrefslogtreecommitdiff
path: root/deps/v8/test/mjsunit/wasm/i31ref.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/test/mjsunit/wasm/i31ref.js')
-rw-r--r--deps/v8/test/mjsunit/wasm/i31ref.js85
1 files changed, 85 insertions, 0 deletions
diff --git a/deps/v8/test/mjsunit/wasm/i31ref.js b/deps/v8/test/mjsunit/wasm/i31ref.js
index 83d3c58494..aba5e1e1e1 100644
--- a/deps/v8/test/mjsunit/wasm/i31ref.js
+++ b/deps/v8/test/mjsunit/wasm/i31ref.js
@@ -54,3 +54,88 @@ d8.file.execute("test/mjsunit/wasm/wasm-module-builder.js");
assertEquals(42, instance.exports.i31_null(0));
assertTraps(kTrapNullDereference, () => instance.exports.i31_null(1));
})();
+
+(function I31RefJS() {
+ print(arguments.callee.name);
+
+ var builder = new WasmModuleBuilder();
+ builder.addFunction("roundtrip", makeSig([kWasmExternRef], [kWasmExternRef]))
+ .addBody([kExprLocalGet, 0, kGCPrefix, kExprExternInternalize,
+ kGCPrefix, kExprExternExternalize])
+ .exportFunc();
+ builder.addFunction("signed", makeSig([kWasmExternRef], [kWasmI32]))
+ .addBody([kExprLocalGet, 0, kGCPrefix, kExprExternInternalize,
+ kGCPrefix, kExprRefCast, kI31RefCode, kGCPrefix, kExprI31GetS])
+ .exportFunc();
+ builder.addFunction("unsigned", makeSig([kWasmExternRef], [kWasmI32]))
+ .addBody([kExprLocalGet, 0, kGCPrefix, kExprExternInternalize,
+ kGCPrefix, kExprRefCast, kI31RefCode, kGCPrefix, kExprI31GetU])
+ .exportFunc();
+ builder.addFunction("new", makeSig([kWasmI32], [kWasmExternRef]))
+ .addBody([kExprLocalGet, 0, kGCPrefix, kExprI31New,
+ kGCPrefix, kExprExternExternalize])
+ .exportFunc();
+
+ let instance = builder.instantiate();
+
+ assertEquals(0, instance.exports.roundtrip(0));
+ assertEquals(0, instance.exports.signed(0));
+ assertEquals(0, instance.exports.unsigned(0));
+ assertEquals(0, instance.exports.new(0));
+
+ assertEquals(123, instance.exports.roundtrip(123));
+ assertEquals(123, instance.exports.signed(123));
+ assertEquals(123, instance.exports.unsigned(123));
+ assertEquals(123, instance.exports.new(123));
+
+ // Max value.
+ assertEquals(0x3fffffff, instance.exports.roundtrip(0x3fffffff));
+ assertEquals(0x3fffffff, instance.exports.signed(0x3fffffff));
+ assertEquals(0x3fffffff, instance.exports.unsigned(0x3fffffff));
+ assertEquals(0x3fffffff, instance.exports.new(0x3fffffff));
+
+ // Double number.
+ assertEquals(1234.567, instance.exports.roundtrip(1234.567));
+ assertTraps(kTrapIllegalCast, () => instance.exports.signed(1234.567));
+ assertTraps(kTrapIllegalCast, () => instance.exports.unsigned(1234.567));
+
+ // Out-of-bounds positive integer.
+ assertEquals(0x40000000, instance.exports.roundtrip(0x40000000));
+ assertTraps(kTrapIllegalCast, () => instance.exports.signed(0x40000000));
+ assertTraps(kTrapIllegalCast, () => instance.exports.unsigned(0x40000000));
+ assertEquals(-0x40000000, instance.exports.new(0x40000000));
+
+ // Out-of-bounds negative integer.
+ assertEquals(-0x40000001, instance.exports.roundtrip(-0x40000001));
+ assertTraps(kTrapIllegalCast, () => instance.exports.signed(-0x40000001));
+ assertTraps(kTrapIllegalCast, () => instance.exports.unsigned(-0x40000001));
+ assertEquals(0x3fffffff, instance.exports.new(-0x40000001));
+
+ // Sign/zero extention.
+ assertEquals(-2, instance.exports.roundtrip(-2));
+ assertEquals(-2, instance.exports.signed(-2));
+ assertEquals(0x7ffffffe, instance.exports.unsigned(-2));
+ assertEquals(-2, instance.exports.new(-2));
+
+ // Min value.
+ assertEquals(-0x40000000, instance.exports.roundtrip(-0x40000000));
+ assertEquals(-0x40000000, instance.exports.signed(-0x40000000));
+ assertEquals(0x40000000, instance.exports.unsigned(-0x40000000));
+ assertEquals(-0x40000000, instance.exports.new(-0x40000000));
+
+ assertEquals(NaN, instance.exports.roundtrip(NaN));
+ assertTraps(kTrapIllegalCast, () => instance.exports.signed(NaN));
+ assertTraps(kTrapIllegalCast, () => instance.exports.unsigned(NaN));
+
+ assertEquals(-0, instance.exports.roundtrip(-0));
+ assertTraps(kTrapIllegalCast, () => instance.exports.signed(-0));
+ assertTraps(kTrapIllegalCast, () => instance.exports.unsigned(-0));
+
+ assertEquals(Infinity, instance.exports.roundtrip(Infinity));
+ assertTraps(kTrapIllegalCast, () => instance.exports.signed(Infinity));
+ assertTraps(kTrapIllegalCast, () => instance.exports.unsigned(Infinity));
+
+ assertEquals(-Infinity, instance.exports.roundtrip(-Infinity));
+ assertTraps(kTrapIllegalCast, () => instance.exports.signed(-Infinity));
+ assertTraps(kTrapIllegalCast, () => instance.exports.unsigned(-Infinity));
+})();