Fixed float/double problems found by David arithmetic
authorLubomir Nerad <lubomir.nerad@oracle.com>
Tue, 19 Feb 2013 15:33:32 +0100
brancharithmetic
changeset 752cc3871bdd83c
parent 737 b2731af0357d
child 753 cc0e6767259b
Fixed float/double problems found by David
emul/compact/src/test/java/org/apidesign/bck2brwsr/compact/tck/JFXIssuesTest.java
emul/mini/src/main/java/java/lang/Double.java
emul/mini/src/main/java/java/lang/Float.java
     1.1 --- a/emul/compact/src/test/java/org/apidesign/bck2brwsr/compact/tck/JFXIssuesTest.java	Fri Feb 15 16:06:12 2013 +0100
     1.2 +++ b/emul/compact/src/test/java/org/apidesign/bck2brwsr/compact/tck/JFXIssuesTest.java	Tue Feb 19 15:33:32 2013 +0100
     1.3 @@ -39,7 +39,15 @@
     1.4      @Compare public boolean isClassAssignable() {
     1.5          return Application.class.isAssignableFrom(MyApplication.class);
     1.6      }
     1.7 -    
     1.8 +
     1.9 +    @Compare public boolean isNaN() {
    1.10 +        return Double.isNaN(Double.NaN);
    1.11 +    }
    1.12 +
    1.13 +    @Compare public boolean isInfinite() {
    1.14 +        return Float.isInfinite(Float.NEGATIVE_INFINITY);
    1.15 +    }
    1.16 +
    1.17      @Factory public static Object[] create() {
    1.18          return VMTest.create(JFXIssuesTest.class);
    1.19      }
     2.1 --- a/emul/mini/src/main/java/java/lang/Double.java	Fri Feb 15 16:06:12 2013 +0100
     2.2 +++ b/emul/mini/src/main/java/java/lang/Double.java	Tue Feb 19 15:33:32 2013 +0100
     2.3 @@ -191,7 +191,7 @@
     2.4       * @return a string representation of the argument.
     2.5       */
     2.6      @JavaScriptBody(args="d", body="var r = d.toString();"
     2.7 -        + "if (r.indexOf('.') === -1) r = r + '.0';"
     2.8 +        + "if (isFinite(d) && (r.indexOf('.') === -1)) r = r + '.0';"
     2.9          + "return r;")
    2.10      public static String toString(double d) {
    2.11          throw new UnsupportedOperationException();
     3.1 --- a/emul/mini/src/main/java/java/lang/Float.java	Fri Feb 15 16:06:12 2013 +0100
     3.2 +++ b/emul/mini/src/main/java/java/lang/Float.java	Tue Feb 19 15:33:32 2013 +0100
     3.3 @@ -819,11 +819,15 @@
     3.4       */
     3.5      @JavaScriptBody(args = "bits",
     3.6          body = 
     3.7 -          "if (bits === 0x7f800000) return Number.POSITIVE_INFINITY;\n"
     3.8 -        + "if (bits === 0xff800000) return Number.NEGATIVE_INFINITY;\n"
     3.9 -        + "if (bits >= 0x7f800001 && bits <= 0xffffffff) return Number.NaN;\n"
    3.10 -        + "var s = ((bits >> 31) == 0) ? 1 : -1;\n"
    3.11 +          "var s = ((bits >> 31) == 0) ? 1 : -1;\n"
    3.12          + "var e = ((bits >> 23) & 0xff);\n"
    3.13 +        + "if (e === 0xff) {\n"
    3.14 +        + "    if ((bits & 0x7fffff) === 0) {\n"
    3.15 +        + "        return (s > 0) ? Number.POSITIVE_INFINITY"
    3.16 +                              + " : Number.NEGATIVE_INFINITY;\n"
    3.17 +        + "    }\n"
    3.18 +        + "    return Number.NaN;\n"
    3.19 +        + "}\n"
    3.20          + "var m = (e == 0) ?\n"
    3.21          + "  (bits & 0x7fffff) << 1 :\n"
    3.22          + "  (bits & 0x7fffff) | 0x800000;\n"