--- /dev/null
+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.");