function assert(b) { if (!b) throw new Error("Bad assertion."); } let tests = []; function test(f) { noInline(f); tests.push(f); } function runTests() { let start = Date.now(); for (let f of tests) { for (let i = 0; i < 40000; i++) f(); } const verbose = false; if (verbose) print(Date.now() - start); } function add(a,b) { return a + b; } noInline(add); test(function() { let a = "foo"; let b = 20; assert(a + b === add(a, b)); assert(b + a === add(b, a)); }); test(function() { let a = "foo"; let b = null; assert(a + b === add(a, b)); assert(b + a === add(b, a)); }); test(function() { let a = "foo"; let b = undefined; assert(a + b === add(a, b)); assert(b + a === add(b, a)); }); test(function() { let a = "foo"; let b = 20.81239012821; assert(a + b === add(a, b)); assert(b + a === add(b, a)); }); test(function() { let a = "foo"; let b = true; assert(a + b === add(a, b)); assert(b + a === add(b, a)); }); test(function() { let a = "foo"; let b = false; assert(a + b === add(a, b)); assert(b + a === add(b, a)); }); test(function() { let a = "foo"; let b = NaN; assert(a + b === add(a, b)); assert(b + a === add(b, a)); }); test(function() { let a = -0; let b = "foo"; assert(a + b === add(a, b)); assert(b + a === add(b, a)); }); test(function() { let a = "foo"; let b = 0.0; assert(a + b === add(a, b)); assert(b + a === add(b, a)); }); test(function() { let a = "foo"; let b = Infinity; assert(a + b === add(a, b)); assert(b + a === add(b, a)); }); test(function() { let a = -Infinity; let b = "foo"; assert(a + b === add(a, b)); assert(b + a === add(b, a)); }); test(function() { let a = "foo"; let b = 1e10; assert(a + b === add(a, b)); assert(b + a === add(b, a)); }); test(function() { let a = "foo"; let b = 1e-10; assert(a + b === add(a, b)); assert(b + a === add(b, a)); }); test(function() { let a = "foo"; let b = 1e5; assert(a + b === add(a, b)); assert(b + a === add(b, a)); }); test(function() { let a = "foo"; let b = 1e-5; assert(a + b === add(a, b)); assert(b + a === add(b, a)); }); test(function() { let a = "foo"; let b = 1e-40; assert(a + b === add(a, b)); assert(b + a === add(b, a)); }); test(function() { let a = "foo"; let b = 1e40; assert(a + b === add(a, b)); assert(b + a === add(b, a)); }); runTests();