Fresh box tests

This commit is contained in:
Igor Chevdar
2017-05-15 14:40:26 +03:00
parent 12847428fa
commit e15878bfe9
179 changed files with 1378 additions and 135 deletions
@@ -0,0 +1,54 @@
// NO_CHECK_LAMBDA_INLINING
// FILE: 1.kt
// WITH_RUNTIME
package test
open class A(val value: String)
var invokeOrder = ""
inline fun inlineFun(
receiver: String = { invokeOrder += " default receiver"; "DEFAULT" }(),
init: String,
vararg constraints: A
): String {
return constraints.map { it.value }.joinToString() + ", " + receiver + ", " + init
}
// FILE: 2.kt
import test.*
var result = ""
fun box(): String {
result = ""
invokeOrder = ""
result = inlineFun(constraints = { invokeOrder += "constraints";A("C") }(),
receiver = { invokeOrder += " receiver"; "R" }(),
init = { invokeOrder += " init"; "I" }())
if (result != "C, R, I") return "fail 1: $result"
//Change test after KT-17691 FIX
if (invokeOrder != " receiver initconstraints") return "fail 2: $invokeOrder"
result = ""
invokeOrder = ""
result = inlineFun(init = { invokeOrder += "init"; "I" }(),
constraints = { invokeOrder += "constraints";A("C") }(),
receiver = { invokeOrder += " receiver"; "R" }()
)
if (result != "C, R, I") return "fail 3: $result"
//Change test after KT-17691 FIX
if (invokeOrder != "init receiverconstraints") return "fail 4: $invokeOrder"
result = ""
invokeOrder = ""
result = inlineFun(init = { invokeOrder += "init"; "I" }(),
constraints = { invokeOrder += " constraints";A("C") }())
if (result != "C, DEFAULT, I") return "fail 5: $result"
if (invokeOrder != "init constraints default receiver") return "fail 6: $invokeOrder"
return "OK"
}
@@ -0,0 +1,54 @@
// NO_CHECK_LAMBDA_INLINING
// FILE: 1.kt
// WITH_RUNTIME
package test
open class A(val value: String)
var invokeOrder = ""
inline fun inlineFun(
vararg constraints: A,
receiver: String = { invokeOrder += " default receiver"; "DEFAULT" }(),
init: String
): String {
return constraints.map { it.value }.joinToString() + ", " + receiver + ", " + init
}
// FILE: 2.kt
import test.*
var result = ""
fun box(): String {
result = ""
invokeOrder = ""
result = inlineFun(constraints = { invokeOrder += "constraints";A("C") }(),
receiver = { invokeOrder += " receiver"; "R" }(),
init = { invokeOrder += " init"; "I" }())
if (result != "C, R, I") return "fail 1: $result"
//Change test after KT-17691 FIX
if (invokeOrder != " receiver initconstraints") return "fail 2: $invokeOrder"
result = ""
invokeOrder = ""
result = inlineFun(init = { invokeOrder += "init"; "I" }(),
constraints = { invokeOrder += "constraints";A("C") }(),
receiver = { invokeOrder += " receiver"; "R" }()
)
if (result != "C, R, I") return "fail 3: $result"
//Change test after KT-17691 FIX
if (invokeOrder != "init receiverconstraints") return "fail 4: $invokeOrder"
result = ""
invokeOrder = ""
result = inlineFun(init = { invokeOrder += "init"; "I" }(),
constraints = { invokeOrder += " constraints";A("C") }())
if (result != "C, DEFAULT, I") return "fail 5: $result"
if (invokeOrder != "init constraints default receiver") return "fail 6: $invokeOrder"
return "OK"
}
@@ -0,0 +1,36 @@
// FILE: 1.kt
//NO_CHECK_LAMBDA_INLINING
package test
object TimeUtil {
inline fun waitForEx(retryWait: Int = 200,
action: () -> Boolean) {
var now = 1L
if (now++ <= 3) {
action()
}
}
}
// FILE: 2.kt
import test.*
var result = "fail"
fun box(): String {
TimeUtil.waitForEx(
action = {
try {
result = "OK"
true
}
catch (t: Throwable) {
false
}
})
return result
}
@@ -0,0 +1,33 @@
// FILE: 1.kt
package test
var result = "fail"
object TimeUtil {
fun waitForAssert(z: String) {
waitForEx(
action = {
result = z
result
})
}
inline fun waitForEx(retryWait: Int = 200,
action: () -> String) {
var now = 1L
now++
action()
}
}
// FILE: 2.kt
import test.*
fun box(): String {
TimeUtil.waitForAssert("OK")
return result
}
@@ -0,0 +1,16 @@
// FILE: 1.kt
// SKIP_INLINE_CHECK_IN: inlineFun$default
package test
@Suppress("NOT_YET_SUPPORTED_IN_INLINE")
inline fun inlineFun(crossinline inlineLambda: () -> String = { "OK" }, noinline noInlineLambda: () -> String = { inlineLambda() }): String {
return noInlineLambda()
}
// FILE: 2.kt
//NO_CHECK_LAMBDA_INLINING
import test.*
fun box(): String {
return inlineFun()
}
@@ -0,0 +1,18 @@
// FILE: 1.kt
// SKIP_INLINE_CHECK_IN: inlineFun$default
package test
fun ok() = "OK"
@Suppress("NOT_YET_SUPPORTED_IN_INLINE")
inline fun inlineFun(lambda: () -> String = ::ok): String {
return lambda()
}
// FILE: 2.kt
import test.*
fun box(): String {
return inlineFun()
}
@@ -0,0 +1,23 @@
// FILE: 1.kt
// SKIP_INLINE_CHECK_IN: inlineFun$default
package test
fun ok() = "OK"
class A(val value: String) {
fun ok() = value
}
@Suppress("NOT_YET_SUPPORTED_IN_INLINE")
inline fun inlineFun(a: A, lambda: (A) -> String = A::ok): String {
return lambda(a)
}
// FILE: 2.kt
import test.*
fun box(): String {
return inlineFun(A("OK"))
}
@@ -0,0 +1,19 @@
// FILE: 1.kt
// SKIP_INLINE_CHECK_IN: inlineFun$default
package test
class A(val value: String) {
@Suppress("NOT_YET_SUPPORTED_IN_INLINE")
inline fun inlineFun(lambda: () -> String = { value }): String {
return lambda()
}
}
// FILE: 2.kt
import test.*
fun box(): String {
return A("OK").inlineFun()
}
@@ -0,0 +1,29 @@
// FILE: 1.kt
// SKIP_INLINE_CHECK_IN: inlineFun$default
package test
//problem in test framework
inline fun inlineFunStub(){}
interface A {
val value: String
fun test() = inlineFun()
@Suppress("NOT_YET_SUPPORTED_IN_INLINE")
private inline fun inlineFun(lambda: () -> String = { value }): String {
return lambda()
}
}
// FILE: 2.kt
import test.*
class B : A {
override val value: String = "OK"
}
fun box(): String {
return B().test()
}
@@ -0,0 +1,20 @@
// FILE: 1.kt
// SKIP_INLINE_CHECK_IN: inlineFun$default
//WITH_RUNTIME
package test
object X {
@JvmStatic
@Suppress("NOT_YET_SUPPORTED_IN_INLINE")
inline fun inlineFun(capturedParam: String, lambda: () -> String = { capturedParam }): String {
return lambda()
}
}
// FILE: 2.kt
import test.*
fun box(): String {
return X.inlineFun("OK")
}
@@ -0,0 +1,16 @@
// FILE: 1.kt
package test
inline fun inlineFun(capturedParam: String, noinline lambda: () -> String = { capturedParam }): String {
return call(lambda)
}
fun call(lambda: () -> String ) = lambda()
// FILE: 2.kt
//NO_CHECK_LAMBDA_INLINING
import test.*
fun box(): String {
return inlineFun("OK")
}
@@ -0,0 +1,16 @@
// FILE: 1.kt
// SKIP_INLINE_CHECK_IN: inlineFun$default
package test
@Suppress("NOT_YET_SUPPORTED_IN_INLINE")
inline fun inlineFun(crossinline inlineLambda: () -> String, noinline noInlineLambda: () -> String = { inlineLambda() }): String {
return noInlineLambda()
}
// FILE: 2.kt
//NO_CHECK_LAMBDA_INLINING
import test.*
fun box(): String {
return inlineFun ({ "OK" })
}
@@ -0,0 +1,16 @@
// FILE: 1.kt
// SKIP_INLINE_CHECK_IN: inlineFun$default
package test
@Suppress("NOT_YET_SUPPORTED_IN_INLINE")
inline fun inlineFun(capturedParam: String, lambda: () -> String = { capturedParam }): String {
return lambda()
}
// FILE: 2.kt
import test.*
fun box(): String {
return inlineFun("OK")
}
@@ -0,0 +1,16 @@
// FILE: 1.kt
// SKIP_INLINE_CHECK_IN: inlineFun$default
package test
@Suppress("NOT_YET_SUPPORTED_IN_INLINE")
inline fun inlineFun(capturedParam: String, lambda: () -> Any = { capturedParam as Any }): Any {
return lambda()
}
// FILE: 2.kt
import test.*
fun box(): String {
return inlineFun("OK") as String
}
@@ -0,0 +1,16 @@
// FILE: 1.kt
// SKIP_INLINE_CHECK_IN: inlineFun$default
package test
@Suppress("NOT_YET_SUPPORTED_IN_INLINE")
inline fun inlineFun(lambda: () -> Any = { "OK" as Any }): Any {
return lambda()
}
// FILE: 2.kt
import test.*
fun box(): String {
return inlineFun() as String
}
@@ -0,0 +1,20 @@
// FILE: 1.kt
// SKIP_INLINE_CHECK_IN: inlineFun$default
package test
open class A(val value: String)
class B(value: String): A(value)
@Suppress("NOT_YET_SUPPORTED_IN_INLINE")
inline fun <T : A> inlineFun(capturedParam: T, lambda: () -> T = { capturedParam }): T {
return lambda()
}
// FILE: 2.kt
import test.*
fun box(): String {
return inlineFun(B("O")).value + inlineFun(A("K")).value
}
@@ -0,0 +1,16 @@
// FILE: 1.kt
// SKIP_INLINE_CHECK_IN: inlineFun$default
package test
@Suppress("NOT_YET_SUPPORTED_IN_INLINE")
inline fun inlineFun(lambda: () -> String = { "OK" }): String {
return lambda()
}
// FILE: 2.kt
import test.*
fun box(): String {
return inlineFun()
}
@@ -0,0 +1,66 @@
// FILE: 1.kt
package test
fun calc() = "OK"
inline fun test(
p1: String = "1",
p2: String = "2",
p3: String = "3",
p4: String = "4",
p5: String = "5",
p6: String = "6",
p7: String = "7",
p8: String = "8",
p9: String = "9",
p10: String = "10",
p11: String = "11",
p12: String = "12",
p13: String = "13",
p14: String = "14",
p15: String = "15",
p16: String = "16",
p17: String = "17",
p18: String = "18",
p19: String = "19",
p20: String = "20",
p21: String = "21",
p22: String = "22",
p23: String = "23",
p24: String = "24",
p25: String = "25",
p26: String = "26",
p27: String = "27",
p28: String = "28",
p29: String = "29",
p30: String = "30",
p31: String = "31",
p32: String = "32"
): String {
return p1 + " " + p2 + " " + p3 + " " + p4 + " " + p5 + " " + p6 + " " +
p7 + " " + p8 + " " + p9 + " " + p10 + " " + p11 + " " + p12 + " " + p13 + " " + p14 + " " +
p15 + " " + p16 + " " + p17 + " " + p18 + " " + p19 + " " + p20 + " " + p21 + " " +
p22 + " " + p23 + " " + p24 + " " + p25 + " " + p26 + " " + p27 + " " + p28 + " " +
p29 + " " + p30 + " " + p31 + " " + p32
}
// FILE: 2.kt
import test.*
fun box(): String {
if (test() != "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32")
return "fail 1: ${test()}"
if (test(p20 = "OK") != "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 OK 21 22 23 24 25 26 27 28 29 30 31 32")
return "fail 2: ${test(p20 = "OK")}"
if (test(p20 = "O", p22 = "K") != "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 O 21 K 23 24 25 26 27 28 29 30 31 32")
return "fail 3: ${test(p20 = "O", p22 = "K")}"
if (test(p20 = "O", p22 = "K", p32 = "23") != "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 O 21 K 23 24 25 26 27 28 29 30 31 23")
return "fail 4: ${test(p20 = "O", p22 = "K", p32 = "23")}"
return "OK"
}
@@ -0,0 +1,70 @@
// FILE: 1.kt
package test
fun calc() = "OK"
inline fun test(
p1: String = "1",
p2: String = "2",
p3: String = "3",
p4: String = "4",
p5: String = "5",
p6: String = "6",
p7: String = "7",
p8: String = "8",
p9: String = "9",
p10: String = "10",
p11: String = "11",
p12: String = "12",
p13: String = "13",
p14: String = "14",
p15: String = "15",
p16: String = "16",
p17: String = "17",
p18: String = "18",
p19: String = "19",
p20: String = "20",
p21: String = "21",
p22: String = "22",
p23: String = "23",
p24: String = "24",
p25: String = "25",
p26: String = "26",
p27: String = "27",
p28: String = "28",
p29: String = "29",
p30: String = "30",
p31: String = "31",
p32: String = "32",
p33: String = "33"
): String {
return p1 + " " + p2 + " " + p3 + " " + p4 + " " + p5 + " " + p6 + " " +
p7 + " " + p8 + " " + p9 + " " + p10 + " " + p11 + " " + p12 + " " + p13 + " " + p14 + " " +
p15 + " " + p16 + " " + p17 + " " + p18 + " " + p19 + " " + p20 + " " + p21 + " " +
p22 + " " + p23 + " " + p24 + " " + p25 + " " + p26 + " " + p27 + " " + p28 + " " +
p29 + " " + p30 + " " + p31 + " " + p32 + " " + p33
}
// FILE: 2.kt
import test.*
fun box(): String {
if (test() != "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33")
return "fail 1: ${test()}"
if (test(p20 = "OK") != "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 OK 21 22 23 24 25 26 27 28 29 30 31 32 33")
return "fail 2: ${test(p20 = "OK")}"
if (test(p20 = "O", p22 = "K") != "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 O 21 K 23 24 25 26 27 28 29 30 31 32 33")
return "fail 3: ${test(p20 = "O", p22 = "K")}"
if (test(p20 = "O", p22 = "K", p32 = "23") != "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 O 21 K 23 24 25 26 27 28 29 30 31 23 33")
return "fail 4: ${test(p20 = "O", p22 = "K", p32 = "23")}"
if (test(p20 = "O", p22 = "K", p32 = "33", p33 ="32") != "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 O 21 K 23 24 25 26 27 28 29 30 31 33 32")
return "fail 4: ${test(p20 = "O", p22 = "K", p32 = "33", p33 ="32")}"
return "OK"
}
@@ -0,0 +1,36 @@
// FILE: 1.kt
package test
fun calc() = "OK"
/*open modifier for method handle check in default method*/
open class A {
inline fun test(p: String = calc()): String {
return p
}
inline fun String.testExt(p: String = "K"): String {
return this + p
}
fun callExt(): String {
return "O".testExt()
}
fun callExt(arg: String): String {
return "O".testExt(arg)
}
}
// FILE: 2.kt
import test.*
fun box() : String {
if (A().callExt() != "OK") return "fail 1: ${A().callExt()}"
if (A().callExt("O") != "OO") return "fail 2: ${A().callExt("O")}"
if (A().test("KK") != "KK") return "fail 3: ${A().test("KK")}"
return A().test()
}
@@ -0,0 +1,18 @@
// FILE: 1.kt
package test
inline fun inlineFun(vararg constraints: String, init: String.() -> String): String {
return "O".init()
}
// FILE: 2.kt
import test.*
fun box(): String {
return inlineFun {
this + "K"
}
}
@@ -0,0 +1,18 @@
// FILE: 1.kt
package test
inline fun inlineFun(vararg constraints: String, receiver: String = "O", init: String.() -> String): String {
return receiver.init()
}
// FILE: 2.kt
import test.*
fun box(): String {
return inlineFun {
this + "K"
}
}
@@ -0,0 +1,18 @@
// FILE: 1.kt
// WITH_RUNTIME
package test
inline fun inlineFun(vararg constraints: String, receiver: String = "K", init: String.() -> String): String {
return (constraints.joinToString() + receiver).init()
}
// FILE: 2.kt
import test.*
fun box(): String {
return inlineFun("O") {
this
}
}