Files
kotlin-fork/compiler/testData/codegen/boxInline/suspend/stateMachine/independentInline.kt
T
Pavel Punegov 8dcb763eca [K/N][test] Reset state in StateMachineChecker before the test
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.
2024-02-15 18:07:25 +00:00

67 lines
1.4 KiB
Kotlin
Vendored

// WITH_STDLIB
// WITH_COROUTINES
// CHECK_STATE_MACHINE
// FILE: inline.kt
import helpers.*
interface SuspendRunnable {
suspend fun run()
suspend fun ownIndependentInline()
}
inline fun inlineMe(crossinline c1: suspend () -> Unit) =
object : SuspendRunnable {
override suspend fun run() {
c1()
c1()
}
override suspend fun ownIndependentInline() {
inlineMe2 {
StateMachineChecker.suspendHere()
StateMachineChecker.suspendHere()
}.ownIndependentInline()
}
}
inline fun inlineMe2(crossinline c2: suspend () -> Unit): SuspendRunnable =
object : SuspendRunnable {
override suspend fun run() {
}
override suspend fun ownIndependentInline() {
c2()
c2()
}
}
// FILE: box.kt
import helpers.*
import kotlin.coroutines.*
fun builder(c: suspend () -> Unit) {
c.startCoroutine(CheckStateMachineContinuation)
}
fun box(): String {
StateMachineChecker.reset()
val r = inlineMe {
StateMachineChecker.suspendHere()
StateMachineChecker.suspendHere()
}
builder {
r.run()
}
StateMachineChecker.check(numberOfSuspensions = 4)
StateMachineChecker.reset()
builder {
r.ownIndependentInline()
}
StateMachineChecker.check(numberOfSuspensions = 4)
return "OK"
}