1'use strict'; 2const common = require('../../common'); 3const assert = require('assert'); 4const { 5 IsLossless, 6 TestInt64, 7 TestUint64, 8 TestWords, 9 CreateTooBigBigInt, 10 MakeBigIntWordsThrow, 11} = require(`./build/${common.buildType}/test_bigint`); 12 13[ 14 0n, 15 -0n, 16 1n, 17 -1n, 18 100n, 19 2121n, 20 -1233n, 21 986583n, 22 -976675n, 23 98765432213456789876546896323445679887645323232436587988766545658n, 24 -4350987086545760976737453646576078997096876957864353245245769809n, 25].forEach((num) => { 26 if (num > -(2n ** 63n) && num < 2n ** 63n) { 27 assert.strictEqual(TestInt64(num), num); 28 assert.strictEqual(IsLossless(num, true), true); 29 } else { 30 assert.strictEqual(IsLossless(num, true), false); 31 } 32 33 if (num >= 0 && num < 2n ** 64n) { 34 assert.strictEqual(TestUint64(num), num); 35 assert.strictEqual(IsLossless(num, false), true); 36 } else { 37 assert.strictEqual(IsLossless(num, false), false); 38 } 39 40 assert.strictEqual(num, TestWords(num)); 41}); 42 43assert.throws(() => CreateTooBigBigInt(), { 44 name: 'Error', 45 message: 'Invalid argument', 46}); 47 48// Test that we correctly forward exceptions from the engine. 49assert.throws(() => MakeBigIntWordsThrow(), { 50 name: 'RangeError', 51 message: 'Maximum BigInt size exceeded' 52}); 53