//@ if $buildType == "release" then runDefault else skip end | |
function assert(b) { | |
if (!b) | |
throw new Error("Bad assertion") | |
} | |
noInline(assert); | |
let tests = [ | |
[true, true], | |
[false, false], | |
["", false], | |
["" + "" + "", false], | |
["foo", true], | |
["foo" + "bar", true], | |
[{}, true], | |
[Symbol(), true], | |
[undefined, false], | |
[null, false], | |
[0, false], | |
[-0, false], | |
[+0, false], | |
[NaN, false], | |
[10, true], | |
[10.2012, true], | |
[function() { }, true], | |
[new String("foo"), true], | |
[new String(""), true], | |
[new String, true] | |
]; | |
function test1(c) { | |
return !!c; | |
} | |
noInline(test1); | |
function test2(c) { | |
if (c) | |
return true; | |
return false; | |
} | |
noInline(test2); | |
function test3(c) { | |
if (!c) | |
return false; | |
return true; | |
} | |
noInline(test3); | |
let testFunctions = [test1, test2, test3]; | |
for (let testFunction of testFunctions) { | |
for (let i = 0; i < 10000; i++) { | |
let item = tests[i % tests.length]; | |
assert(testFunction(item[0]) === item[1]); | |
} | |
} | |
let masquerader = makeMasquerader(); | |
for (let testFunction of testFunctions) { | |
for (let i = 0; i < 10000; i++) { | |
for (let i = 0; i < 10000; i++) { | |
assert(testFunction(masquerader) === false); | |
} | |
} | |
} |