Reviewers: William Hesse,

Description:
Fix Double.NextDouble function.

This unbreaks the build on windows.

TBR: [email protected]
BUG=
TEST=

Please review this at http://codereview.chromium.org/4681001/show

SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge

Affected files:
  M src/double.h
  M test/cctest/test-double.cc


Index: src/double.h
diff --git a/src/double.h b/src/double.h
index 9db8ea7c48b0339b5dab21a1a69cf991612b9efb..54b83ecd5daf0c7371976d14340d3821945ab7c5 100644
--- a/src/double.h
+++ b/src/double.h
@@ -83,8 +83,16 @@ class Double {
   }

   double NextDouble() const {
-    if (d64_ == kInfinity) return kInfinity;
-    return Double(d64_ + 1).value();
+    if (d64_ == kInfinity) return Double(kInfinity).value();
+    if (Sign() < 0 && Significand() == 0) {
+      // -0.0
+      return 0.0;
+    }
+    if (Sign() < 0) {
+      return Double(d64_ - 1).value();
+    } else {
+      return Double(d64_ + 1).value();
+    }
   }

   int Exponent() const {
Index: test/cctest/test-double.cc
diff --git a/test/cctest/test-double.cc b/test/cctest/test-double.cc
index a7a604ea43367789a330817ea23d428f4477cfd0..3594a4fe32aaedaf53e1eb7ac08157f221d5a928 100644
--- a/test/cctest/test-double.cc
+++ b/test/cctest/test-double.cc
@@ -202,3 +202,19 @@ TEST(NormalizedBoundaries) {
   CHECK(diy_fp.f() - boundary_minus.f() == boundary_plus.f() - diy_fp.f());
   CHECK((1 << 10) == diy_fp.f() - boundary_minus.f());  // NOLINT
 }
+
+
+TEST(NextDouble) {
+  CHECK_EQ(4e-324, Double(0.0).NextDouble());
+  CHECK_EQ(0.0, Double(-0.0).NextDouble());
+  CHECK_EQ(-0.0, Double(-4e-324).NextDouble());
+  Double d0(-4e-324);
+  Double d1(d0.NextDouble());
+  Double d2(d1.NextDouble());
+  CHECK_EQ(-0.0, d1.value());
+  CHECK_EQ(0.0, d2.value());
+  CHECK_EQ(4e-324, d2.NextDouble());
+  CHECK_EQ(-1.7976931348623157e308, Double(-V8_INFINITY).NextDouble());
+  CHECK_EQ(V8_INFINITY,
+           Double(V8_2PART_UINT64_C(0x7fefffff, ffffffff)).NextDouble());
+}


--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to