| description( |
| "Tests that a dead use of Math.min(a,b) at least speculates that its arguments are indeed numbers." |
| ); |
| |
| function foo(a, b) { |
| Math.min(a.f, b.f); |
| return 100; |
| } |
| |
| function bar(a, b) { |
| Math.min(a.f, b.f); |
| return 100; |
| } |
| |
| var x = {f:42}; |
| var y = {f:43}; |
| var ok = null; |
| var expected = 42; |
| var empty = ""; |
| |
| silentTestPass = true; |
| noInline(foo); |
| noInline(bar); |
| |
| for (var i = 0; i < 200; i = dfgIncrement({f:foo, i: i + 1, n: 100})) { |
| if (i == 150) { |
| x = {f:{valueOf:function(){ ok = i; return 37; }}}; |
| expected = 37; |
| } |
| var result = eval(empty + "foo(x, y)"); |
| if (i >= 150) |
| shouldBe("ok", "" + i); |
| shouldBe("result", "100"); |
| } |
| |
| x = {f:42}; |
| y = {f:43}; |
| ok = null; |
| expected = 42; |
| |
| for (var i = 0; i < 200; i = dfgIncrement({f:bar, i:i + 1, n:100})) { |
| if (i == 150) { |
| y = {f:{valueOf:function(){ ok = i; return 37; }}}; |
| expected = 37; |
| } |
| var result = eval(empty + "bar(x, y)"); |
| if (i >= 150) |
| shouldBe("ok", "" + i); |
| shouldBe("result", "100"); |
| } |
| |