fix for broken test: I hadn't caught it, but Ray uses all-ones for NaN exponent; it should be leading-one-only (according to Java's behavior and his NAN_LONG_VALUE, at least)

Patch by: fabbott
Review by: spoon (TBR)

git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@2431 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/super/com/google/gwt/emul/java/lang/Double.java b/user/super/com/google/gwt/emul/java/lang/Double.java
index c16461a..9aa19fb 100644
--- a/user/super/com/google/gwt/emul/java/lang/Double.java
+++ b/user/super/com/google/gwt/emul/java/lang/Double.java
@@ -74,7 +74,7 @@
 
     if (Double.isNaN(d)) {
       // IEEE754, NaN exponent bits all 1s, and mantissa is non-zero
-      return EXPONENT_MASK | NAN_MANTISSA;
+      return (1L << (EXPONENT_BITSIZE -1)) | NAN_MANTISSA;
     }
     if (Double.isInfinite(d)) {
       // an infinite number is a number with a zero mantissa and all
diff --git a/user/test/com/google/gwt/emultest/java/lang/DoubleTest.java b/user/test/com/google/gwt/emultest/java/lang/DoubleTest.java
index f06be07..2472e67 100644
--- a/user/test/com/google/gwt/emultest/java/lang/DoubleTest.java
+++ b/user/test/com/google/gwt/emultest/java/lang/DoubleTest.java
@@ -79,39 +79,57 @@
   }
 
   public void testDoubleToLongBits() {
-    assertEquals(Double.doubleToLongBits(Double.NaN), NAN_LONG_VALUE);
-    assertEquals(Double.doubleToLongBits(Double.POSITIVE_INFINITY), POSINF_LONG_VALUE);
-    assertEquals(Double.doubleToLongBits(Double.NEGATIVE_INFINITY), NEGINF_LONG_VALUE);
-    assertEquals(Double.doubleToLongBits(Double.MAX_VALUE), MAXD_LONG_VALUE);
+    assertEquals("NaN double->longbits test",
+        Double.doubleToLongBits(Double.NaN), NAN_LONG_VALUE);
+    assertEquals("posinf double->longbits test",
+        Double.doubleToLongBits(Double.POSITIVE_INFINITY), POSINF_LONG_VALUE);
+    assertEquals("neginf double->longbits test",
+        Double.doubleToLongBits(Double.NEGATIVE_INFINITY), NEGINF_LONG_VALUE);
+    assertEquals("maxvalue double->longbits test",
+        Double.doubleToLongBits(Double.MAX_VALUE), MAXD_LONG_VALUE);
+    assertEquals("minvalue double->longbits test",
+        Double.doubleToLongBits(Double.MIN_VALUE), MIND_LONG_VALUE);
     assertEquals(Double.doubleToLongBits(Double.MIN_VALUE), MIND_LONG_VALUE);
-    assertEquals(Double.doubleToLongBits(Double.MAX_VALUE), MAXD_LONG_VALUE);
-    assertEquals(Double.doubleToLongBits(Double.MIN_VALUE), MIND_LONG_VALUE);
-    assertEquals(Double.doubleToLongBits(TEST1_DOUBLE_VALUE), TEST1_LONG_VALUE);
-    assertEquals(Double.doubleToLongBits(-TEST1_DOUBLE_VALUE), NEGTEST1_LONG_VALUE);
+    assertEquals("test1 double->longbits test",
+        Double.doubleToLongBits(TEST1_DOUBLE_VALUE), TEST1_LONG_VALUE);
+    assertEquals("-test1 double->longbits test",
+        Double.doubleToLongBits(-TEST1_DOUBLE_VALUE), NEGTEST1_LONG_VALUE);
     // TODO(fabbott): swap back to Double.MIN_NORMAL when we use jdk 1.6
-    assertEquals(Double.doubleToLongBits(MIN_NORMAL), MINNORM_LONG_VALUE);
+    assertEquals("minnormal double->longbits test", 
+        Double.doubleToLongBits(MIN_NORMAL), MINNORM_LONG_VALUE);
   }
   
   public void testLongBitsToDouble() {
-    assertTrue(Double.isNaN(Double.longBitsToDouble(NAN_LONG_VALUE)));
-    assertTrue(Double.POSITIVE_INFINITY == Double.longBitsToDouble(POSINF_LONG_VALUE));
-    assertTrue(Double.NEGATIVE_INFINITY == Double.longBitsToDouble(NEGINF_LONG_VALUE));
-    assertTrue(Double.MAX_VALUE == Double.longBitsToDouble(MAXD_LONG_VALUE));
-    assertTrue(Double.MIN_VALUE == Double.longBitsToDouble(MIND_LONG_VALUE));
-    assertTrue(TEST1_DOUBLE_VALUE == Double.longBitsToDouble(TEST1_LONG_VALUE));
-    assertTrue(-TEST1_DOUBLE_VALUE == Double.longBitsToDouble(NEGTEST1_LONG_VALUE));
+    assertTrue("isNaN longbits->double test", 
+        Double.isNaN(Double.longBitsToDouble(NAN_LONG_VALUE)));
+    assertEquals("posinf longbits->double test", 
+        Double.POSITIVE_INFINITY, Double.longBitsToDouble(POSINF_LONG_VALUE));
+    assertEquals("neginf longbits->double test", 
+        Double.NEGATIVE_INFINITY, Double.longBitsToDouble(NEGINF_LONG_VALUE));
+    assertEquals("maxval longbits->double test", 
+        Double.MAX_VALUE, Double.longBitsToDouble(MAXD_LONG_VALUE));
+    assertEquals("minval longbits->double test", 
+        Double.MIN_VALUE, Double.longBitsToDouble(MIND_LONG_VALUE));
+    assertEquals("test1 longbits->double test", 
+        TEST1_DOUBLE_VALUE, Double.longBitsToDouble(TEST1_LONG_VALUE));
+    assertEquals("-test1 longbits->double test", 
+        -TEST1_DOUBLE_VALUE, Double.longBitsToDouble(NEGTEST1_LONG_VALUE));
     // TODO(fabbott): swap back to Double.MIN_NORMAL when we use jdk 1.6
-    assertTrue(MIN_NORMAL == Double.longBitsToDouble(MINNORM_LONG_VALUE));
+    assertEquals("minnormal longbits->double test", 
+        MIN_NORMAL, Double.longBitsToDouble(MINNORM_LONG_VALUE));
   }
 
   public void testParse() {
-    assertTrue(0 == Double.parseDouble("0"));
-    assertTrue(-1.5 == Double.parseDouble("-1.5"));
-    assertTrue(3.0 == Double.parseDouble("3."));
-    assertTrue(0.5 == Double.parseDouble(".5"));
-    assertTrue(2.98e8 == Double.parseDouble("2.98e8"));
-    assertTrue(-2.98e-8 == Double.parseDouble("-2.98e-8"));
-    assertTrue(+2.98E+8 == Double.parseDouble("+2.98E+8"));
+    assertEquals(0.0, Double.parseDouble("0"));
+    assertEquals(-1.5, Double.parseDouble("-1.5"));
+    assertEquals(3.0, Double.parseDouble("3."));
+    assertEquals(0.5, Double.parseDouble(".5"));
+    assertEquals("parse of 2.98e8", 
+        2.98e8, Double.parseDouble("2.98e8"));
+    assertEquals("parse of -2.98e-8", 
+        -2.98e-8, Double.parseDouble("-2.98e-8"));
+    assertEquals("parse of 2.08E+8", 
+        +2.98E+8, Double.parseDouble("+2.98E+8"));
     assertTrue(
         "Can't parse MIN_VALUE",
         Double.MIN_VALUE == Double.parseDouble(String.valueOf(Double.MIN_VALUE)));