Reorganize spec tests infrastructure code

- Add the tests mute system for the diagnostic tests
- Move the code for the test info parsing to the separate package `parsers`
- Unification of the `linked` and `not linked` spec tests
- Package structure is refactored
- Change the multiline comment format with a test information
- Actualize `PrintSpecTestsStatistic`
- Other different code improvements
This commit is contained in:
victor.petukhov
2018-10-31 12:56:27 +03:00
parent 2af9efa4a0
commit 64f531fc93
348 changed files with 4722 additions and 3802 deletions
@@ -2,22 +2,23 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
SECTION: contracts
CATEGORIES: declarations, contractBuilder, common
NUMBER: 1
DESCRIPTION: Contract isn't first statement.
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: contracts, declarations, contractBuilder, common
* NUMBER: 1
* DESCRIPTION: Contract isn't first statement.
*/
import kotlin.contracts.*
// TESTCASE NUMBER: 1
inline fun case_1(block: () -> Unit) {
val value_1 = 1
<!CONTRACT_NOT_ALLOWED!>contract<!> { }
return block()
}
// TESTCASE NUMBER: 2
inline fun case_2(block: () -> Unit) {
10 - 1
<!CONTRACT_NOT_ALLOWED!>contract<!> {
@@ -26,6 +27,7 @@ inline fun case_2(block: () -> Unit) {
return block()
}
// TESTCASE NUMBER: 3
inline fun case_3(block: () -> Unit) {
throw Exception()
<!CONTRACT_NOT_ALLOWED!>contract<!> {
@@ -34,10 +36,77 @@ inline fun case_3(block: () -> Unit) {
return block()
}
// это в негативные,
/*
* TESTCASE NUMBER: 4
* UNEXPECTED BEHAVIOUR
* ISSUES: KT-26191
*/
inline fun case_4(block: () -> Unit) {
.0009
return contract {
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
}
/*
* TESTCASE NUMBER: 5
* UNEXPECTED BEHAVIOUR
* ISSUES: KT-26191
*/
fun case_5(value_1: Int?) {
println("!")
contract {
returns(true) implies (value_1 != null)
} <!CAST_NEVER_SUCCEEDS!>as<!> ContractBuilder
}
/*
* TESTCASE NUMBER: 6
* UNEXPECTED BEHAVIOUR
* ISSUES: KT-26191
*/
fun case_6(value_1: Int?) {
100 + 10
throw Exception(contract {
returns(true) implies (value_1 != null)
}.toString())
}
/*
* TESTCASE NUMBER: 7
* UNEXPECTED BEHAVIOUR
* ISSUES: KT-26191
*/
fun case_7(value_1: Int?) {
for (i in 0..10) {
println(i)
}
return contract {
returns(true) implies (value_1 != null)
}
}
/*
* TESTCASE NUMBER: 8
* UNEXPECTED BEHAVIOUR
* ISSUES: KT-26191
*/
fun case_8(value_1: Int?) {
val f = 10 - 20
val g = contract {
returns(true) implies (value_1 != null)
}
}
/*
* TESTCASE NUMBER: 9
* UNEXPECTED BEHAVIOUR
* ISSUES: KT-26191
*/
fun case_9(number: Int?): Boolean {
val value_1 = number != null
contract {
returns(false) implies (value_1)
} <!CAST_NEVER_SUCCEEDS!>as<!> ContractBuilder
return number == null
}
@@ -4,3 +4,8 @@ public inline fun case_1(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
public inline fun case_2(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
public inline fun case_3(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
public inline fun case_4(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
public fun case_5(/*0*/ value_1: kotlin.Int?): kotlin.Unit
public fun case_6(/*0*/ value_1: kotlin.Int?): kotlin.Unit
public fun case_7(/*0*/ value_1: kotlin.Int?): kotlin.Unit
public fun case_8(/*0*/ value_1: kotlin.Int?): kotlin.Unit
public fun case_9(/*0*/ number: kotlin.Int?): kotlin.Boolean
@@ -1,17 +1,17 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
SECTION: contracts
CATEGORIES: declarations, contractBuilder, common
NUMBER: 10
DESCRIPTION: Contract with label after 'contract' keyword.
ISSUES: KT-26153
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: contracts, declarations, contractBuilder, common
* NUMBER: 10
* DESCRIPTION: Contract with label after 'contract' keyword.
* ISSUES: KT-26153
*/
import kotlin.contracts.*
// TESTCASE NUMBER: 1
inline fun case_1(block: () -> Unit) {
contract <!ERROR_IN_CONTRACT_DESCRIPTION!>test@ {
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
@@ -1,27 +1,38 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
SECTION: contracts
CATEGORIES: declarations, contractBuilder, common
NUMBER: 11
DESCRIPTION: Functions with contracts and external contract builder.
ISSUES: KT-26186
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: contracts, declarations, contractBuilder, common
* NUMBER: 11
* DESCRIPTION: Functions with contracts and external contract builder.
* ISSUES: KT-26186
*/
// FILE: builder.kt
package builder
import kotlin.contracts.*
internal inline fun contractBuilder(block: () -> Unit): ContractBuilder.() -> Unit = {
// TESTCASE NUMBER: 1, 2
inline fun contractBuilder(block: () -> Unit): ContractBuilder.() -> Unit = {
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
internal inline fun case_1(block: () -> Unit) {
// FILE: main.kt
import builder.*
import kotlin.contracts.*
// TESTCASE NUMBER: 1
inline fun case_1(block: () -> Unit) {
contract(<!ERROR_IN_CONTRACT_DESCRIPTION!>contractBuilder(block)<!>)
return block()
}
internal inline fun case_2(block: () -> Unit) {
// TESTCASE NUMBER: 2
inline fun case_2(block: () -> Unit) {
contract(builder = <!ERROR_IN_CONTRACT_DESCRIPTION!>contractBuilder(block)<!>)
return block()
}
@@ -1,5 +1,8 @@
package
internal inline fun case_1(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
internal inline fun case_2(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
internal inline fun contractBuilder(/*0*/ block: () -> kotlin.Unit): kotlin.contracts.ContractBuilder.() -> kotlin.Unit
public inline fun case_1(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
public inline fun case_2(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
package builder {
public inline fun contractBuilder(/*0*/ block: () -> kotlin.Unit): kotlin.contracts.ContractBuilder.() -> kotlin.Unit
}
@@ -1,34 +1,46 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
SECTION: contracts
CATEGORIES: declarations, contractBuilder, common
NUMBER: 12
DESCRIPTION: Functions with contracts and external effect builder.
ISSUES: KT-26186
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: contracts, declarations, contractBuilder, common
* NUMBER: 12
* DESCRIPTION: Functions with contracts and external effect builder.
* ISSUES: KT-26186
*/
// FILE: builder.kt
package builder
import kotlin.contracts.*
internal inline fun ContractBuilder.callsInPlaceEffectBuilder(block: () -> Unit) =
// TESTCASE NUMBER: 1, 2, 3
inline fun ContractBuilder.callsInPlaceEffectBuilder(block: () -> Unit) =
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
internal fun ContractBuilder.returnsEffectBuilder(value_1: Int?) =
fun ContractBuilder.returnsEffectBuilder(value_1: Int?) =
returns(true) implies (value_1 != null)
internal inline fun case_1(block: () -> Unit) {
// FILE: main.kt
import builder.*
import kotlin.contracts.*
// TESTCASE NUMBER: 1
inline fun case_1(block: () -> Unit) {
contract(builder = { <!ERROR_IN_CONTRACT_DESCRIPTION!>callsInPlaceEffectBuilder(block)<!> })
return block()
}
internal inline fun case_2(block: () -> Unit) {
// TESTCASE NUMBER: 2
inline fun case_2(block: () -> Unit) {
contract { <!ERROR_IN_CONTRACT_DESCRIPTION!>callsInPlaceEffectBuilder(block)<!> }
return block()
}
internal inline fun case_3(value_1: Int?, block: () -> Unit) {
// TESTCASE NUMBER: 3
inline fun case_3(value_1: Int?, block: () -> Unit) {
contract({ <!ERROR_IN_CONTRACT_DESCRIPTION!>returnsEffectBuilder(value_1)<!>; <!ERROR_IN_CONTRACT_DESCRIPTION!>callsInPlaceEffectBuilder(block)<!> })
return block()
}
@@ -1,7 +1,10 @@
package
internal inline fun case_1(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
internal inline fun case_2(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
internal inline fun case_3(/*0*/ value_1: kotlin.Int?, /*1*/ block: () -> kotlin.Unit): kotlin.Unit
internal inline fun kotlin.contracts.ContractBuilder.callsInPlaceEffectBuilder(/*0*/ block: () -> kotlin.Unit): kotlin.contracts.CallsInPlace
internal fun kotlin.contracts.ContractBuilder.returnsEffectBuilder(/*0*/ value_1: kotlin.Int?): kotlin.contracts.ConditionalEffect
public inline fun case_1(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
public inline fun case_2(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
public inline fun case_3(/*0*/ value_1: kotlin.Int?, /*1*/ block: () -> kotlin.Unit): kotlin.Unit
package builder {
public inline fun kotlin.contracts.ContractBuilder.callsInPlaceEffectBuilder(/*0*/ block: () -> kotlin.Unit): kotlin.contracts.CallsInPlace
public fun kotlin.contracts.ContractBuilder.returnsEffectBuilder(/*0*/ value_1: kotlin.Int?): kotlin.contracts.ConditionalEffect
}
@@ -2,17 +2,17 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
SECTION: contracts
CATEGORIES: declarations, contractBuilder, common
NUMBER: 13
DESCRIPTION: Contract function with CallsInPlace effect with not allowed implies.
ISSUES: KT-26409
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: contracts, declarations, contractBuilder, common
* NUMBER: 13
* DESCRIPTION: Contract function with CallsInPlace effect with not allowed implies.
* ISSUES: KT-26409
*/
import kotlin.contracts.*
// TESTCASE NUMBER: 1
fun case_1(value_1: Any?, block: () -> Unit) {
<!ERROR_IN_CONTRACT_DESCRIPTION!>contract<!> { callsInPlace(block, InvocationKind.EXACTLY_ONCE) <!UNRESOLVED_REFERENCE!>implies<!> (value_1 != null) }
if (value_1 != null) block()
@@ -3,26 +3,28 @@
// !WITH_FUNCTIONS
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
SECTION: contracts
CATEGORIES: declarations, contractBuilder, common
NUMBER: 14
DESCRIPTION: Contract is first statement in control flow terms, but not in tokens order terms.
UNEXPECTED BEHAVIOUR
ISSUES: KT-26153
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: contracts, declarations, contractBuilder, common
* NUMBER: 14
* DESCRIPTION: Contract is first statement in control flow terms, but not in tokens order terms.
* UNEXPECTED BEHAVIOUR
* ISSUES: KT-26153
*/
import kotlin.contracts.*
internal inline fun case_1(block: () -> Unit) {
// TESTCASE NUMBER: 1
inline fun case_1(block: () -> Unit) {
return contract {
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
}
// TESTCASE NUMBER: 2
fun case_2() = contract { }
// TESTCASE NUMBER: 3
inline fun case_3(block: () -> Unit) {
val value_1 = contract {
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
@@ -30,6 +32,7 @@ inline fun case_3(block: () -> Unit) {
block()
}
// TESTCASE NUMBER: 4
inline fun case_4(block: () -> Unit) {
(contract {
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
@@ -37,6 +40,7 @@ inline fun case_4(block: () -> Unit) {
return block()
}
// TESTCASE NUMBER: 5
inline fun case_5(block: () -> Unit) {
<!REDUNDANT_LABEL_WARNING!>test@<!> contract {
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
@@ -44,12 +48,14 @@ inline fun case_5(block: () -> Unit) {
return block()
}
// TESTCASE NUMBER: 6
inline fun case_6(block: () -> Unit) {
throw Exception(contract {
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}.toString())
}
// TESTCASE NUMBER: 7
inline fun case_7(block: () -> Unit) {
_funWithAnyArg(contract {
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
@@ -2,7 +2,7 @@ package
public fun _funWithAnyArg(/*0*/ value_1: kotlin.Any): kotlin.Int
public fun _funWithoutArgs(): kotlin.Int
internal inline fun case_1(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
public inline fun case_1(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
public fun case_2(): kotlin.Unit
public inline fun case_3(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
public inline fun case_4(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
@@ -2,23 +2,24 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
SECTION: contracts
CATEGORIES: declarations, contractBuilder, common
NUMBER: 15
DESCRIPTION: contracts with not allowed conditions with boolean constants or boolean constant expressions in implies.
UNEXPECTED BEHAVIOUR
ISSUES: KT-26491
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: contracts, declarations, contractBuilder, common
* NUMBER: 15
* DESCRIPTION: contracts with not allowed conditions with boolean constants or boolean constant expressions in implies.
* UNEXPECTED BEHAVIOUR
* ISSUES: KT-26491
*/
import kotlin.contracts.*
// TESTCASE NUMBER: 1
fun case_1(): Boolean {
contract { returns(true) implies true }
return true
}
// TESTCASE NUMBER: 2
fun case_2(): Boolean {
contract { returns(true) implies (true || false) }
return true || false
@@ -2,18 +2,18 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
SECTION: contracts
CATEGORIES: declarations, contractBuilder, common
NUMBER: 16
DESCRIPTION: Contract isn't in the first position.
UNEXPECTED BEHAVIOUR
ISSUES: KT-26191
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: contracts, declarations, contractBuilder, common
* NUMBER: 16
* DESCRIPTION: Contract isn't in the first position.
* UNEXPECTED BEHAVIOUR
* ISSUES: KT-26191
*/
import kotlin.contracts.*
// TESTCASE NUMBER: 1
fun case_1(value_1: Int?) {
println("!")
contract {
@@ -21,6 +21,7 @@ fun case_1(value_1: Int?) {
} <!CAST_NEVER_SUCCEEDS!>as<!> ContractBuilder
}
// TESTCASE NUMBER: 2
fun case_2(value_1: Int?) {
100 + 10
throw Exception(contract {
@@ -28,6 +29,7 @@ fun case_2(value_1: Int?) {
}.toString())
}
// TESTCASE NUMBER: 3
fun case_3(value_1: Int?) {
for (i in 0..10) {
println(i)
@@ -37,6 +39,7 @@ fun case_3(value_1: Int?) {
}
}
// TESTCASE NUMBER: 4
fun case_4(value_1: Int?) {
val f = 10 - 20
val g = contract {
@@ -44,6 +47,7 @@ fun case_4(value_1: Int?) {
}
}
// TESTCASE NUMBER: 5
fun case_5(number: Int?): Boolean {
val value_1 = number != null
contract {
@@ -2,28 +2,30 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
SECTION: contracts
CATEGORIES: declarations, contractBuilder, common
NUMBER: 17
DESCRIPTION: contracts with Nothing expressions in implies.
DISCUSSION
ISSUES: KT-25948
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: contracts, declarations, contractBuilder, common
* NUMBER: 17
* DESCRIPTION: contracts with Nothing expressions in implies.
* DISCUSSION
* ISSUES: KT-25948
*/
import kotlin.contracts.*
// TESTCASE NUMBER: 1
fun case_1(): Boolean {
<!ERROR_IN_CONTRACT_DESCRIPTION!>contract<!> { returns(null) implies throw Exception() }
return true
}
// TESTCASE NUMBER: 2
fun case_2(): Boolean {
<!ERROR_IN_CONTRACT_DESCRIPTION!>contract<!> { returns(null) implies return return return false }
return true
}
// TESTCASE NUMBER: 3
fun case_3(): Boolean {
<!ERROR_IN_CONTRACT_DESCRIPTION!>contract<!> { returns(null) implies return return return false && throw throw throw throw Exception() }
return true
@@ -2,24 +2,25 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
SECTION: contracts
CATEGORIES: declarations, contractBuilder, common
NUMBER: 4
DESCRIPTION: contracts with not allowed conditions with boolean constants or constant expressions in implies.
UNEXPECTED BEHAVIOUR
ISSUES: KT-26491
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: contracts, declarations, contractBuilder, common
* NUMBER: 19
* DESCRIPTION: contracts with not allowed conditions with boolean constants or constant expressions in implies.
* UNEXPECTED BEHAVIOUR
* ISSUES: KT-26491
*/
import kotlin.contracts.*
// TESTCASE NUMBER: 1
fun case_1(): Boolean {
contract { returns(true) implies true }
return true
}
// TESTCASE NUMBER: 2
fun case_2(): Boolean {
contract { returns(true) implies (true || false) }
return true || false
}
}
@@ -2,31 +2,34 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
SECTION: contracts
CATEGORIES: declarations, contractBuilder, common
NUMBER: 2
DESCRIPTION: contracts with not allowed simple conditions in implies
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: contracts, declarations, contractBuilder, common
* NUMBER: 2
* DESCRIPTION: contracts with not allowed simple conditions in implies
*/
import kotlin.contracts.*
// TESTCASE NUMBER: 1
fun case_1(value_1: Boolean): Boolean {
contract { returns(true) implies (<!ERROR_IN_CONTRACT_DESCRIPTION!>value_1 == true<!>) }
return value_1 == true
}
// TESTCASE NUMBER: 2
fun case_2(value_1: Boolean): Boolean? {
contract { returnsNotNull() implies (<!ERROR_IN_CONTRACT_DESCRIPTION!>value_1 != false<!>) }
return if (value_1 != false) true else null
}
// TESTCASE NUMBER: 3
fun case_3(value_1: String): Boolean {
<!ERROR_IN_CONTRACT_DESCRIPTION!>contract<!> { returns(false) implies (value_1 != "") }
return !(value_1 != "")
}
// TESTCASE NUMBER: 4
fun case_4(value_1: Int): Boolean? {
<!ERROR_IN_CONTRACT_DESCRIPTION!>contract<!> { returns(null) implies (value_1 == 0) }
return if (value_1 == 0) null else true
@@ -2,41 +2,46 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
SECTION: contracts
CATEGORIES: declarations, contractBuilder, common
NUMBER: 3
DESCRIPTION: contracts with not allowed complex conditions in implies.
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: contracts, declarations, contractBuilder, common
* NUMBER: 3
* DESCRIPTION: contracts with not allowed complex conditions in implies.
*/
import kotlin.contracts.*
// TESTCASE NUMBER: 1
fun case_1(value_1: Boolean?): Boolean {
contract { returns(true) implies (value_1 != null && <!ERROR_IN_CONTRACT_DESCRIPTION!>value_1 == false<!>) }
return value_1 != null && value_1 == false
}
// TESTCASE NUMBER: 2
fun case_2(value_1: Boolean, value_2: Boolean): Boolean? {
contract { returnsNotNull() implies (<!ERROR_IN_CONTRACT_DESCRIPTION!>value_1 != false<!> || value_2) }
return if (value_1 != false || value_2) true else null
}
// TESTCASE NUMBER: 3
fun case_3(value_1: String?, value_2: Boolean): Boolean {
contract { returns(false) implies (value_1 != null && <!ERROR_IN_CONTRACT_DESCRIPTION!>value_2 != true<!>) }
return !(value_1 != null && value_2 != true)
}
// TESTCASE NUMBER: 4
fun case_4(value_1: Nothing?, value_2: Boolean?): Boolean? {
contract { returns(null) implies (<!SENSELESS_COMPARISON!><!DEBUG_INFO_CONSTANT!>value_1<!> == null<!> || value_2 != null || <!ERROR_IN_CONTRACT_DESCRIPTION!><!DEBUG_INFO_CONSTANT!>value_2<!> == false<!>) }
return if (<!SENSELESS_COMPARISON!><!DEBUG_INFO_CONSTANT!>value_1<!> == null<!> || value_2 != null || <!DEBUG_INFO_CONSTANT!>value_2<!> == false) null else true
}
// TESTCASE NUMBER: 5
fun case_5(value_1: Any?, value_2: String?): Boolean? {
<!ERROR_IN_CONTRACT_DESCRIPTION!>contract<!> { returns(null) implies (value_1 != null && value_2 != null || value_2 == ".") }
return if (value_1 != null && value_2 != null || value_2 == ".") null else true
}
// TESTCASE NUMBER: 6
fun case_6(value_1: Boolean, value_2: Int?): Boolean? {
<!ERROR_IN_CONTRACT_DESCRIPTION!>contract<!> { returns(null) implies (value_2 == null && value_1 || value_2 == 0) }
return if (value_2 == null && value_1 || value_2 == 0) null else true
@@ -2,26 +2,28 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
SECTION: contracts
CATEGORIES: declarations, contractBuilder, common
NUMBER: 4
DESCRIPTION: contracts with not allowed conditions with constants in implies.
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: contracts, declarations, contractBuilder, common
* NUMBER: 4
* DESCRIPTION: contracts with not allowed conditions with constants in implies.
*/
import kotlin.contracts.*
// TESTCASE NUMBER: 1
fun case_1(): Boolean? {
<!ERROR_IN_CONTRACT_DESCRIPTION!>contract<!> { returnsNotNull() implies (<!NULL_FOR_NONNULL_TYPE!>null<!>) }
return true
}
// TESTCASE NUMBER: 2
fun case_2(): Boolean {
<!ERROR_IN_CONTRACT_DESCRIPTION!>contract<!> { returns(false) implies <!CONSTANT_EXPECTED_TYPE_MISMATCH!>0.000001<!> }
return true
}
// TESTCASE NUMBER: 3
fun case_3(): Boolean? {
<!ERROR_IN_CONTRACT_DESCRIPTION!>contract<!> { returns(null) implies <!TYPE_MISMATCH!>""<!> }
return null
@@ -2,45 +2,50 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
SECTION: contracts
CATEGORIES: declarations, contractBuilder, common
NUMBER: 5
DESCRIPTION: contracts with not allowed expressions in implies.
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: contracts, declarations, contractBuilder, common
* NUMBER: 5
* DESCRIPTION: contracts with not allowed expressions in implies.
*/
import kotlin.contracts.*
// TESTCASE NUMBER: 1
fun case_1(): Boolean {
contract { returns(true) implies (<!TYPE_MISMATCH, ERROR_IN_CONTRACT_DESCRIPTION!>-10<!>) }
return true
}
// TESTCASE NUMBER: 2
fun case_2(): Boolean {
<!ERROR_IN_CONTRACT_DESCRIPTION!>contract<!> { returnsNotNull() implies (return return return true) }
return true
}
// TESTCASE NUMBER: 3
fun case_3(): Boolean {
contract { returns(false) implies (<!TYPE_MISMATCH, ERROR_IN_CONTRACT_DESCRIPTION!>"..." + "$<!UNRESOLVED_REFERENCE!>value_1<!>"<!>) }
return true
}
/*
UNEXPECTED BEHAVIOUR
ISSUES: KT-26386
* TESTCASE NUMBER: 4
* UNEXPECTED BEHAVIOUR
* ISSUES: KT-26386
*/
//fun case_4(): Boolean? {
// contract { returns(null) implies case_4() }
// return null
//}
fun case_4(): Boolean? {
contract { returns(null) implies case_4() }
return null
}
// TESTCASE NUMBER: 5
fun case_5(): Boolean? {
contract { returns(null) implies <!TYPE_INFERENCE_EXPECTED_TYPE_MISMATCH, ERROR_IN_CONTRACT_DESCRIPTION!>listOf(0)<!> }
return null
}
// TESTCASE NUMBER: 6
fun case_6(value_1: Boolean): Boolean? {
contract { returns(null) implies <!TYPE_MISMATCH, ERROR_IN_CONTRACT_DESCRIPTION!>contract { returns(null) implies (!value_1) }<!> }
return null
@@ -3,16 +3,16 @@
// !WITH_BASIC_TYPES
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
SECTION: contracts
CATEGORIES: declarations, contractBuilder, common
NUMBER: 6
DESCRIPTION: contracts with not function parameters in implies.
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: contracts, declarations, contractBuilder, common
* NUMBER: 6
* DESCRIPTION: contracts with not function parameters in implies.
*/
import kotlin.contracts.*
// TESTCASE NUMBER: 1
object case_1 {
val value_1 = getBoolean()
const val value_2 = true
@@ -22,7 +22,6 @@ object case_1 {
<!CONTRACT_NOT_ALLOWED!>contract<!> { returnsNotNull() implies (value_1) }
return if (value_1) true else null
}
fun case_1_2(): Boolean? {
<!CONTRACT_NOT_ALLOWED!>contract<!> { returns(null) implies (value_2) }
return if (value_2) null else true
@@ -34,6 +33,7 @@ object case_1 {
}
}
// TESTCASE NUMBER: 2
class case_2(value_5: Boolean, val value_1: Boolean) {
val value_2 = getBoolean()
@@ -3,20 +3,20 @@
// !WITH_BASIC_TYPES
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
SECTION: contracts
CATEGORIES: declarations, contractBuilder, common
NUMBER: 7
DESCRIPTION: Contract function with 'this' labeled by not current extensible object
ISSUES: KT-26149
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: contracts, declarations, contractBuilder, common
* NUMBER: 7
* DESCRIPTION: Contract function with 'this' labeled by not current extensible object
* ISSUES: KT-26149
*/
import kotlin.contracts.*
fun <T> T?.case_3() {
fun <K> K?.case_3_1(): Boolean {
<!CONTRACT_NOT_ALLOWED!>contract<!> { returns(true) implies (this@case_3 != null) }
return this@case_3 != null
// TESTCASE NUMBER: 1
fun <T> T?.case_1() {
fun <K> K?.case_1_1(): Boolean {
<!CONTRACT_NOT_ALLOWED!>contract<!> { returns(true) implies (this@case_1 != null) }
return this@case_1 != null
}
}
@@ -13,7 +13,7 @@ public fun getNothing(): kotlin.Nothing
public fun getShort(/*0*/ arg: kotlin.Any = ...): kotlin.Short
public fun getString(/*0*/ arg: kotlin.Any = ...): kotlin.String
public fun getUnit(): () -> kotlin.Unit
public fun </*0*/ T> T?.case_3(): kotlin.Unit
public fun </*0*/ T> T?.case_1(): kotlin.Unit
public final class _BasicTypesProvider {
public constructor _BasicTypesProvider()
@@ -2,27 +2,29 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
SECTION: contracts
CATEGORIES: declarations, contractBuilder, common
NUMBER: 8
DESCRIPTION: Not allowed empty contract.
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: contracts, declarations, contractBuilder, common
* NUMBER: 8
* DESCRIPTION: Not allowed empty contract.
*/
import kotlin.contracts.*
// TESTCASE NUMBER: 1
inline fun case_1(block: () -> Unit) {
<!ERROR_IN_CONTRACT_DESCRIPTION!>contract<!> { }
return block()
}
// TESTCASE NUMBER: 2
inline fun case_2(block: () -> Unit) {
<!ERROR_IN_CONTRACT_DESCRIPTION!>contract<!>({ })
return block()
}
// TESTCASE NUMBER: 3
inline fun case_3(block: () -> Unit) {
<!ERROR_IN_CONTRACT_DESCRIPTION!>contract<!>(builder = { })
return block()
}
}
@@ -2,18 +2,18 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
SECTION: contracts
CATEGORIES: declarations, contractBuilder, common
NUMBER: 9
DESCRIPTION: Function with contract as returned expression.
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: contracts, declarations, contractBuilder, common
* NUMBER: 9
* DESCRIPTION: Function with contract as returned expression.
*/
import kotlin.contracts.*
// TESTCASE NUMBER: 1
inline fun case_1(block: () -> Unit) = {
<!CONTRACT_NOT_ALLOWED!>contract<!> {
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
}
}
@@ -1,21 +1,22 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
SECTION: contracts
CATEGORIES: declarations, contractBuilder, common
NUMBER: 1
DESCRIPTION: Functions with simple contracts.
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
*
* SECTIONS: contracts, declarations, contractBuilder, common
* NUMBER: 1
* DESCRIPTION: Functions with simple contracts.
*/
import kotlin.contracts.*
// TESTCASE NUMBER: 1
inline fun case_1(block: () -> Unit) {
contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) }
return block()
}
// TESTCASE NUMBER: 2
inline fun case_2(value_1: Int?, block: () -> Unit): Boolean {
contract {
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
@@ -25,6 +26,7 @@ inline fun case_2(value_1: Int?, block: () -> Unit): Boolean {
return value_1 != null
}
// TESTCASE NUMBER: 3
inline fun <T> T?.case_3(value_1: Int?, value_2: Boolean, value_3: Int?, block: () -> Unit): Boolean? {
contract {
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
@@ -1,21 +1,22 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
SECTION: contracts
CATEGORIES: declarations, contractBuilder, common
NUMBER: 2
DESCRIPTION: Functions with contract and builder lambda in parentheses.
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
*
* SECTIONS: contracts, declarations, contractBuilder, common
* NUMBER: 2
* DESCRIPTION: Functions with contract and builder lambda in parentheses.
*/
import kotlin.contracts.*
// TESTCASE NUMBER: 1
inline fun case_1(block: () -> Unit) {
contract({ callsInPlace(block, InvocationKind.EXACTLY_ONCE) })
return block()
}
// TESTCASE NUMBER: 2
inline fun case_2(block: () -> Unit) {
contract(builder = { callsInPlace(block, InvocationKind.EXACTLY_ONCE) })
return block()
@@ -1,53 +0,0 @@
// !DIAGNOSTICS: -UNUSED_VARIABLE
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
SECTION: contracts
CATEGORIES: declarations, contractBuilder, common
NUMBER: 3
DESCRIPTION: Contract isn't in the first position.
UNEXPECTED BEHAVIOUR
ISSUES: KT-26191
*/
import kotlin.contracts.*
fun case_1(value_1: Int?) {
println("!")
contract {
returns(true) implies (value_1 != null)
} <!CAST_NEVER_SUCCEEDS!>as<!> ContractBuilder
}
fun case_2(value_1: Int?) {
100 + 10
throw Exception(contract {
returns(true) implies (value_1 != null)
}.toString())
}
fun case_3(value_1: Int?) {
for (i in 0..10) {
println(i)
}
return contract {
returns(true) implies (value_1 != null)
}
}
fun case_4(value_1: Int?) {
val f = 10 - 20
val g = contract {
returns(true) implies (value_1 != null)
}
}
fun case_5(number: Int?): Boolean {
val value_1 = number != null
contract {
returns(false) implies (value_1)
} <!CAST_NEVER_SUCCEEDS!>as<!> ContractBuilder
return number == null
}
@@ -1,7 +0,0 @@
package
public fun case_1(/*0*/ value_1: kotlin.Int?): kotlin.Unit
public fun case_2(/*0*/ value_1: kotlin.Int?): kotlin.Unit
public fun case_3(/*0*/ value_1: kotlin.Int?): kotlin.Unit
public fun case_4(/*0*/ value_1: kotlin.Int?): kotlin.Unit
public fun case_5(/*0*/ number: kotlin.Int?): kotlin.Boolean
@@ -1,39 +1,43 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
SECTION: contracts
CATEGORIES: declarations, contractBuilder, effects, callsInPlace
NUMBER: 1
DESCRIPTION: contract functions with CallsInPlace with dynamic InvocationKind.
ISSUES: KT-26152
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: contracts, declarations, contractBuilder, effects, callsInPlace
* NUMBER: 1
* DESCRIPTION: contract functions with CallsInPlace with dynamic InvocationKind.
* ISSUES: KT-26152
*/
import kotlin.contracts.*
internal val invocationKind: InvocationKind = InvocationKind.EXACTLY_ONCE
// TESTCASE NUMBER: 1, 2, 3, 4
val invocationKind: InvocationKind = InvocationKind.EXACTLY_ONCE
internal object SampleObject {
object SampleObject {
val invocationKind = InvocationKind.EXACTLY_ONCE
}
internal inline fun case_1(invocationKind: InvocationKind, block: () -> Unit) {
// TESTCASE NUMBER: 1
inline fun case_1(invocationKind: InvocationKind, block: () -> Unit) {
contract { callsInPlace(block, <!ERROR_IN_CONTRACT_DESCRIPTION!>invocationKind<!>) }
return block()
}
// TESTCASE NUMBER: 2
inline fun <T : InvocationKind> case_2(invocationKind: T, block: () -> Unit) {
contract { callsInPlace(block, <!ERROR_IN_CONTRACT_DESCRIPTION!>invocationKind<!>) }
return block()
}
internal inline fun case_3(block: () -> Unit) {
// TESTCASE NUMBER: 3
inline fun case_3(block: () -> Unit) {
contract { callsInPlace(block, <!ERROR_IN_CONTRACT_DESCRIPTION!>invocationKind<!>) }
return block()
}
internal inline fun case_4(block: () -> Unit) {
// TESTCASE NUMBER: 4
inline fun case_4(block: () -> Unit) {
contract { callsInPlace(block, <!ERROR_IN_CONTRACT_DESCRIPTION!>SampleObject.invocationKind<!>) }
return block()
}
@@ -1,12 +1,12 @@
package
internal val invocationKind: kotlin.contracts.InvocationKind
internal inline fun case_1(/*0*/ invocationKind: kotlin.contracts.InvocationKind, /*1*/ block: () -> kotlin.Unit): kotlin.Unit
public val invocationKind: kotlin.contracts.InvocationKind
public inline fun case_1(/*0*/ invocationKind: kotlin.contracts.InvocationKind, /*1*/ block: () -> kotlin.Unit): kotlin.Unit
public inline fun </*0*/ T : kotlin.contracts.InvocationKind> case_2(/*0*/ invocationKind: T, /*1*/ block: () -> kotlin.Unit): kotlin.Unit
internal inline fun case_3(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
internal inline fun case_4(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
public inline fun case_3(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
public inline fun case_4(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
internal object SampleObject {
public object SampleObject {
private constructor SampleObject()
public final val invocationKind: kotlin.contracts.InvocationKind
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
@@ -1,18 +1,18 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
SECTION: contracts
CATEGORIES: declarations, contractBuilder, effects, callsInPlace
NUMBER: 2
DESCRIPTION: functions with contract and duplicate CallsInPlace.
UNEXPECTED BEHAVIOUR
ISSUES: KT-26150
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: contracts, declarations, contractBuilder, effects, callsInPlace
* NUMBER: 2
* DESCRIPTION: functions with contract and duplicate CallsInPlace.
* UNEXPECTED BEHAVIOUR
* ISSUES: KT-26150
*/
import kotlin.contracts.*
// TESTCASE NUMBER: 1
inline fun case_1(block: () -> Unit) {
contract {
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
@@ -21,6 +21,7 @@ inline fun case_1(block: () -> Unit) {
return block()
}
// TESTCASE NUMBER: 2
inline fun case_2(block: () -> Unit) {
contract {
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
@@ -1,31 +1,34 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
SECTION: contracts
CATEGORIES: declarations, contractBuilder, effects, callsInPlace
NUMBER: 1
DESCRIPTION: contract functions with CallsInPlace effects with different invocation kinds.
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
*
* SECTIONS: contracts, declarations, contractBuilder, effects, callsInPlace
* NUMBER: 1
* DESCRIPTION: contract functions with CallsInPlace effects with different invocation kinds.
*/
import kotlin.contracts.*
// TESTCASE NUMBER: 1
inline fun case_1(block: () -> Unit) {
contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) }
return block()
}
// TESTCASE NUMBER: 2
inline fun case_2(block: () -> Unit) {
contract { callsInPlace(block, InvocationKind.AT_MOST_ONCE) }
return block()
}
// TESTCASE NUMBER: 3
inline fun case_3(block: () -> Unit) {
contract { callsInPlace(block, InvocationKind.AT_LEAST_ONCE) }
return block()
}
// TESTCASE NUMBER: 4
inline fun case_4(block: () -> Unit) {
contract { callsInPlace(block, InvocationKind.UNKNOWN) }
return block()
@@ -2,19 +2,19 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
SECTION: contracts
CATEGORIES: declarations, contractBuilder, effects, callsInPlace
NUMBER: 2
DESCRIPTION: Contract with 'this' in first parameter of CallsInPlace.
DISCUSSION
UNEXPECTED BEHAVIOUR
ISSUES: KT-26294
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
*
* SECTIONS: contracts, declarations, contractBuilder, effects, callsInPlace
* NUMBER: 2
* DESCRIPTION: Contract with 'this' in first parameter of CallsInPlace.
* DISCUSSION
* UNEXPECTED BEHAVIOUR
* ISSUES: KT-26294
*/
import kotlin.contracts.*
// TESTCASE NUMBER: 1
inline fun <T : Function0<*>> T.case_1(block: () -> Unit) {
contract {
callsInPlace(this@case_1, InvocationKind.EXACTLY_ONCE)
@@ -2,18 +2,18 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
SECTION: contracts
CATEGORIES: declarations, contractBuilder, effects, callsInPlace
NUMBER: 3
DESCRIPTION: Contract with 'this' in first parameter of CallsInPlace.
UNEXPECTED BEHAVIOUR
ISSUES: KT-26294
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
*
* SECTIONS: contracts, declarations, contractBuilder, effects, callsInPlace
* NUMBER: 3
* DESCRIPTION: Contract with 'this' in first parameter of CallsInPlace.
* UNEXPECTED BEHAVIOUR
* ISSUES: KT-26294
*/
import kotlin.contracts.*
// TESTCASE NUMBER: 1
inline fun <T : Function<*>> T.case_1(block: () -> Unit) {
contract {
callsInPlace(this@case_1, InvocationKind.EXACTLY_ONCE)
@@ -2,17 +2,17 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
SECTION: contracts
CATEGORIES: declarations, contractBuilder, effects, common
NUMBER: 1
DESCRIPTION: Indirect effect functions call.
ISSUES: KT-26175
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: contracts, declarations, contractBuilder, effects, common
* NUMBER: 1
* DESCRIPTION: Indirect effect functions call.
* ISSUES: KT-26175
*/
import kotlin.contracts.*
// TESTCASE NUMBER: 1
inline fun case_1(block: () -> Unit) {
contract {
<!ERROR_IN_CONTRACT_DESCRIPTION!>{ callsInPlace(block, InvocationKind.EXACTLY_ONCE) }()<!>
@@ -20,6 +20,7 @@ inline fun case_1(block: () -> Unit) {
return block()
}
// TESTCASE NUMBER: 2
fun case_2(x: Any?): Boolean {
contract {
<!ERROR_IN_CONTRACT_DESCRIPTION!>returns(true).apply { implies (x is Number) }<!> // 'Returns' as result
@@ -27,6 +28,7 @@ fun case_2(x: Any?): Boolean {
return x is Number
}
// TESTCASE NUMBER: 3
fun case_3(x: Any?): Boolean {
contract {
<!ERROR_IN_CONTRACT_DESCRIPTION!>returns(true).also { it implies (x is Number) }<!> // 'Returns' as result
@@ -34,6 +36,7 @@ fun case_3(x: Any?): Boolean {
return x is Number
}
// TESTCASE NUMBER: 4
fun case_4(x: Any?): Boolean {
contract {
<!ERROR_IN_CONTRACT_DESCRIPTION!>returns(true).let { it implies (x is Number) }<!> // 'ConditionalEffect' as result
@@ -41,6 +44,7 @@ fun case_4(x: Any?): Boolean {
return x is Number
}
// TESTCASE NUMBER: 5
fun case_5(x: Any?): Boolean {
contract {
<!ERROR_IN_CONTRACT_DESCRIPTION!>returns(true).run { implies (x is Number) }<!> // 'ConditionalEffect' as result
@@ -48,6 +52,7 @@ fun case_5(x: Any?): Boolean {
return x is Number
}
// TESTCASE NUMBER: 6
fun case_6(x: Any?): Boolean {
contract {
<!ERROR_IN_CONTRACT_DESCRIPTION!>returns(true).takeIf { it implies (x is Number); false }<!> // null, must be unrecognized effect
@@ -1,32 +1,35 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
SECTION: contracts
CATEGORIES: declarations, contractBuilder, effects, returns
NUMBER: 1
DESCRIPTION: Using equality with expressions in implies.
ISSUES: KT-26178
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: contracts, declarations, contractBuilder, effects, returns
* NUMBER: 1
* DESCRIPTION: Using equality with expressions in implies.
* ISSUES: KT-26178
*/
import kotlin.contracts.*
// TESTCASE NUMBER: 1
fun case_1(x: Any?): Boolean {
contract { returns(true) implies (x == <!ERROR_IN_CONTRACT_DESCRIPTION!>-.15f<!>) }
return x !is Number
}
// TESTCASE NUMBER: 2
fun case_2(x: Any?): Boolean {
contract { returns(true) implies (x == <!ERROR_IN_CONTRACT_DESCRIPTION!>"..." + "."<!>) }
return x !is Number
}
// TESTCASE NUMBER: 3
fun case_3(x: Int, y: Int): Boolean {
contract { returns(true) implies (<!ERROR_IN_CONTRACT_DESCRIPTION!>x > y<!>) }
return x > y
}
// TESTCASE NUMBER: 4
fun case_4(x: Any?, y: Any?): Boolean {
contract { returns(true) implies (x == <!ERROR_IN_CONTRACT_DESCRIPTION!>y.toString()<!>) }
return x !is Number
@@ -1,16 +1,16 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
SECTION: contracts
CATEGORIES: declarations, contractBuilder, effects, returns
NUMBER: 2
DESCRIPTION: Using equality with not labeled 'this' in implies.
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: contracts, declarations, contractBuilder, effects, returns
* NUMBER: 2
* DESCRIPTION: Using equality with not labeled 'this' in implies.
*/
import kotlin.contracts.*
// TESTCASE NUMBER: 1
fun Any?.case_1(): Boolean {
contract {
returns(true) implies (<!SENSELESS_COMPARISON!><!ERROR_IN_CONTRACT_DESCRIPTION!>this<!> != null<!>)
@@ -18,6 +18,7 @@ fun Any?.case_1(): Boolean {
return this != null
}
// TESTCASE NUMBER: 2
fun Any?.case_2(): Boolean {
contract {
returnsNotNull() implies (<!ERROR_IN_CONTRACT_DESCRIPTION!>this<!> is Number<!USELESS_NULLABLE_CHECK!>?<!>)
@@ -25,6 +26,7 @@ fun Any?.case_2(): Boolean {
return this is Number?
}
// TESTCASE NUMBER: 3
fun <T> T?.case_3(): Boolean {
contract {
returnsNotNull() implies (<!SENSELESS_COMPARISON!><!ERROR_IN_CONTRACT_DESCRIPTION!>this<!> != null<!>)
@@ -32,6 +34,7 @@ fun <T> T?.case_3(): Boolean {
return this != null
}
// TESTCASE NUMBER: 4
inline fun <reified T : Number> T.case_4(): Boolean {
contract {
returns(null) implies (<!ERROR_IN_CONTRACT_DESCRIPTION!>this<!> is <!INCOMPATIBLE_TYPES!>Int<!>)
@@ -2,17 +2,17 @@
// !WITH_OBJECTS
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
SECTION: contracts
CATEGORIES: declarations, contractBuilder, effects, returns
NUMBER: 3
DESCRIPTION: Using reference equality in implies.
ISSUES: KT-26177
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: contracts, declarations, contractBuilder, effects, returns
* NUMBER: 3
* DESCRIPTION: Using reference equality in implies.
* ISSUES: KT-26177
*/
import kotlin.contracts.*
// TESTCASE NUMBER: 1
fun case_1(x: Any?): Boolean {
contract {
returns(true) implies (x === <!ERROR_IN_CONTRACT_DESCRIPTION!>_EmptyObject<!>) // should be not allowed
@@ -1,27 +1,29 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
SECTION: contracts
CATEGORIES: declarations, contractBuilder, effects, returns
NUMBER: 4
DESCRIPTION: Using equality with literals in implies.
ISSUES: KT-26178
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: contracts, declarations, contractBuilder, effects, returns
* NUMBER: 4
* DESCRIPTION: Using equality with literals in implies.
* ISSUES: KT-26178
*/
import kotlin.contracts.*
// TESTCASE NUMBER: 1
fun case_1(x: Any?): Boolean {
<!ERROR_IN_CONTRACT_DESCRIPTION!>contract<!> { returns(true) implies (x == .15f) }
return x == .15f
}
// TESTCASE NUMBER: 2
fun case_2(x: Any?) {
<!ERROR_IN_CONTRACT_DESCRIPTION!>contract<!> { returns() implies (x == "...") }
if (x != "...") throw Exception()
}
// TESTCASE NUMBER: 3
fun case_3(x: Any?): Boolean {
<!ERROR_IN_CONTRACT_DESCRIPTION!>contract<!> { returns(true) implies (x == '-') }
return x == '-'
@@ -1,17 +1,17 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
SECTION: contracts
CATEGORIES: declarations, contractBuilder, effects, returns
NUMBER: 5
DESCRIPTION: Contract on the extension function with Boolean upper bound (Boolean or Nothing) or smartcast to Boolean.
DISCUSSION
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: contracts, declarations, contractBuilder, effects, returns
* NUMBER: 5
* DESCRIPTION: Contract on the extension function with Boolean upper bound (Boolean or Nothing) or smartcast to Boolean.
* DISCUSSION
*/
import kotlin.contracts.*
// TESTCASE NUMBER: 1
fun <T : <!FINAL_UPPER_BOUND!>Boolean<!>>T.case_1(): Boolean? {
<!ERROR_IN_CONTRACT_DESCRIPTION!>contract<!> { returns(null) implies (!this@case_1) }
return if (!this) null else true
@@ -1,46 +1,52 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
SECTION: contracts
CATEGORIES: declarations, contractBuilder, effects, returns
NUMBER: 6
DESCRIPTION: Contract on the extension function with smartcast to Boolean.
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: contracts, declarations, contractBuilder, effects, returns
* NUMBER: 6
* DESCRIPTION: Contract on the extension function with smartcast to Boolean.
*/
import kotlin.contracts.*
// TESTCASE NUMBER: 1
fun Boolean?.case_1(): Boolean {
<!ERROR_IN_CONTRACT_DESCRIPTION!>contract<!> { returns(true) implies (this@case_1 != null && <!DEBUG_INFO_SMARTCAST!>this@case_1<!>) }
return this != null && <!DEBUG_INFO_SMARTCAST!>this<!>
}
// TESTCASE NUMBER: 2
fun <T : <!FINAL_UPPER_BOUND!>Boolean<!>>T?.case_2(): Boolean {
<!ERROR_IN_CONTRACT_DESCRIPTION!>contract<!> { returns(true) implies (this@case_2 != null && this@case_2 !is Nothing && <!DEBUG_INFO_SMARTCAST!>this@case_2<!>) }
return this != null && this !is Nothing && <!DEBUG_INFO_SMARTCAST!>this<!>
}
// TESTCASE NUMBER: 3
fun <T>T?.case_3() {
<!ERROR_IN_CONTRACT_DESCRIPTION!>contract<!> { returns() implies (this@case_3 == null || this@case_3 is Boolean? && !<!DEBUG_INFO_SMARTCAST!>this@case_3<!>) }
if (!(this == null || this is Boolean? && !<!DEBUG_INFO_SMARTCAST!>this<!>)) throw Exception()
}
// TESTCASE NUMBER: 4
fun case_4(value_1: Boolean?): Boolean {
<!ERROR_IN_CONTRACT_DESCRIPTION!>contract<!> { returns(true) implies (value_1 != null && !<!DEBUG_INFO_SMARTCAST!>value_1<!>) }
return value_1 != null && !<!DEBUG_INFO_SMARTCAST!>value_1<!>
}
// TESTCASE NUMBER: 5
fun Boolean.case_5(value_1: Any?): Boolean? {
<!ERROR_IN_CONTRACT_DESCRIPTION!>contract<!> { returnsNotNull() implies (value_1 is Boolean? && value_1 != null && <!DEBUG_INFO_SMARTCAST!>value_1<!>) }
return if (value_1 is Boolean? && value_1 != null && <!DEBUG_INFO_SMARTCAST!>value_1<!>) true else null
}
// TESTCASE NUMBER: 6
fun Boolean?.case_6(): Boolean? {
<!ERROR_IN_CONTRACT_DESCRIPTION!>contract<!> { returnsNotNull() implies (this@case_6 != null && <!DEBUG_INFO_SMARTCAST!>this@case_6<!>) }
return if (this@case_6 != null && <!DEBUG_INFO_SMARTCAST!>this@case_6<!>) true else null
}
// TESTCASE NUMBER: 7
fun <T : Boolean?> T.case_7(value_1: Any?): Boolean? {
<!ERROR_IN_CONTRACT_DESCRIPTION!>contract<!> { returnsNotNull() implies (value_1 is Boolean? && value_1 != null && <!DEBUG_INFO_SMARTCAST!>value_1<!> && this@case_7 != null && <!DEBUG_INFO_SMARTCAST!>this@case_7<!>) }
return if (value_1 is Boolean? && value_1 != null && <!DEBUG_INFO_SMARTCAST!>value_1<!> && this@case_7 != null && <!DEBUG_INFO_SMARTCAST!>this@case_7<!>) true else null
@@ -1,32 +1,35 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
SECTION: contracts
CATEGORIES: declarations, contractBuilder, effects, returns
NUMBER: 7
DESCRIPTION: Returns effect with type checking with generic parameter
ISSUES: KT-26296
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: contracts, declarations, contractBuilder, effects, returns
* NUMBER: 7
* DESCRIPTION: Returns effect with type checking with generic parameter
* ISSUES: KT-26296
*/
import kotlin.contracts.*
// TESTCASE NUMBER: 1
fun <T : Number?> T.case_1() {
contract { returns() implies (<!USELESS_IS_CHECK!>this@case_1 is <!ERROR_IN_CONTRACT_DESCRIPTION!>T<!><!>) }
if (!(<!USELESS_IS_CHECK!>this@case_1 is T<!>)) throw Exception()
}
// TESTCASE NUMBER: 2
fun <T : Number, K : <!FINAL_UPPER_BOUND!>String<!>> T?.case_2(value_1: K?) {
contract { returns() implies (this@case_2 is <!ERROR_IN_CONTRACT_DESCRIPTION!>T<!> && value_1 is K) }
if (!(this@case_2 is T && value_1 is K)) throw Exception()
}
// TESTCASE NUMBER: 3
inline fun <reified T : Number> T?.case_3(value_1: Any?) {
contract { returns() implies (value_1 is <!ERROR_IN_CONTRACT_DESCRIPTION!>T<!>) }
if (!(value_1 is T)) throw Exception()
}
// TESTCASE NUMBER: 4
inline fun <reified T : Number, K> K?.case_4(value_1: Any?) {
contract { returns() implies (this@case_4 !is <!ERROR_IN_CONTRACT_DESCRIPTION!>T<!> || value_1 is T) }
if (!(this@case_4 !is T || value_1 is T)) throw Exception()
@@ -3,71 +3,82 @@
// !WITH_CLASSES
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
SECTION: contracts
CATEGORIES: declarations, contractBuilder, effects, returns
NUMBER: 1
DESCRIPTION: Returns effect with simple conditions.
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
*
* SECTIONS: contracts, declarations, contractBuilder, effects, returns
* NUMBER: 1
* DESCRIPTION: Returns effect with simple conditions.
*/
import kotlin.contracts.*
// TESTCASE NUMBER: 1
fun case_1(value_1: Boolean) {
contract { returns() implies (value_1) }
if (!value_1) throw Exception()
}
// TESTCASE NUMBER: 2
fun case_2(value_1: Boolean): Boolean {
contract { returns(false) implies (!value_1) }
return value_1
}
// TESTCASE NUMBER: 3
fun Boolean.case_3() {
contract { returns() implies (!this@case_3) }
if (this@case_3) throw Exception()
}
// TESTCASE NUMBER: 5
fun case_5(value_1: Any?) {
contract { returns() implies (value_1 is String) }
if (value_1 !is String) throw Exception()
}
// TESTCASE NUMBER: 6
fun case_6(value_1: Any?) {
contract { returns() implies (value_1 !is String?) }
if (value_1 is String?) throw Exception()
}
// TESTCASE NUMBER: 7
fun Any?.case_7() {
contract { returns() implies (this@case_7 is Number) }
if (this !is Number) throw Exception()
}
// TESTCASE NUMBER: 8
fun <T>T?.case_8() {
contract { returns() implies (this@case_8 !is _ClassLevel3?) }
if (this is _ClassLevel3?) throw Exception()
}
// TESTCASE NUMBER: 9
fun <T : Number?>T.case_9(): Boolean? {
contract { returns(null) implies (this@case_9 is Byte?) }
return if (this is Byte?) null else true
}
// TESTCASE NUMBER: 10
fun case_10(value_1: Any?) {
contract { returns() implies (value_1 == null) }
if (value_1 != null) throw Exception()
}
// TESTCASE NUMBER: 11
fun case_11(value_1: Any?): Boolean? {
contract { returns(null) implies (value_1 != null) }
return if (value_1 != null) null else true
}
// TESTCASE NUMBER: 12
fun Char.case_12() {
contract { returns() implies (<!SENSELESS_COMPARISON!>this@case_12 == null<!>) }
if (<!SENSELESS_COMPARISON!>this@case_12 != null<!>) throw Exception()
}
// TESTCASE NUMBER: 13
fun <T : Number>T?.case_13() {
contract { returns() implies (this@case_13 == null) }
if (this != null) throw Exception()
@@ -3,31 +3,34 @@
// !WITH_CLASSES
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
SECTION: contracts
CATEGORIES: declarations, contractBuilder, effects, returns
NUMBER: 2
DESCRIPTION: Returns effect with complex conditions (using conjunction and disjuntion).
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
*
* SECTIONS: contracts, declarations, contractBuilder, effects, returns
* NUMBER: 2
* DESCRIPTION: Returns effect with complex conditions (using conjunction and disjuntion).
*/
import kotlin.contracts.*
// TESTCASE NUMBER: 1
fun case_1(cond1: Boolean, cond2: Boolean, cond3: Boolean) {
contract { returns() implies (cond1 && !cond2 || cond3) }
if (!(cond1 && !cond2 || cond3)) throw Exception()
}
// TESTCASE NUMBER: 2
fun case_2(value_1: Any?, value_2: Any?, value_3: Any?) {
contract { returns() implies (value_1 is String? || value_2 !is Int && value_3 !is Nothing?) }
if (!(value_1 is String? || value_2 !is Int && value_3 !is Nothing?)) throw Exception()
}
// TESTCASE NUMBER: 3
fun case_3(value_1: Any?, value_2: Any?, value_3: Any?) {
contract { returns() implies (value_1 == null || value_2 != null && value_3 == null) }
if (!(value_1 == null || value_2 != null && value_3 == null)) throw Exception()
}
// TESTCASE NUMBER: 4
fun <T>T.case_4(): Boolean {
contract { returns(false) implies (this@case_4 is Char || this@case_4 == null) }
return !(this is Char || this == null)
@@ -1,26 +1,28 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
SECTION: contracts
CATEGORIES: declarations, contractBuilder, effects, returns
NUMBER: 3
DESCRIPTION: Returns effect with conditions on receiver.
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
*
* SECTIONS: contracts, declarations, contractBuilder, effects, returns
* NUMBER: 3
* DESCRIPTION: Returns effect with conditions on receiver.
*/
import kotlin.contracts.*
// TESTCASE NUMBER: 1
fun Any?.case_1(): Boolean {
contract { returns(false) implies (this@case_1 != null) }
return this == null
}
// TESTCASE NUMBER: 2
fun <T> T?.case_2(value_1: Any?, value_2: Any?) {
contract { returns() implies (this@case_2 is String? || value_1 !is Int && value_2 !is Nothing?) }
if (!(this@case_2 is String? || value_1 !is Int && value_2 !is Nothing?)) throw Exception()
}
// TESTCASE NUMBER: 3
inline fun <reified T : Number?> T.case_3(value_1: Any?) {
contract { returns() implies (value_1 == null || this@case_3 != null && this@case_3 is Int) }
if (!(value_1 == null || this@case_3 != null && this@case_3 is Int)) throw Exception()
@@ -1,16 +1,16 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
SECTION: contracts
CATEGORIES: declarations, contractFunction
NUMBER: 1
DESCRIPTION: Check that recursion isn't allowed in contract functions with CallsInPlace effect.
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: contracts, declarations, contractFunction
* NUMBER: 1
* DESCRIPTION: Check that recursion isn't allowed in contract functions with CallsInPlace effect.
*/
import kotlin.contracts.*
// TESTCASE NUMBER: 1
inline fun case_1(block: () -> Unit) {
contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) }
block()
@@ -2,17 +2,17 @@
// !WITH_CLASSES
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
SECTION: contracts
CATEGORIES: declarations, contractFunction
NUMBER: 2
DESCRIPTION: Check report about use contracts in literal functions, lambdas or not top-level functions.
ISSUES: KT-26149
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: contracts, declarations, contractFunction
* NUMBER: 2
* DESCRIPTION: Check report about use contracts in literal functions, lambdas or not top-level functions.
* ISSUES: KT-26149
*/
import kotlin.contracts.*
// TESTCASE NUMBER: 1
fun case_1() {
val fun_1 = fun(block: () -> Unit) {
<!CONTRACT_NOT_ALLOWED!>contract<!> { callsInPlace(block, InvocationKind.EXACTLY_ONCE) }
@@ -23,6 +23,7 @@ fun case_1() {
println("1")
}
// TESTCASE NUMBER: 2
fun case_2() {
val lambda_1 = { block: () -> Unit ->
<!CONTRACT_NOT_ALLOWED!>contract<!> { callsInPlace(block, InvocationKind.EXACTLY_ONCE) }
@@ -33,6 +34,7 @@ fun case_2() {
println("1")
}
// TESTCASE NUMBER: 3
object case_3 {
fun case_3(block: () -> Unit) {
<!CONTRACT_NOT_ALLOWED!>contract<!> { callsInPlace(block, InvocationKind.EXACTLY_ONCE) }
@@ -40,8 +42,12 @@ object case_3 {
}
}
// ISSUES: KT-26244
/*
* TESTCASE NUMBER: 4
* ISSUES: KT-26244
*/
class case_4 : _ClassLevel3() {
fun <T : Number?>T.case_4_1(): Boolean {
<!CONTRACT_NOT_ALLOWED!>contract<!> { returns(false) implies (<!USELESS_IS_CHECK!>this@case_4 !is _ClassLevel1<!>) }
return this == null
@@ -74,7 +80,10 @@ class case_4 : _ClassLevel3() {
fun case_4_5() = _ClassLevel3().case_4_5_wrap()
}
// ISSUES: KT-26244
/*
* TESTCASE NUMBER: 5
* ISSUES: KT-26244
*/
class case_5<T> : _ClassLevel5() {
inner class case_5_1 {
fun <K : Number?>K.case_5_1_1() {
@@ -1,23 +1,24 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
SECTION: contracts
CATEGORIES: declarations, contractFunction
NUMBER: 3
DESCRIPTION: Check that fun with contract and CallsInPlace effect is an inline function.
UNEXPECTED BEHAVIOUR
ISSUES: KT-26126
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: contracts, declarations, contractFunction
* NUMBER: 3
* DESCRIPTION: Check that fun with contract and CallsInPlace effect is an inline function.
* UNEXPECTED BEHAVIOUR
* ISSUES: KT-26126
*/
import kotlin.contracts.*
// TESTCASE NUMBER: 1
fun funWithContractExactlyOnce(block: () -> Unit) { // report about not-inline function is expected
contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) }
return block()
}
// TESTCASE NUMBER: 1
fun case_1() {
val value_1: Int
funWithContractExactlyOnce { value_1 = 10 } // back-end exception
@@ -2,18 +2,18 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
SECTION: contracts
CATEGORIES: declarations, contractFunction
NUMBER: 4
DESCRIPTION: Check that fun with contract and CallsInPlace effect is an inline function.
UNEXPECTED BEHAVIOUR
ISSUES: KT-27090
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: contracts, declarations, contractFunction
* NUMBER: 4
* DESCRIPTION: Check that fun with contract and CallsInPlace effect is an inline function.
* UNEXPECTED BEHAVIOUR
* ISSUES: KT-27090
*/
import kotlin.contracts.*
// TESTCASE NUMBER: 1
val Boolean.case_1: () -> Unit
get() {
contract {
@@ -22,6 +22,7 @@ val Boolean.case_1: () -> Unit
return {}
}
// TESTCASE NUMBER: 2
val (() -> Unit).case_2: () -> Unit
get() {
contract {
@@ -30,6 +31,7 @@ val (() -> Unit).case_2: () -> Unit
return {}
}
// TESTCASE NUMBER: 3
var Boolean.case_3: () -> Unit
get() {
return {}
@@ -40,6 +42,7 @@ var Boolean.case_3: () -> Unit
}
}
// TESTCASE NUMBER: 4
var (() -> Unit).case_4: () -> Unit
get() {
return {}
@@ -50,6 +53,7 @@ var (() -> Unit).case_4: () -> Unit
}
}
// TESTCASE NUMBER: 5
val Boolean.case_5: () -> Unit
get() {
contract {
@@ -1,32 +1,35 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
SECTION: contracts
CATEGORIES: declarations, contractFunction
NUMBER: 1
DESCRIPTION: Contract function usage before declaration it
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
*
* SECTIONS: contracts, declarations, contractFunction
* NUMBER: 1
* DESCRIPTION: Use a contract function before the declaration it.
*/
import kotlin.contracts.*
// TESTCASE NUMBER: 1
fun case_1_1(x: Any?) {
if (case_1_2(x)) {
<!DEBUG_INFO_SMARTCAST!>x<!>.length
}
}
// TESTCASE NUMBER: 2
fun case_2_1(x: Number?) {
case_2_2(x)
println(<!DEBUG_INFO_SMARTCAST!>x<!>.toByte())
}
// TESTCASE NUMBER: 1
fun case_1_2(x: Any?): Boolean {
contract { returns(true) implies (x is String) }
return x is String
}
// TESTCASE NUMBER: 2
fun case_2_2(x: Any?) {
contract { returns() implies(x != null) }
if (x == null) throw Exception()
@@ -1,35 +0,0 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
SECTION: contracts
CATEGORIES: declarations, contractFunction
NUMBER: 2
DESCRIPTION: Contract function usage before declaration it
*/
import kotlin.contracts.*
fun case_1_1(x: Any?) {
if (case_1_2(x)) {
<!DEBUG_INFO_SMARTCAST!>x<!>.length
}
}
fun case_2_1(x: Number?) {
case_2_2(x)
println(<!DEBUG_INFO_SMARTCAST!>x<!>.toByte())
}
fun case_1_2(x: Any?): Boolean {
contract { returns(true) implies (x is String) }
return x is String
}
fun case_2_2(x: Any?) {
contract { returns() implies(x != null) }
if (x == null) throw Exception()
}
@@ -1,10 +0,0 @@
package
public fun case_1_1(/*0*/ x: kotlin.Any?): kotlin.Unit
public fun case_1_2(/*0*/ x: kotlin.Any?): kotlin.Boolean
Returns(TRUE) -> x is String
public fun case_2_1(/*0*/ x: kotlin.Number?): kotlin.Unit
public fun case_2_2(/*0*/ x: kotlin.Any?): kotlin.Unit
Returns(WILDCARD) -> x != null