[tests] BI (1P&1TV/1TIO): add tests for basic cases

single builder parameter
single postponed type variable
single origin of type information

relevant issues:
KT-59551
This commit is contained in:
Stanislav Ruban
2023-07-24 18:37:10 +03:00
committed by Space Team
parent 1eda35a59c
commit b13a225949
26 changed files with 1499 additions and 0 deletions
@@ -0,0 +1,43 @@
// IGNORE_BACKEND: NATIVE
// IGNORE_BACKEND: WASM
// IGNORE_BACKEND: JS, JS_IR, JS_IR_ES6
// IGNORE_LIGHT_ANALYSIS
// CHECK_TYPE_WITH_EXACT
class Buildee<CT> {
fun yield(arg: CT) {}
fun materialize(): CT = UserKlass() as CT
}
fun <FT> build(
instructions: (Buildee<FT>) -> Unit
): Buildee<FT> {
return Buildee<FT>().apply(instructions)
}
class UserKlass
// test 1: PTV is in consuming position (yield-case)
fun testYield() {
val arg: UserKlass = UserKlass()
val buildee = build(fun(it) {
it.yield(arg)
})
checkExactType<Buildee<UserKlass>>(buildee)
}
// test 2: PTV is in producing position (materialize-case)
fun testMaterialize() {
fun consume(arg: UserKlass) {}
val buildee = build(fun(it) {
consume(it.materialize())
})
checkExactType<Buildee<UserKlass>>(buildee)
}
fun box(): String {
testYield()
testMaterialize()
return "OK"
}
@@ -0,0 +1,46 @@
// IGNORE_BACKEND_K2: NATIVE
// IGNORE_BACKEND_K2: WASM
// IGNORE_BACKEND_K2: JS, JS_IR, JS_IR_ES6
// IGNORE_LIGHT_ANALYSIS
// CHECK_TYPE_WITH_EXACT
// IGNORE_BACKEND_K1: ANY
// ISSUE: KT-59551
class Buildee<CT> {
fun yield(arg: CT) {}
fun materialize(): CT = UserKlass() as CT
}
fun <FT> build(
instructions: Buildee<FT>.() -> Unit
): Buildee<FT> {
return Buildee<FT>().apply(instructions)
}
class UserKlass
// test 1: PTV is in consuming position (yield-case)
fun testYield() {
val arg: UserKlass = UserKlass()
val buildee = build(fun(it) {
it.yield(arg)
})
checkExactType<Buildee<UserKlass>>(buildee)
}
// test 2: PTV is in producing position (materialize-case)
fun testMaterialize() {
fun consume(arg: UserKlass) {}
val buildee = build(fun(it) {
consume(it.materialize())
})
checkExactType<Buildee<UserKlass>>(buildee)
}
fun box(): String {
testYield()
testMaterialize()
return "OK"
}
@@ -0,0 +1,43 @@
// IGNORE_BACKEND: NATIVE
// IGNORE_BACKEND: WASM
// IGNORE_BACKEND: JS, JS_IR, JS_IR_ES6
// IGNORE_LIGHT_ANALYSIS
// CHECK_TYPE_WITH_EXACT
class Buildee<CT> {
fun yield(arg: CT) {}
fun materialize(): CT = UserKlass() as CT
}
fun <FT> build(
instructions: (Buildee<FT>) -> Unit
): Buildee<FT> {
return Buildee<FT>().apply(instructions)
}
class UserKlass
// test 1: PTV is in consuming position (yield-case)
fun testYield() {
val arg: UserKlass = UserKlass()
val buildee = build {
it.yield(arg)
}
checkExactType<Buildee<UserKlass>>(buildee)
}
// test 2: PTV is in producing position (materialize-case)
fun testMaterialize() {
fun consume(arg: UserKlass) {}
val buildee = build {
consume(it.materialize())
}
checkExactType<Buildee<UserKlass>>(buildee)
}
fun box(): String {
testYield()
testMaterialize()
return "OK"
}
@@ -0,0 +1,43 @@
// IGNORE_BACKEND: NATIVE
// IGNORE_BACKEND: WASM
// IGNORE_BACKEND: JS, JS_IR, JS_IR_ES6
// IGNORE_LIGHT_ANALYSIS
// CHECK_TYPE_WITH_EXACT
class Buildee<CT> {
fun yield(arg: CT) {}
fun materialize(): CT = UserKlass() as CT
}
fun <FT> build(
instructions: Buildee<FT>.() -> Unit
): Buildee<FT> {
return Buildee<FT>().apply(instructions)
}
class UserKlass
// test 1: PTV is in consuming position (yield-case)
fun testYield() {
val arg: UserKlass = UserKlass()
val buildee = build {
yield(arg)
}
checkExactType<Buildee<UserKlass>>(buildee)
}
// test 2: PTV is in producing position (materialize-case)
fun testMaterialize() {
fun consume(arg: UserKlass) {}
val buildee = build {
consume(materialize())
}
checkExactType<Buildee<UserKlass>>(buildee)
}
fun box(): String {
testYield()
testMaterialize()
return "OK"
}