| // NO_CHECK_LAMBDA_INLINING |
| // WITH_STDLIB |
| // TARGET_BACKEND: JVM |
| // ASSERTIONS_MODE: jvm |
| // FILE: inline.kt |
| |
| package test |
| |
| object CrossinlineLambdaContainer { |
| inline fun call(b: Boolean, crossinline c: () -> Unit) { |
| val l = { |
| assert(b) { "FROM INLINED" } |
| c() |
| } |
| l() |
| } |
| } |
| |
| // FILE: inlineSite.kt |
| |
| import test.CrossinlineLambdaContainer.call |
| |
| interface Checker { |
| fun checkTrueTrue(): Boolean |
| fun checkTrueFalse(): Boolean |
| fun checkFalseTrue(): Boolean |
| fun checkFalseFalse(): Boolean |
| fun checkTrueWithMessageTrue(): Boolean |
| fun checkTrueWithMessageFalse(): Boolean |
| fun checkFalseWithMessageTrue(): Boolean |
| fun checkFalseWithMessageFalse(): Boolean |
| } |
| |
| class ShouldBeDisabled : Checker { |
| override fun checkTrueTrue(): Boolean { |
| var hit = false |
| val l = { hit = true; true } |
| call(true) { |
| assert(l()) |
| } |
| return hit |
| } |
| |
| override fun checkTrueFalse(): Boolean { |
| var hit = false |
| val l = { hit = true; true } |
| call(false) { |
| assert(l()) |
| } |
| return hit |
| } |
| |
| override fun checkFalseTrue(): Boolean { |
| var hit = false |
| val l = { hit = true; false } |
| call(true) { |
| assert(l()) |
| } |
| return hit |
| } |
| |
| override fun checkFalseFalse(): Boolean { |
| var hit = false |
| val l = { hit = true; false } |
| call(false) { |
| assert(l()) |
| } |
| return hit |
| } |
| |
| override fun checkTrueWithMessageTrue(): Boolean { |
| var hit = false |
| val l = { hit = true; true } |
| call(true) { |
| assert(l()) { "BOOYA" } |
| } |
| return hit |
| } |
| |
| override fun checkTrueWithMessageFalse(): Boolean { |
| var hit = false |
| val l = { hit = true; true } |
| call(false) { |
| assert(l()) { "BOOYA" } |
| } |
| return hit |
| } |
| |
| override fun checkFalseWithMessageTrue(): Boolean { |
| var hit = false |
| val l = { hit = true; false } |
| call(true) { |
| assert(l()) { "BOOYA" } |
| } |
| return hit |
| } |
| |
| override fun checkFalseWithMessageFalse(): Boolean { |
| var hit = false |
| val l = { hit = true; false } |
| call(false) { |
| assert(l()) { "BOOYA" } |
| } |
| return hit |
| } |
| } |
| |
| class ShouldBeEnabled : Checker { |
| override fun checkTrueTrue(): Boolean { |
| var hit = false |
| val l = { hit = true; true } |
| call(true) { |
| assert(l()) |
| } |
| return hit |
| } |
| |
| override fun checkTrueFalse(): Boolean { |
| var hit = false |
| val l = { hit = true; true } |
| call(false) { |
| assert(l()) |
| } |
| return hit |
| } |
| |
| override fun checkFalseTrue(): Boolean { |
| var hit = false |
| val l = { hit = true; false } |
| call(true) { |
| assert(l()) |
| } |
| return hit |
| } |
| |
| override fun checkFalseFalse(): Boolean { |
| var hit = false |
| val l = { hit = true; false } |
| call(false) { |
| assert(l()) |
| } |
| return hit |
| } |
| |
| override fun checkTrueWithMessageTrue(): Boolean { |
| var hit = false |
| val l = { hit = true; true } |
| call(true) { |
| assert(l()) { "BOOYA" } |
| } |
| return hit |
| } |
| |
| override fun checkTrueWithMessageFalse(): Boolean { |
| var hit = false |
| val l = { hit = true; true } |
| call(false) { |
| assert(l()) { "BOOYA" } |
| } |
| return hit |
| } |
| |
| override fun checkFalseWithMessageTrue(): Boolean { |
| var hit = false |
| val l = { hit = true; false } |
| call(true) { |
| assert(l()) { "BOOYA" } |
| } |
| return hit |
| } |
| |
| override fun checkFalseWithMessageFalse(): Boolean { |
| var hit = false |
| val l = { hit = true; false } |
| call(false) { |
| assert(l()) { "BOOYA" } |
| } |
| return hit |
| } |
| } |
| |
| fun setDesiredAssertionStatus(v: Boolean): Checker { |
| val loader = Checker::class.java.classLoader |
| loader.setDefaultAssertionStatus(v) |
| val c = loader.loadClass(if (v) "ShouldBeEnabled" else "ShouldBeDisabled") |
| return c.newInstance() as Checker |
| } |
| |
| fun box(): String { |
| var c = setDesiredAssertionStatus(false) |
| if (c.checkTrueTrue()) return "FAIL 00" |
| if (c.checkTrueFalse()) return "FAIL 01" |
| if (c.checkTrueWithMessageTrue()) return "FAIL 10" |
| if (c.checkTrueWithMessageFalse()) return "FAIL 11" |
| if (c.checkFalseTrue()) return "FAIL 20" |
| if (c.checkFalseFalse()) return "FAIL 21" |
| if (c.checkFalseWithMessageTrue()) return "FAIL 30" |
| if (c.checkFalseWithMessageFalse()) return "FAIL 31" |
| |
| c = setDesiredAssertionStatus(true) |
| if (!c.checkTrueTrue()) return "FAIL 40" |
| try { |
| c.checkTrueFalse() |
| return "FAIL 41" |
| } catch (ignore: AssertionError) { |
| } |
| if (!c.checkTrueWithMessageTrue()) return "FAIL 50" |
| try { |
| c.checkTrueWithMessageFalse() |
| return "FAIL 51" |
| } catch (ignore: AssertionError) { |
| } |
| try { |
| c.checkFalseTrue() |
| return "FAIL 60" |
| } catch (ignore: AssertionError) { |
| } |
| try { |
| c.checkFalseFalse() |
| return "FAIL 61" |
| } catch (ignore: AssertionError) { |
| } |
| try { |
| c.checkFalseWithMessageTrue() |
| return "FAIL 70" |
| } catch (ignore: AssertionError) { |
| } |
| try { |
| c.checkFalseWithMessageFalse() |
| return "FAIL 71" |
| } catch (ignore: AssertionError) { |
| } |
| |
| return "OK" |
| } |