var success = 0; var expected_bool = 0; var expected_int = 0; var expected_double = 0; var expected_string = 0; var expected_object = 0; var expected_symbol = 0;
function test_type_stable_ic() { // Initialize as falsy where possible. var a = undefined; // No Change, never succeeds var b = null; // No Change, never succeeds var c = false; // Alternate between true and false. var d = 0; // Int32 cache checker, change int values var e = ""; // String cache checker, change string values var f = Symbol(); // No change, always succeed, no cache. var g = {}; // Change objects, always succeed. var h = -0; // Double cache checker, change double values.
for (var i =0; i < 30; i++) { // Switch between values to ensure the caches fire. switch (i % 3) { case 0:
d = 0;
e = "hi"; expected_string++;
c = true; expected_bool++;
h = 0; break; case 1:
d = 1; expected_int++;
e = "";
c = false;
h = NaN; break; case 2:
d = 2; expected_int++;
h = 1.234; expected_double++;
g = {}; break;
}
if (a) { success++; } if (b) { success++; } if (c) { success++; } if (d) { success++; } if (e) { success++; } if (f) { success++; } expected_symbol++; // Symbol succeed if (g) { success++; } expected_object++; // Object success if (h) { success++; }
}
}
// Test cache failures. function helper(fun, arg, n)
{ var r = 0; for (var i = 0; i < n; i++) {
r = fun(arg);
} return r ? 1 : 0;
}
function test_transition(fun, load, test, before, after) { var a = helper(fun, load, 30); var x = helper(fun, test, 5)
assertEq(a, before);
assertEq(x, after)
}
var fun1 = (x) => { if (x) returntrue; elsereturnfalse; }; var fun2 = (x) => { if (x) returntrue; elsereturnfalse; }; var fun3 = (x) => { if (x) returntrue; elsereturnfalse; }; var fun4 = (x) => { if (x) returntrue; elsereturnfalse; }; var fun5 = (x) => { if (x) returntrue; elsereturnfalse; }; var fun6 = (x) => { if (x) returntrue; elsereturnfalse; }; var fun7 = (x) => { if (x) returntrue; elsereturnfalse; }; var fun8 = (x) => { if (x) returntrue; elsereturnfalse; };
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.