load("./driver/driver.js"); function forRegular(limit) { var sum = 0; for (var i = 0; i < limit; i++) { sum += i; } return sum; } function forIn(o) { var s = ""; var p; for (p in o) { s += p; } } function forOf(a) { var s = ""; var p; for (p of a) { s += p; } } function whileLoop(limit) { var i = 0; var sum = 0; while (i < limit) { sum += i; i++; } return sum; } assert(!hasBasicBlockExecuted(forRegular, "var sum"), "should not have executed yet."); forRegular(0); assert(hasBasicBlockExecuted(forRegular, "var sum"), "should have executed."); assert(!hasBasicBlockExecuted(forRegular, "sum += i"), "should not have executed yet."); forRegular(1); assert(hasBasicBlockExecuted(forRegular, "sum += i"), "should have executed."); assert(!hasBasicBlockExecuted(forIn, "var s"), "should not have executed yet."); forIn({}); assert(hasBasicBlockExecuted(forIn, "var s"), "should have executed."); assert(!hasBasicBlockExecuted(forIn, "s += p"), "should not have executed yet."); forIn({foo: "bar"}); assert(hasBasicBlockExecuted(forIn, "s += p"), "should have executed."); assert(!hasBasicBlockExecuted(forOf, "var s"), "should not have executed yet."); forOf([]); assert(hasBasicBlockExecuted(forOf, "var s"), "should have executed."); assert(!hasBasicBlockExecuted(forOf, "s += p"), "should not have executed yet."); forOf(["a"]); assert(hasBasicBlockExecuted(forOf, "s += p"), "should have executed."); assert(!hasBasicBlockExecuted(whileLoop, "var sum"), "should not have executed yet."); whileLoop(0); assert(hasBasicBlockExecuted(whileLoop, "var sum"), "should have executed."); assert(!hasBasicBlockExecuted(whileLoop, "sum += i"), "should not have executed yet."); whileLoop(1); assert(hasBasicBlockExecuted(whileLoop, "sum += i"), "should have executed.");