Files
kotlin-fork/backend.native/tests/external/stdlib/text/StringNumberConversionTest/toLongArabicDigits.kt
T
Ilya Matveev 85827b4880 tests: Copy stdlib tests from Kotlin/JVM
This patch copies Kotlin/JVM stdlib tests (libraries/stdlib/test)
excepting ones with explicit java dependencies. It also transforms
the tests to use them as box-tests.
2017-04-07 17:21:11 +07:00

35 lines
1.4 KiB
Kotlin

import kotlin.test.*
private fun <T : Any> compareConversion(convertOrFail: (String) -> T,
convertOrNull: (String) -> T?,
equality: (T, T?) -> Boolean = { a, b -> a == b },
assertions: ConversionContext<T>.() -> Unit) {
ConversionContext(convertOrFail, convertOrNull, equality).assertions()
}
private class ConversionContext<T: Any>(val convertOrFail: (String) -> T,
val convertOrNull: (String) -> T?,
val equality: (T, T?) -> Boolean) {
private fun assertEquals(expected: T, actual: T?, input: String, operation: String) {
assertTrue(equality(expected, actual), "Expected $operation('$input') to produce $expected but was $actual")
}
fun assertProduces(input: String, output: T) {
assertEquals(output, convertOrFail(input), input, "convertOrFail")
assertEquals(output, convertOrNull(input), input, "convertOrNull")
}
fun assertFailsOrNull(input: String) {
assertFailsWith<NumberFormatException>("Expected to fail on input \"$input\"") { convertOrFail(input) }
assertNull(convertOrNull(input), message = "On input \"$input\"")
}
}
fun box() {
compareConversion({ it.toLong() }, { it.toLongOrNull() }) {
assertProduces("٢٣١٩٦٠٧٧٨٤٥٩", 231960778459)
}
}