function shouldBe(actual, expected) { if (actual !== expected) throw new Error('bad value: ' + actual); } function testRound(value) { return Math.round(value); } noInline(testRound); for (var i = 0; i < 1e4; ++i) { shouldBe(1 / testRound(-0.4), -Infinity); shouldBe(1 / testRound(-0.5), -Infinity); shouldBe(1 / testRound(-0.6), -1.0); shouldBe(1 / testRound(-0.0), -Infinity); shouldBe(1 / testRound(0.1), Infinity); } function testFloor(value) { return Math.floor(value); } noInline(testFloor); for (var i = 0; i < 1e4; ++i) { shouldBe(1 / testFloor(-0.0), -Infinity); } function testCeil(value) { return Math.ceil(value); } noInline(testCeil); for (var i = 0; i < 1e4; ++i) { shouldBe(1 / testCeil(-0.0), -Infinity); shouldBe(1 / testCeil(-0.9), -Infinity); } function testRoundNonNegativeZero(value) { return Math.round(value) | 0; } noInline(testRoundNonNegativeZero); for (var i = 0; i < 1e4; ++i) { shouldBe(testRoundNonNegativeZero(0.4), 0); shouldBe(testRoundNonNegativeZero(0.5), 1); shouldBe(testRoundNonNegativeZero(0.6), 1); shouldBe(testRoundNonNegativeZero(0.0), 0); shouldBe(testRoundNonNegativeZero(0.1), 0); } shouldBe(1 / testRoundNonNegativeZero(-0.4), Infinity); function testRoundNonNegativeZero2(value) { return Math.round(value) | 0; } noInline(testRoundNonNegativeZero2); for (var i = 0; i < 1e4; ++i) { shouldBe(1 / testRoundNonNegativeZero2(-0.4), Infinity); shouldBe(1 / testRoundNonNegativeZero2(-0.5), Infinity); shouldBe(1 / testRoundNonNegativeZero2(-0.6), -1.0); shouldBe(1 / testRoundNonNegativeZero2(-0.0), Infinity); shouldBe(1 / testRoundNonNegativeZero2(0.1), Infinity); } function testTrunc(value) { return Math.trunc(value); } noInline(testTrunc); for (var i = 0; i < 1e4; ++i) { shouldBe(1 / testTrunc(0.0), Infinity); shouldBe(1 / testTrunc(-0.0), -Infinity); }