# HG changeset patch # User Jaroslav Tulach # Date 1361886955 -3600 # Node ID 4252bfc396fc9988d91c89e0e053b01420135e71 # Parent caedc26b6dbfe69778778b78f53ed89c1fa0306a Proper implementation of round and toInt32 conversions diff -r caedc26b6dbf -r 4252bfc396fc emul/compact/src/test/java/org/apidesign/bck2brwsr/compact/tck/JFXIssuesTest.java --- a/emul/compact/src/test/java/org/apidesign/bck2brwsr/compact/tck/JFXIssuesTest.java Mon Feb 25 19:27:32 2013 +0100 +++ b/emul/compact/src/test/java/org/apidesign/bck2brwsr/compact/tck/JFXIssuesTest.java Tue Feb 26 14:55:55 2013 +0100 @@ -54,7 +54,30 @@ return l1 == l2; } + + @Compare public boolean roundOnDouble() { + long l1 = Math.round(System.currentTimeMillis() / 1.1); + long l2 = l1 + 0; + + return l1 == l2; + } + private static long val = 1238078409318L; + + @Compare public int valueConvertedToString() { + return (int) val++; + } + + @Compare public boolean roundOnFloat() { + final float f = System.currentTimeMillis() / 1.1f; + int l1 = Math.round(f); + int l2 = l1 + 0; + + assert l1 == l2 : "Round " + l1 + " == " + l2; + + return l1 == l2; + } + @Factory public static Object[] create() { return VMTest.create(JFXIssuesTest.class); } diff -r caedc26b6dbf -r 4252bfc396fc emul/mini/src/main/java/java/lang/Math.java --- a/emul/mini/src/main/java/java/lang/Math.java Mon Feb 25 19:27:32 2013 +0100 +++ b/emul/mini/src/main/java/java/lang/Math.java Tue Feb 26 14:55:55 2013 +0100 @@ -643,9 +643,8 @@ * @see java.lang.Integer#MAX_VALUE * @see java.lang.Integer#MIN_VALUE */ - @JavaScriptBody(args="a", body="return Math.round(a);") public static int round(float a) { - throw new UnsupportedOperationException(); + return (int)roundDbl(a); } /** @@ -668,10 +667,12 @@ * @see java.lang.Long#MAX_VALUE * @see java.lang.Long#MIN_VALUE */ + public static long round(double a) { + return (long)roundDbl(a); + } + @JavaScriptBody(args="a", body="return Math.round(a);") - public static long round(double a) { - throw new UnsupportedOperationException(); - } + private static native double roundDbl(double d); // private static Random randomNumberGenerator; // diff -r caedc26b6dbf -r 4252bfc396fc vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Mon Feb 25 19:27:32 2013 +0100 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Tue Feb 26 14:55:55 2013 +0100 @@ -691,7 +691,7 @@ emit(out, "var @2 = @1;", smapper.popD(), smapper.pushF()); break; case opc_f2i: - emit(out, "var @2 = Math.floor(@1);", + emit(out, "var @2 = Math.floor(@1).toInt32();", smapper.popF(), smapper.pushI()); break; case opc_f2l: @@ -699,7 +699,7 @@ smapper.popF(), smapper.pushL()); break; case opc_d2i: - emit(out, "var @2 = Math.floor(@1);", + emit(out, "var @2 = Math.floor(@1).toInt32();", smapper.popD(), smapper.pushI()); break; case opc_d2l: