diff --git a/teavm-classlib/src/main/java/org/teavm/classlib/java/lang/TAbstractStringBuilder.java b/teavm-classlib/src/main/java/org/teavm/classlib/java/lang/TAbstractStringBuilder.java index fdd03076b..1d2f664ca 100644 --- a/teavm-classlib/src/main/java/org/teavm/classlib/java/lang/TAbstractStringBuilder.java +++ b/teavm-classlib/src/main/java/org/teavm/classlib/java/lang/TAbstractStringBuilder.java @@ -115,7 +115,7 @@ class TAbstractStringBuilder extends TObject implements TSerializable, TCharSequ } else { insertSpace(target, target + 1); } - buffer[target++] = (char)('0' + value); + buffer[target++] = TCharacter.forDigit(value, radix); } else { int pos = 1; int sz = 1; diff --git a/teavm-classlib/src/main/java/org/teavm/classlib/java/lang/TMath.java b/teavm-classlib/src/main/java/org/teavm/classlib/java/lang/TMath.java index b64d4305b..dcbc6cefb 100644 --- a/teavm-classlib/src/main/java/org/teavm/classlib/java/lang/TMath.java +++ b/teavm-classlib/src/main/java/org/teavm/classlib/java/lang/TMath.java @@ -93,11 +93,11 @@ public final class TMath extends TObject { public static native double atan2(double y, double x); public static int round(float a) { - return (int)(a + 0.5f); + return (int)(a + signum(a) * 0.5f); } public static long round(double a) { - return (long)(a + 0.5); + return (long)(a + signum(a) * 0.5); } @GeneratedBy(MathNativeGenerator.class) diff --git a/teavm-classlib/src/main/java/org/teavm/classlib/java/util/TCollections.java b/teavm-classlib/src/main/java/org/teavm/classlib/java/util/TCollections.java index 6816aea8e..b9417c35f 100644 --- a/teavm-classlib/src/main/java/org/teavm/classlib/java/util/TCollections.java +++ b/teavm-classlib/src/main/java/org/teavm/classlib/java/util/TCollections.java @@ -253,6 +253,9 @@ public class TCollections extends TObject { } int l = 0; int u = list.size() - 1; + if (u < 0) { + return -1; + } while (true) { int i = (l + u) / 2; T e = list.get(i); diff --git a/teavm-tests/src/test/java/org/teavm/classlib/java/lang/IntegerTest.java b/teavm-tests/src/test/java/org/teavm/classlib/java/lang/IntegerTest.java index 485663cf2..d0f84f2ba 100644 --- a/teavm-tests/src/test/java/org/teavm/classlib/java/lang/IntegerTest.java +++ b/teavm-tests/src/test/java/org/teavm/classlib/java/lang/IntegerTest.java @@ -58,6 +58,11 @@ public class IntegerTest { assertEquals("kona", Integer.toString(411787, 27)); } + @Test + public void writesSingleDigitInteger() { + assertEquals("a", Integer.toString(10, 16)); + } + @Test public void decodes() { assertEquals(Integer.valueOf(123), Integer.decode("123")); diff --git a/teavm-tests/src/test/java/org/teavm/classlib/java/lang/MathTest.java b/teavm-tests/src/test/java/org/teavm/classlib/java/lang/MathTest.java index 471523b8c..58249bcb9 100644 --- a/teavm-tests/src/test/java/org/teavm/classlib/java/lang/MathTest.java +++ b/teavm-tests/src/test/java/org/teavm/classlib/java/lang/MathTest.java @@ -54,4 +54,12 @@ public class MathTest { public void getExponentComputed() { assertEquals(6, Math.getExponent(123.456)); } + + @Test + public void roundWorks() { + assertEquals(1, Math.round(1.3)); + assertEquals(2, Math.round(1.8)); + assertEquals(-1, Math.round(-1.3)); + assertEquals(-2, Math.round(-1.8)); + } }