| function shouldBe(actual, expected) { |
| if (actual !== expected) |
| throw new Error(`bad value: ${String(actual)} ${String(expected)}`); |
| } |
| |
| function testJNEQ(a, b) |
| { |
| if (a == b) { |
| return 42; |
| } |
| return 30; |
| } |
| noInline(testJNEQ); |
| |
| function testJEQ(a, b) |
| { |
| if (a != b) { |
| return 42; |
| } |
| return 30; |
| } |
| noInline(testJEQ); |
| |
| function testJNEQB(a, b) |
| { |
| var i = 0; |
| do { |
| ++i; |
| } while (!(a == b)); |
| return i; |
| } |
| noInline(testJNEQB); |
| |
| function testJEQB(a, b) |
| { |
| var i = 0; |
| do { |
| ++i; |
| } while (!(a != b)); |
| return i; |
| } |
| noInline(testJEQB); |
| |
| function testJNEQF(a, b) |
| { |
| var i = 0; |
| while (!(a == b)) |
| ++i; |
| return i; |
| } |
| noInline(testJNEQF); |
| |
| function testJEQF(a, b) |
| { |
| var i = 0; |
| while (!(a != b)) |
| ++i; |
| return i; |
| } |
| noInline(testJEQF); |
| |
| for (var i = 0; i < 1e4; ++i) { |
| shouldBe(testJNEQ('hello', 'world'), 30); |
| shouldBe(testJEQ('hello', 'world'), 42); |
| shouldBe(testJNEQ('world', 'world'), 42); |
| shouldBe(testJEQ('world', 'world'), 30); |
| shouldBe(testJNEQ(20.5, 'world'), 30); |
| shouldBe(testJEQ(20.5, 'world'), 42); |
| |
| shouldBe(testJNEQ(20.5, 21.3), 30); |
| shouldBe(testJEQ(20.5, 21.3), 42); |
| shouldBe(testJNEQ(20.5, 20.5), 42); |
| shouldBe(testJEQ(20.5, 20.5), 30); |
| |
| shouldBe(testJNEQB(0, 0), 1); |
| shouldBe(testJEQB(0, 1), 1); |
| shouldBe(testJNEQB('hello', 'hello'), 1); |
| shouldBe(testJEQB('hello', 'world'), 1); |
| shouldBe(testJNEQB(20.4, 20.4), 1); |
| shouldBe(testJEQB('hello', 20.4), 1); |
| shouldBe(testJNEQB(0, -0), 1); |
| |
| shouldBe(testJNEQF(0, 0), 0); |
| shouldBe(testJEQF(0, 1), 0); |
| shouldBe(testJNEQF(20.4, 20.4), 0); |
| shouldBe(testJEQF(20.4, 10.5), 0); |
| shouldBe(testJNEQF(0, -0), 0); |
| shouldBe(testJEQF('hello', 10.5), 0); |
| shouldBe(testJNEQF('hello', 'hello'), 0); |
| shouldBe(testJEQF('hello', 'world'), 0); |
| } |