Only add the trailing '.0' if the number is known to be integer. Otherwise accept the string as provided by JavaScript
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Fri, 08 Mar 2013 23:43:01 +0100
changeset 82497fdbed30f8b
parent 823 1e9d34a337f2
child 825 0585605d4913
Only add the trailing '.0' if the number is known to be integer. Otherwise accept the string as provided by JavaScript
rt/emul/mini/src/main/java/java/lang/Double.java
rt/vmtest/src/main/java/org/apidesign/bck2brwsr/vmtest/impl/CompareCase.java
rt/vmtest/src/test/java/org/apidesign/bck2brwsr/tck/DoubleTest.java
     1.1 --- a/rt/emul/mini/src/main/java/java/lang/Double.java	Fri Mar 08 00:42:02 2013 +0100
     1.2 +++ b/rt/emul/mini/src/main/java/java/lang/Double.java	Fri Mar 08 23:43:01 2013 +0100
     1.3 @@ -190,12 +190,11 @@
     1.4       * @param   d   the {@code double} to be converted.
     1.5       * @return a string representation of the argument.
     1.6       */
     1.7 -    @JavaScriptBody(args="d", body="var r = d.toString();"
     1.8 -        + "if (isFinite(d) && (r.indexOf('.') === -1)) r = r + '.0';"
     1.9 -        + "return r;")
    1.10 -    public static String toString(double d) {
    1.11 -        throw new UnsupportedOperationException();
    1.12 -    }
    1.13 +    @JavaScriptBody(args="d", body="var f = Math.floor(d);\n" +
    1.14 +        "if (f === d && isFinite(d)) return d.toString() + '.0';\n" +
    1.15 +        "else return d.toString();"
    1.16 +    )
    1.17 +    public static native String toString(double d);
    1.18  
    1.19      /**
    1.20       * Returns a hexadecimal string representation of the
     2.1 --- a/rt/vmtest/src/main/java/org/apidesign/bck2brwsr/vmtest/impl/CompareCase.java	Fri Mar 08 00:42:02 2013 +0100
     2.2 +++ b/rt/vmtest/src/main/java/org/apidesign/bck2brwsr/vmtest/impl/CompareCase.java	Fri Mar 08 23:43:01 2013 +0100
     2.3 @@ -83,10 +83,23 @@
     2.4      @Test(dependsOnGroups = "run") public void compareResults() throws Throwable {
     2.5          Object v1 = first.value;
     2.6          Object v2 = second.value;
     2.7 -        if (v1 != null) {
     2.8 -            v1 = v1.toString();
     2.9 +        if (v1 instanceof Number) {
    2.10 +            try {
    2.11 +                v1 = Double.parseDouble(v1.toString());
    2.12 +            } catch (NumberFormatException nfe) {
    2.13 +                v1 = "Can't parse " + v1.toString();
    2.14 +            }
    2.15 +            try {
    2.16 +                v2 = Double.parseDouble(v2.toString());
    2.17 +            } catch (NumberFormatException nfe) {
    2.18 +                v2 = "Can't parse " + v2.toString();
    2.19 +            }
    2.20          } else {
    2.21 -            v1 = "null";
    2.22 +            if (v1 != null) {
    2.23 +                v1 = v1.toString();
    2.24 +            } else {
    2.25 +                v1 = "null";
    2.26 +            }
    2.27          }
    2.28          try {
    2.29              Assert.assertEquals(v2, v1, "Comparing results");
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/rt/vmtest/src/test/java/org/apidesign/bck2brwsr/tck/DoubleTest.java	Fri Mar 08 23:43:01 2013 +0100
     3.3 @@ -0,0 +1,61 @@
     3.4 +/**
     3.5 + * Back 2 Browser Bytecode Translator
     3.6 + * Copyright (C) 2012 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
     3.7 + *
     3.8 + * This program is free software: you can redistribute it and/or modify
     3.9 + * it under the terms of the GNU General Public License as published by
    3.10 + * the Free Software Foundation, version 2 of the License.
    3.11 + *
    3.12 + * This program is distributed in the hope that it will be useful,
    3.13 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    3.14 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    3.15 + * GNU General Public License for more details.
    3.16 + *
    3.17 + * You should have received a copy of the GNU General Public License
    3.18 + * along with this program. Look for COPYING file in the top folder.
    3.19 + * If not, see http://opensource.org/licenses/GPL-2.0.
    3.20 + */
    3.21 +package org.apidesign.bck2brwsr.tck;
    3.22 +
    3.23 +import org.apidesign.bck2brwsr.vmtest.Compare;
    3.24 +import org.apidesign.bck2brwsr.vmtest.VMTest;
    3.25 +import org.testng.annotations.Factory;
    3.26 +
    3.27 +/**
    3.28 + *
    3.29 + * @author Jaroslav Tulach <jtulach@netbeans.org>
    3.30 + */
    3.31 +public class DoubleTest {
    3.32 +    @Compare public String integerToString() {
    3.33 +        return toStr(1);
    3.34 +    }
    3.35 +
    3.36 +    @Compare public String integerAndHalfToString() {
    3.37 +        return toStr(1.5);
    3.38 +    }
    3.39 +
    3.40 +    @Compare public double longToAndBack() {
    3.41 +        return Double.parseDouble(toStr(Long.MAX_VALUE / 10));
    3.42 +    }
    3.43 +
    3.44 +    @Compare public String negativeIntToString() {
    3.45 +        return toStr(-10);
    3.46 +    }
    3.47 +
    3.48 +    @Compare public String negativeIntAndHalfToString() {
    3.49 +        return toStr(-10.5);
    3.50 +    }
    3.51 +
    3.52 +    @Compare public double negativeLongAndBack() {
    3.53 +        return Double.parseDouble(toStr(Long.MIN_VALUE / 10));
    3.54 +    }
    3.55 +    
    3.56 +    private static String toStr(double d) {
    3.57 +        return Double.toString(d);
    3.58 +    }
    3.59 +    
    3.60 +    @Factory 
    3.61 +    public static Object[] create() {
    3.62 +        return VMTest.create(DoubleTest.class);
    3.63 +    }
    3.64 +}