| function shouldBe(actual, expected) { |
| if (actual !== expected) |
| throw new Error('bad value: ' + actual); |
| } |
| |
| function above(a, trap) { |
| let result = 0; |
| for (let i = 0; (a >>> 0) > (i >>> 0); ++i) { |
| result += i; |
| if (i === trap) |
| break; |
| } |
| return result; |
| } |
| noInline(above); |
| |
| function aboveOrEqual(a, trap) { |
| let result = 0; |
| for (let i = 0; (a >>> 0) >= (i >>> 0); ++i) { |
| result += i; |
| if (i === trap) |
| break; |
| } |
| return result; |
| } |
| noInline(aboveOrEqual); |
| |
| function below(a, trap) { |
| let result = 0; |
| for (let i = 0; (i >>> 0) < (a >>> 0); ++i) { |
| result += i; |
| if (i === trap) |
| break; |
| } |
| return result; |
| } |
| noInline(below); |
| |
| function belowOrEqual(a, trap) { |
| let result = 0; |
| for (let i = 0; (i >>> 0) <= (a >>> 0); ++i) { |
| result += i; |
| if (i === trap) |
| break; |
| } |
| return result; |
| } |
| noInline(belowOrEqual); |
| |
| function notAbove(a, trap) { |
| let result = 0; |
| for (let i = 0; (a >>> 0) > (i >>> 0) && a; ++i) { |
| result += i; |
| if (i === trap) |
| break; |
| } |
| return result; |
| } |
| noInline(notAbove); |
| |
| function notAboveOrEqual(a, trap) { |
| let result = 0; |
| for (let i = 0; (a >>> 0) >= (i >>> 0) && a; ++i) { |
| result += i; |
| if (i === trap) |
| break; |
| } |
| return result; |
| } |
| noInline(notAboveOrEqual); |
| |
| function notBelow(a, trap) { |
| let result = 0; |
| for (let i = 0; (i >>> 0) < (a >>> 0) && a; ++i) { |
| result += i; |
| if (i === trap) |
| break; |
| } |
| return result; |
| } |
| noInline(notBelow); |
| |
| function notBelowOrEqual(a, trap) { |
| let result = 0; |
| for (let i = 0; (i >>> 0) <= (a >>> 0) && a; ++i) { |
| result += i; |
| if (i === trap) |
| break; |
| } |
| return result; |
| } |
| noInline(notBelowOrEqual); |
| |
| for (var i = 0; i < 1e2; ++i) { |
| shouldBe(above(0, -1), 0); |
| shouldBe(above(20000, -1), 199990000); |
| shouldBe(above(-1, 10000), 50005000); |
| } |
| |
| for (var i = 0; i < 1e2; ++i) { |
| shouldBe(aboveOrEqual(0, -1), 0); |
| shouldBe(aboveOrEqual(20000, -1), 200010000); |
| shouldBe(aboveOrEqual(-1, 10000), 50005000); |
| } |
| |
| for (var i = 0; i < 1e2; ++i) { |
| shouldBe(below(0, -1), 0); |
| shouldBe(below(20000, -1), 199990000); |
| shouldBe(below(-1, 10000), 50005000); |
| } |
| |
| for (var i = 0; i < 1e2; ++i) { |
| shouldBe(belowOrEqual(0, -1), 0); |
| shouldBe(belowOrEqual(20000, -1), 200010000); |
| shouldBe(belowOrEqual(-1, 10000), 50005000); |
| } |
| |
| for (var i = 0; i < 1e2; ++i) { |
| shouldBe(notAbove(0, -1), 0); |
| shouldBe(notAbove(20000, -1), 199990000); |
| shouldBe(notAbove(-1, 10000), 50005000); |
| } |
| |
| for (var i = 0; i < 1e2; ++i) { |
| shouldBe(notAboveOrEqual(0, -1), 0); |
| shouldBe(notAboveOrEqual(20000, -1), 200010000); |
| shouldBe(notAboveOrEqual(-1, 10000), 50005000); |
| } |
| |
| for (var i = 0; i < 1e2; ++i) { |
| shouldBe(notBelow(0, -1), 0); |
| shouldBe(notBelow(20000, -1), 199990000); |
| shouldBe(notBelow(-1, 10000), 50005000); |
| } |
| |
| for (var i = 0; i < 1e2; ++i) { |
| shouldBe(notBelowOrEqual(0, -1), 0); |
| shouldBe(notBelowOrEqual(20000, -1), 200010000); |
| shouldBe(notBelowOrEqual(-1, 10000), 50005000); |
| } |
| |