Can deserialize float javap
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Sun, 18 Nov 2012 10:00:23 +0100
branchjavap
changeset 181f426de5dc7f6
parent 180 23d9144d8f45
child 182 e75412365c87
Can deserialize float
emul/src/main/java/java/lang/Float.java
vm/src/test/java/org/apidesign/vm4brwsr/NumberTest.java
vm/src/test/java/org/apidesign/vm4brwsr/Numbers.java
     1.1 --- a/emul/src/main/java/java/lang/Float.java	Sun Nov 18 08:58:16 2012 +0100
     1.2 +++ b/emul/src/main/java/java/lang/Float.java	Sun Nov 18 10:00:23 2012 +0100
     1.3 @@ -819,6 +819,18 @@
     1.4       * @return  the {@code float} floating-point value with the same bit
     1.5       *          pattern.
     1.6       */
     1.7 +    @JavaScriptBody(args = "bits",
     1.8 +        body = 
     1.9 +          "if (bits === 0x7f800000) return Number.POSITIVE_INFINITY;\n"
    1.10 +        + "if (bits === 0xff800000) return Number.NEGATIVE_INFINITY;\n"
    1.11 +        + "if (bits >= 0x7f800001 && bits <= 0xffffffff) return Number.NaN;\n"
    1.12 +        + "var s = ((bits >> 31) == 0) ? 1 : -1;\n"
    1.13 +        + "var e = ((bits >> 23) & 0xff);\n"
    1.14 +        + "var m = (e == 0) ?\n"
    1.15 +        + "  (bits & 0x7fffff) << 1 :\n"
    1.16 +        + "  (bits & 0x7fffff) | 0x800000;\n"
    1.17 +        + "return s * m * Math.pow(2.0, e - 150);\n"
    1.18 +    )
    1.19      public static native float intBitsToFloat(int bits);
    1.20  
    1.21      /**
     2.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/NumberTest.java	Sun Nov 18 08:58:16 2012 +0100
     2.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/NumberTest.java	Sun Nov 18 10:00:23 2012 +0100
     2.3 @@ -64,6 +64,26 @@
     2.4              Double.valueOf(3.0), 303, 10
     2.5          );
     2.6      }
     2.7 +    
     2.8 +    @Test public void deserializeInt() throws Exception {
     2.9 +        int exp = Numbers.deserInt();
    2.10 +        assertExec("Should be the same", "org_apidesign_vm4brwsr_Numbers_deserIntI", 
    2.11 +            Double.valueOf(exp)
    2.12 +        );
    2.13 +    }
    2.14 +    
    2.15 +    @Test public void deserializeFloatInJava() throws Exception {
    2.16 +        float f = 54324.32423f;
    2.17 +        float r = Numbers.deserFloat();
    2.18 +        assertEquals(r, f, "Floats are the same");
    2.19 +    }
    2.20 +    
    2.21 +    @Test public void deserializeFloatInJS() throws Exception {
    2.22 +        float f = 54324.32423f;
    2.23 +        assertExec("Should be the same", "org_apidesign_vm4brwsr_Numbers_deserFloatF", 
    2.24 +            Double.valueOf(f)
    2.25 +        );
    2.26 +    }
    2.27  
    2.28      
    2.29      private static CharSequence codeSeq;
     3.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/Numbers.java	Sun Nov 18 08:58:16 2012 +0100
     3.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/Numbers.java	Sun Nov 18 10:00:23 2012 +0100
     3.3 @@ -17,6 +17,10 @@
     3.4   */
     3.5  package org.apidesign.vm4brwsr;
     3.6  
     3.7 +import java.io.ByteArrayInputStream;
     3.8 +import java.io.DataInputStream;
     3.9 +import java.io.IOException;
    3.10 +
    3.11  /**
    3.12   *
    3.13   * @author Jaroslav Tulach <jtulach@netbeans.org>
    3.14 @@ -31,4 +35,19 @@
    3.15      public static int rem(int a, int b) {
    3.16          return a % b;
    3.17      }
    3.18 +
    3.19 +    static float deserFloat() throws IOException {
    3.20 +        byte[] arr = {(byte) 71, (byte) 84, (byte) 52, (byte) 83};
    3.21 +        ByteArrayInputStream is = new ByteArrayInputStream(arr);
    3.22 +        DataInputStream dis = new DataInputStream(is);
    3.23 +        float r = dis.readFloat();
    3.24 +        return r;
    3.25 +    }
    3.26 +    static int deserInt() throws IOException {
    3.27 +        byte[] arr = {(byte) 71, (byte) 84, (byte) 52, (byte) 83};
    3.28 +        ByteArrayInputStream is = new ByteArrayInputStream(arr);
    3.29 +        DataInputStream dis = new DataInputStream(is);
    3.30 +        return dis.readInt();
    3.31 +    }
    3.32 +    
    3.33  }