Files
kotlin-fork/js/js.translator/testData/box/expression/when/whenWithCustomRangeClause.kt
T
2018-09-12 09:49:25 +03:00

35 lines
1.2 KiB
Kotlin
Vendored

// EXPECTED_REACHABLE_NODES: 1294
// see KT-7683
// WhenTranslator must recognize KtWhenConditionInRange for custom classes that implement ClosedRange
package foo
fun box(): String {
var result = testFun(-1) + testFun(0) + testFun(5) + testFun(9) + testFun(10) + testFun(150)
if (result != "misshithithitmisshit!") return "fail1: $result"
result = testFun2(-1) + testFun2(0) + testFun2(9) + testFun2(10)
if (result != "hitmissmisshit") return "fail2: $result"
return "OK"
}
fun testFun(index: Int): String {
var lower = Wrapper(0)
var upper = Wrapper(9)
var secondRange = Wrapper(100)..Wrapper(200)
return when (Wrapper(index)) {
in lower..upper -> "hit"
in secondRange -> "hit!"
else -> "miss"
}
}
fun testFun2(index: Int): String {
return when (Wrapper(index)) {
!in Wrapper(0)..Wrapper(9) -> "hit"
else -> "miss"
}
}
class Wrapper(val value: Int) : Comparable<Wrapper> {
operator fun rangeTo(upper: Wrapper) = WrapperRange(this, upper)
override operator fun compareTo(other: Wrapper) = value.compareTo(other.value)
}
class WrapperRange(override val start: Wrapper, override val endInclusive: Wrapper) : ClosedRange<Wrapper>