diff --git a/test/language/expressions/addition/bigint-arithmetic.js b/test/language/expressions/addition/bigint-arithmetic.js new file mode 100644 index 00000000000..71a3434e7cb --- /dev/null +++ b/test/language/expressions/addition/bigint-arithmetic.js @@ -0,0 +1,167 @@ +// Copyright (C) 2017 Robin Templeton. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-addition-operator-plus-runtime-semantics-evaluation +description: BigInt addition arithmetic +features: [BigInt] +---*/ + +function testAdd(x, y, z) { + assert.sameValue(x + y, z, x + " + " + y + " = " + z); + assert.sameValue(y + x, z, y + " + " + x + " = " + z); +} + +testAdd(0xFEDCBA9876543210n, 0xFEDCBA9876543210n, 0x1FDB97530ECA86420n); +testAdd(0xFEDCBA9876543210n, 0xFEDCBA987654320Fn, 0x1FDB97530ECA8641Fn); +testAdd(0xFEDCBA9876543210n, 0xFEDCBA98n, 0xFEDCBA997530ECA8n); +testAdd(0xFEDCBA9876543210n, 0xFEDCBA97n, 0xFEDCBA997530ECA7n); +testAdd(0xFEDCBA9876543210n, 0x1234n, 0xFEDCBA9876544444n); +testAdd(0xFEDCBA9876543210n, 0x3n, 0xFEDCBA9876543213n); +testAdd(0xFEDCBA9876543210n, 0x2n, 0xFEDCBA9876543212n); +testAdd(0xFEDCBA9876543210n, 0x1n, 0xFEDCBA9876543211n); +testAdd(0xFEDCBA9876543210n, 0x0n, 0xFEDCBA9876543210n); +testAdd(0xFEDCBA9876543210n, -0x1n, 0xFEDCBA987654320Fn); +testAdd(0xFEDCBA9876543210n, -0x2n, 0xFEDCBA987654320En); +testAdd(0xFEDCBA9876543210n, -0x3n, 0xFEDCBA987654320Dn); +testAdd(0xFEDCBA9876543210n, -0x1234n, 0xFEDCBA9876541FDCn); +testAdd(0xFEDCBA9876543210n, -0xFEDCBA97n, 0xFEDCBA9777777779n); +testAdd(0xFEDCBA9876543210n, -0xFEDCBA98n, 0xFEDCBA9777777778n); +testAdd(0xFEDCBA9876543210n, -0xFEDCBA987654320Fn, 0x1n); +testAdd(0xFEDCBA9876543210n, -0xFEDCBA9876543210n, 0x0n); +testAdd(0xFEDCBA987654320Fn, 0xFEDCBA987654320Fn, 0x1FDB97530ECA8641En); +testAdd(0xFEDCBA987654320Fn, 0xFEDCBA98n, 0xFEDCBA997530ECA7n); +testAdd(0xFEDCBA987654320Fn, 0xFEDCBA97n, 0xFEDCBA997530ECA6n); +testAdd(0xFEDCBA987654320Fn, 0x1234n, 0xFEDCBA9876544443n); +testAdd(0xFEDCBA987654320Fn, 0x3n, 0xFEDCBA9876543212n); +testAdd(0xFEDCBA987654320Fn, 0x2n, 0xFEDCBA9876543211n); +testAdd(0xFEDCBA987654320Fn, 0x1n, 0xFEDCBA9876543210n); +testAdd(0xFEDCBA987654320Fn, 0x0n, 0xFEDCBA987654320Fn); +testAdd(0xFEDCBA987654320Fn, -0x1n, 0xFEDCBA987654320En); +testAdd(0xFEDCBA987654320Fn, -0x2n, 0xFEDCBA987654320Dn); +testAdd(0xFEDCBA987654320Fn, -0x3n, 0xFEDCBA987654320Cn); +testAdd(0xFEDCBA987654320Fn, -0x1234n, 0xFEDCBA9876541FDBn); +testAdd(0xFEDCBA987654320Fn, -0xFEDCBA97n, 0xFEDCBA9777777778n); +testAdd(0xFEDCBA987654320Fn, -0xFEDCBA98n, 0xFEDCBA9777777777n); +testAdd(0xFEDCBA987654320Fn, -0xFEDCBA987654320Fn, 0x0n); +testAdd(0xFEDCBA987654320Fn, -0xFEDCBA9876543210n, -0x1n); +testAdd(0xFEDCBA98n, 0xFEDCBA98n, 0x1FDB97530n); +testAdd(0xFEDCBA98n, 0xFEDCBA97n, 0x1FDB9752Fn); +testAdd(0xFEDCBA98n, 0x1234n, 0xFEDCCCCCn); +testAdd(0xFEDCBA98n, 0x3n, 0xFEDCBA9Bn); +testAdd(0xFEDCBA98n, 0x2n, 0xFEDCBA9An); +testAdd(0xFEDCBA98n, 0x1n, 0xFEDCBA99n); +testAdd(0xFEDCBA98n, 0x0n, 0xFEDCBA98n); +testAdd(0xFEDCBA98n, -0x1n, 0xFEDCBA97n); +testAdd(0xFEDCBA98n, -0x2n, 0xFEDCBA96n); +testAdd(0xFEDCBA98n, -0x3n, 0xFEDCBA95n); +testAdd(0xFEDCBA98n, -0x1234n, 0xFEDCA864n); +testAdd(0xFEDCBA98n, -0xFEDCBA97n, 0x1n); +testAdd(0xFEDCBA98n, -0xFEDCBA98n, 0x0n); +testAdd(0xFEDCBA98n, -0xFEDCBA987654320Fn, -0xFEDCBA9777777777n); +testAdd(0xFEDCBA98n, -0xFEDCBA9876543210n, -0xFEDCBA9777777778n); +testAdd(0xFEDCBA97n, 0xFEDCBA97n, 0x1FDB9752En); +testAdd(0xFEDCBA97n, 0x1234n, 0xFEDCCCCBn); +testAdd(0xFEDCBA97n, 0x3n, 0xFEDCBA9An); +testAdd(0xFEDCBA97n, 0x2n, 0xFEDCBA99n); +testAdd(0xFEDCBA97n, 0x1n, 0xFEDCBA98n); +testAdd(0xFEDCBA97n, 0x0n, 0xFEDCBA97n); +testAdd(0xFEDCBA97n, -0x1n, 0xFEDCBA96n); +testAdd(0xFEDCBA97n, -0x2n, 0xFEDCBA95n); +testAdd(0xFEDCBA97n, -0x3n, 0xFEDCBA94n); +testAdd(0xFEDCBA97n, -0x1234n, 0xFEDCA863n); +testAdd(0xFEDCBA97n, -0xFEDCBA97n, 0x0n); +testAdd(0xFEDCBA97n, -0xFEDCBA98n, -0x1n); +testAdd(0xFEDCBA97n, -0xFEDCBA987654320Fn, -0xFEDCBA9777777778n); +testAdd(0xFEDCBA97n, -0xFEDCBA9876543210n, -0xFEDCBA9777777779n); +testAdd(0x1234n, 0x1234n, 0x2468n); +testAdd(0x1234n, 0x3n, 0x1237n); +testAdd(0x1234n, 0x2n, 0x1236n); +testAdd(0x1234n, 0x1n, 0x1235n); +testAdd(0x1234n, 0x0n, 0x1234n); +testAdd(0x1234n, -0x1n, 0x1233n); +testAdd(0x1234n, -0x2n, 0x1232n); +testAdd(0x1234n, -0x3n, 0x1231n); +testAdd(0x1234n, -0x1234n, 0x0n); +testAdd(0x1234n, -0xFEDCBA97n, -0xFEDCA863n); +testAdd(0x1234n, -0xFEDCBA98n, -0xFEDCA864n); +testAdd(0x1234n, -0xFEDCBA987654320Fn, -0xFEDCBA9876541FDBn); +testAdd(0x1234n, -0xFEDCBA9876543210n, -0xFEDCBA9876541FDCn); +testAdd(0x3n, 0x3n, 0x6n); +testAdd(0x3n, 0x2n, 0x5n); +testAdd(0x3n, 0x1n, 0x4n); +testAdd(0x3n, 0x0n, 0x3n); +testAdd(0x3n, -0x1n, 0x2n); +testAdd(0x3n, -0x2n, 0x1n); +testAdd(0x3n, -0x3n, 0x0n); +testAdd(0x3n, -0x1234n, -0x1231n); +testAdd(0x3n, -0xFEDCBA97n, -0xFEDCBA94n); +testAdd(0x3n, -0xFEDCBA98n, -0xFEDCBA95n); +testAdd(0x3n, -0xFEDCBA987654320Fn, -0xFEDCBA987654320Cn); +testAdd(0x3n, -0xFEDCBA9876543210n, -0xFEDCBA987654320Dn); +testAdd(0x2n, 0x2n, 0x4n); +testAdd(0x2n, 0x1n, 0x3n); +testAdd(0x2n, 0x0n, 0x2n); +testAdd(0x2n, -0x1n, 0x1n); +testAdd(0x2n, -0x2n, 0x0n); +testAdd(0x2n, -0x3n, -0x1n); +testAdd(0x2n, -0x1234n, -0x1232n); +testAdd(0x2n, -0xFEDCBA97n, -0xFEDCBA95n); +testAdd(0x2n, -0xFEDCBA98n, -0xFEDCBA96n); +testAdd(0x2n, -0xFEDCBA987654320Fn, -0xFEDCBA987654320Dn); +testAdd(0x2n, -0xFEDCBA9876543210n, -0xFEDCBA987654320En); +testAdd(0x1n, 0x1n, 0x2n); +testAdd(0x1n, 0x0n, 0x1n); +testAdd(0x1n, -0x1n, 0x0n); +testAdd(0x1n, -0x2n, -0x1n); +testAdd(0x1n, -0x3n, -0x2n); +testAdd(0x1n, -0x1234n, -0x1233n); +testAdd(0x1n, -0xFEDCBA97n, -0xFEDCBA96n); +testAdd(0x1n, -0xFEDCBA98n, -0xFEDCBA97n); +testAdd(0x1n, -0xFEDCBA987654320Fn, -0xFEDCBA987654320En); +testAdd(0x1n, -0xFEDCBA9876543210n, -0xFEDCBA987654320Fn); +testAdd(0x0n, 0x0n, 0x0n); +testAdd(0x0n, -0x1n, -0x1n); +testAdd(0x0n, -0x2n, -0x2n); +testAdd(0x0n, -0x3n, -0x3n); +testAdd(0x0n, -0x1234n, -0x1234n); +testAdd(0x0n, -0xFEDCBA97n, -0xFEDCBA97n); +testAdd(0x0n, -0xFEDCBA98n, -0xFEDCBA98n); +testAdd(0x0n, -0xFEDCBA987654320Fn, -0xFEDCBA987654320Fn); +testAdd(0x0n, -0xFEDCBA9876543210n, -0xFEDCBA9876543210n); +testAdd(-0x1n, -0x1n, -0x2n); +testAdd(-0x1n, -0x2n, -0x3n); +testAdd(-0x1n, -0x3n, -0x4n); +testAdd(-0x1n, -0x1234n, -0x1235n); +testAdd(-0x1n, -0xFEDCBA97n, -0xFEDCBA98n); +testAdd(-0x1n, -0xFEDCBA98n, -0xFEDCBA99n); +testAdd(-0x1n, -0xFEDCBA987654320Fn, -0xFEDCBA9876543210n); +testAdd(-0x1n, -0xFEDCBA9876543210n, -0xFEDCBA9876543211n); +testAdd(-0x2n, -0x2n, -0x4n); +testAdd(-0x2n, -0x3n, -0x5n); +testAdd(-0x2n, -0x1234n, -0x1236n); +testAdd(-0x2n, -0xFEDCBA97n, -0xFEDCBA99n); +testAdd(-0x2n, -0xFEDCBA98n, -0xFEDCBA9An); +testAdd(-0x2n, -0xFEDCBA987654320Fn, -0xFEDCBA9876543211n); +testAdd(-0x2n, -0xFEDCBA9876543210n, -0xFEDCBA9876543212n); +testAdd(-0x3n, -0x3n, -0x6n); +testAdd(-0x3n, -0x1234n, -0x1237n); +testAdd(-0x3n, -0xFEDCBA97n, -0xFEDCBA9An); +testAdd(-0x3n, -0xFEDCBA98n, -0xFEDCBA9Bn); +testAdd(-0x3n, -0xFEDCBA987654320Fn, -0xFEDCBA9876543212n); +testAdd(-0x3n, -0xFEDCBA9876543210n, -0xFEDCBA9876543213n); +testAdd(-0x1234n, -0x1234n, -0x2468n); +testAdd(-0x1234n, -0xFEDCBA97n, -0xFEDCCCCBn); +testAdd(-0x1234n, -0xFEDCBA98n, -0xFEDCCCCCn); +testAdd(-0x1234n, -0xFEDCBA987654320Fn, -0xFEDCBA9876544443n); +testAdd(-0x1234n, -0xFEDCBA9876543210n, -0xFEDCBA9876544444n); +testAdd(-0xFEDCBA97n, -0xFEDCBA97n, -0x1FDB9752En); +testAdd(-0xFEDCBA97n, -0xFEDCBA98n, -0x1FDB9752Fn); +testAdd(-0xFEDCBA97n, -0xFEDCBA987654320Fn, -0xFEDCBA997530ECA6n); +testAdd(-0xFEDCBA97n, -0xFEDCBA9876543210n, -0xFEDCBA997530ECA7n); +testAdd(-0xFEDCBA98n, -0xFEDCBA98n, -0x1FDB97530n); +testAdd(-0xFEDCBA98n, -0xFEDCBA987654320Fn, -0xFEDCBA997530ECA7n); +testAdd(-0xFEDCBA98n, -0xFEDCBA9876543210n, -0xFEDCBA997530ECA8n); +testAdd(-0xFEDCBA987654320Fn, -0xFEDCBA987654320Fn, -0x1FDB97530ECA8641En); +testAdd(-0xFEDCBA987654320Fn, -0xFEDCBA9876543210n, -0x1FDB97530ECA8641Fn); +testAdd(-0xFEDCBA9876543210n, -0xFEDCBA9876543210n, -0x1FDB97530ECA86420n); diff --git a/test/language/expressions/division/bigint-arithmetic.js b/test/language/expressions/division/bigint-arithmetic.js new file mode 100644 index 00000000000..9cfcd8cd83c --- /dev/null +++ b/test/language/expressions/division/bigint-arithmetic.js @@ -0,0 +1,269 @@ +// Copyright (C) 2017 Robin Templeton. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-multiplicative-operators-runtime-semantics-evaluation +description: BigInt division arithmetic +features: [BigInt] +---*/ + +function testDiv(x, y, z) { + assert.sameValue(x / y, z, x + " / " + y + " = " + z); +} + +testDiv(0xFEDCBA9876543210n, 0xFEDCBA9876543210n, 0x1n); +testDiv(0xFEDCBA9876543210n, 0xFEDCBA987654320Fn, 0x1n); +testDiv(0xFEDCBA9876543210n, 0xFEDCBA98n, 0x100000000n); +testDiv(0xFEDCBA9876543210n, 0xFEDCBA97n, 0x100000001n); +testDiv(0xFEDCBA9876543210n, 0x1234n, 0xE0042813BE5DCn); +testDiv(0xFEDCBA9876543210n, 0x3n, 0x54F43E32D21C10B0n); +testDiv(0xFEDCBA9876543210n, 0x2n, 0x7F6E5D4C3B2A1908n); +testDiv(0xFEDCBA9876543210n, 0x1n, 0xFEDCBA9876543210n); +testDiv(0xFEDCBA9876543210n, -0x1n, -0xFEDCBA9876543210n); +testDiv(0xFEDCBA9876543210n, -0x2n, -0x7F6E5D4C3B2A1908n); +testDiv(0xFEDCBA9876543210n, -0x3n, -0x54F43E32D21C10B0n); +testDiv(0xFEDCBA9876543210n, -0x1234n, -0xE0042813BE5DCn); +testDiv(0xFEDCBA9876543210n, -0xFEDCBA97n, -0x100000001n); +testDiv(0xFEDCBA9876543210n, -0xFEDCBA98n, -0x100000000n); +testDiv(0xFEDCBA9876543210n, -0xFEDCBA987654320Fn, -0x1n); +testDiv(0xFEDCBA9876543210n, -0xFEDCBA9876543210n, -0x1n); +testDiv(0xFEDCBA987654320Fn, 0xFEDCBA9876543210n, 0x0n); +testDiv(0xFEDCBA987654320Fn, 0xFEDCBA987654320Fn, 0x1n); +testDiv(0xFEDCBA987654320Fn, 0xFEDCBA98n, 0x100000000n); +testDiv(0xFEDCBA987654320Fn, 0xFEDCBA97n, 0x100000001n); +testDiv(0xFEDCBA987654320Fn, 0x1234n, 0xE0042813BE5DCn); +testDiv(0xFEDCBA987654320Fn, 0x3n, 0x54F43E32D21C10AFn); +testDiv(0xFEDCBA987654320Fn, 0x2n, 0x7F6E5D4C3B2A1907n); +testDiv(0xFEDCBA987654320Fn, 0x1n, 0xFEDCBA987654320Fn); +testDiv(0xFEDCBA987654320Fn, -0x1n, -0xFEDCBA987654320Fn); +testDiv(0xFEDCBA987654320Fn, -0x2n, -0x7F6E5D4C3B2A1907n); +testDiv(0xFEDCBA987654320Fn, -0x3n, -0x54F43E32D21C10AFn); +testDiv(0xFEDCBA987654320Fn, -0x1234n, -0xE0042813BE5DCn); +testDiv(0xFEDCBA987654320Fn, -0xFEDCBA97n, -0x100000001n); +testDiv(0xFEDCBA987654320Fn, -0xFEDCBA98n, -0x100000000n); +testDiv(0xFEDCBA987654320Fn, -0xFEDCBA987654320Fn, -0x1n); +testDiv(0xFEDCBA987654320Fn, -0xFEDCBA9876543210n, 0x0n); +testDiv(0xFEDCBA98n, 0xFEDCBA9876543210n, 0x0n); +testDiv(0xFEDCBA98n, 0xFEDCBA987654320Fn, 0x0n); +testDiv(0xFEDCBA98n, 0xFEDCBA98n, 0x1n); +testDiv(0xFEDCBA98n, 0xFEDCBA97n, 0x1n); +testDiv(0xFEDCBA98n, 0x1234n, 0xE0042n); +testDiv(0xFEDCBA98n, 0x3n, 0x54F43E32n); +testDiv(0xFEDCBA98n, 0x2n, 0x7F6E5D4Cn); +testDiv(0xFEDCBA98n, 0x1n, 0xFEDCBA98n); +testDiv(0xFEDCBA98n, -0x1n, -0xFEDCBA98n); +testDiv(0xFEDCBA98n, -0x2n, -0x7F6E5D4Cn); +testDiv(0xFEDCBA98n, -0x3n, -0x54F43E32n); +testDiv(0xFEDCBA98n, -0x1234n, -0xE0042n); +testDiv(0xFEDCBA98n, -0xFEDCBA97n, -0x1n); +testDiv(0xFEDCBA98n, -0xFEDCBA98n, -0x1n); +testDiv(0xFEDCBA98n, -0xFEDCBA987654320Fn, 0x0n); +testDiv(0xFEDCBA98n, -0xFEDCBA9876543210n, 0x0n); +testDiv(0xFEDCBA97n, 0xFEDCBA9876543210n, 0x0n); +testDiv(0xFEDCBA97n, 0xFEDCBA987654320Fn, 0x0n); +testDiv(0xFEDCBA97n, 0xFEDCBA98n, 0x0n); +testDiv(0xFEDCBA97n, 0xFEDCBA97n, 0x1n); +testDiv(0xFEDCBA97n, 0x1234n, 0xE0042n); +testDiv(0xFEDCBA97n, 0x3n, 0x54F43E32n); +testDiv(0xFEDCBA97n, 0x2n, 0x7F6E5D4Bn); +testDiv(0xFEDCBA97n, 0x1n, 0xFEDCBA97n); +testDiv(0xFEDCBA97n, -0x1n, -0xFEDCBA97n); +testDiv(0xFEDCBA97n, -0x2n, -0x7F6E5D4Bn); +testDiv(0xFEDCBA97n, -0x3n, -0x54F43E32n); +testDiv(0xFEDCBA97n, -0x1234n, -0xE0042n); +testDiv(0xFEDCBA97n, -0xFEDCBA97n, -0x1n); +testDiv(0xFEDCBA97n, -0xFEDCBA98n, 0x0n); +testDiv(0xFEDCBA97n, -0xFEDCBA987654320Fn, 0x0n); +testDiv(0xFEDCBA97n, -0xFEDCBA9876543210n, 0x0n); +testDiv(0x1234n, 0xFEDCBA9876543210n, 0x0n); +testDiv(0x1234n, 0xFEDCBA987654320Fn, 0x0n); +testDiv(0x1234n, 0xFEDCBA98n, 0x0n); +testDiv(0x1234n, 0xFEDCBA97n, 0x0n); +testDiv(0x1234n, 0x1234n, 0x1n); +testDiv(0x1234n, 0x3n, 0x611n); +testDiv(0x1234n, 0x2n, 0x91An); +testDiv(0x1234n, 0x1n, 0x1234n); +testDiv(0x1234n, -0x1n, -0x1234n); +testDiv(0x1234n, -0x2n, -0x91An); +testDiv(0x1234n, -0x3n, -0x611n); +testDiv(0x1234n, -0x1234n, -0x1n); +testDiv(0x1234n, -0xFEDCBA97n, 0x0n); +testDiv(0x1234n, -0xFEDCBA98n, 0x0n); +testDiv(0x1234n, -0xFEDCBA987654320Fn, 0x0n); +testDiv(0x1234n, -0xFEDCBA9876543210n, 0x0n); +testDiv(0x3n, 0xFEDCBA9876543210n, 0x0n); +testDiv(0x3n, 0xFEDCBA987654320Fn, 0x0n); +testDiv(0x3n, 0xFEDCBA98n, 0x0n); +testDiv(0x3n, 0xFEDCBA97n, 0x0n); +testDiv(0x3n, 0x1234n, 0x0n); +testDiv(0x3n, 0x3n, 0x1n); +testDiv(0x3n, 0x2n, 0x1n); +testDiv(0x3n, 0x1n, 0x3n); +testDiv(0x3n, -0x1n, -0x3n); +testDiv(0x3n, -0x2n, -0x1n); +testDiv(0x3n, -0x3n, -0x1n); +testDiv(0x3n, -0x1234n, 0x0n); +testDiv(0x3n, -0xFEDCBA97n, 0x0n); +testDiv(0x3n, -0xFEDCBA98n, 0x0n); +testDiv(0x3n, -0xFEDCBA987654320Fn, 0x0n); +testDiv(0x3n, -0xFEDCBA9876543210n, 0x0n); +testDiv(0x2n, 0xFEDCBA9876543210n, 0x0n); +testDiv(0x2n, 0xFEDCBA987654320Fn, 0x0n); +testDiv(0x2n, 0xFEDCBA98n, 0x0n); +testDiv(0x2n, 0xFEDCBA97n, 0x0n); +testDiv(0x2n, 0x1234n, 0x0n); +testDiv(0x2n, 0x3n, 0x0n); +testDiv(0x2n, 0x2n, 0x1n); +testDiv(0x2n, 0x1n, 0x2n); +testDiv(0x2n, -0x1n, -0x2n); +testDiv(0x2n, -0x2n, -0x1n); +testDiv(0x2n, -0x3n, 0x0n); +testDiv(0x2n, -0x1234n, 0x0n); +testDiv(0x2n, -0xFEDCBA97n, 0x0n); +testDiv(0x2n, -0xFEDCBA98n, 0x0n); +testDiv(0x2n, -0xFEDCBA987654320Fn, 0x0n); +testDiv(0x2n, -0xFEDCBA9876543210n, 0x0n); +testDiv(0x1n, 0xFEDCBA9876543210n, 0x0n); +testDiv(0x1n, 0xFEDCBA987654320Fn, 0x0n); +testDiv(0x1n, 0xFEDCBA98n, 0x0n); +testDiv(0x1n, 0xFEDCBA97n, 0x0n); +testDiv(0x1n, 0x1234n, 0x0n); +testDiv(0x1n, 0x3n, 0x0n); +testDiv(0x1n, 0x2n, 0x0n); +testDiv(0x1n, 0x1n, 0x1n); +testDiv(0x1n, -0x1n, -0x1n); +testDiv(0x1n, -0x2n, 0x0n); +testDiv(0x1n, -0x3n, 0x0n); +testDiv(0x1n, -0x1234n, 0x0n); +testDiv(0x1n, -0xFEDCBA97n, 0x0n); +testDiv(0x1n, -0xFEDCBA98n, 0x0n); +testDiv(0x1n, -0xFEDCBA987654320Fn, 0x0n); +testDiv(0x1n, -0xFEDCBA9876543210n, 0x0n); +testDiv(-0x1n, 0xFEDCBA9876543210n, 0x0n); +testDiv(-0x1n, 0xFEDCBA987654320Fn, 0x0n); +testDiv(-0x1n, 0xFEDCBA98n, 0x0n); +testDiv(-0x1n, 0xFEDCBA97n, 0x0n); +testDiv(-0x1n, 0x1234n, 0x0n); +testDiv(-0x1n, 0x3n, 0x0n); +testDiv(-0x1n, 0x2n, 0x0n); +testDiv(-0x1n, 0x1n, -0x1n); +testDiv(-0x1n, -0x1n, 0x1n); +testDiv(-0x1n, -0x2n, 0x0n); +testDiv(-0x1n, -0x3n, 0x0n); +testDiv(-0x1n, -0x1234n, 0x0n); +testDiv(-0x1n, -0xFEDCBA97n, 0x0n); +testDiv(-0x1n, -0xFEDCBA98n, 0x0n); +testDiv(-0x1n, -0xFEDCBA987654320Fn, 0x0n); +testDiv(-0x1n, -0xFEDCBA9876543210n, 0x0n); +testDiv(-0x2n, 0xFEDCBA9876543210n, 0x0n); +testDiv(-0x2n, 0xFEDCBA987654320Fn, 0x0n); +testDiv(-0x2n, 0xFEDCBA98n, 0x0n); +testDiv(-0x2n, 0xFEDCBA97n, 0x0n); +testDiv(-0x2n, 0x1234n, 0x0n); +testDiv(-0x2n, 0x3n, 0x0n); +testDiv(-0x2n, 0x2n, -0x1n); +testDiv(-0x2n, 0x1n, -0x2n); +testDiv(-0x2n, -0x1n, 0x2n); +testDiv(-0x2n, -0x2n, 0x1n); +testDiv(-0x2n, -0x3n, 0x0n); +testDiv(-0x2n, -0x1234n, 0x0n); +testDiv(-0x2n, -0xFEDCBA97n, 0x0n); +testDiv(-0x2n, -0xFEDCBA98n, 0x0n); +testDiv(-0x2n, -0xFEDCBA987654320Fn, 0x0n); +testDiv(-0x2n, -0xFEDCBA9876543210n, 0x0n); +testDiv(-0x3n, 0xFEDCBA9876543210n, 0x0n); +testDiv(-0x3n, 0xFEDCBA987654320Fn, 0x0n); +testDiv(-0x3n, 0xFEDCBA98n, 0x0n); +testDiv(-0x3n, 0xFEDCBA97n, 0x0n); +testDiv(-0x3n, 0x1234n, 0x0n); +testDiv(-0x3n, 0x3n, -0x1n); +testDiv(-0x3n, 0x2n, -0x1n); +testDiv(-0x3n, 0x1n, -0x3n); +testDiv(-0x3n, -0x1n, 0x3n); +testDiv(-0x3n, -0x2n, 0x1n); +testDiv(-0x3n, -0x3n, 0x1n); +testDiv(-0x3n, -0x1234n, 0x0n); +testDiv(-0x3n, -0xFEDCBA97n, 0x0n); +testDiv(-0x3n, -0xFEDCBA98n, 0x0n); +testDiv(-0x3n, -0xFEDCBA987654320Fn, 0x0n); +testDiv(-0x3n, -0xFEDCBA9876543210n, 0x0n); +testDiv(-0x1234n, 0xFEDCBA9876543210n, 0x0n); +testDiv(-0x1234n, 0xFEDCBA987654320Fn, 0x0n); +testDiv(-0x1234n, 0xFEDCBA98n, 0x0n); +testDiv(-0x1234n, 0xFEDCBA97n, 0x0n); +testDiv(-0x1234n, 0x1234n, -0x1n); +testDiv(-0x1234n, 0x3n, -0x611n); +testDiv(-0x1234n, 0x2n, -0x91An); +testDiv(-0x1234n, 0x1n, -0x1234n); +testDiv(-0x1234n, -0x1n, 0x1234n); +testDiv(-0x1234n, -0x2n, 0x91An); +testDiv(-0x1234n, -0x3n, 0x611n); +testDiv(-0x1234n, -0x1234n, 0x1n); +testDiv(-0x1234n, -0xFEDCBA97n, 0x0n); +testDiv(-0x1234n, -0xFEDCBA98n, 0x0n); +testDiv(-0x1234n, -0xFEDCBA987654320Fn, 0x0n); +testDiv(-0x1234n, -0xFEDCBA9876543210n, 0x0n); +testDiv(-0xFEDCBA97n, 0xFEDCBA9876543210n, 0x0n); +testDiv(-0xFEDCBA97n, 0xFEDCBA987654320Fn, 0x0n); +testDiv(-0xFEDCBA97n, 0xFEDCBA98n, 0x0n); +testDiv(-0xFEDCBA97n, 0xFEDCBA97n, -0x1n); +testDiv(-0xFEDCBA97n, 0x1234n, -0xE0042n); +testDiv(-0xFEDCBA97n, 0x3n, -0x54F43E32n); +testDiv(-0xFEDCBA97n, 0x2n, -0x7F6E5D4Bn); +testDiv(-0xFEDCBA97n, 0x1n, -0xFEDCBA97n); +testDiv(-0xFEDCBA97n, -0x1n, 0xFEDCBA97n); +testDiv(-0xFEDCBA97n, -0x2n, 0x7F6E5D4Bn); +testDiv(-0xFEDCBA97n, -0x3n, 0x54F43E32n); +testDiv(-0xFEDCBA97n, -0x1234n, 0xE0042n); +testDiv(-0xFEDCBA97n, -0xFEDCBA97n, 0x1n); +testDiv(-0xFEDCBA97n, -0xFEDCBA98n, 0x0n); +testDiv(-0xFEDCBA97n, -0xFEDCBA987654320Fn, 0x0n); +testDiv(-0xFEDCBA97n, -0xFEDCBA9876543210n, 0x0n); +testDiv(-0xFEDCBA98n, 0xFEDCBA9876543210n, 0x0n); +testDiv(-0xFEDCBA98n, 0xFEDCBA987654320Fn, 0x0n); +testDiv(-0xFEDCBA98n, 0xFEDCBA98n, -0x1n); +testDiv(-0xFEDCBA98n, 0xFEDCBA97n, -0x1n); +testDiv(-0xFEDCBA98n, 0x1234n, -0xE0042n); +testDiv(-0xFEDCBA98n, 0x3n, -0x54F43E32n); +testDiv(-0xFEDCBA98n, 0x2n, -0x7F6E5D4Cn); +testDiv(-0xFEDCBA98n, 0x1n, -0xFEDCBA98n); +testDiv(-0xFEDCBA98n, -0x1n, 0xFEDCBA98n); +testDiv(-0xFEDCBA98n, -0x2n, 0x7F6E5D4Cn); +testDiv(-0xFEDCBA98n, -0x3n, 0x54F43E32n); +testDiv(-0xFEDCBA98n, -0x1234n, 0xE0042n); +testDiv(-0xFEDCBA98n, -0xFEDCBA97n, 0x1n); +testDiv(-0xFEDCBA98n, -0xFEDCBA98n, 0x1n); +testDiv(-0xFEDCBA98n, -0xFEDCBA987654320Fn, 0x0n); +testDiv(-0xFEDCBA98n, -0xFEDCBA9876543210n, 0x0n); +testDiv(-0xFEDCBA987654320Fn, 0xFEDCBA9876543210n, 0x0n); +testDiv(-0xFEDCBA987654320Fn, 0xFEDCBA987654320Fn, -0x1n); +testDiv(-0xFEDCBA987654320Fn, 0xFEDCBA98n, -0x100000000n); +testDiv(-0xFEDCBA987654320Fn, 0xFEDCBA97n, -0x100000001n); +testDiv(-0xFEDCBA987654320Fn, 0x1234n, -0xE0042813BE5DCn); +testDiv(-0xFEDCBA987654320Fn, 0x3n, -0x54F43E32D21C10AFn); +testDiv(-0xFEDCBA987654320Fn, 0x2n, -0x7F6E5D4C3B2A1907n); +testDiv(-0xFEDCBA987654320Fn, 0x1n, -0xFEDCBA987654320Fn); +testDiv(-0xFEDCBA987654320Fn, -0x1n, 0xFEDCBA987654320Fn); +testDiv(-0xFEDCBA987654320Fn, -0x2n, 0x7F6E5D4C3B2A1907n); +testDiv(-0xFEDCBA987654320Fn, -0x3n, 0x54F43E32D21C10AFn); +testDiv(-0xFEDCBA987654320Fn, -0x1234n, 0xE0042813BE5DCn); +testDiv(-0xFEDCBA987654320Fn, -0xFEDCBA97n, 0x100000001n); +testDiv(-0xFEDCBA987654320Fn, -0xFEDCBA98n, 0x100000000n); +testDiv(-0xFEDCBA987654320Fn, -0xFEDCBA987654320Fn, 0x1n); +testDiv(-0xFEDCBA987654320Fn, -0xFEDCBA9876543210n, 0x0n); +testDiv(-0xFEDCBA9876543210n, 0xFEDCBA9876543210n, -0x1n); +testDiv(-0xFEDCBA9876543210n, 0xFEDCBA987654320Fn, -0x1n); +testDiv(-0xFEDCBA9876543210n, 0xFEDCBA98n, -0x100000000n); +testDiv(-0xFEDCBA9876543210n, 0xFEDCBA97n, -0x100000001n); +testDiv(-0xFEDCBA9876543210n, 0x1234n, -0xE0042813BE5DCn); +testDiv(-0xFEDCBA9876543210n, 0x3n, -0x54F43E32D21C10B0n); +testDiv(-0xFEDCBA9876543210n, 0x2n, -0x7F6E5D4C3B2A1908n); +testDiv(-0xFEDCBA9876543210n, 0x1n, -0xFEDCBA9876543210n); +testDiv(-0xFEDCBA9876543210n, -0x1n, 0xFEDCBA9876543210n); +testDiv(-0xFEDCBA9876543210n, -0x2n, 0x7F6E5D4C3B2A1908n); +testDiv(-0xFEDCBA9876543210n, -0x3n, 0x54F43E32D21C10B0n); +testDiv(-0xFEDCBA9876543210n, -0x1234n, 0xE0042813BE5DCn); +testDiv(-0xFEDCBA9876543210n, -0xFEDCBA97n, 0x100000001n); +testDiv(-0xFEDCBA9876543210n, -0xFEDCBA98n, 0x100000000n); +testDiv(-0xFEDCBA9876543210n, -0xFEDCBA987654320Fn, 0x1n); +testDiv(-0xFEDCBA9876543210n, -0xFEDCBA9876543210n, 0x1n); diff --git a/test/language/expressions/exponentiation/bigint-arithmetic.js b/test/language/expressions/exponentiation/bigint-arithmetic.js new file mode 100644 index 00000000000..0ff0e0c0194 --- /dev/null +++ b/test/language/expressions/exponentiation/bigint-arithmetic.js @@ -0,0 +1,38 @@ +// Copyright (C) 2017 Robin Templeton. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-exp-operator-runtime-semantics-evaluation +description: BigInt exponentiation arithmetic +features: [BigInt] +---*/ + +function testExpt(x, y, z) { + assert.sameValue(x ** y, z, x + " ** " + y + " = " + z); +} + +testExpt(0x123n, 0x123n, 0x37AA7FAA38F2F6026AABEFE979EA730BA9EA4CB99E2E3F645D515D3BBE2D84BCD89F8A034BADF3E3DC0CF417258371B31F4555DC0883DA96760AB157DB7DFFF5E3E97A3EAAB8328B2B178060B5A5E4C4DD8BC8D66B7F4D9F0E0B1AC3A566FDE0A15EBF8DBDBD0565C5FBDB7C123CF250E271DF5C38BC6746A1327F09C7FB4B96E0EDA45C429799CA80B1DB039692C70DFFE4E66F1D9CAB4270863B09A7918F774D686F685F560FEDC6B7B85CB45DE5EEEF6A5FE2FC8B5037FB421204641909347C91F2DC252F49B8F310E867E56D1CA2E81EE9A3AA568682C7B8B41D709A2E7F8D9A8D8C56D6BE78B6CA8365E362B81A64974C315FB8FA50CED4F7944F28FA3ECA77B8BCB56DC69814328F891E6065D108EEE7B8E695038090CCA10C0E68DD7A36CFAA1C26CDFEC369FBn); +testExpt(0x123n, 0xFFn, 0x8D5BB75861377EC967BF78FDF39CE51696FBD34722999943F8865938772B517167CD5ED775A78987F5106831F4978E0709032B26ED8F13F814699DB8AB3ACD5CF631F2D8B8B706FCF5EF441AAEE745A795EC5CB86A5E8D87D09F648EFC557B98F73E750FEC9AED061D47806F269CCCDFB6D513912A82AE79B171D76AF6D926BC4F4C4DA43A6EFB4D9D1672E356CC1F74A29AF80D53A8F27592F6191AB9B3D57FA2C435CB2CE8F18A3B3448F88F4BAD3606A9878DA9528B569BADAC0C1EC0B1A2B06CD4C64DEEC940807DFD05C56E3E17ADB1A88EDAF0D67C87C1F871BFB5C47CAE8365FE33538317EE2DF4EE52636CE1BDA9E41C7DA72826E4C097A53BD73D8D697E10D28Bn); +testExpt(0x123n, 0x3n, 0x178027Bn); +testExpt(0x123n, 0x2n, 0x14AC9n); +testExpt(0x123n, 0x1n, 0x123n); +testExpt(0xFFn, 0x123n, 0x51F5CA2E1A36F5FF1ED3D393D76FBC3612B38EB64E00EDAC5E95ADE0D16D0B044C8E9F2B77B3F31AF9159F482205541E9D3BE9D248FF39CE6524874EBCA60E06302E8B505D11EEEEE869C7F801A82B9739C197E6D63A1EB2D29B5AD5EED4773C762106E9F66BFCB6C11450218973C69DED3FE51FF881AD0430675BF54320513EA766117C50C554E86E22A5ACFD8047D5470B4FCBCB9EFC86196CA77C58F1BEB09F76160D641B82E2481BEDAE089207D49FE0FB7DE14B6C4BC82E9C58140746AC8E74C3353AAF5F9CF47ED1F87C52F463C053DB63CD08CC9866EBA274D39B6B357ADADAD4D210167EF7363453D42BC225D90070336861F2D259489D78B7F04B05FE65E29151ADD2B8F4D318011988550CE590DBA4C868AC65AA325051DF613D6C2E22FFn); +testExpt(0xFFn, 0xFFn, 0x5E5C8B0EB95AB08F9D37EF127FC01BD0E33DE52647528396D78D5F8DA31989E67814F6BBA1FB0F0207010FF5F2347B19D5F6598FC91BF5A88F77DAA3D7B382FEC484F3D205C06A34445384C0E7AB0D883788C68C012CB433055EDDA746A48409444EA91147273B79FC3EABB70ECA552AF650C234BB01ED404427F17CDDDD71D08E39EF9C3982E3CE44E670456AA8154C1FDBD9C35947F494636A425C69BF89E9C75AD3B7A0A559AF0F5DA9947C8DEBA64417310713B23E7EF4DE50BB2A3E90BC2AC3DA5201CCA8D6E5DFEA887C4F7A4E92175D9F88BD2779B57F9EB35BE7528F965A06DA0AC41DCB3A34F1D8AB7D8FEE620A94FAA42C395997756B007FFEFFn); +testExpt(0xFFn, 0x3n, 0xFD02FFn); +testExpt(0xFFn, 0x2n, 0xFE01n); +testExpt(0xFFn, 0x1n, 0xFFn); +testExpt(0x3n, 0x123n, 0x25609213623D7D6219085CF49D306450BF6519835586C19D3A4F3A2C5F35B44A300C8A76E11708B5495B9C3EE756BBF19E3FD15CE625D3C0539Bn); +testExpt(0x3n, 0xFFn, 0x11F1B08E87EC42C5D83C3218FC83C41DCFD9F4428F4F92AF1AAA80AA46162B1F71E981273601F4AD1DD4709B5ACA650265A6ABn); +testExpt(0x3n, 0x3n, 0x1Bn); +testExpt(0x3n, 0x2n, 0x9n); +testExpt(0x3n, 0x1n, 0x3n); +testExpt(0x2n, 0x123n, 0x8000000000000000000000000000000000000000000000000000000000000000000000000n); +testExpt(0x2n, 0xFFn, 0x8000000000000000000000000000000000000000000000000000000000000000n); +testExpt(0x2n, 0x3n, 0x8n); +testExpt(0x2n, 0x2n, 0x4n); +testExpt(0x2n, 0x1n, 0x2n); +testExpt(0x1n, 0x123n, 0x1n); +testExpt(0x1n, 0xFFn, 0x1n); +testExpt(0x1n, 0x3n, 0x1n); +testExpt(0x1n, 0x2n, 0x1n); +testExpt(0x1n, 0x1n, 0x1n); diff --git a/test/language/expressions/modulus/bigint-arithmetic.js b/test/language/expressions/modulus/bigint-arithmetic.js new file mode 100644 index 00000000000..79f7bc2083d --- /dev/null +++ b/test/language/expressions/modulus/bigint-arithmetic.js @@ -0,0 +1,269 @@ +// Copyright (C) 2017 Robin Templeton. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-multiplicative-operators-runtime-semantics-evaluation +description: BigInt remainder arithmetic +features: [BigInt] +---*/ + +function testMod(x, y, z) { + assert.sameValue(x % y, z, x + " % " + y + " = " + z); +} + +testMod(0xFEDCBA9876543210n, 0xFEDCBA9876543210n, 0x0n); +testMod(0xFEDCBA9876543210n, 0xFEDCBA987654320Fn, 0x1n); +testMod(0xFEDCBA9876543210n, 0xFEDCBA98n, 0x76543210n); +testMod(0xFEDCBA9876543210n, 0xFEDCBA97n, 0x77777779n); +testMod(0xFEDCBA9876543210n, 0x1234n, 0x960n); +testMod(0xFEDCBA9876543210n, 0x3n, 0x0n); +testMod(0xFEDCBA9876543210n, 0x2n, 0x0n); +testMod(0xFEDCBA9876543210n, 0x1n, 0x0n); +testMod(0xFEDCBA9876543210n, -0x1n, 0x0n); +testMod(0xFEDCBA9876543210n, -0x2n, 0x0n); +testMod(0xFEDCBA9876543210n, -0x3n, 0x0n); +testMod(0xFEDCBA9876543210n, -0x1234n, 0x960n); +testMod(0xFEDCBA9876543210n, -0xFEDCBA97n, 0x77777779n); +testMod(0xFEDCBA9876543210n, -0xFEDCBA98n, 0x76543210n); +testMod(0xFEDCBA9876543210n, -0xFEDCBA987654320Fn, 0x1n); +testMod(0xFEDCBA9876543210n, -0xFEDCBA9876543210n, 0x0n); +testMod(0xFEDCBA987654320Fn, 0xFEDCBA9876543210n, 0xFEDCBA987654320Fn); +testMod(0xFEDCBA987654320Fn, 0xFEDCBA987654320Fn, 0x0n); +testMod(0xFEDCBA987654320Fn, 0xFEDCBA98n, 0x7654320Fn); +testMod(0xFEDCBA987654320Fn, 0xFEDCBA97n, 0x77777778n); +testMod(0xFEDCBA987654320Fn, 0x1234n, 0x95Fn); +testMod(0xFEDCBA987654320Fn, 0x3n, 0x2n); +testMod(0xFEDCBA987654320Fn, 0x2n, 0x1n); +testMod(0xFEDCBA987654320Fn, 0x1n, 0x0n); +testMod(0xFEDCBA987654320Fn, -0x1n, 0x0n); +testMod(0xFEDCBA987654320Fn, -0x2n, 0x1n); +testMod(0xFEDCBA987654320Fn, -0x3n, 0x2n); +testMod(0xFEDCBA987654320Fn, -0x1234n, 0x95Fn); +testMod(0xFEDCBA987654320Fn, -0xFEDCBA97n, 0x77777778n); +testMod(0xFEDCBA987654320Fn, -0xFEDCBA98n, 0x7654320Fn); +testMod(0xFEDCBA987654320Fn, -0xFEDCBA987654320Fn, 0x0n); +testMod(0xFEDCBA987654320Fn, -0xFEDCBA9876543210n, 0xFEDCBA987654320Fn); +testMod(0xFEDCBA98n, 0xFEDCBA9876543210n, 0xFEDCBA98n); +testMod(0xFEDCBA98n, 0xFEDCBA987654320Fn, 0xFEDCBA98n); +testMod(0xFEDCBA98n, 0xFEDCBA98n, 0x0n); +testMod(0xFEDCBA98n, 0xFEDCBA97n, 0x1n); +testMod(0xFEDCBA98n, 0x1234n, 0x930n); +testMod(0xFEDCBA98n, 0x3n, 0x2n); +testMod(0xFEDCBA98n, 0x2n, 0x0n); +testMod(0xFEDCBA98n, 0x1n, 0x0n); +testMod(0xFEDCBA98n, -0x1n, 0x0n); +testMod(0xFEDCBA98n, -0x2n, 0x0n); +testMod(0xFEDCBA98n, -0x3n, 0x2n); +testMod(0xFEDCBA98n, -0x1234n, 0x930n); +testMod(0xFEDCBA98n, -0xFEDCBA97n, 0x1n); +testMod(0xFEDCBA98n, -0xFEDCBA98n, 0x0n); +testMod(0xFEDCBA98n, -0xFEDCBA987654320Fn, 0xFEDCBA98n); +testMod(0xFEDCBA98n, -0xFEDCBA9876543210n, 0xFEDCBA98n); +testMod(0xFEDCBA97n, 0xFEDCBA9876543210n, 0xFEDCBA97n); +testMod(0xFEDCBA97n, 0xFEDCBA987654320Fn, 0xFEDCBA97n); +testMod(0xFEDCBA97n, 0xFEDCBA98n, 0xFEDCBA97n); +testMod(0xFEDCBA97n, 0xFEDCBA97n, 0x0n); +testMod(0xFEDCBA97n, 0x1234n, 0x92Fn); +testMod(0xFEDCBA97n, 0x3n, 0x1n); +testMod(0xFEDCBA97n, 0x2n, 0x1n); +testMod(0xFEDCBA97n, 0x1n, 0x0n); +testMod(0xFEDCBA97n, -0x1n, 0x0n); +testMod(0xFEDCBA97n, -0x2n, 0x1n); +testMod(0xFEDCBA97n, -0x3n, 0x1n); +testMod(0xFEDCBA97n, -0x1234n, 0x92Fn); +testMod(0xFEDCBA97n, -0xFEDCBA97n, 0x0n); +testMod(0xFEDCBA97n, -0xFEDCBA98n, 0xFEDCBA97n); +testMod(0xFEDCBA97n, -0xFEDCBA987654320Fn, 0xFEDCBA97n); +testMod(0xFEDCBA97n, -0xFEDCBA9876543210n, 0xFEDCBA97n); +testMod(0x1234n, 0xFEDCBA9876543210n, 0x1234n); +testMod(0x1234n, 0xFEDCBA987654320Fn, 0x1234n); +testMod(0x1234n, 0xFEDCBA98n, 0x1234n); +testMod(0x1234n, 0xFEDCBA97n, 0x1234n); +testMod(0x1234n, 0x1234n, 0x0n); +testMod(0x1234n, 0x3n, 0x1n); +testMod(0x1234n, 0x2n, 0x0n); +testMod(0x1234n, 0x1n, 0x0n); +testMod(0x1234n, -0x1n, 0x0n); +testMod(0x1234n, -0x2n, 0x0n); +testMod(0x1234n, -0x3n, 0x1n); +testMod(0x1234n, -0x1234n, 0x0n); +testMod(0x1234n, -0xFEDCBA97n, 0x1234n); +testMod(0x1234n, -0xFEDCBA98n, 0x1234n); +testMod(0x1234n, -0xFEDCBA987654320Fn, 0x1234n); +testMod(0x1234n, -0xFEDCBA9876543210n, 0x1234n); +testMod(0x3n, 0xFEDCBA9876543210n, 0x3n); +testMod(0x3n, 0xFEDCBA987654320Fn, 0x3n); +testMod(0x3n, 0xFEDCBA98n, 0x3n); +testMod(0x3n, 0xFEDCBA97n, 0x3n); +testMod(0x3n, 0x1234n, 0x3n); +testMod(0x3n, 0x3n, 0x0n); +testMod(0x3n, 0x2n, 0x1n); +testMod(0x3n, 0x1n, 0x0n); +testMod(0x3n, -0x1n, 0x0n); +testMod(0x3n, -0x2n, 0x1n); +testMod(0x3n, -0x3n, 0x0n); +testMod(0x3n, -0x1234n, 0x3n); +testMod(0x3n, -0xFEDCBA97n, 0x3n); +testMod(0x3n, -0xFEDCBA98n, 0x3n); +testMod(0x3n, -0xFEDCBA987654320Fn, 0x3n); +testMod(0x3n, -0xFEDCBA9876543210n, 0x3n); +testMod(0x2n, 0xFEDCBA9876543210n, 0x2n); +testMod(0x2n, 0xFEDCBA987654320Fn, 0x2n); +testMod(0x2n, 0xFEDCBA98n, 0x2n); +testMod(0x2n, 0xFEDCBA97n, 0x2n); +testMod(0x2n, 0x1234n, 0x2n); +testMod(0x2n, 0x3n, 0x2n); +testMod(0x2n, 0x2n, 0x0n); +testMod(0x2n, 0x1n, 0x0n); +testMod(0x2n, -0x1n, 0x0n); +testMod(0x2n, -0x2n, 0x0n); +testMod(0x2n, -0x3n, 0x2n); +testMod(0x2n, -0x1234n, 0x2n); +testMod(0x2n, -0xFEDCBA97n, 0x2n); +testMod(0x2n, -0xFEDCBA98n, 0x2n); +testMod(0x2n, -0xFEDCBA987654320Fn, 0x2n); +testMod(0x2n, -0xFEDCBA9876543210n, 0x2n); +testMod(0x1n, 0xFEDCBA9876543210n, 0x1n); +testMod(0x1n, 0xFEDCBA987654320Fn, 0x1n); +testMod(0x1n, 0xFEDCBA98n, 0x1n); +testMod(0x1n, 0xFEDCBA97n, 0x1n); +testMod(0x1n, 0x1234n, 0x1n); +testMod(0x1n, 0x3n, 0x1n); +testMod(0x1n, 0x2n, 0x1n); +testMod(0x1n, 0x1n, 0x0n); +testMod(0x1n, -0x1n, 0x0n); +testMod(0x1n, -0x2n, 0x1n); +testMod(0x1n, -0x3n, 0x1n); +testMod(0x1n, -0x1234n, 0x1n); +testMod(0x1n, -0xFEDCBA97n, 0x1n); +testMod(0x1n, -0xFEDCBA98n, 0x1n); +testMod(0x1n, -0xFEDCBA987654320Fn, 0x1n); +testMod(0x1n, -0xFEDCBA9876543210n, 0x1n); +testMod(-0x1n, 0xFEDCBA9876543210n, -0x1n); +testMod(-0x1n, 0xFEDCBA987654320Fn, -0x1n); +testMod(-0x1n, 0xFEDCBA98n, -0x1n); +testMod(-0x1n, 0xFEDCBA97n, -0x1n); +testMod(-0x1n, 0x1234n, -0x1n); +testMod(-0x1n, 0x3n, -0x1n); +testMod(-0x1n, 0x2n, -0x1n); +testMod(-0x1n, 0x1n, 0x0n); +testMod(-0x1n, -0x1n, 0x0n); +testMod(-0x1n, -0x2n, -0x1n); +testMod(-0x1n, -0x3n, -0x1n); +testMod(-0x1n, -0x1234n, -0x1n); +testMod(-0x1n, -0xFEDCBA97n, -0x1n); +testMod(-0x1n, -0xFEDCBA98n, -0x1n); +testMod(-0x1n, -0xFEDCBA987654320Fn, -0x1n); +testMod(-0x1n, -0xFEDCBA9876543210n, -0x1n); +testMod(-0x2n, 0xFEDCBA9876543210n, -0x2n); +testMod(-0x2n, 0xFEDCBA987654320Fn, -0x2n); +testMod(-0x2n, 0xFEDCBA98n, -0x2n); +testMod(-0x2n, 0xFEDCBA97n, -0x2n); +testMod(-0x2n, 0x1234n, -0x2n); +testMod(-0x2n, 0x3n, -0x2n); +testMod(-0x2n, 0x2n, 0x0n); +testMod(-0x2n, 0x1n, 0x0n); +testMod(-0x2n, -0x1n, 0x0n); +testMod(-0x2n, -0x2n, 0x0n); +testMod(-0x2n, -0x3n, -0x2n); +testMod(-0x2n, -0x1234n, -0x2n); +testMod(-0x2n, -0xFEDCBA97n, -0x2n); +testMod(-0x2n, -0xFEDCBA98n, -0x2n); +testMod(-0x2n, -0xFEDCBA987654320Fn, -0x2n); +testMod(-0x2n, -0xFEDCBA9876543210n, -0x2n); +testMod(-0x3n, 0xFEDCBA9876543210n, -0x3n); +testMod(-0x3n, 0xFEDCBA987654320Fn, -0x3n); +testMod(-0x3n, 0xFEDCBA98n, -0x3n); +testMod(-0x3n, 0xFEDCBA97n, -0x3n); +testMod(-0x3n, 0x1234n, -0x3n); +testMod(-0x3n, 0x3n, 0x0n); +testMod(-0x3n, 0x2n, -0x1n); +testMod(-0x3n, 0x1n, 0x0n); +testMod(-0x3n, -0x1n, 0x0n); +testMod(-0x3n, -0x2n, -0x1n); +testMod(-0x3n, -0x3n, 0x0n); +testMod(-0x3n, -0x1234n, -0x3n); +testMod(-0x3n, -0xFEDCBA97n, -0x3n); +testMod(-0x3n, -0xFEDCBA98n, -0x3n); +testMod(-0x3n, -0xFEDCBA987654320Fn, -0x3n); +testMod(-0x3n, -0xFEDCBA9876543210n, -0x3n); +testMod(-0x1234n, 0xFEDCBA9876543210n, -0x1234n); +testMod(-0x1234n, 0xFEDCBA987654320Fn, -0x1234n); +testMod(-0x1234n, 0xFEDCBA98n, -0x1234n); +testMod(-0x1234n, 0xFEDCBA97n, -0x1234n); +testMod(-0x1234n, 0x1234n, 0x0n); +testMod(-0x1234n, 0x3n, -0x1n); +testMod(-0x1234n, 0x2n, 0x0n); +testMod(-0x1234n, 0x1n, 0x0n); +testMod(-0x1234n, -0x1n, 0x0n); +testMod(-0x1234n, -0x2n, 0x0n); +testMod(-0x1234n, -0x3n, -0x1n); +testMod(-0x1234n, -0x1234n, 0x0n); +testMod(-0x1234n, -0xFEDCBA97n, -0x1234n); +testMod(-0x1234n, -0xFEDCBA98n, -0x1234n); +testMod(-0x1234n, -0xFEDCBA987654320Fn, -0x1234n); +testMod(-0x1234n, -0xFEDCBA9876543210n, -0x1234n); +testMod(-0xFEDCBA97n, 0xFEDCBA9876543210n, -0xFEDCBA97n); +testMod(-0xFEDCBA97n, 0xFEDCBA987654320Fn, -0xFEDCBA97n); +testMod(-0xFEDCBA97n, 0xFEDCBA98n, -0xFEDCBA97n); +testMod(-0xFEDCBA97n, 0xFEDCBA97n, 0x0n); +testMod(-0xFEDCBA97n, 0x1234n, -0x92Fn); +testMod(-0xFEDCBA97n, 0x3n, -0x1n); +testMod(-0xFEDCBA97n, 0x2n, -0x1n); +testMod(-0xFEDCBA97n, 0x1n, 0x0n); +testMod(-0xFEDCBA97n, -0x1n, 0x0n); +testMod(-0xFEDCBA97n, -0x2n, -0x1n); +testMod(-0xFEDCBA97n, -0x3n, -0x1n); +testMod(-0xFEDCBA97n, -0x1234n, -0x92Fn); +testMod(-0xFEDCBA97n, -0xFEDCBA97n, 0x0n); +testMod(-0xFEDCBA97n, -0xFEDCBA98n, -0xFEDCBA97n); +testMod(-0xFEDCBA97n, -0xFEDCBA987654320Fn, -0xFEDCBA97n); +testMod(-0xFEDCBA97n, -0xFEDCBA9876543210n, -0xFEDCBA97n); +testMod(-0xFEDCBA98n, 0xFEDCBA9876543210n, -0xFEDCBA98n); +testMod(-0xFEDCBA98n, 0xFEDCBA987654320Fn, -0xFEDCBA98n); +testMod(-0xFEDCBA98n, 0xFEDCBA98n, 0x0n); +testMod(-0xFEDCBA98n, 0xFEDCBA97n, -0x1n); +testMod(-0xFEDCBA98n, 0x1234n, -0x930n); +testMod(-0xFEDCBA98n, 0x3n, -0x2n); +testMod(-0xFEDCBA98n, 0x2n, 0x0n); +testMod(-0xFEDCBA98n, 0x1n, 0x0n); +testMod(-0xFEDCBA98n, -0x1n, 0x0n); +testMod(-0xFEDCBA98n, -0x2n, 0x0n); +testMod(-0xFEDCBA98n, -0x3n, -0x2n); +testMod(-0xFEDCBA98n, -0x1234n, -0x930n); +testMod(-0xFEDCBA98n, -0xFEDCBA97n, -0x1n); +testMod(-0xFEDCBA98n, -0xFEDCBA98n, 0x0n); +testMod(-0xFEDCBA98n, -0xFEDCBA987654320Fn, -0xFEDCBA98n); +testMod(-0xFEDCBA98n, -0xFEDCBA9876543210n, -0xFEDCBA98n); +testMod(-0xFEDCBA987654320Fn, 0xFEDCBA9876543210n, -0xFEDCBA987654320Fn); +testMod(-0xFEDCBA987654320Fn, 0xFEDCBA987654320Fn, 0x0n); +testMod(-0xFEDCBA987654320Fn, 0xFEDCBA98n, -0x7654320Fn); +testMod(-0xFEDCBA987654320Fn, 0xFEDCBA97n, -0x77777778n); +testMod(-0xFEDCBA987654320Fn, 0x1234n, -0x95Fn); +testMod(-0xFEDCBA987654320Fn, 0x3n, -0x2n); +testMod(-0xFEDCBA987654320Fn, 0x2n, -0x1n); +testMod(-0xFEDCBA987654320Fn, 0x1n, 0x0n); +testMod(-0xFEDCBA987654320Fn, -0x1n, 0x0n); +testMod(-0xFEDCBA987654320Fn, -0x2n, -0x1n); +testMod(-0xFEDCBA987654320Fn, -0x3n, -0x2n); +testMod(-0xFEDCBA987654320Fn, -0x1234n, -0x95Fn); +testMod(-0xFEDCBA987654320Fn, -0xFEDCBA97n, -0x77777778n); +testMod(-0xFEDCBA987654320Fn, -0xFEDCBA98n, -0x7654320Fn); +testMod(-0xFEDCBA987654320Fn, -0xFEDCBA987654320Fn, 0x0n); +testMod(-0xFEDCBA987654320Fn, -0xFEDCBA9876543210n, -0xFEDCBA987654320Fn); +testMod(-0xFEDCBA9876543210n, 0xFEDCBA9876543210n, 0x0n); +testMod(-0xFEDCBA9876543210n, 0xFEDCBA987654320Fn, -0x1n); +testMod(-0xFEDCBA9876543210n, 0xFEDCBA98n, -0x76543210n); +testMod(-0xFEDCBA9876543210n, 0xFEDCBA97n, -0x77777779n); +testMod(-0xFEDCBA9876543210n, 0x1234n, -0x960n); +testMod(-0xFEDCBA9876543210n, 0x3n, 0x0n); +testMod(-0xFEDCBA9876543210n, 0x2n, 0x0n); +testMod(-0xFEDCBA9876543210n, 0x1n, 0x0n); +testMod(-0xFEDCBA9876543210n, -0x1n, 0x0n); +testMod(-0xFEDCBA9876543210n, -0x2n, 0x0n); +testMod(-0xFEDCBA9876543210n, -0x3n, 0x0n); +testMod(-0xFEDCBA9876543210n, -0x1234n, -0x960n); +testMod(-0xFEDCBA9876543210n, -0xFEDCBA97n, -0x77777779n); +testMod(-0xFEDCBA9876543210n, -0xFEDCBA98n, -0x76543210n); +testMod(-0xFEDCBA9876543210n, -0xFEDCBA987654320Fn, -0x1n); +testMod(-0xFEDCBA9876543210n, -0xFEDCBA9876543210n, 0x0n); diff --git a/test/language/expressions/multiplication/bigint-arithmetic.js b/test/language/expressions/multiplication/bigint-arithmetic.js new file mode 100644 index 00000000000..8e828e459c5 --- /dev/null +++ b/test/language/expressions/multiplication/bigint-arithmetic.js @@ -0,0 +1,167 @@ +// Copyright (C) 2017 Robin Templeton. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-multiplicative-operators-runtime-semantics-evaluation +description: BigInt multiplication arithmetic +features: [BigInt] +---*/ + +function testMul(x, y, z) { + assert.sameValue(x * y, z, x + " * " + y + " = " + z); + assert.sameValue(y * x, z, y + " * " + x + " = " + z); +} + +testMul(0xFEDCBA9876543210n, 0xFEDCBA9876543210n, 0xFDBAC097C8DC5ACCDEEC6CD7A44A4100n); +testMul(0xFEDCBA9876543210n, 0xFEDCBA987654320Fn, 0xFDBAC097C8DC5ACBE00FB23F2DF60EF0n); +testMul(0xFEDCBA9876543210n, 0xFEDCBA98n, 0xFDBAC097530ECA86541D5980n); +testMul(0xFEDCBA9876543210n, 0xFEDCBA97n, 0xFDBAC09654320FEDDDC92770n); +testMul(0xFEDCBA9876543210n, 0x1234n, 0x121F49F49F49F49F4B40n); +testMul(0xFEDCBA9876543210n, 0x3n, 0x2FC962FC962FC9630n); +testMul(0xFEDCBA9876543210n, 0x2n, 0x1FDB97530ECA86420n); +testMul(0xFEDCBA9876543210n, 0x1n, 0xFEDCBA9876543210n); +testMul(0xFEDCBA9876543210n, 0x0n, 0x0n); +testMul(0xFEDCBA9876543210n, -0x1n, -0xFEDCBA9876543210n); +testMul(0xFEDCBA9876543210n, -0x2n, -0x1FDB97530ECA86420n); +testMul(0xFEDCBA9876543210n, -0x3n, -0x2FC962FC962FC9630n); +testMul(0xFEDCBA9876543210n, -0x1234n, -0x121F49F49F49F49F4B40n); +testMul(0xFEDCBA9876543210n, -0xFEDCBA97n, -0xFDBAC09654320FEDDDC92770n); +testMul(0xFEDCBA9876543210n, -0xFEDCBA98n, -0xFDBAC097530ECA86541D5980n); +testMul(0xFEDCBA9876543210n, -0xFEDCBA987654320Fn, -0xFDBAC097C8DC5ACBE00FB23F2DF60EF0n); +testMul(0xFEDCBA9876543210n, -0xFEDCBA9876543210n, -0xFDBAC097C8DC5ACCDEEC6CD7A44A4100n); +testMul(0xFEDCBA987654320Fn, 0xFEDCBA987654320Fn, 0xFDBAC097C8DC5ACAE132F7A6B7A1DCE1n); +testMul(0xFEDCBA987654320Fn, 0xFEDCBA98n, 0xFDBAC097530ECA8555409EE8n); +testMul(0xFEDCBA987654320Fn, 0xFEDCBA97n, 0xFDBAC09654320FECDEEC6CD9n); +testMul(0xFEDCBA987654320Fn, 0x1234n, 0x121F49F49F49F49F390Cn); +testMul(0xFEDCBA987654320Fn, 0x3n, 0x2FC962FC962FC962Dn); +testMul(0xFEDCBA987654320Fn, 0x2n, 0x1FDB97530ECA8641En); +testMul(0xFEDCBA987654320Fn, 0x1n, 0xFEDCBA987654320Fn); +testMul(0xFEDCBA987654320Fn, 0x0n, 0x0n); +testMul(0xFEDCBA987654320Fn, -0x1n, -0xFEDCBA987654320Fn); +testMul(0xFEDCBA987654320Fn, -0x2n, -0x1FDB97530ECA8641En); +testMul(0xFEDCBA987654320Fn, -0x3n, -0x2FC962FC962FC962Dn); +testMul(0xFEDCBA987654320Fn, -0x1234n, -0x121F49F49F49F49F390Cn); +testMul(0xFEDCBA987654320Fn, -0xFEDCBA97n, -0xFDBAC09654320FECDEEC6CD9n); +testMul(0xFEDCBA987654320Fn, -0xFEDCBA98n, -0xFDBAC097530ECA8555409EE8n); +testMul(0xFEDCBA987654320Fn, -0xFEDCBA987654320Fn, -0xFDBAC097C8DC5ACAE132F7A6B7A1DCE1n); +testMul(0xFEDCBA987654320Fn, -0xFEDCBA9876543210n, -0xFDBAC097C8DC5ACBE00FB23F2DF60EF0n); +testMul(0xFEDCBA98n, 0xFEDCBA98n, 0xFDBAC096DD413A40n); +testMul(0xFEDCBA98n, 0xFEDCBA97n, 0xFDBAC095DE647FA8n); +testMul(0xFEDCBA98n, 0x1234n, 0x121F49F496E0n); +testMul(0xFEDCBA98n, 0x3n, 0x2FC962FC8n); +testMul(0xFEDCBA98n, 0x2n, 0x1FDB97530n); +testMul(0xFEDCBA98n, 0x1n, 0xFEDCBA98n); +testMul(0xFEDCBA98n, 0x0n, 0x0n); +testMul(0xFEDCBA98n, -0x1n, -0xFEDCBA98n); +testMul(0xFEDCBA98n, -0x2n, -0x1FDB97530n); +testMul(0xFEDCBA98n, -0x3n, -0x2FC962FC8n); +testMul(0xFEDCBA98n, -0x1234n, -0x121F49F496E0n); +testMul(0xFEDCBA98n, -0xFEDCBA97n, -0xFDBAC095DE647FA8n); +testMul(0xFEDCBA98n, -0xFEDCBA98n, -0xFDBAC096DD413A40n); +testMul(0xFEDCBA98n, -0xFEDCBA987654320Fn, -0xFDBAC097530ECA8555409EE8n); +testMul(0xFEDCBA98n, -0xFEDCBA9876543210n, -0xFDBAC097530ECA86541D5980n); +testMul(0xFEDCBA97n, 0xFEDCBA97n, 0xFDBAC094DF87C511n); +testMul(0xFEDCBA97n, 0x1234n, 0x121F49F484ACn); +testMul(0xFEDCBA97n, 0x3n, 0x2FC962FC5n); +testMul(0xFEDCBA97n, 0x2n, 0x1FDB9752En); +testMul(0xFEDCBA97n, 0x1n, 0xFEDCBA97n); +testMul(0xFEDCBA97n, 0x0n, 0x0n); +testMul(0xFEDCBA97n, -0x1n, -0xFEDCBA97n); +testMul(0xFEDCBA97n, -0x2n, -0x1FDB9752En); +testMul(0xFEDCBA97n, -0x3n, -0x2FC962FC5n); +testMul(0xFEDCBA97n, -0x1234n, -0x121F49F484ACn); +testMul(0xFEDCBA97n, -0xFEDCBA97n, -0xFDBAC094DF87C511n); +testMul(0xFEDCBA97n, -0xFEDCBA98n, -0xFDBAC095DE647FA8n); +testMul(0xFEDCBA97n, -0xFEDCBA987654320Fn, -0xFDBAC09654320FECDEEC6CD9n); +testMul(0xFEDCBA97n, -0xFEDCBA9876543210n, -0xFDBAC09654320FEDDDC92770n); +testMul(0x1234n, 0x1234n, 0x14B5A90n); +testMul(0x1234n, 0x3n, 0x369Cn); +testMul(0x1234n, 0x2n, 0x2468n); +testMul(0x1234n, 0x1n, 0x1234n); +testMul(0x1234n, 0x0n, 0x0n); +testMul(0x1234n, -0x1n, -0x1234n); +testMul(0x1234n, -0x2n, -0x2468n); +testMul(0x1234n, -0x3n, -0x369Cn); +testMul(0x1234n, -0x1234n, -0x14B5A90n); +testMul(0x1234n, -0xFEDCBA97n, -0x121F49F484ACn); +testMul(0x1234n, -0xFEDCBA98n, -0x121F49F496E0n); +testMul(0x1234n, -0xFEDCBA987654320Fn, -0x121F49F49F49F49F390Cn); +testMul(0x1234n, -0xFEDCBA9876543210n, -0x121F49F49F49F49F4B40n); +testMul(0x3n, 0x3n, 0x9n); +testMul(0x3n, 0x2n, 0x6n); +testMul(0x3n, 0x1n, 0x3n); +testMul(0x3n, 0x0n, 0x0n); +testMul(0x3n, -0x1n, -0x3n); +testMul(0x3n, -0x2n, -0x6n); +testMul(0x3n, -0x3n, -0x9n); +testMul(0x3n, -0x1234n, -0x369Cn); +testMul(0x3n, -0xFEDCBA97n, -0x2FC962FC5n); +testMul(0x3n, -0xFEDCBA98n, -0x2FC962FC8n); +testMul(0x3n, -0xFEDCBA987654320Fn, -0x2FC962FC962FC962Dn); +testMul(0x3n, -0xFEDCBA9876543210n, -0x2FC962FC962FC9630n); +testMul(0x2n, 0x2n, 0x4n); +testMul(0x2n, 0x1n, 0x2n); +testMul(0x2n, 0x0n, 0x0n); +testMul(0x2n, -0x1n, -0x2n); +testMul(0x2n, -0x2n, -0x4n); +testMul(0x2n, -0x3n, -0x6n); +testMul(0x2n, -0x1234n, -0x2468n); +testMul(0x2n, -0xFEDCBA97n, -0x1FDB9752En); +testMul(0x2n, -0xFEDCBA98n, -0x1FDB97530n); +testMul(0x2n, -0xFEDCBA987654320Fn, -0x1FDB97530ECA8641En); +testMul(0x2n, -0xFEDCBA9876543210n, -0x1FDB97530ECA86420n); +testMul(0x1n, 0x1n, 0x1n); +testMul(0x1n, 0x0n, 0x0n); +testMul(0x1n, -0x1n, -0x1n); +testMul(0x1n, -0x2n, -0x2n); +testMul(0x1n, -0x3n, -0x3n); +testMul(0x1n, -0x1234n, -0x1234n); +testMul(0x1n, -0xFEDCBA97n, -0xFEDCBA97n); +testMul(0x1n, -0xFEDCBA98n, -0xFEDCBA98n); +testMul(0x1n, -0xFEDCBA987654320Fn, -0xFEDCBA987654320Fn); +testMul(0x1n, -0xFEDCBA9876543210n, -0xFEDCBA9876543210n); +testMul(0x0n, 0x0n, 0x0n); +testMul(0x0n, -0x1n, 0x0n); +testMul(0x0n, -0x2n, 0x0n); +testMul(0x0n, -0x3n, 0x0n); +testMul(0x0n, -0x1234n, 0x0n); +testMul(0x0n, -0xFEDCBA97n, 0x0n); +testMul(0x0n, -0xFEDCBA98n, 0x0n); +testMul(0x0n, -0xFEDCBA987654320Fn, 0x0n); +testMul(0x0n, -0xFEDCBA9876543210n, 0x0n); +testMul(-0x1n, -0x1n, 0x1n); +testMul(-0x1n, -0x2n, 0x2n); +testMul(-0x1n, -0x3n, 0x3n); +testMul(-0x1n, -0x1234n, 0x1234n); +testMul(-0x1n, -0xFEDCBA97n, 0xFEDCBA97n); +testMul(-0x1n, -0xFEDCBA98n, 0xFEDCBA98n); +testMul(-0x1n, -0xFEDCBA987654320Fn, 0xFEDCBA987654320Fn); +testMul(-0x1n, -0xFEDCBA9876543210n, 0xFEDCBA9876543210n); +testMul(-0x2n, -0x2n, 0x4n); +testMul(-0x2n, -0x3n, 0x6n); +testMul(-0x2n, -0x1234n, 0x2468n); +testMul(-0x2n, -0xFEDCBA97n, 0x1FDB9752En); +testMul(-0x2n, -0xFEDCBA98n, 0x1FDB97530n); +testMul(-0x2n, -0xFEDCBA987654320Fn, 0x1FDB97530ECA8641En); +testMul(-0x2n, -0xFEDCBA9876543210n, 0x1FDB97530ECA86420n); +testMul(-0x3n, -0x3n, 0x9n); +testMul(-0x3n, -0x1234n, 0x369Cn); +testMul(-0x3n, -0xFEDCBA97n, 0x2FC962FC5n); +testMul(-0x3n, -0xFEDCBA98n, 0x2FC962FC8n); +testMul(-0x3n, -0xFEDCBA987654320Fn, 0x2FC962FC962FC962Dn); +testMul(-0x3n, -0xFEDCBA9876543210n, 0x2FC962FC962FC9630n); +testMul(-0x1234n, -0x1234n, 0x14B5A90n); +testMul(-0x1234n, -0xFEDCBA97n, 0x121F49F484ACn); +testMul(-0x1234n, -0xFEDCBA98n, 0x121F49F496E0n); +testMul(-0x1234n, -0xFEDCBA987654320Fn, 0x121F49F49F49F49F390Cn); +testMul(-0x1234n, -0xFEDCBA9876543210n, 0x121F49F49F49F49F4B40n); +testMul(-0xFEDCBA97n, -0xFEDCBA97n, 0xFDBAC094DF87C511n); +testMul(-0xFEDCBA97n, -0xFEDCBA98n, 0xFDBAC095DE647FA8n); +testMul(-0xFEDCBA97n, -0xFEDCBA987654320Fn, 0xFDBAC09654320FECDEEC6CD9n); +testMul(-0xFEDCBA97n, -0xFEDCBA9876543210n, 0xFDBAC09654320FEDDDC92770n); +testMul(-0xFEDCBA98n, -0xFEDCBA98n, 0xFDBAC096DD413A40n); +testMul(-0xFEDCBA98n, -0xFEDCBA987654320Fn, 0xFDBAC097530ECA8555409EE8n); +testMul(-0xFEDCBA98n, -0xFEDCBA9876543210n, 0xFDBAC097530ECA86541D5980n); +testMul(-0xFEDCBA987654320Fn, -0xFEDCBA987654320Fn, 0xFDBAC097C8DC5ACAE132F7A6B7A1DCE1n); +testMul(-0xFEDCBA987654320Fn, -0xFEDCBA9876543210n, 0xFDBAC097C8DC5ACBE00FB23F2DF60EF0n); +testMul(-0xFEDCBA9876543210n, -0xFEDCBA9876543210n, 0xFDBAC097C8DC5ACCDEEC6CD7A44A4100n); diff --git a/test/language/expressions/subtraction/bigint-arithmetic.js b/test/language/expressions/subtraction/bigint-arithmetic.js new file mode 100644 index 00000000000..724486d86fa --- /dev/null +++ b/test/language/expressions/subtraction/bigint-arithmetic.js @@ -0,0 +1,302 @@ +// Copyright (C) 2017 Robin Templeton. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-subtraction-operator-minus-runtime-semantics-evaluation +description: BigInt subtraction arithmetic +features: [BigInt] +---*/ + +function testSub(x, y, z) { + assert.sameValue(x - y, z, x + " - " + y + " = " + z); +} + +testSub(0xFEDCBA9876543210n, 0xFEDCBA9876543210n, 0x0n); +testSub(0xFEDCBA9876543210n, 0xFEDCBA987654320Fn, 0x1n); +testSub(0xFEDCBA9876543210n, 0xFEDCBA98n, 0xFEDCBA9777777778n); +testSub(0xFEDCBA9876543210n, 0xFEDCBA97n, 0xFEDCBA9777777779n); +testSub(0xFEDCBA9876543210n, 0x1234n, 0xFEDCBA9876541FDCn); +testSub(0xFEDCBA9876543210n, 0x3n, 0xFEDCBA987654320Dn); +testSub(0xFEDCBA9876543210n, 0x2n, 0xFEDCBA987654320En); +testSub(0xFEDCBA9876543210n, 0x1n, 0xFEDCBA987654320Fn); +testSub(0xFEDCBA9876543210n, 0x0n, 0xFEDCBA9876543210n); +testSub(0xFEDCBA9876543210n, -0x1n, 0xFEDCBA9876543211n); +testSub(0xFEDCBA9876543210n, -0x2n, 0xFEDCBA9876543212n); +testSub(0xFEDCBA9876543210n, -0x3n, 0xFEDCBA9876543213n); +testSub(0xFEDCBA9876543210n, -0x1234n, 0xFEDCBA9876544444n); +testSub(0xFEDCBA9876543210n, -0xFEDCBA97n, 0xFEDCBA997530ECA7n); +testSub(0xFEDCBA9876543210n, -0xFEDCBA98n, 0xFEDCBA997530ECA8n); +testSub(0xFEDCBA9876543210n, -0xFEDCBA987654320Fn, 0x1FDB97530ECA8641Fn); +testSub(0xFEDCBA9876543210n, -0xFEDCBA9876543210n, 0x1FDB97530ECA86420n); +testSub(0xFEDCBA987654320Fn, 0xFEDCBA9876543210n, -0x1n); +testSub(0xFEDCBA987654320Fn, 0xFEDCBA987654320Fn, 0x0n); +testSub(0xFEDCBA987654320Fn, 0xFEDCBA98n, 0xFEDCBA9777777777n); +testSub(0xFEDCBA987654320Fn, 0xFEDCBA97n, 0xFEDCBA9777777778n); +testSub(0xFEDCBA987654320Fn, 0x1234n, 0xFEDCBA9876541FDBn); +testSub(0xFEDCBA987654320Fn, 0x3n, 0xFEDCBA987654320Cn); +testSub(0xFEDCBA987654320Fn, 0x2n, 0xFEDCBA987654320Dn); +testSub(0xFEDCBA987654320Fn, 0x1n, 0xFEDCBA987654320En); +testSub(0xFEDCBA987654320Fn, 0x0n, 0xFEDCBA987654320Fn); +testSub(0xFEDCBA987654320Fn, -0x1n, 0xFEDCBA9876543210n); +testSub(0xFEDCBA987654320Fn, -0x2n, 0xFEDCBA9876543211n); +testSub(0xFEDCBA987654320Fn, -0x3n, 0xFEDCBA9876543212n); +testSub(0xFEDCBA987654320Fn, -0x1234n, 0xFEDCBA9876544443n); +testSub(0xFEDCBA987654320Fn, -0xFEDCBA97n, 0xFEDCBA997530ECA6n); +testSub(0xFEDCBA987654320Fn, -0xFEDCBA98n, 0xFEDCBA997530ECA7n); +testSub(0xFEDCBA987654320Fn, -0xFEDCBA987654320Fn, 0x1FDB97530ECA8641En); +testSub(0xFEDCBA987654320Fn, -0xFEDCBA9876543210n, 0x1FDB97530ECA8641Fn); +testSub(0xFEDCBA98n, 0xFEDCBA9876543210n, -0xFEDCBA9777777778n); +testSub(0xFEDCBA98n, 0xFEDCBA987654320Fn, -0xFEDCBA9777777777n); +testSub(0xFEDCBA98n, 0xFEDCBA98n, 0x0n); +testSub(0xFEDCBA98n, 0xFEDCBA97n, 0x1n); +testSub(0xFEDCBA98n, 0x1234n, 0xFEDCA864n); +testSub(0xFEDCBA98n, 0x3n, 0xFEDCBA95n); +testSub(0xFEDCBA98n, 0x2n, 0xFEDCBA96n); +testSub(0xFEDCBA98n, 0x1n, 0xFEDCBA97n); +testSub(0xFEDCBA98n, 0x0n, 0xFEDCBA98n); +testSub(0xFEDCBA98n, -0x1n, 0xFEDCBA99n); +testSub(0xFEDCBA98n, -0x2n, 0xFEDCBA9An); +testSub(0xFEDCBA98n, -0x3n, 0xFEDCBA9Bn); +testSub(0xFEDCBA98n, -0x1234n, 0xFEDCCCCCn); +testSub(0xFEDCBA98n, -0xFEDCBA97n, 0x1FDB9752Fn); +testSub(0xFEDCBA98n, -0xFEDCBA98n, 0x1FDB97530n); +testSub(0xFEDCBA98n, -0xFEDCBA987654320Fn, 0xFEDCBA997530ECA7n); +testSub(0xFEDCBA98n, -0xFEDCBA9876543210n, 0xFEDCBA997530ECA8n); +testSub(0xFEDCBA97n, 0xFEDCBA9876543210n, -0xFEDCBA9777777779n); +testSub(0xFEDCBA97n, 0xFEDCBA987654320Fn, -0xFEDCBA9777777778n); +testSub(0xFEDCBA97n, 0xFEDCBA98n, -0x1n); +testSub(0xFEDCBA97n, 0xFEDCBA97n, 0x0n); +testSub(0xFEDCBA97n, 0x1234n, 0xFEDCA863n); +testSub(0xFEDCBA97n, 0x3n, 0xFEDCBA94n); +testSub(0xFEDCBA97n, 0x2n, 0xFEDCBA95n); +testSub(0xFEDCBA97n, 0x1n, 0xFEDCBA96n); +testSub(0xFEDCBA97n, 0x0n, 0xFEDCBA97n); +testSub(0xFEDCBA97n, -0x1n, 0xFEDCBA98n); +testSub(0xFEDCBA97n, -0x2n, 0xFEDCBA99n); +testSub(0xFEDCBA97n, -0x3n, 0xFEDCBA9An); +testSub(0xFEDCBA97n, -0x1234n, 0xFEDCCCCBn); +testSub(0xFEDCBA97n, -0xFEDCBA97n, 0x1FDB9752En); +testSub(0xFEDCBA97n, -0xFEDCBA98n, 0x1FDB9752Fn); +testSub(0xFEDCBA97n, -0xFEDCBA987654320Fn, 0xFEDCBA997530ECA6n); +testSub(0xFEDCBA97n, -0xFEDCBA9876543210n, 0xFEDCBA997530ECA7n); +testSub(0x1234n, 0xFEDCBA9876543210n, -0xFEDCBA9876541FDCn); +testSub(0x1234n, 0xFEDCBA987654320Fn, -0xFEDCBA9876541FDBn); +testSub(0x1234n, 0xFEDCBA98n, -0xFEDCA864n); +testSub(0x1234n, 0xFEDCBA97n, -0xFEDCA863n); +testSub(0x1234n, 0x1234n, 0x0n); +testSub(0x1234n, 0x3n, 0x1231n); +testSub(0x1234n, 0x2n, 0x1232n); +testSub(0x1234n, 0x1n, 0x1233n); +testSub(0x1234n, 0x0n, 0x1234n); +testSub(0x1234n, -0x1n, 0x1235n); +testSub(0x1234n, -0x2n, 0x1236n); +testSub(0x1234n, -0x3n, 0x1237n); +testSub(0x1234n, -0x1234n, 0x2468n); +testSub(0x1234n, -0xFEDCBA97n, 0xFEDCCCCBn); +testSub(0x1234n, -0xFEDCBA98n, 0xFEDCCCCCn); +testSub(0x1234n, -0xFEDCBA987654320Fn, 0xFEDCBA9876544443n); +testSub(0x1234n, -0xFEDCBA9876543210n, 0xFEDCBA9876544444n); +testSub(0x3n, 0xFEDCBA9876543210n, -0xFEDCBA987654320Dn); +testSub(0x3n, 0xFEDCBA987654320Fn, -0xFEDCBA987654320Cn); +testSub(0x3n, 0xFEDCBA98n, -0xFEDCBA95n); +testSub(0x3n, 0xFEDCBA97n, -0xFEDCBA94n); +testSub(0x3n, 0x1234n, -0x1231n); +testSub(0x3n, 0x3n, 0x0n); +testSub(0x3n, 0x2n, 0x1n); +testSub(0x3n, 0x1n, 0x2n); +testSub(0x3n, 0x0n, 0x3n); +testSub(0x3n, -0x1n, 0x4n); +testSub(0x3n, -0x2n, 0x5n); +testSub(0x3n, -0x3n, 0x6n); +testSub(0x3n, -0x1234n, 0x1237n); +testSub(0x3n, -0xFEDCBA97n, 0xFEDCBA9An); +testSub(0x3n, -0xFEDCBA98n, 0xFEDCBA9Bn); +testSub(0x3n, -0xFEDCBA987654320Fn, 0xFEDCBA9876543212n); +testSub(0x3n, -0xFEDCBA9876543210n, 0xFEDCBA9876543213n); +testSub(0x2n, 0xFEDCBA9876543210n, -0xFEDCBA987654320En); +testSub(0x2n, 0xFEDCBA987654320Fn, -0xFEDCBA987654320Dn); +testSub(0x2n, 0xFEDCBA98n, -0xFEDCBA96n); +testSub(0x2n, 0xFEDCBA97n, -0xFEDCBA95n); +testSub(0x2n, 0x1234n, -0x1232n); +testSub(0x2n, 0x3n, -0x1n); +testSub(0x2n, 0x2n, 0x0n); +testSub(0x2n, 0x1n, 0x1n); +testSub(0x2n, 0x0n, 0x2n); +testSub(0x2n, -0x1n, 0x3n); +testSub(0x2n, -0x2n, 0x4n); +testSub(0x2n, -0x3n, 0x5n); +testSub(0x2n, -0x1234n, 0x1236n); +testSub(0x2n, -0xFEDCBA97n, 0xFEDCBA99n); +testSub(0x2n, -0xFEDCBA98n, 0xFEDCBA9An); +testSub(0x2n, -0xFEDCBA987654320Fn, 0xFEDCBA9876543211n); +testSub(0x2n, -0xFEDCBA9876543210n, 0xFEDCBA9876543212n); +testSub(0x1n, 0xFEDCBA9876543210n, -0xFEDCBA987654320Fn); +testSub(0x1n, 0xFEDCBA987654320Fn, -0xFEDCBA987654320En); +testSub(0x1n, 0xFEDCBA98n, -0xFEDCBA97n); +testSub(0x1n, 0xFEDCBA97n, -0xFEDCBA96n); +testSub(0x1n, 0x1234n, -0x1233n); +testSub(0x1n, 0x3n, -0x2n); +testSub(0x1n, 0x2n, -0x1n); +testSub(0x1n, 0x1n, 0x0n); +testSub(0x1n, 0x0n, 0x1n); +testSub(0x1n, -0x1n, 0x2n); +testSub(0x1n, -0x2n, 0x3n); +testSub(0x1n, -0x3n, 0x4n); +testSub(0x1n, -0x1234n, 0x1235n); +testSub(0x1n, -0xFEDCBA97n, 0xFEDCBA98n); +testSub(0x1n, -0xFEDCBA98n, 0xFEDCBA99n); +testSub(0x1n, -0xFEDCBA987654320Fn, 0xFEDCBA9876543210n); +testSub(0x1n, -0xFEDCBA9876543210n, 0xFEDCBA9876543211n); +testSub(0x0n, 0xFEDCBA9876543210n, -0xFEDCBA9876543210n); +testSub(0x0n, 0xFEDCBA987654320Fn, -0xFEDCBA987654320Fn); +testSub(0x0n, 0xFEDCBA98n, -0xFEDCBA98n); +testSub(0x0n, 0xFEDCBA97n, -0xFEDCBA97n); +testSub(0x0n, 0x1234n, -0x1234n); +testSub(0x0n, 0x3n, -0x3n); +testSub(0x0n, 0x2n, -0x2n); +testSub(0x0n, 0x1n, -0x1n); +testSub(0x0n, 0x0n, 0x0n); +testSub(0x0n, -0x1n, 0x1n); +testSub(0x0n, -0x2n, 0x2n); +testSub(0x0n, -0x3n, 0x3n); +testSub(0x0n, -0x1234n, 0x1234n); +testSub(0x0n, -0xFEDCBA97n, 0xFEDCBA97n); +testSub(0x0n, -0xFEDCBA98n, 0xFEDCBA98n); +testSub(0x0n, -0xFEDCBA987654320Fn, 0xFEDCBA987654320Fn); +testSub(0x0n, -0xFEDCBA9876543210n, 0xFEDCBA9876543210n); +testSub(-0x1n, 0xFEDCBA9876543210n, -0xFEDCBA9876543211n); +testSub(-0x1n, 0xFEDCBA987654320Fn, -0xFEDCBA9876543210n); +testSub(-0x1n, 0xFEDCBA98n, -0xFEDCBA99n); +testSub(-0x1n, 0xFEDCBA97n, -0xFEDCBA98n); +testSub(-0x1n, 0x1234n, -0x1235n); +testSub(-0x1n, 0x3n, -0x4n); +testSub(-0x1n, 0x2n, -0x3n); +testSub(-0x1n, 0x1n, -0x2n); +testSub(-0x1n, 0x0n, -0x1n); +testSub(-0x1n, -0x1n, 0x0n); +testSub(-0x1n, -0x2n, 0x1n); +testSub(-0x1n, -0x3n, 0x2n); +testSub(-0x1n, -0x1234n, 0x1233n); +testSub(-0x1n, -0xFEDCBA97n, 0xFEDCBA96n); +testSub(-0x1n, -0xFEDCBA98n, 0xFEDCBA97n); +testSub(-0x1n, -0xFEDCBA987654320Fn, 0xFEDCBA987654320En); +testSub(-0x1n, -0xFEDCBA9876543210n, 0xFEDCBA987654320Fn); +testSub(-0x2n, 0xFEDCBA9876543210n, -0xFEDCBA9876543212n); +testSub(-0x2n, 0xFEDCBA987654320Fn, -0xFEDCBA9876543211n); +testSub(-0x2n, 0xFEDCBA98n, -0xFEDCBA9An); +testSub(-0x2n, 0xFEDCBA97n, -0xFEDCBA99n); +testSub(-0x2n, 0x1234n, -0x1236n); +testSub(-0x2n, 0x3n, -0x5n); +testSub(-0x2n, 0x2n, -0x4n); +testSub(-0x2n, 0x1n, -0x3n); +testSub(-0x2n, 0x0n, -0x2n); +testSub(-0x2n, -0x1n, -0x1n); +testSub(-0x2n, -0x2n, 0x0n); +testSub(-0x2n, -0x3n, 0x1n); +testSub(-0x2n, -0x1234n, 0x1232n); +testSub(-0x2n, -0xFEDCBA97n, 0xFEDCBA95n); +testSub(-0x2n, -0xFEDCBA98n, 0xFEDCBA96n); +testSub(-0x2n, -0xFEDCBA987654320Fn, 0xFEDCBA987654320Dn); +testSub(-0x2n, -0xFEDCBA9876543210n, 0xFEDCBA987654320En); +testSub(-0x3n, 0xFEDCBA9876543210n, -0xFEDCBA9876543213n); +testSub(-0x3n, 0xFEDCBA987654320Fn, -0xFEDCBA9876543212n); +testSub(-0x3n, 0xFEDCBA98n, -0xFEDCBA9Bn); +testSub(-0x3n, 0xFEDCBA97n, -0xFEDCBA9An); +testSub(-0x3n, 0x1234n, -0x1237n); +testSub(-0x3n, 0x3n, -0x6n); +testSub(-0x3n, 0x2n, -0x5n); +testSub(-0x3n, 0x1n, -0x4n); +testSub(-0x3n, 0x0n, -0x3n); +testSub(-0x3n, -0x1n, -0x2n); +testSub(-0x3n, -0x2n, -0x1n); +testSub(-0x3n, -0x3n, 0x0n); +testSub(-0x3n, -0x1234n, 0x1231n); +testSub(-0x3n, -0xFEDCBA97n, 0xFEDCBA94n); +testSub(-0x3n, -0xFEDCBA98n, 0xFEDCBA95n); +testSub(-0x3n, -0xFEDCBA987654320Fn, 0xFEDCBA987654320Cn); +testSub(-0x3n, -0xFEDCBA9876543210n, 0xFEDCBA987654320Dn); +testSub(-0x1234n, 0xFEDCBA9876543210n, -0xFEDCBA9876544444n); +testSub(-0x1234n, 0xFEDCBA987654320Fn, -0xFEDCBA9876544443n); +testSub(-0x1234n, 0xFEDCBA98n, -0xFEDCCCCCn); +testSub(-0x1234n, 0xFEDCBA97n, -0xFEDCCCCBn); +testSub(-0x1234n, 0x1234n, -0x2468n); +testSub(-0x1234n, 0x3n, -0x1237n); +testSub(-0x1234n, 0x2n, -0x1236n); +testSub(-0x1234n, 0x1n, -0x1235n); +testSub(-0x1234n, 0x0n, -0x1234n); +testSub(-0x1234n, -0x1n, -0x1233n); +testSub(-0x1234n, -0x2n, -0x1232n); +testSub(-0x1234n, -0x3n, -0x1231n); +testSub(-0x1234n, -0x1234n, 0x0n); +testSub(-0x1234n, -0xFEDCBA97n, 0xFEDCA863n); +testSub(-0x1234n, -0xFEDCBA98n, 0xFEDCA864n); +testSub(-0x1234n, -0xFEDCBA987654320Fn, 0xFEDCBA9876541FDBn); +testSub(-0x1234n, -0xFEDCBA9876543210n, 0xFEDCBA9876541FDCn); +testSub(-0xFEDCBA97n, 0xFEDCBA9876543210n, -0xFEDCBA997530ECA7n); +testSub(-0xFEDCBA97n, 0xFEDCBA987654320Fn, -0xFEDCBA997530ECA6n); +testSub(-0xFEDCBA97n, 0xFEDCBA98n, -0x1FDB9752Fn); +testSub(-0xFEDCBA97n, 0xFEDCBA97n, -0x1FDB9752En); +testSub(-0xFEDCBA97n, 0x1234n, -0xFEDCCCCBn); +testSub(-0xFEDCBA97n, 0x3n, -0xFEDCBA9An); +testSub(-0xFEDCBA97n, 0x2n, -0xFEDCBA99n); +testSub(-0xFEDCBA97n, 0x1n, -0xFEDCBA98n); +testSub(-0xFEDCBA97n, 0x0n, -0xFEDCBA97n); +testSub(-0xFEDCBA97n, -0x1n, -0xFEDCBA96n); +testSub(-0xFEDCBA97n, -0x2n, -0xFEDCBA95n); +testSub(-0xFEDCBA97n, -0x3n, -0xFEDCBA94n); +testSub(-0xFEDCBA97n, -0x1234n, -0xFEDCA863n); +testSub(-0xFEDCBA97n, -0xFEDCBA97n, 0x0n); +testSub(-0xFEDCBA97n, -0xFEDCBA98n, 0x1n); +testSub(-0xFEDCBA97n, -0xFEDCBA987654320Fn, 0xFEDCBA9777777778n); +testSub(-0xFEDCBA97n, -0xFEDCBA9876543210n, 0xFEDCBA9777777779n); +testSub(-0xFEDCBA98n, 0xFEDCBA9876543210n, -0xFEDCBA997530ECA8n); +testSub(-0xFEDCBA98n, 0xFEDCBA987654320Fn, -0xFEDCBA997530ECA7n); +testSub(-0xFEDCBA98n, 0xFEDCBA98n, -0x1FDB97530n); +testSub(-0xFEDCBA98n, 0xFEDCBA97n, -0x1FDB9752Fn); +testSub(-0xFEDCBA98n, 0x1234n, -0xFEDCCCCCn); +testSub(-0xFEDCBA98n, 0x3n, -0xFEDCBA9Bn); +testSub(-0xFEDCBA98n, 0x2n, -0xFEDCBA9An); +testSub(-0xFEDCBA98n, 0x1n, -0xFEDCBA99n); +testSub(-0xFEDCBA98n, 0x0n, -0xFEDCBA98n); +testSub(-0xFEDCBA98n, -0x1n, -0xFEDCBA97n); +testSub(-0xFEDCBA98n, -0x2n, -0xFEDCBA96n); +testSub(-0xFEDCBA98n, -0x3n, -0xFEDCBA95n); +testSub(-0xFEDCBA98n, -0x1234n, -0xFEDCA864n); +testSub(-0xFEDCBA98n, -0xFEDCBA97n, -0x1n); +testSub(-0xFEDCBA98n, -0xFEDCBA98n, 0x0n); +testSub(-0xFEDCBA98n, -0xFEDCBA987654320Fn, 0xFEDCBA9777777777n); +testSub(-0xFEDCBA98n, -0xFEDCBA9876543210n, 0xFEDCBA9777777778n); +testSub(-0xFEDCBA987654320Fn, 0xFEDCBA9876543210n, -0x1FDB97530ECA8641Fn); +testSub(-0xFEDCBA987654320Fn, 0xFEDCBA987654320Fn, -0x1FDB97530ECA8641En); +testSub(-0xFEDCBA987654320Fn, 0xFEDCBA98n, -0xFEDCBA997530ECA7n); +testSub(-0xFEDCBA987654320Fn, 0xFEDCBA97n, -0xFEDCBA997530ECA6n); +testSub(-0xFEDCBA987654320Fn, 0x1234n, -0xFEDCBA9876544443n); +testSub(-0xFEDCBA987654320Fn, 0x3n, -0xFEDCBA9876543212n); +testSub(-0xFEDCBA987654320Fn, 0x2n, -0xFEDCBA9876543211n); +testSub(-0xFEDCBA987654320Fn, 0x1n, -0xFEDCBA9876543210n); +testSub(-0xFEDCBA987654320Fn, 0x0n, -0xFEDCBA987654320Fn); +testSub(-0xFEDCBA987654320Fn, -0x1n, -0xFEDCBA987654320En); +testSub(-0xFEDCBA987654320Fn, -0x2n, -0xFEDCBA987654320Dn); +testSub(-0xFEDCBA987654320Fn, -0x3n, -0xFEDCBA987654320Cn); +testSub(-0xFEDCBA987654320Fn, -0x1234n, -0xFEDCBA9876541FDBn); +testSub(-0xFEDCBA987654320Fn, -0xFEDCBA97n, -0xFEDCBA9777777778n); +testSub(-0xFEDCBA987654320Fn, -0xFEDCBA98n, -0xFEDCBA9777777777n); +testSub(-0xFEDCBA987654320Fn, -0xFEDCBA987654320Fn, 0x0n); +testSub(-0xFEDCBA987654320Fn, -0xFEDCBA9876543210n, 0x1n); +testSub(-0xFEDCBA9876543210n, 0xFEDCBA9876543210n, -0x1FDB97530ECA86420n); +testSub(-0xFEDCBA9876543210n, 0xFEDCBA987654320Fn, -0x1FDB97530ECA8641Fn); +testSub(-0xFEDCBA9876543210n, 0xFEDCBA98n, -0xFEDCBA997530ECA8n); +testSub(-0xFEDCBA9876543210n, 0xFEDCBA97n, -0xFEDCBA997530ECA7n); +testSub(-0xFEDCBA9876543210n, 0x1234n, -0xFEDCBA9876544444n); +testSub(-0xFEDCBA9876543210n, 0x3n, -0xFEDCBA9876543213n); +testSub(-0xFEDCBA9876543210n, 0x2n, -0xFEDCBA9876543212n); +testSub(-0xFEDCBA9876543210n, 0x1n, -0xFEDCBA9876543211n); +testSub(-0xFEDCBA9876543210n, 0x0n, -0xFEDCBA9876543210n); +testSub(-0xFEDCBA9876543210n, -0x1n, -0xFEDCBA987654320Fn); +testSub(-0xFEDCBA9876543210n, -0x2n, -0xFEDCBA987654320En); +testSub(-0xFEDCBA9876543210n, -0x3n, -0xFEDCBA987654320Dn); +testSub(-0xFEDCBA9876543210n, -0x1234n, -0xFEDCBA9876541FDCn); +testSub(-0xFEDCBA9876543210n, -0xFEDCBA97n, -0xFEDCBA9777777779n); +testSub(-0xFEDCBA9876543210n, -0xFEDCBA98n, -0xFEDCBA9777777778n); +testSub(-0xFEDCBA9876543210n, -0xFEDCBA987654320Fn, -0x1n); +testSub(-0xFEDCBA9876543210n, -0xFEDCBA9876543210n, 0x0n);