| // TARGET_BACKEND: NATIVE | |
| // ASSERTIONS_MODE: always-enable | |
| // WITH_STDLIB | |
| var messageAssertionCalled = false | |
| @OptIn(kotlin.experimental.ExperimentalNativeApi::class) | |
| fun checkMessageAssetion(condition: Boolean): Boolean { | |
| messageAssertionCalled = false | |
| try { | |
| assert(condition) { | |
| condition.let { | |
| try { | |
| assert(it) | |
| } catch (e: AssertionError) { | |
| messageAssertionCalled = true | |
| } | |
| } | |
| } | |
| } catch (e: AssertionError) { | |
| return messageAssertionCalled && !condition | |
| } | |
| return condition | |
| } | |
| @OptIn(kotlin.experimental.ExperimentalNativeApi::class) | |
| fun checkConditionAssetion(condition: Boolean): Boolean { | |
| try { | |
| assert(condition.let { assert(it); true }) | |
| } catch (e: AssertionError) { | |
| return !condition | |
| } | |
| return condition | |
| } | |
| fun box(): String { | |
| if (checkConditionAssetion(true) && checkConditionAssetion(false) && | |
| checkMessageAssetion(true) && checkMessageAssetion(false)) | |
| return "OK" | |
| return "FAIL" | |
| } |