function negativeRange(results) { for (var i = -1; i > -10; --i) { results[Math.abs(i)] = i; } } noInline(negativeRange); for (var i = 0; i < 1e4; ++i) { var results = []; negativeRange(results); if (results.length != 10) throw "Wrong result length: " + results.length; for (var j = 0; j < 10; ++j) { if (j < 1) { if (results[j] !== undefined) throw "Wrong result, results[j] = " + results[j] + " at j = " + j; continue; } if (results[j] !== -j) throw "Wrong result, results[j] = " + results[j] + " at j = " + j; } } function negativeRangeIncludingZero(results) { for (var i = 0; i > -10; --i) { results[Math.abs(i)] = i; } } noInline(negativeRangeIncludingZero); for (var i = 0; i < 1e4; ++i) { var results = []; negativeRangeIncludingZero(results); if (results.length != 10) throw "Wrong result length: " + results.length; for (var j = 0; j < 10; ++j) { if (results[j] !== -j) throw "Wrong result, results[j] = " + results[j] + " at j = " + j; } } function negativeRangeWithOverflow(results, limit) { var i = -2147483648 + 10; do { results.push(Math.abs(i)); --i; } while (i !== limit); } noInline(negativeRangeWithOverflow); // First, we warm up without overflow. for (var i = 0; i < 1e4; ++i) { var results = []; negativeRangeWithOverflow(results, -2147483647); if (results.length != 9) throw "Wrong result length: " + results.length; for (var j = 0; j < 9; ++j) { if (results[j] !== 2147483638 + j) throw "Wrong result, results[j] = " + results[j] + " at j = " + j; } } // Then we overflow. for (var i = 0; i < 1e4; ++i) { var results = []; negativeRangeWithOverflow(results, -2147483648); if (results.length != 10) throw "Wrong result length: " + results.length; for (var j = 0; j < 10; ++j) { if (results[j] !== 2147483638 + j) throw "Wrong result, results[j] = " + results[j] + " at j = " + j; } } function positiveRange(results) { for (var i = 1; i < 10; ++i) { results[Math.abs(i)] = i; } } noInline(positiveRange); for (var i = 0; i < 1e4; ++i) { var results = []; positiveRange(results); if (results.length != 10) throw "Wrong result length: " + results.length; for (var j = 0; j < 10; ++j) { if (j < 1) { if (results[j] !== undefined) throw "Wrong result, results[j] = " + results[j] + " at j = " + j; continue; } if (results[j] !== j) throw "Wrong result, results[j] = " + results[j] + " at j = " + j; } } function positiveRangeIncludingZero(results) { for (var i = 0; i < 10; ++i) { results[Math.abs(i)] = i; } } noInline(positiveRangeIncludingZero); for (var i = 0; i < 1e4; ++i) { var results = []; positiveRangeIncludingZero(results); if (results.length != 10) throw "Wrong result length: " + results.length; for (var j = 0; j < 10; ++j) { if (results[j] !== j) throw "Wrong result, results[j] = " + results[j] + " at j = " + j; } } function rangeWithoutOverflow(results) { for (var i = -10; i < 10; ++i) { results[i] = Math.abs(i); } } noInline(rangeWithoutOverflow); for (var i = 0; i < 1e4; ++i) { var results = []; rangeWithoutOverflow(results); if (results.length != 10) throw "Wrong result length: " + results.length; for (var j = -10; j < 10; ++j) { var expected = (j < 0) ? -j : j; if (results[j] !== expected) throw "Wrong result, results[j] = " + results[j] + " at j = " + j; } }