var basicBlockExecutionCount = $vm.basicBlockExecutionCount;

load("./driver/driver.js");

function noop() { ; }
function foo(num) {
    for (let i = 0; i < num; i++) {
        noop(); 
    }
}

function a() { ; }
function b() { ; }

function baz(num) {
    for (let i = 0; i < num; i++) {
        i % 2 ? a() : b();
    }
}

function jaz(num) {
    for (let i = 0; i < num; i++) {
        if (i % 2)
            a();
        else
            b();
    }
}

function testWhile(num) {
    let i = num;
    while (i--) {
        noop();
        if (i % 2)
            a();
        else
            b();
    }
}

foo(120);
assert(basicBlockExecutionCount(foo, "noop()") === 120);
noop();
assert(basicBlockExecutionCount(noop, ";") === 121);

baz(140);
assert(basicBlockExecutionCount(baz, "a()") === 140/2);
assert(basicBlockExecutionCount(baz, "b()") === 140/2);
assert(basicBlockExecutionCount(a, ";") === 140/2);
assert(basicBlockExecutionCount(b, ";") === 140/2);

jaz(140);
assert(basicBlockExecutionCount(jaz, "a()") === 140/2);
assert(basicBlockExecutionCount(jaz, "b()") === 140/2);

testWhile(140);
assert(basicBlockExecutionCount(testWhile, "noop()") === 140);
assert(basicBlockExecutionCount(testWhile, "a()") === 140/2);
assert(basicBlockExecutionCount(testWhile, "b()") === 140/2);

if (is32BitPlatform()) {
    function testMax() {
        let j = 0;
        let numIters = Math.pow(2, 32) + 10;
        for (let i = 0; i < numIters; i++) {
            j++;
        }
    }

    testMax();
    assert(basicBlockExecutionCount(testMax, "j++") === Math.pow(2, 32) - 1);
}
