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.
46 lines
1006 B
Kotlin
Vendored
46 lines
1006 B
Kotlin
Vendored
// CHECK_STATE_MACHINE
|
|
// WITH_COROUTINES
|
|
// NO_CHECK_LAMBDA_INLINING
|
|
// WITH_STDLIB
|
|
// FILE: inlined.kt
|
|
|
|
import kotlin.coroutines.intrinsics.*
|
|
import helpers.*
|
|
|
|
interface SuspendRunnable {
|
|
suspend fun run()
|
|
}
|
|
|
|
suspend inline fun crossinlineMe(crossinline c: suspend () -> Unit) {
|
|
val o = object : SuspendRunnable {
|
|
override suspend fun run() {
|
|
StateMachineChecker.suspendHere()
|
|
StateMachineChecker.suspendHere()
|
|
StateMachineChecker.suspendHere()
|
|
StateMachineChecker.suspendHere()
|
|
StateMachineChecker.suspendHere()
|
|
}
|
|
}
|
|
o.run()
|
|
}
|
|
|
|
// FILE: inlineSite.kt
|
|
import kotlin.coroutines.*
|
|
import helpers.*
|
|
|
|
fun builder(c: suspend () -> Unit) {
|
|
c.startCoroutine(CheckStateMachineContinuation)
|
|
}
|
|
|
|
fun box(): String {
|
|
StateMachineChecker.reset()
|
|
var res = "OK"
|
|
builder {
|
|
crossinlineMe {
|
|
res = "FAIL 1"
|
|
}
|
|
}
|
|
StateMachineChecker.check(numberOfSuspensions = 5)
|
|
return res
|
|
}
|