// FIXME: unskip when this is solved
// https://bugs.webkit.org/show_bug.cgi?id=191163
//@ skip if $architecture == "mips" or $architecture == "arm"
//@ 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);
        }
    }
}
