summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/warp/polymorphic-to-bool.js
blob: adbfe2d79192440557250633b24e7fffa3fd3702 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// |jit-test| --fast-warmup; --no-threads

function runTest(src, seen, last) {
    with ({}) {}

    // Make a fresh script.
    var foo = eval(src);

    // Compile it with polymorphic types.
    for (var j = 0; j < 100; j++) {
	foo(seen[j % seen.length]);
    }

    // Now test the type sorted last.
    assertEq(foo(last), false);
}

function runTests(src) {
    // Each of these |seen| sets will cause the |last| type to be
    // the last type tested in testValueTruthyKernel.
    runTest(src, [1n,   Symbol("a"), 1.5,  "",   {}   ],  1);
    runTest(src, [1n,   Symbol("a"), 1.5,  "",   true ],  {});
    runTest(src, [1n,   Symbol("a"), 1.5,  true, {}   ],  "a");
    runTest(src, [1n,   Symbol("a"), true, "",   {}   ],  1.5);
    runTest(src, [1n,   true,        1.5,  "",   {}   ],  Symbol("a"));
    runTest(src, [true, Symbol("a"), 1.5,  "",   {}   ],  1n);
}

// JumpIfFalse
runTests("(x) => { if (x) { return false; }}");

// And
runTests("(x) => x && false");

// Or
runTests("(x) => !(x || true)");

// Not
runTests("(x) => !x");