function shouldBe(actual, expected) { if (actual !== expected) throw new Error('bad value: ' + actual); } function above(a, b) { return (a >>> 0) > (b >>> 0); } noInline(above); function aboveOrEqual(a, b) { return (a >>> 0) >= (b >>> 0); } noInline(aboveOrEqual); function below(a, b) { return (a >>> 0) < (b >>> 0); } noInline(below); function belowOrEqual(a, b) { return (a >>> 0) <= (b >>> 0); } noInline(belowOrEqual); (function aboveTest() { for (let i = 0; i < 1e5; ++i) { shouldBe(above(0, 20), false); shouldBe(above(0, 0), false); shouldBe(above(0, -0), false); shouldBe(above(-1, 0), true); shouldBe(above(-1, -1), false); shouldBe(above(-1, 1), true); shouldBe(above(1, -1), false); shouldBe(above(1, 0xffffffff), false); shouldBe(above(0xffffffff, 0xffffffff), false); shouldBe(above(-1, 0xffffffff), false); shouldBe(above(-1, 0xfffffffff), false); } }()); (function aboveOrEqualTest() { for (let i = 0; i < 1e5; ++i) { shouldBe(aboveOrEqual(0, 20), false); shouldBe(aboveOrEqual(0, 0), true); shouldBe(aboveOrEqual(0, -0), true); shouldBe(aboveOrEqual(-1, 0), true); shouldBe(aboveOrEqual(-1, -1), true); shouldBe(aboveOrEqual(-1, 1), true); shouldBe(aboveOrEqual(1, -1), false); shouldBe(aboveOrEqual(1, 0xffffffff), false); shouldBe(aboveOrEqual(0xffffffff, 0xffffffff), true); shouldBe(aboveOrEqual(-1, 0xffffffff), true); shouldBe(aboveOrEqual(-1, 0xfffffffff), true); } }()); (function belowTest() { for (let i = 0; i < 1e5; ++i) { shouldBe(below(0, 20), true); shouldBe(below(0, 0), false); shouldBe(below(0, -0), false); shouldBe(below(-1, 0), false); shouldBe(below(-1, -1), false); shouldBe(below(-1, 1), false); shouldBe(below(1, -1), true); shouldBe(below(1, 0xffffffff), true); shouldBe(below(0xffffffff, 0xffffffff), false); shouldBe(below(-1, 0xffffffff), false); shouldBe(below(-1, 0xfffffffff), false); } }()); (function belowOrEqualTest() { for (let i = 0; i < 1e5; ++i) { shouldBe(belowOrEqual(0, 20), true); shouldBe(belowOrEqual(0, 0), true); shouldBe(belowOrEqual(0, -0), true); shouldBe(belowOrEqual(-1, 0), false); shouldBe(belowOrEqual(-1, -1), true); shouldBe(belowOrEqual(-1, 1), false); shouldBe(belowOrEqual(1, -1), true); shouldBe(belowOrEqual(1, 0xffffffff), true); shouldBe(belowOrEqual(0xffffffff, 0xffffffff), true); shouldBe(belowOrEqual(-1, 0xffffffff), true); shouldBe(belowOrEqual(-1, 0xfffffffff), true); } }());