stdlib: Implement toString with radix in accordance with Kotlin JVM

Old Int.toString(radix: Int) and Long.toString(radix: Long)
implementations didn't add sign for negative values. E.g.
-1.toString(16) == "0xff..ff" while JVM returns "-1" in such case.
This patch fixes this behaviour and allow us to use any radix between
2 and 36 as JVM does.
This commit is contained in:
Ilya Matveev
2017-04-20 15:57:32 +07:00
committed by ilmat192
parent 95034225a8
commit 89270c8108
3 changed files with 109 additions and 26 deletions
@@ -0,0 +1,41 @@
// Based on Apache Harmony tests.
fun assertEquals(actual: String, expected: String, msg: String) {
if (actual != expected) throw AssertionError("$msg. Actual: $actual. Expected: $expected")
}
fun testIntToStringWithRadix() {
assertEquals(2147483647.toString(8), "17777777777", "Octal string")
assertEquals(2147483647.toString(16), "7fffffff", "Hex string")
assertEquals(2147483647.toString(2), "1111111111111111111111111111111", "Binary string")
assertEquals(2147483647.toString(10), "2147483647", "Decimal string")
assertEquals((-2147483647).toString(8), "-17777777777", "Octal string")
assertEquals((-2147483647).toString(16), "-7fffffff", "Hex string")
assertEquals((-2147483647).toString(2), "-1111111111111111111111111111111", "Binary string")
assertEquals((-2147483647).toString(10), "-2147483647", "Decimal string")
assertEquals((-2147483648).toString(8), "-20000000000", "Octal string")
assertEquals((-2147483648).toString(16), "-80000000", "Hex string")
assertEquals((-2147483648).toString(2), "-10000000000000000000000000000000", "Binary string")
assertEquals((-2147483648).toString(10), "-2147483648", "Decimal string")
}
fun testLongToStringWithRadix() {
assertEquals(100000000L.toString(10), "100000000", "Decimal string")
assertEquals(68719476735L.toString(16), "fffffffff", "Hex string")
assertEquals(8589934591L.toString(8), "77777777777", "Octal string")
assertEquals(8796093022207L.toString(2), "1111111111111111111111111111111111111111111", "Binary string")
assertEquals((-0x7fffffffffffffffL - 1).toString(10), "-9223372036854775808", "Min decimal string")
assertEquals(0x7fffffffffffffffL.toString(10), "9223372036854775807", "Max decimal string")
assertEquals((-0x7fffffffffffffffL - 1).toString(16), "-8000000000000000", "Min hex string")
assertEquals(0x7fffffffffffffffL.toString(16), "7fffffffffffffff", "Max hex string")
}
fun main(args: Array<String>) {
testIntToStringWithRadix()
testLongToStringWithRadix()
println("OK")
}