FIR: Adjust testData for spec tests: contracts
This commit is contained in:
+106
@@ -0,0 +1,106 @@
|
||||
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER -UNREACHABLE_CODE -UNUSED_EXPRESSION
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
* 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 { }
|
||||
return block()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
inline fun case_2(block: () -> Unit) {
|
||||
10 - 1
|
||||
contract {
|
||||
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
|
||||
}
|
||||
return block()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
inline fun case_3(block: () -> Unit) {
|
||||
throw Exception()
|
||||
contract {
|
||||
callsInPlace(block, InvocationKind.UNKNOWN)
|
||||
}
|
||||
return block()
|
||||
}
|
||||
|
||||
/*
|
||||
* TESTCASE NUMBER: 4
|
||||
* ISSUES: KT-26191
|
||||
*/
|
||||
inline fun case_4(block: () -> Unit) {
|
||||
.0009
|
||||
return contract {
|
||||
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* TESTCASE NUMBER: 5
|
||||
* ISSUES: KT-26191
|
||||
*/
|
||||
fun case_5(value_1: Int?) {
|
||||
println("!")
|
||||
contract {
|
||||
returns(true) implies (value_1 != null)
|
||||
} as ContractBuilder
|
||||
}
|
||||
|
||||
/*
|
||||
* TESTCASE NUMBER: 6
|
||||
* ISSUES: KT-26191
|
||||
*/
|
||||
fun case_6(value_1: Int?) {
|
||||
100 + 10
|
||||
throw Exception(contract {
|
||||
returns(true) implies (value_1 != null)
|
||||
}.toString())
|
||||
}
|
||||
|
||||
/*
|
||||
* TESTCASE NUMBER: 7
|
||||
* 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
|
||||
* 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
|
||||
* ISSUES: KT-26191
|
||||
*/
|
||||
fun case_9(number: Int?): Boolean {
|
||||
val value_1 = number != null
|
||||
contract {
|
||||
returns(false) implies (value_1)
|
||||
} as ContractBuilder
|
||||
return number == null
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
* 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 test@ {
|
||||
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
|
||||
}
|
||||
return block()
|
||||
}
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
* 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.*
|
||||
|
||||
// TESTCASE NUMBER: 1, 2
|
||||
inline fun contractBuilder(block: () -> Unit): ContractBuilder.() -> Unit = {
|
||||
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
|
||||
}
|
||||
|
||||
// FILE: main.kt
|
||||
|
||||
import builder.*
|
||||
import kotlin.contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
inline fun case_1(block: () -> Unit) {
|
||||
contract(contractBuilder(block))
|
||||
return block()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
inline fun case_2(block: () -> Unit) {
|
||||
contract(builder = contractBuilder(block))
|
||||
return block()
|
||||
}
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
* 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.*
|
||||
|
||||
// TESTCASE NUMBER: 1, 2, 3
|
||||
inline fun ContractBuilder.callsInPlaceEffectBuilder(block: () -> Unit) =
|
||||
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
|
||||
|
||||
fun ContractBuilder.returnsEffectBuilder(value_1: Int?) =
|
||||
returns(true) implies (value_1 != null)
|
||||
|
||||
// FILE: main.kt
|
||||
|
||||
import builder.*
|
||||
import kotlin.contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
inline fun case_1(block: () -> Unit) {
|
||||
contract(builder = { callsInPlaceEffectBuilder(block) })
|
||||
return block()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
inline fun case_2(block: () -> Unit) {
|
||||
contract { callsInPlaceEffectBuilder(block) }
|
||||
return block()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
inline fun case_3(value_1: Int?, block: () -> Unit) {
|
||||
contract({ returnsEffectBuilder(value_1); callsInPlaceEffectBuilder(block) })
|
||||
return block()
|
||||
}
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER -UNREACHABLE_CODE -UNUSED_EXPRESSION
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
* 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) {
|
||||
contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) <!UNRESOLVED_REFERENCE!>implies<!> (value_1 != null) }
|
||||
if (value_1 != null) block()
|
||||
}
|
||||
+62
@@ -0,0 +1,62 @@
|
||||
// !DIAGNOSTICS: -UNUSED_VARIABLE
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
* 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.
|
||||
* ISSUES: KT-26153
|
||||
* HELPERS: functions
|
||||
*/
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
// 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)
|
||||
}
|
||||
block()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
inline fun case_4(block: () -> Unit) {
|
||||
(contract {
|
||||
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
|
||||
})
|
||||
return block()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 5
|
||||
inline fun case_5(block: () -> Unit) {
|
||||
test@ contract {
|
||||
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
|
||||
}
|
||||
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)
|
||||
})
|
||||
}
|
||||
+56
@@ -0,0 +1,56 @@
|
||||
// !DIAGNOSTICS: -UNUSED_VARIABLE
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
*
|
||||
* SECTIONS: contracts, declarations, contractBuilder, common
|
||||
* NUMBER: 16
|
||||
* DESCRIPTION: Contract isn't in the first position.
|
||||
* ISSUES: KT-26191
|
||||
*/
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1(value_1: Int?) {
|
||||
println("!")
|
||||
contract {
|
||||
returns(true) implies (value_1 != null)
|
||||
} as ContractBuilder
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2(value_1: Int?) {
|
||||
100 + 10
|
||||
throw Exception(contract {
|
||||
returns(true) implies (value_1 != null)
|
||||
}.toString())
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun case_3(value_1: Int?) {
|
||||
for (i in 0..10) {
|
||||
println(i)
|
||||
}
|
||||
return contract {
|
||||
returns(true) implies (value_1 != null)
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
fun case_4(value_1: Int?) {
|
||||
val f = 10 - 20
|
||||
val g = contract {
|
||||
returns(true) implies (value_1 != null)
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 5
|
||||
fun case_5(number: Int?): Boolean {
|
||||
val value_1 = number != null
|
||||
contract {
|
||||
returns(false) implies (value_1)
|
||||
} as ContractBuilder
|
||||
return number == null
|
||||
}
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER -UNREACHABLE_CODE -UNUSED_EXPRESSION
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
* 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 {
|
||||
contract { returns(null) implies throw Exception() }
|
||||
return true
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2(): Boolean {
|
||||
contract { returns(null) implies return return return false }
|
||||
return true
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun case_3(): Boolean {
|
||||
contract { returns(null) implies return return return false && throw throw throw throw Exception() }
|
||||
return true
|
||||
}
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER -UNREACHABLE_CODE -UNUSED_EXPRESSION
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
* 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 (value_1 == true) }
|
||||
return value_1 == true
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2(value_1: Boolean): Boolean? {
|
||||
contract { returnsNotNull() implies (value_1 != false) }
|
||||
return if (value_1 != false) true else null
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun case_3(value_1: String): Boolean {
|
||||
contract { returns(false) implies (value_1 != "") }
|
||||
return !(value_1 != "")
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
fun case_4(value_1: Int): Boolean? {
|
||||
contract { returns(null) implies (value_1 == 0) }
|
||||
return if (value_1 == 0) null else true
|
||||
}
|
||||
+48
@@ -0,0 +1,48 @@
|
||||
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER -UNREACHABLE_CODE -UNUSED_EXPRESSION
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
* 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 && 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 (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 && 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 (value_1 == null || value_2 != null || value_2 == false) }
|
||||
return if (value_1 == null || value_2 != null || value_2 == false) null else true
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 5
|
||||
fun case_5(value_1: Any?, value_2: String?): Boolean? {
|
||||
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? {
|
||||
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
|
||||
}
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER -UNREACHABLE_CODE -UNUSED_EXPRESSION
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
// !WITH_NEW_INFERENCE
|
||||
|
||||
/*
|
||||
* 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? {
|
||||
contract { returnsNotNull() <!INAPPLICABLE_CANDIDATE!>implies<!> (null) }
|
||||
return true
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2(): Boolean {
|
||||
contract { returns(false) <!INAPPLICABLE_CANDIDATE!>implies<!> 0.000001 }
|
||||
return true
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun case_3(): Boolean? {
|
||||
contract { returns(null) <!INAPPLICABLE_CANDIDATE!>implies<!> "" }
|
||||
return null
|
||||
}
|
||||
+71
@@ -0,0 +1,71 @@
|
||||
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER -UNREACHABLE_CODE -UNUSED_EXPRESSION
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
// !WITH_NEW_INFERENCE
|
||||
|
||||
/*
|
||||
* 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) <!INAPPLICABLE_CANDIDATE!>implies<!> (-10) }
|
||||
return true
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2(): Boolean {
|
||||
contract { returnsNotNull() implies (return return return true) }
|
||||
return true
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun case_3(): Boolean {
|
||||
contract { returns(false) <!INAPPLICABLE_CANDIDATE!>implies<!> ("..." + "$<!UNRESOLVED_REFERENCE!>value_1<!>") }
|
||||
return true
|
||||
}
|
||||
|
||||
/*
|
||||
* TESTCASE NUMBER: 4
|
||||
* ISSUES: KT-26386
|
||||
*/
|
||||
fun case_4(): Boolean? {
|
||||
contract { returns(null) <!INAPPLICABLE_CANDIDATE!>implies<!> case_4() }
|
||||
return null
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 5
|
||||
fun case_5(): Boolean? {
|
||||
contract { returns(null) <!INAPPLICABLE_CANDIDATE!>implies<!> listOf(0) }
|
||||
return null
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 6
|
||||
fun case_6(value_1: Boolean): Boolean? {
|
||||
contract { returns(null) <!INAPPLICABLE_CANDIDATE!>implies<!> contract { returns(null) implies (!value_1) } }
|
||||
return null
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 7
|
||||
fun case_7(): Int {
|
||||
contract {
|
||||
callsInPlace(::case_7, InvocationKind.EXACTLY_ONCE)
|
||||
}
|
||||
return 1
|
||||
}
|
||||
|
||||
/*
|
||||
* TESTCASE NUMBER: 8
|
||||
* ISSUES: KT-26386
|
||||
*/
|
||||
fun case_8(): () -> Unit {
|
||||
contract {
|
||||
callsInPlace(case_8(), InvocationKind.EXACTLY_ONCE)
|
||||
}
|
||||
return {}
|
||||
}
|
||||
+72
@@ -0,0 +1,72 @@
|
||||
// !LANGUAGE: +AllowContractsForNonOverridableMembers +AllowReifiedGenericsInContracts
|
||||
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER -UNREACHABLE_CODE -UNUSED_EXPRESSION
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
*
|
||||
* SECTIONS: contracts, declarations, contractBuilder, common
|
||||
* NUMBER: 6
|
||||
* DESCRIPTION: contracts with not function parameters in implies.
|
||||
* HELPERS: typesProvider
|
||||
*/
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
object case_1 {
|
||||
val value_1 = getBoolean()
|
||||
const val value_2 = true
|
||||
private const val value_3 = false
|
||||
|
||||
fun case_1_1(): Boolean? {
|
||||
contract { returnsNotNull() implies (<!UNRESOLVED_REFERENCE!>value_1<!>) }
|
||||
return if (value_1) true else null
|
||||
}
|
||||
fun case_1_2(): Boolean? {
|
||||
contract { returns(null) implies (<!UNRESOLVED_REFERENCE!>value_2<!>) }
|
||||
return if (value_2) null else true
|
||||
}
|
||||
|
||||
fun case_1_3(): Boolean {
|
||||
contract { returns(true) implies (<!UNRESOLVED_REFERENCE!>value_3<!>) }
|
||||
return value_3
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
class case_2(value_5: Boolean, val value_1: Boolean) {
|
||||
val value_2 = getBoolean()
|
||||
|
||||
companion object {
|
||||
const val value_3 = false
|
||||
private const val value_4 = true
|
||||
}
|
||||
|
||||
init {
|
||||
fun case_2_1(): Boolean {
|
||||
contract { returns(false) implies (value_5) }
|
||||
return !(value_5)
|
||||
}
|
||||
}
|
||||
|
||||
fun case_2_2(): Boolean? {
|
||||
contract { returns(null) implies (<!UNRESOLVED_REFERENCE!>value_1<!>) }
|
||||
return if (value_1) null else true
|
||||
}
|
||||
|
||||
fun case_2_3(): Boolean {
|
||||
contract { returns(true) implies (<!UNRESOLVED_REFERENCE!>value_2<!>) }
|
||||
return value_2
|
||||
}
|
||||
|
||||
fun case_2_4(): Boolean {
|
||||
contract { returns(false) implies (<!UNRESOLVED_REFERENCE!>value_3<!>) }
|
||||
return !(value_3)
|
||||
}
|
||||
|
||||
inline fun <reified K : Number> K.case_2_5(): Boolean? {
|
||||
contract { returnsNotNull() implies (<!UNRESOLVED_REFERENCE!>value_4<!>) }
|
||||
return if (value_4) true else null
|
||||
}
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER -UNREACHABLE_CODE -UNUSED_EXPRESSION
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
* 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
|
||||
* HELPERS: typesProvider
|
||||
*/
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun <T> T?.case_1() {
|
||||
fun <K> K?.case_1_1(): Boolean {
|
||||
contract { returns(true) implies (this@case_1 != null) }
|
||||
return this@case_1 != null
|
||||
}
|
||||
}
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER -UNREACHABLE_CODE -UNUSED_EXPRESSION
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
* 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) {
|
||||
contract { }
|
||||
return block()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
inline fun case_2(block: () -> Unit) {
|
||||
contract({ })
|
||||
return block()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
inline fun case_3(block: () -> Unit) {
|
||||
contract(builder = { })
|
||||
return block()
|
||||
}
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER -UNREACHABLE_CODE -UNUSED_EXPRESSION
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
* 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 {
|
||||
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
|
||||
}
|
||||
}
|
||||
+43
@@ -0,0 +1,43 @@
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
* 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.*
|
||||
|
||||
// TESTCASE NUMBER: 1, 2, 3, 4
|
||||
val invocationKind: InvocationKind = InvocationKind.EXACTLY_ONCE
|
||||
|
||||
object SampleObject {
|
||||
val invocationKind = InvocationKind.EXACTLY_ONCE
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
inline fun case_1(invocationKind: InvocationKind, block: () -> Unit) {
|
||||
contract { callsInPlace(block, invocationKind) }
|
||||
return block()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
inline fun <T : InvocationKind> case_2(invocationKind: T, block: () -> Unit) {
|
||||
contract { callsInPlace(block, invocationKind) }
|
||||
return block()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
inline fun case_3(block: () -> Unit) {
|
||||
contract { callsInPlace(block, invocationKind) }
|
||||
return block()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
inline fun case_4(block: () -> Unit) {
|
||||
contract { callsInPlace(block, SampleObject.invocationKind) }
|
||||
return block()
|
||||
}
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
*
|
||||
* SECTIONS: contracts, declarations, contractBuilder, effects, callsInPlace
|
||||
* NUMBER: 2
|
||||
* DESCRIPTION: functions with contract and duplicate CallsInPlace.
|
||||
* ISSUES: KT-26150
|
||||
*/
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
inline fun case_1(block: () -> Unit) {
|
||||
contract {
|
||||
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
|
||||
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
|
||||
}
|
||||
return block()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
inline fun case_2(block: () -> Unit) {
|
||||
contract {
|
||||
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
|
||||
callsInPlace(block, InvocationKind.AT_MOST_ONCE)
|
||||
}
|
||||
return block()
|
||||
}
|
||||
+61
@@ -0,0 +1,61 @@
|
||||
// !DIAGNOSTICS: -UNUSED_VARIABLE
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
* 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 {
|
||||
{ callsInPlace(block, InvocationKind.EXACTLY_ONCE) }()
|
||||
}
|
||||
return block()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2(x: Any?): Boolean {
|
||||
contract {
|
||||
returns(true).apply { implies (x is Number) } // 'Returns' as result
|
||||
}
|
||||
return x is Number
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun case_3(x: Any?): Boolean {
|
||||
contract {
|
||||
returns(true).also { it implies (x is Number) } // 'Returns' as result
|
||||
}
|
||||
return x is Number
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
fun case_4(x: Any?): Boolean {
|
||||
contract {
|
||||
returns(true).let { it implies (x is Number) } // 'ConditionalEffect' as result
|
||||
}
|
||||
return x is Number
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 5
|
||||
fun case_5(x: Any?): Boolean {
|
||||
contract {
|
||||
returns(true).run { implies (x is Number) } // 'ConditionalEffect' as result
|
||||
}
|
||||
return x is Number
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 6
|
||||
fun case_6(x: Any?): Boolean {
|
||||
contract {
|
||||
returns(true).takeIf { it implies (x is Number); false } // null, must be unrecognized effect
|
||||
}
|
||||
return x is Number
|
||||
}
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
* 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 == -.15f) }
|
||||
return x !is Number
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2(x: Any?): Boolean {
|
||||
contract { returns(true) implies (x == "..." + ".") }
|
||||
return x !is Number
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun case_3(x: Int, y: Int): Boolean {
|
||||
contract { returns(true) implies (x > y) }
|
||||
return x > y
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
fun case_4(x: Any?, y: Any?): Boolean {
|
||||
contract { returns(true) implies (x == y.toString()) }
|
||||
return x !is Number
|
||||
}
|
||||
+43
@@ -0,0 +1,43 @@
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
* 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 (this != null)
|
||||
}
|
||||
return this != null
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun Any?.case_2(): Boolean {
|
||||
contract {
|
||||
returnsNotNull() implies (this is Number?)
|
||||
}
|
||||
return this is Number?
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun <T> T?.case_3(): Boolean {
|
||||
contract {
|
||||
returnsNotNull() implies (this != null)
|
||||
}
|
||||
return this != null
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
inline fun <reified T : Number> T.case_4(): Boolean {
|
||||
contract {
|
||||
returns(null) implies (this is Int)
|
||||
}
|
||||
return this is Int
|
||||
}
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
*
|
||||
* SECTIONS: contracts, declarations, contractBuilder, effects, returns
|
||||
* NUMBER: 3
|
||||
* DESCRIPTION: Using reference equality in implies.
|
||||
* ISSUES: KT-26177
|
||||
* HELPERS: objects
|
||||
*/
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1(x: Any?): Boolean {
|
||||
contract {
|
||||
returns(true) implies (x === EmptyObject) // should be not allowed
|
||||
}
|
||||
return x === EmptyObject
|
||||
}
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
* 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 {
|
||||
contract { returns(true) implies (x == .15f) }
|
||||
return x == .15f
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2(x: Any?) {
|
||||
contract { returns() implies (x == "...") }
|
||||
if (x != "...") throw Exception()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun case_3(x: Any?): Boolean {
|
||||
contract { returns(true) implies (x == '-') }
|
||||
return x == '-'
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
* 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 : Boolean>T.case_1(): Boolean? {
|
||||
contract { returns(null) implies (!this@case_1) }
|
||||
return if (!this) null else true
|
||||
}
|
||||
+53
@@ -0,0 +1,53 @@
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
* 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 {
|
||||
contract { returns(true) implies (this@case_1 != null && this@case_1) }
|
||||
return this != null && this
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun <T : Boolean>T?.case_2(): Boolean {
|
||||
contract { returns(true) implies (this@case_2 != null && this@case_2 !is Nothing && this@case_2) }
|
||||
return this != null && this !is Nothing && this
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun <T>T?.case_3() {
|
||||
contract { returns() implies (this@case_3 == null || this@case_3 is Boolean? && !this@case_3) }
|
||||
if (!(this == null || this is Boolean? && !this)) throw Exception()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
fun case_4(value_1: Boolean?): Boolean {
|
||||
contract { returns(true) implies (value_1 != null && !value_1) }
|
||||
return value_1 != null && !value_1
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 5
|
||||
fun Boolean.case_5(value_1: Any?): Boolean? {
|
||||
contract { returnsNotNull() implies (value_1 is Boolean? && value_1 != null && value_1) }
|
||||
return if (value_1 is Boolean? && value_1 != null && value_1) true else null
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 6
|
||||
fun Boolean?.case_6(): Boolean? {
|
||||
contract { returnsNotNull() implies (this@case_6 != null && this@case_6) }
|
||||
return if (this@case_6 != null && this@case_6) true else null
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 7
|
||||
fun <T : Boolean?> T.case_7(value_1: Any?): Boolean? {
|
||||
contract { returnsNotNull() implies (value_1 is Boolean? && value_1 != null && value_1 && this@case_7 != null && this@case_7) }
|
||||
return if (value_1 is Boolean? && value_1 != null && value_1 && this@case_7 != null && this@case_7) true else null
|
||||
}
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
// !LANGUAGE: +AllowContractsForNonOverridableMembers +AllowReifiedGenericsInContracts
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
* 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 (this@case_1 is T) }
|
||||
if (!(this@case_1 is T)) throw Exception()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun <T : Number, K : String> T?.case_2(value_1: K?) {
|
||||
contract { returns() implies (this@case_2 is T && value_1 is K) }
|
||||
if (!(this@case_2 is T && value_1 is K)) throw Exception()
|
||||
}
|
||||
+85
@@ -0,0 +1,85 @@
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
// !DIAGNOSTICS: -FINAL_UPPER_BOUND
|
||||
|
||||
/*
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
*
|
||||
* SECTIONS: contracts, declarations, contractBuilder, effects, returns
|
||||
* NUMBER: 1
|
||||
* DESCRIPTION: Returns effect with simple conditions.
|
||||
* HELPERS: classes
|
||||
*/
|
||||
|
||||
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 (this@case_12 == null) }
|
||||
if (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()
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
* 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()
|
||||
case_1(block)
|
||||
}
|
||||
+82
@@ -0,0 +1,82 @@
|
||||
// !LANGUAGE: +AllowContractsForNonOverridableMembers +AllowReifiedGenericsInContracts
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
* 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
|
||||
* HELPERS: classes
|
||||
*/
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1() {
|
||||
val fun_1 = fun(block: () -> Unit) {
|
||||
contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) }
|
||||
return block()
|
||||
}
|
||||
|
||||
fun_1 { throw Exception() }
|
||||
println("1")
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2() {
|
||||
val lambda_1 = { block: () -> Unit ->
|
||||
contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) }
|
||||
block()
|
||||
}
|
||||
|
||||
lambda_1 { throw Exception() }
|
||||
println("1")
|
||||
}
|
||||
|
||||
/*
|
||||
* TESTCASE NUMBER: 4
|
||||
* ISSUES: KT-26244
|
||||
*/
|
||||
class case_4 : ClassLevel3() {
|
||||
|
||||
fun <T : Number?>T.case_4_1(): Boolean {
|
||||
contract { returns(false) implies (this@case_4 !is ClassLevel1) }
|
||||
return this == null
|
||||
}
|
||||
|
||||
fun <T : Boolean>T.case_4_2() {
|
||||
contract { returns() implies (!this@case_4_2) }
|
||||
if (this) throw Exception()
|
||||
}
|
||||
|
||||
fun <T>T.case_4_3_wrap() {
|
||||
fun case_4_3_contract() {
|
||||
contract { returns() implies (this@case_4_3_wrap is ClassLevel1) }
|
||||
if (this@case_4_3_wrap !is ClassLevel1) throw Exception()
|
||||
}
|
||||
case_4_3_contract()
|
||||
println("!")
|
||||
}
|
||||
|
||||
fun case_4_3() = ClassLevel3().case_4_3_wrap()
|
||||
}
|
||||
|
||||
/*
|
||||
* TESTCASE NUMBER: 5
|
||||
* ISSUES: KT-26244
|
||||
*/
|
||||
class case_5<T> : ClassLevel5() {
|
||||
inner class case_5_1 {
|
||||
fun <K : Number?>K.case_5_1_1() {
|
||||
contract { returns() implies (this@case_5_1 !is ClassLevel1 && this@case_5_1 != null || this@case_5 is ClassLevel1 && this@case_5_1_1 is Float) }
|
||||
if (!(this@case_5_1 !is ClassLevel1 && this@case_5_1 != null || this@case_5 is ClassLevel1 && this is Float)) throw Exception()
|
||||
}
|
||||
|
||||
fun case_5_1_2() {
|
||||
contract { returns() implies (this@case_5_1 !is ClassLevel1 || this@case_5 is ClassLevel1 || this@case_5_1 == null) }
|
||||
if (!(this@case_5_1 !is ClassLevel1 || this@case_5 is ClassLevel1 || this@case_5_1 == null)) throw Exception()
|
||||
}
|
||||
}
|
||||
}
|
||||
+66
@@ -0,0 +1,66 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
* 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.
|
||||
* ISSUES: KT-27090
|
||||
*/
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
val Boolean.case_1: () -> Unit
|
||||
get() {
|
||||
contract {
|
||||
returns() implies (this@case_1)
|
||||
}
|
||||
return {}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
val (() -> Unit).case_2: () -> Unit
|
||||
get() {
|
||||
contract {
|
||||
callsInPlace(this@case_2, InvocationKind.EXACTLY_ONCE)
|
||||
}
|
||||
return {}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
var Boolean.case_3: () -> Unit
|
||||
get() {
|
||||
return {}
|
||||
}
|
||||
set(value) {
|
||||
contract {
|
||||
callsInPlace(value, InvocationKind.EXACTLY_ONCE)
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
var (() -> Unit).case_4: () -> Unit
|
||||
get() {
|
||||
return {}
|
||||
}
|
||||
set(value) {
|
||||
contract {
|
||||
callsInPlace(this@case_4, InvocationKind.EXACTLY_ONCE)
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 5
|
||||
val Boolean.case_5: () -> Unit
|
||||
get() {
|
||||
contract {
|
||||
returns() implies (this@case_5)
|
||||
}
|
||||
|
||||
if (!this@case_5)
|
||||
throw Exception()
|
||||
|
||||
return {}
|
||||
}
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
* 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)) {
|
||||
x.length
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2_1(x: Number?) {
|
||||
case_2_2(x)
|
||||
println(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()
|
||||
}
|
||||
Reference in New Issue
Block a user