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 }