Intrinsics for 'reversed': support non-literal range expressions

#KT-21323 In Progress
This commit is contained in:
Dmitry Petrov
2017-12-11 13:57:17 +03:00
parent 1493805f8e
commit beff4a1b92
18 changed files with 355 additions and 25 deletions

View File

@@ -0,0 +1,30 @@
// WITH_RUNTIME
import kotlin.test.*
fun intRange() = 1 .. 4
fun longRange() = 1L .. 4L
fun charRange() = '1' .. '4'
fun box(): String {
var sum = 0
for (i in intRange().reversed().reversed()) {
sum = sum * 10 + i
}
assertEquals(1234, sum)
var sumL = 0L
for (i in longRange().reversed().reversed()) {
sumL = sumL * 10 + i
}
assertEquals(1234L, sumL)
var sumC = 0
for (i in charRange().reversed().reversed()) {
sumC = sumC * 10 + i.toInt() - '0'.toInt()
}
assertEquals(1234, sumC)
return "OK"
}
// 0 reversed

View File

@@ -0,0 +1,30 @@
// WITH_RUNTIME
import kotlin.test.*
fun intRange() = 1 .. 4
fun longRange() = 1L .. 4L
fun charRange() = '1' .. '4'
fun box(): String {
var sum = 0
for (i in intRange().reversed()) {
sum = sum * 10 + i
}
assertEquals(4321, sum)
var sumL = 0L
for (i in longRange().reversed()) {
sumL = sumL * 10 + i
}
assertEquals(4321L, sumL)
var sumC = 0
for (i in charRange().reversed()) {
sumC = sumC * 10 + i.toInt() - '0'.toInt()
}
assertEquals(4321, sumC)
return "OK"
}
// 0 reversed

View File

@@ -0,0 +1,30 @@
// WITH_RUNTIME
import kotlin.test.*
fun intRange() = 1 .. 4
fun longRange() = 1L .. 4L
fun charRange() = '1' .. '4'
fun box(): String {
var sum = 0
for (i in intRange().reversed().reversed().reversed()) {
sum = sum * 10 + i
}
assertEquals(4321, sum)
var sumL = 0L
for (i in longRange().reversed().reversed().reversed()) {
sumL = sumL * 10 + i
}
assertEquals(4321L, sumL)
var sumC = 0
for (i in charRange().reversed().reversed().reversed()) {
sumC = sumC * 10 + i.toInt() - '0'.toInt()
}
assertEquals(4321, sumC)
return "OK"
}
// 0 reversed