Provide unsigned number to string conversion in arbitrary base

#KT-26161
This commit is contained in:
Ilya Gorbunov
2018-08-16 07:44:57 +03:00
parent 47162590eb
commit c1d1a7108f
4 changed files with 105 additions and 3 deletions
@@ -190,6 +190,54 @@ class StringNumberConversionTest {
assertFailsWith<IllegalArgumentException>("Expected to fail with radix 37") { 37L.toString(radix = 37) }
assertFailsWith<IllegalArgumentException>("Expected to fail with radix 1") { 1L.toString(radix = 1) }
}
@Test fun ubyteToStringWithRadix() {
assertEquals("7a", 0x7a.toUByte().toString(16))
assertEquals("80", Byte.MIN_VALUE.toUByte().toString(radix = 16))
assertEquals("ff", UByte.MAX_VALUE.toString(radix = 16))
assertEquals("40", Byte.MIN_VALUE.toUByte().toString(radix = 32))
assertEquals("7v", UByte.MAX_VALUE.toString(radix = 32))
assertFailsWith<IllegalArgumentException>("Expected to fail with radix 37") { 37.toUByte().toString(radix = 37) }
assertFailsWith<IllegalArgumentException>("Expected to fail with radix 1") { 1.toUByte().toString(radix = 1) }
}
@Test fun ushortToStringWithRadix() {
assertEquals("7FFF", 0x7FFF.toUShort().toString(radix = 16).toUpperCase())
assertEquals("8000", 0x8000.toUShort().toString(radix = 16))
assertEquals("ffff", UShort.MAX_VALUE.toString(radix = 16))
assertEquals("1ekf", UShort.MAX_VALUE.toString(radix = 36))
assertFailsWith<IllegalArgumentException>("Expected to fail with radix 37") { 37.toUShort().toString(radix = 37) }
assertFailsWith<IllegalArgumentException>("Expected to fail with radix 1") { 1.toUShort().toString(radix = 1) }
}
@Test fun uintToStringWithRadix() {
assertEquals("ffffff01", (-255).toUInt().toString(radix = 16))
assertEquals("ffffffff", UInt.MAX_VALUE.toString(radix = 16))
assertEquals("1100110", 102u.toString(radix = 2))
assertEquals("kona", 411787u.toString(radix = 27))
assertEquals("3vvvvvv", UInt.MAX_VALUE.toString(radix = 32))
assertFailsWith<IllegalArgumentException>("Expected to fail with radix 37") { 37u.toString(radix = 37) }
assertFailsWith<IllegalArgumentException>("Expected to fail with radix 1") { 1u.toString(radix = 1) }
}
@Test fun ulongToStringWithRadix() {
assertEquals("7f11223344556677", 0x7F11223344556677u.toString(radix = 16))
assertEquals("89aabbccddeeff11", 0x89AABBCCDDEEFF11u.toString(radix = 16))
assertEquals("8000000000000000", Long.MIN_VALUE.toULong().toString(radix = 16))
assertEquals("ffffffffffffffff", ULong.MAX_VALUE.toString(radix = 16))
assertEquals("hazelnut", 1356099454469uL.toString(radix = 36))
assertFailsWith<IllegalArgumentException>("Expected to fail with radix 37") { 37uL.toString(radix = 37) }
assertFailsWith<IllegalArgumentException>("Expected to fail with radix 1") { 1uL.toString(radix = 1) }
}
}
internal fun doubleTotalOrderEquals(a: Double?, b: Double?): Boolean = (a as Any?) == b