Index: test/mjsunit/math-round.js |
diff --git a/test/mjsunit/math-round.js b/test/mjsunit/math-round.js |
index 1366557f6b8b3bbccf9b4d4a2156442706dba405..973040d5c01ad9d03587f19ee5c24546c2ed57b4 100644 |
--- a/test/mjsunit/math-round.js |
+++ b/test/mjsunit/math-round.js |
@@ -1,4 +1,4 @@ |
-// Copyright 2010 the V8 project authors. All rights reserved. |
+// Copyright 2011 the V8 project authors. All rights reserved. |
// Redistribution and use in source and binary forms, with or without |
// modification, are permitted provided that the following conditions are |
// met: |
@@ -44,6 +44,21 @@ testRound(Infinity, Infinity); |
testRound(-Infinity, -Infinity); |
testRound(NaN, NaN); |
+// Regression test for a bug where a negative zero coming from Math.round |
+// was not properly handled by other operations. |
+function roundsum(i, n) { |
+ var ret = Math.round(n); |
+ while (--i > 0) { |
+ ret += Math.round(n); |
+ } |
+ return ret; |
+} |
+assertEquals(-0, roundsum(1, -0)); |
+%OptimizeFunctionOnNextCall(roundsum); |
+// The optimized function will deopt. Run it with enough iterations to try |
+// to optimize via OSR (triggering the bug). |
+assertEquals(-0, roundsum(100000, -0)); |
+ |
testRound(1, 0.5); |
testRound(1, 0.7); |
testRound(1, 1); |