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.
148 lines
3.4 KiB
Kotlin
Vendored
148 lines
3.4 KiB
Kotlin
Vendored
// WITH_STDLIB
|
|
// WITH_COROUTINES
|
|
// NO_CHECK_LAMBDA_INLINING
|
|
// CHECK_STATE_MACHINE
|
|
|
|
// FILE: inline.kt
|
|
|
|
import helpers.*
|
|
|
|
interface SuspendRunnable {
|
|
suspend fun run()
|
|
}
|
|
|
|
inline fun inlineMe1(crossinline c: suspend () -> Unit) =
|
|
object : SuspendRunnable {
|
|
override suspend fun run() {
|
|
c()
|
|
c()
|
|
}
|
|
}
|
|
|
|
inline fun inlineMe2(crossinline c: suspend () -> Unit) = suspend {
|
|
c()
|
|
c()
|
|
}
|
|
|
|
inline suspend fun inlineMe3(crossinline c: suspend () -> Unit) {
|
|
c()
|
|
c()
|
|
}
|
|
|
|
inline suspend fun inlineMe4(c: suspend () -> Unit) {
|
|
c()
|
|
c()
|
|
}
|
|
|
|
inline fun inlineMe5(noinline c: suspend () -> Unit) =
|
|
object : SuspendRunnable {
|
|
override suspend fun run() {
|
|
c()
|
|
c()
|
|
}
|
|
}
|
|
|
|
inline fun inlineMe6(noinline c: suspend () -> Unit) = suspend {
|
|
c()
|
|
c()
|
|
}
|
|
|
|
inline suspend fun inlineMe7(noinline c: suspend () -> Unit) {
|
|
c()
|
|
c()
|
|
}
|
|
|
|
inline fun inlineMe11(crossinline c: suspend () -> Unit) = inlineMe1(c)
|
|
inline fun inlineMe12(crossinline c: suspend () -> Unit) = inlineMe2(c)
|
|
inline suspend fun inlineMe13(crossinline c: suspend () -> Unit) = inlineMe3(c)
|
|
inline suspend fun inlineMe14(crossinline c: suspend () -> Unit) = inlineMe4(c)
|
|
|
|
// FILE: box.kt
|
|
import helpers.*
|
|
import kotlin.coroutines.*
|
|
|
|
fun builder(c: suspend () -> Unit) {
|
|
c.startCoroutine(CheckStateMachineContinuation)
|
|
}
|
|
|
|
fun box(): String {
|
|
StateMachineChecker.reset()
|
|
val lambda = suspend {
|
|
StateMachineChecker.suspendHere()
|
|
StateMachineChecker.suspendHere()
|
|
}
|
|
|
|
builder {
|
|
val r = inlineMe1(lambda)
|
|
r.run()
|
|
}
|
|
StateMachineChecker.check(numberOfSuspensions = 4)
|
|
StateMachineChecker.reset()
|
|
builder {
|
|
inlineMe2(lambda)()
|
|
}
|
|
StateMachineChecker.check(numberOfSuspensions = 4)
|
|
StateMachineChecker.reset()
|
|
builder {
|
|
inlineMe3(lambda)
|
|
}
|
|
StateMachineChecker.check(numberOfSuspensions = 4)
|
|
StateMachineChecker.reset()
|
|
builder {
|
|
inlineMe4(lambda)
|
|
}
|
|
StateMachineChecker.check(numberOfSuspensions = 4)
|
|
StateMachineChecker.reset()
|
|
builder {
|
|
val r = inlineMe5(lambda)
|
|
r.run()
|
|
}
|
|
StateMachineChecker.check(numberOfSuspensions = 4)
|
|
StateMachineChecker.reset()
|
|
builder {
|
|
inlineMe6(lambda)()
|
|
}
|
|
StateMachineChecker.check(numberOfSuspensions = 4)
|
|
StateMachineChecker.reset()
|
|
builder {
|
|
inlineMe7(lambda)
|
|
}
|
|
StateMachineChecker.check(numberOfSuspensions = 4)
|
|
|
|
StateMachineChecker.reset()
|
|
builder {
|
|
val r = inlineMe11 {
|
|
StateMachineChecker.suspendHere()
|
|
StateMachineChecker.suspendHere()
|
|
}
|
|
r.run()
|
|
}
|
|
StateMachineChecker.check(numberOfSuspensions = 4)
|
|
StateMachineChecker.reset()
|
|
builder {
|
|
inlineMe12 {
|
|
StateMachineChecker.suspendHere()
|
|
StateMachineChecker.suspendHere()
|
|
}()
|
|
}
|
|
StateMachineChecker.check(numberOfSuspensions = 4)
|
|
StateMachineChecker.reset()
|
|
builder {
|
|
inlineMe13 {
|
|
StateMachineChecker.suspendHere()
|
|
StateMachineChecker.suspendHere()
|
|
}
|
|
}
|
|
StateMachineChecker.check(numberOfSuspensions = 4)
|
|
StateMachineChecker.reset()
|
|
builder {
|
|
inlineMe14 {
|
|
StateMachineChecker.suspendHere()
|
|
StateMachineChecker.suspendHere()
|
|
}
|
|
}
|
|
StateMachineChecker.check(numberOfSuspensions = 4)
|
|
|
|
return "OK"
|
|
}
|