| // LANGUAGE_VERSION: 1.3 |
| @file:Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE") |
| |
| package test |
| |
| import kotlin.internal.contracts.* |
| |
| fun twoReturnsValue(b: Boolean) { |
| contract { |
| returns(true) implies b |
| returns(false) implies (!b) |
| } |
| } |
| |
| fun threeReturnsValue(b: Boolean) { |
| contract { |
| returnsNotNull() implies (b != null) |
| returns(true) implies (b) |
| returns(false) implies (!b) |
| } |
| } |
| |
| fun returnsAndFinished(b: Boolean) { |
| contract { |
| returns(true) implies (b) |
| returns() implies (b != null) |
| returns(false) implies (!b) |
| } |
| } |
| |
| fun returnsAndCalls(b: Boolean, block: () -> Unit) { |
| contract { |
| returns(false) implies (!b) |
| callsInPlace(block) |
| returns(true) implies (b) |
| } |
| } |
| |
| fun severalCalls(x: () -> Unit, y: () -> Unit) { |
| contract { |
| callsInPlace(x, InvocationKind.AT_MOST_ONCE) |
| callsInPlace(y, InvocationKind.AT_LEAST_ONCE) |
| } |
| } |