8dcb763eca
boxInline tests for suspend use StateMachineChecker and share the state if compiled and run together. The single value accessed from all tests. It is enough to reset state before the test is run.
51 lines
1.0 KiB
Kotlin
Vendored
51 lines
1.0 KiB
Kotlin
Vendored
// CHECK_STATE_MACHINE
|
|
// WITH_COROUTINES
|
|
// NO_CHECK_LAMBDA_INLINING
|
|
// WITH_STDLIB
|
|
// FILE: inlined.kt
|
|
|
|
interface SuspendRunnable {
|
|
suspend fun run1()
|
|
suspend fun run2()
|
|
}
|
|
|
|
suspend inline fun crossinlineMe(crossinline c1: suspend () -> Unit, crossinline c2: suspend () -> Unit) {
|
|
val o = object : SuspendRunnable {
|
|
override suspend fun run1() {
|
|
c1()
|
|
c1()
|
|
}
|
|
override suspend fun run2() {
|
|
c2()
|
|
c2()
|
|
}
|
|
}
|
|
o.run1()
|
|
o.run2()
|
|
}
|
|
|
|
// FILE: inlineSite.kt
|
|
import kotlin.coroutines.*
|
|
import helpers.*
|
|
|
|
fun builder(c: suspend () -> Unit) {
|
|
c.startCoroutine(CheckStateMachineContinuation)
|
|
}
|
|
|
|
var j = 0
|
|
|
|
suspend fun incrementJ() {
|
|
j++
|
|
}
|
|
|
|
fun box(): String {
|
|
StateMachineChecker.reset()
|
|
builder {
|
|
crossinlineMe({ StateMachineChecker.suspendHere() }) { incrementJ() }
|
|
}
|
|
if (j != 0) return "FAIL j != 0 $j"
|
|
StateMachineChecker.check(numberOfSuspensions = 2)
|
|
if (j != 2) return "FAIL j != 2 $j"
|
|
return "OK"
|
|
}
|