diff --git a/user/super/com/google/gwt/emul/java/lang/Long.java b/user/super/com/google/gwt/emul/java/lang/Long.java index 693efeba2c..8950a41236 100644 --- a/user/super/com/google/gwt/emul/java/lang/Long.java +++ b/user/super/com/google/gwt/emul/java/lang/Long.java @@ -237,7 +237,7 @@ private static String toPowerOfTwoUnsignedString(long value, int shift) { int highBits = LongUtils.getHighBits(value); if (highBits == 0) { - return Integer.toString((int) value, radix); + return Integer.toUnsignedString((int) value, radix); } final int mask = radix - 1; diff --git a/user/test/com/google/gwt/emultest/java/lang/LongTest.java b/user/test/com/google/gwt/emultest/java/lang/LongTest.java index ebd007eec2..37fb27d634 100644 --- a/user/test/com/google/gwt/emultest/java/lang/LongTest.java +++ b/user/test/com/google/gwt/emultest/java/lang/LongTest.java @@ -254,6 +254,14 @@ public void testToBinaryString() { assertEquals( "1111111111111111111111111111111111111111111111111111111111111111", Long.toBinaryString(-1)); + + // Test int MAX+1 and int -1, as both are positive longs, but negative ints + assertEquals( + "10000000000000000000000000000000", + Long.toBinaryString(((long) Integer.MAX_VALUE) + 1)); + assertEquals( + "11111111111111111111111111111111", + Long.toBinaryString(4294967295L)); } public void testToHexString() { @@ -262,6 +270,8 @@ public void testToHexString() { assertEquals("1234500000000", Long.toHexString(0x1234500000000L)); assertEquals("fff1234500000000", Long.toHexString(0xFFF1234500000000L)); assertEquals("ffffffffffffffff", Long.toHexString(-1)); + assertEquals("80000000", Long.toHexString(((long) Integer.MAX_VALUE) + 1)); + assertEquals("ffffffff", Long.toHexString(4294967295L)); } public void testToOctalString() { @@ -270,6 +280,8 @@ public void testToOctalString() { assertEquals("1000000000000000000000", Long.toOctalString(Long.MIN_VALUE)); assertEquals("777777777777777777777", Long.toOctalString(Long.MAX_VALUE)); assertEquals("1777777777777777777777", Long.toOctalString(-1)); + assertEquals("20000000000", Long.toOctalString(((long) Integer.MAX_VALUE) + 1)); + assertEquals("37777777777", Long.toOctalString(4294967295L)); } public void testToString() { @@ -281,6 +293,8 @@ public void testToString() { assertEquals("80765", Long.toString(80765L)); assertEquals("-2147483648", Long.toString((long) Integer.MIN_VALUE)); assertEquals("2147483647", Long.toString((long) Integer.MAX_VALUE)); + assertEquals("2147483648", Long.toString(((long) Integer.MAX_VALUE) + 1)); + assertEquals("4294967295", Long.toString((long) 4294967295L)); assertEquals("-89000000005", Long.toString(-89000000005L)); assertEquals("89000000005", Long.toString(89000000005L)); assertEquals("-9223372036854775808", Long.toString(Long.MIN_VALUE));