50 lines
994 B
Kotlin
50 lines
994 B
Kotlin
package foo
|
|
|
|
// CHECK_CONTAINS_NO_CALLS: capturedInLambda
|
|
// CHECK_CONTAINS_NO_CALLS: declaredInLambda
|
|
|
|
data class State(var count: Int = 0)
|
|
|
|
inline fun repeat(times: Int, action: () -> Unit) {
|
|
for (i in 1..times) {
|
|
action()
|
|
}
|
|
}
|
|
|
|
fun capturedInLambda(state: State, a: Int, b: Int): Int {
|
|
[inline] fun State.inc() {
|
|
count++
|
|
}
|
|
|
|
repeat(a + b) {
|
|
state.inc()
|
|
}
|
|
|
|
return state.count
|
|
}
|
|
|
|
|
|
fun declaredInLambda(state: State, a: Int, b: Int): Int {
|
|
repeat(a) {
|
|
[inline] fun State.inc() {
|
|
count++
|
|
}
|
|
|
|
repeat(b) {
|
|
state.inc()
|
|
}
|
|
}
|
|
|
|
return state.count
|
|
}
|
|
|
|
|
|
fun box(): String {
|
|
assertEquals(3, capturedInLambda(State(), 1, 2), "capturedInLambda")
|
|
assertEquals(9, capturedInLambda(State(), 4, 5), "capturedInLambda")
|
|
|
|
assertEquals(2, declaredInLambda(State(), 1, 2), "declaredInLambda")
|
|
assertEquals(20, declaredInLambda(State(), 4, 5), "declaredInLambda")
|
|
|
|
return "OK"
|
|
} |