diff options
Diffstat (limited to 'deps/v8/test/mjsunit/wasm/i31ref.js')
-rw-r--r-- | deps/v8/test/mjsunit/wasm/i31ref.js | 85 |
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)); +})(); |