var findTypeForExpression = $vm.findTypeForExpression;

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

function wrapper() {
    var s1 = Symbol();

    var sCaptured = Symbol();
    function foo() {
        sCaptured = null;
    }
    foo();

    function bar(s3) { return s3; }
    for (var i = 0; i < 1000; i++)
        bar(i)
    bar(Symbol())

    function baz(s4) { return s4; }
    for (var i = 0; i < 1000; i++)
        baz(Symbol())
    baz("hello")
}

wrapper();

// ====== End test cases ======

var types = findTypeForExpression(wrapper, "s1"); 
assert(types.instructionTypeSet.primitiveTypeNames.length === 1, "Primitive type names should contain one type");
assert(types.instructionTypeSet.primitiveTypeNames.indexOf(T.Symbol) !== -1, "Primitive type names should contain 'Symbol'");

types = findTypeForExpression(wrapper, "sCaptured");
assert(types.globalTypeSet.primitiveTypeNames.length === 2, "Primitive type names should contain two items.");
assert(types.globalTypeSet.primitiveTypeNames.indexOf(T.Symbol) !== -1, "Primitive type names should contain 'Symbol'");
assert(types.globalTypeSet.primitiveTypeNames.indexOf(T.Null) !== -1, "Primitive type names should contain 'Null'");

types = findTypeForExpression(wrapper, "s3");
assert(types.instructionTypeSet.primitiveTypeNames.length === 2, "Primitive type names should contain 2 items");
assert(types.instructionTypeSet.primitiveTypeNames.indexOf(T.Integer) !== -1, "Primitive type names should contain 'Integer'");
assert(types.instructionTypeSet.primitiveTypeNames.indexOf(T.Symbol) !== -1, "Primitive type names should contain 'Symbol'");

types = findTypeForExpression(wrapper, "s4");
assert(types.instructionTypeSet.primitiveTypeNames.length === 2, "Primitive type names should contain 2 items");
assert(types.instructionTypeSet.primitiveTypeNames.indexOf(T.String) !== -1, "Primitive type names should contain 'String'");
assert(types.instructionTypeSet.primitiveTypeNames.indexOf(T.Symbol) !== -1, "Primitive type names should contain 'Symbol'");
