Exposes BigInteger.valueOf(double) method. This makes cross testing easier without native method hacks and provides a more optimal API alternative to the public Double.valuOf(long). PiperOrigin-RevId: 332556629 Change-Id: Ie496859c3311a9227b81fbea711870bc46c1bdc2
diff --git a/user/super/com/google/gwt/emul/java/math/BigInteger.java b/user/super/com/google/gwt/emul/java/math/BigInteger.java index 11b8f8b..c3b4660 100644 --- a/user/super/com/google/gwt/emul/java/math/BigInteger.java +++ b/user/super/com/google/gwt/emul/java/math/BigInteger.java
@@ -162,7 +162,7 @@ return new BigInteger(1, intCount + 1, resDigits); } - static BigInteger valueOf(double val) { + public static BigInteger valueOf(double val) { if (val < 0) { if (val != -1) { return new BigInteger(-1, -val);
diff --git a/user/test/com/google/gwt/emultest/java/math/BigIntegerConstructorsTest.java b/user/test/com/google/gwt/emultest/java/math/BigIntegerConstructorsTest.java index a7757e8..3229ee3 100644 --- a/user/test/com/google/gwt/emultest/java/math/BigIntegerConstructorsTest.java +++ b/user/test/com/google/gwt/emultest/java/math/BigIntegerConstructorsTest.java
@@ -39,7 +39,8 @@ import com.google.gwt.emultest.java.util.EmulTestBase; import com.google.gwt.testing.TestUtils; - +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; import java.math.BigInteger; import java.util.Random; @@ -786,25 +787,39 @@ // JRE implementation doesn't have the method tested here return; } - BigInteger val = BigIntegerViolator.fromDouble(1.0); + BigInteger val = BigInteger.valueOf(noopToCompileForJvm(1.0)); assertEquals("1", val.toString()); - val = BigIntegerViolator.fromDouble(100.0); + val = BigInteger.valueOf(noopToCompileForJvm(100.0)); assertEquals("100", val.toString()); - val = BigIntegerViolator.fromDouble(2147483647.0); + val = BigInteger.valueOf(noopToCompileForJvm(2147483647.0)); assertEquals("2147483647", val.toString()); - val = BigIntegerViolator.fromDouble(-2147483647.0); + val = BigInteger.valueOf(noopToCompileForJvm(-2147483647.0)); assertEquals("-2147483647", val.toString()); - val = BigIntegerViolator.fromDouble(2147483648.0); + val = BigInteger.valueOf(noopToCompileForJvm(2147483648.0)); assertEquals("2147483648", val.toString()); - val = BigIntegerViolator.fromDouble(-2147483648.0); + val = BigInteger.valueOf(noopToCompileForJvm(-2147483648.0)); assertEquals("-2147483648", val.toString()); - val = BigIntegerViolator.fromDouble(4294967295.0); + val = BigInteger.valueOf(noopToCompileForJvm(4294967295.0)); assertEquals("4294967295", val.toString()); - val = BigIntegerViolator.fromDouble(-4294967295.0); + val = BigInteger.valueOf(noopToCompileForJvm(-4294967295.0)); assertEquals("-4294967295", val.toString()); - val = BigIntegerViolator.fromDouble(4294967296.0); + val = BigInteger.valueOf(noopToCompileForJvm(4294967296.0)); assertEquals("4294967296", val.toString()); - val = BigIntegerViolator.fromDouble(-4294967296.0); + val = BigInteger.valueOf(noopToCompileForJvm(-4294967296.0)); assertEquals("-4294967296", val.toString()); } + + @Target({ElementType.METHOD}) + private @interface GwtIncompatible {} + + @GwtIncompatible + private static long noopToCompileForJvm(double d) { + // The BigInteger.valueOf(double) doesn't exist on JVM. This methods exists to so that this test + // can be compiled with the standard JRE. + throw new AssertionError(); + } + + private static double noopToCompileForJvm(Double d) { + return d; + } }
diff --git a/user/test/com/google/gwt/emultest/java/math/BigIntegerViolator.java b/user/test/com/google/gwt/emultest/java/math/BigIntegerViolator.java deleted file mode 100644 index 81edf89..0000000 --- a/user/test/com/google/gwt/emultest/java/math/BigIntegerViolator.java +++ /dev/null
@@ -1,29 +0,0 @@ -/* - * Copyright 2010 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -package com.google.gwt.emultest.java.math; - -import java.math.BigInteger; - -/** - * Used to delay referencing methods only present in the emulated JRE until they - * are actually used. - */ -public class BigIntegerViolator { - - public static native BigInteger fromDouble(double v) /*-{ - return @java.math.BigInteger::valueOf(D)(v); - }-*/; -} \ No newline at end of file