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:
+10
-7
@@ -1,12 +1,11 @@
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, common
|
||||
NUMBER: 1
|
||||
DESCRIPTION: Analysis by contracts with mixed CallsInPlace and Returns effects.
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, common
|
||||
* NUMBER: 1
|
||||
* DESCRIPTION: Analysis by contracts with mixed CallsInPlace and Returns effects.
|
||||
*/
|
||||
|
||||
// FILE: contracts.kt
|
||||
@@ -15,6 +14,7 @@ package contracts
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
inline fun case_1(value_1: Int?, block: () -> Unit): Boolean {
|
||||
contract {
|
||||
callsInPlace(block, InvocationKind.AT_MOST_ONCE)
|
||||
@@ -26,6 +26,7 @@ inline fun case_1(value_1: Int?, block: () -> Unit): Boolean {
|
||||
return value_1 != null
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
inline fun <T> T?.case_2(value_1: Int?, value_2: Any?, block: () -> Unit): Boolean? {
|
||||
contract {
|
||||
callsInPlace(block, InvocationKind.AT_MOST_ONCE)
|
||||
@@ -42,10 +43,11 @@ inline fun <T> T?.case_2(value_1: Int?, value_2: Any?, block: () -> Unit): Boole
|
||||
return null
|
||||
}
|
||||
|
||||
// FILE: usages.kt
|
||||
// FILE: main.kt
|
||||
|
||||
import contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1(value_1: Int?) {
|
||||
val value_2: Int
|
||||
if (contracts.case_1(value_1) { value_2 = 10 }) {
|
||||
@@ -56,6 +58,7 @@ fun case_1(value_1: Int?) {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2(value_1: Int?, value_2: Int?, value_3: Any?) {
|
||||
val value_4: Int
|
||||
when (value_1.case_2(value_2, value_3) { value_4 = 10 }) {
|
||||
|
||||
+10
-7
@@ -1,12 +1,11 @@
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, common
|
||||
NUMBER: 1
|
||||
DESCRIPTION: Analysis by contracts with mixed CallsInPlace and Returns effects.
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, common
|
||||
* NUMBER: 1
|
||||
* DESCRIPTION: Analysis by contracts with mixed CallsInPlace and Returns effects.
|
||||
*/
|
||||
|
||||
// FILE: contracts.kt
|
||||
@@ -15,6 +14,7 @@ package contracts
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
inline fun case_1(value_1: Int?, block: () -> Unit): Boolean {
|
||||
contract {
|
||||
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
|
||||
@@ -24,6 +24,7 @@ inline fun case_1(value_1: Int?, block: () -> Unit): Boolean {
|
||||
return value_1 != null
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
inline fun <T> T?.case_2(value_1: Int?, value_2: Any?, block: () -> Unit): Boolean? {
|
||||
contract {
|
||||
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
|
||||
@@ -37,10 +38,11 @@ inline fun <T> T?.case_2(value_1: Int?, value_2: Any?, block: () -> Unit): Boole
|
||||
return null
|
||||
}
|
||||
|
||||
// FILE: usages.kt
|
||||
// FILE: main.kt
|
||||
|
||||
import contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1(value_1: Int?) {
|
||||
val value_3: Int
|
||||
if (contracts.case_1(value_1) { value_3 = 10 }) {
|
||||
@@ -51,6 +53,7 @@ fun case_1(value_1: Int?) {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2(value_1: Int?, value_2: Int?, value_3: Any?) {
|
||||
val value_4: Int
|
||||
when (value_1.case_2(value_2, value_3) { value_4 = 10 }) {
|
||||
|
||||
+8
-6
@@ -3,20 +3,21 @@
|
||||
// SKIP_TXT
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, common
|
||||
NUMBER: 2
|
||||
DESCRIPTION: Recursion in the lambda of contract function.
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, common
|
||||
* NUMBER: 2
|
||||
* DESCRIPTION: Recursion in the lambda of contract function.
|
||||
*/
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1(x: Int): Unit = funWithExactlyOnceCallsInPlace {
|
||||
if (x == 0) return
|
||||
if (x == 1) return
|
||||
return case_1(x - 2)
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2(x: Int) {
|
||||
funWithAtLeastOnceCallsInPlace {
|
||||
if (x == 0) return
|
||||
@@ -25,6 +26,7 @@ fun case_2(x: Int) {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun case_3(x: Int) {
|
||||
funWithAtMostOnceCallsInPlace {
|
||||
if (x == 0) return
|
||||
|
||||
+13
-6
@@ -3,32 +3,35 @@
|
||||
// SKIP_TXT
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, controlFlow, initialization
|
||||
NUMBER: 1
|
||||
DESCRIPTION: val/var reassignment and/or uninitialized variable usages based on CallsInPlace effect with wrong invocation kind
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, controlFlow, initialization
|
||||
* NUMBER: 1
|
||||
* DESCRIPTION: val/var reassignment and/or uninitialized variable usages based on CallsInPlace effect with wrong invocation kind
|
||||
*/
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1() {
|
||||
val value_1: Int
|
||||
funWithAtLeastOnceCallsInPlace { <!VAL_REASSIGNMENT!>value_1<!> = 10 }
|
||||
value_1.inc()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2() {
|
||||
val value_1: Int
|
||||
funWithAtMostOnceCallsInPlace { value_1 = 10 }
|
||||
<!UNINITIALIZED_VARIABLE!>value_1<!>.inc()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun case_3() {
|
||||
val value_1: Int
|
||||
funWithUnknownCallsInPlace { <!VAL_REASSIGNMENT!>value_1<!> = 10 }
|
||||
<!UNINITIALIZED_VARIABLE!>value_1<!>.inc()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
fun case_4() {
|
||||
var value_1: Int
|
||||
var value_2: Int
|
||||
@@ -38,6 +41,7 @@ fun case_4() {
|
||||
<!UNINITIALIZED_VARIABLE!>value_2<!>.div(10)
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 5
|
||||
class case_5 {
|
||||
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val value_1: Int<!>
|
||||
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val value_2: Int<!>
|
||||
@@ -53,6 +57,7 @@ class case_5 {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 6
|
||||
fun case_6() {
|
||||
val value_1: Int
|
||||
for (i in 0..1)
|
||||
@@ -60,6 +65,7 @@ fun case_6() {
|
||||
<!UNINITIALIZED_VARIABLE!>value_1<!>.dec()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 7
|
||||
fun case_7() {
|
||||
var value_1: Int
|
||||
var i = 0
|
||||
@@ -70,6 +76,7 @@ fun case_7() {
|
||||
<!UNINITIALIZED_VARIABLE!>value_1<!>.dec()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 8
|
||||
fun case_8() {
|
||||
var value_1: Int
|
||||
if (true) funWithAtLeastOnceCallsInPlace { value_1 = 10 }
|
||||
|
||||
+9
-6
@@ -3,14 +3,14 @@
|
||||
// SKIP_TXT
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, controlFlow, initialization
|
||||
NUMBER: 2
|
||||
DESCRIPTION: val/var reassignment and/or uninitialized variable usages based on nested CallsInPlace effects with wrong invocation kind
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, controlFlow, initialization
|
||||
* NUMBER: 2
|
||||
* DESCRIPTION: val/var reassignment and/or uninitialized variable usages based on nested CallsInPlace effects with wrong invocation kind
|
||||
*/
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1() {
|
||||
val value_1: Int
|
||||
funWithAtLeastOnceCallsInPlace {
|
||||
@@ -28,6 +28,7 @@ fun case_1() {
|
||||
value_1.inc()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2() {
|
||||
val value_1: Int
|
||||
funWithAtMostOnceCallsInPlace {
|
||||
@@ -45,6 +46,7 @@ fun case_2() {
|
||||
value_1.inc()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun case_3() {
|
||||
var value_1: Int
|
||||
funWithAtLeastOnceCallsInPlace {
|
||||
@@ -62,6 +64,7 @@ fun case_3() {
|
||||
value_1.inc()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
fun case_4() {
|
||||
var value_1: Int
|
||||
funWithAtLeastOnceCallsInPlace {
|
||||
|
||||
+17
-22
@@ -4,14 +4,14 @@
|
||||
// SKIP_TXT
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, controlFlow, initialization
|
||||
NUMBER: 3
|
||||
DESCRIPTION: val/var reassignment and/or uninitialized variable usages with compelx control flow inside/outside lambda of contract function with CallsInPlace effect
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, controlFlow, initialization
|
||||
* NUMBER: 3
|
||||
* DESCRIPTION: val/var reassignment and/or uninitialized variable usages with compelx control flow inside/outside lambda of contract function with CallsInPlace effect
|
||||
*/
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1(value_1: _EnumClass?) {
|
||||
val value_2: Int
|
||||
|
||||
@@ -25,6 +25,7 @@ fun case_1(value_1: _EnumClass?) {
|
||||
<!UNINITIALIZED_VARIABLE!>value_2<!>.inc()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2(value_1: Any?) {
|
||||
val value_2: Int
|
||||
|
||||
@@ -41,6 +42,7 @@ fun case_2(value_1: Any?) {
|
||||
value_2.dec()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
class case_3(value_1: Any?) {
|
||||
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>var value_2: Int<!>
|
||||
|
||||
@@ -59,6 +61,7 @@ class case_3(value_1: Any?) {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
fun case_4(value_1: _EnumClassSingle?) {
|
||||
var value_2: Int
|
||||
|
||||
@@ -77,6 +80,7 @@ fun case_4(value_1: _EnumClassSingle?) {
|
||||
value_2.minus(5)
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 5
|
||||
fun case_5() {
|
||||
var value_2: Int
|
||||
|
||||
@@ -89,6 +93,7 @@ fun case_5() {
|
||||
<!UNINITIALIZED_VARIABLE!>value_2<!>++
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 6
|
||||
fun case_6() {
|
||||
var value_2: Int
|
||||
|
||||
@@ -103,6 +108,7 @@ fun case_6() {
|
||||
value_2++
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 7
|
||||
fun case_7() {
|
||||
var value_1: Int
|
||||
|
||||
@@ -119,21 +125,8 @@ fun case_7() {
|
||||
println(<!UNINITIALIZED_VARIABLE!>value_1<!>.inc())
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 8
|
||||
fun case_8() {
|
||||
val x: Int
|
||||
funWithExactlyOnceCallsInPlace outer@ {
|
||||
funWithAtMostOnceCallsInPlace {
|
||||
funWithExactlyOnceCallsInPlace {
|
||||
x = 42
|
||||
return@outer
|
||||
}
|
||||
}
|
||||
throw Exception()
|
||||
}
|
||||
println(x.inc())
|
||||
}
|
||||
|
||||
fun case_9() {
|
||||
val x: Int
|
||||
funWithExactlyOnceCallsInPlace outer@ {
|
||||
funWithAtMostOnceCallsInPlace {
|
||||
@@ -147,7 +140,8 @@ fun case_9() {
|
||||
println(<!UNINITIALIZED_VARIABLE!>x<!>.inc())
|
||||
}
|
||||
|
||||
fun case_10() {
|
||||
// TESTCASE NUMBER: 9
|
||||
fun case_9() {
|
||||
val x: Int
|
||||
funWithExactlyOnceCallsInPlace outer@ {
|
||||
funWithAtMostOnceCallsInPlace {
|
||||
@@ -158,7 +152,8 @@ fun case_10() {
|
||||
println(<!UNINITIALIZED_VARIABLE!>x<!>.inc())
|
||||
}
|
||||
|
||||
fun case_11() {
|
||||
// TESTCASE NUMBER: 10
|
||||
fun case_10() {
|
||||
var x: Int
|
||||
funWithAtLeastOnceCallsInPlace outer@ {
|
||||
funWithAtMostOnceCallsInPlace {
|
||||
|
||||
+12
-8
@@ -3,14 +3,14 @@
|
||||
// SKIP_TXT
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, controlFlow, initialization
|
||||
NUMBER: 4
|
||||
DESCRIPTION: CallsInPlace contract functions with name shadowing and wrong invocation kind
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, controlFlow, initialization
|
||||
* NUMBER: 4
|
||||
* DESCRIPTION: CallsInPlace contract functions with name shadowing and wrong invocation kind
|
||||
*/
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1() {
|
||||
val value_1: Int
|
||||
funWithExactlyOnceCallsInPlace {
|
||||
@@ -20,6 +20,7 @@ fun case_1() {
|
||||
<!UNINITIALIZED_VARIABLE!>value_1<!>.inc()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2() {
|
||||
val value_1: Int
|
||||
funWithExactlyOnceCallsInPlace {
|
||||
@@ -35,6 +36,7 @@ fun case_2() {
|
||||
<!UNINITIALIZED_VARIABLE!>value_1<!>.inc()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun case_3() {
|
||||
val value_1: Int
|
||||
funWithAtLeastOnceCallsInPlace {
|
||||
@@ -53,7 +55,8 @@ fun case_3() {
|
||||
<!UNINITIALIZED_VARIABLE!>value_1<!>.inc()
|
||||
}
|
||||
|
||||
fun case_6() {
|
||||
// TESTCASE NUMBER: 4
|
||||
fun case_4() {
|
||||
var value_1: Int
|
||||
funWithAtLeastOnceCallsInPlace {
|
||||
val <!NAME_SHADOWING!>value_1<!>: Int
|
||||
@@ -71,7 +74,8 @@ fun case_6() {
|
||||
<!UNINITIALIZED_VARIABLE!>value_1<!>.dec()
|
||||
}
|
||||
|
||||
fun case_7() {
|
||||
// TESTCASE NUMBER: 5
|
||||
fun case_5() {
|
||||
val value_1: Int
|
||||
funWithUnknownCallsInPlace {
|
||||
var <!NAME_SHADOWING!>value_1<!>: Int
|
||||
|
||||
+10
-6
@@ -3,20 +3,21 @@
|
||||
// SKIP_TXT
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, controlFlow, initialization
|
||||
NUMBER: 5
|
||||
DESCRIPTION: CallsInPlace contract functions with invalid lambda passing to function parameter.
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, controlFlow, initialization
|
||||
* NUMBER: 5
|
||||
* DESCRIPTION: CallsInPlace contract functions with invalid lambda passing to function parameter.
|
||||
*/
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1() {
|
||||
val value_1: Int
|
||||
funWithExactlyOnceCallsInPlace({ <!CAPTURED_VAL_INITIALIZATION!>value_1<!> = 10 })
|
||||
<!UNINITIALIZED_VARIABLE!>value_1<!>.inc()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2() {
|
||||
var value_1: Int
|
||||
val l = { value_1 = 10 }
|
||||
@@ -24,6 +25,7 @@ fun case_2() {
|
||||
<!UNINITIALIZED_VARIABLE!>value_1<!>.inc()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun case_3() {
|
||||
var value_1: Int
|
||||
val l = fun () { value_1 = 10 }
|
||||
@@ -31,12 +33,14 @@ fun case_3() {
|
||||
<!UNINITIALIZED_VARIABLE!>value_1<!>.inc()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
fun case_4() {
|
||||
var value_1: Int
|
||||
funWithAtLeastOnceCallsInPlace(fun () { value_1 = 10 })
|
||||
<!UNINITIALIZED_VARIABLE!>value_1<!>.inc()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 5
|
||||
fun case_5() {
|
||||
val value_1: Int
|
||||
val o = object {
|
||||
|
||||
+9
-8
@@ -3,22 +3,23 @@
|
||||
// SKIP_TXT
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, controlFlow, initialization
|
||||
NUMBER: 6
|
||||
DESCRIPTION: Check the lack of CallsInPlace effect on the lambda in the parentheses.
|
||||
UNEXPECTED BEHAVIOUR
|
||||
ISSUES: KT-26229
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, controlFlow, initialization
|
||||
* NUMBER: 6
|
||||
* DESCRIPTION: Check the lack of CallsInPlace effect on the lambda in the parentheses.
|
||||
* UNEXPECTED BEHAVIOUR
|
||||
* ISSUES: KT-26229
|
||||
*/
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1() {
|
||||
val value_1: Int
|
||||
funWithExactlyOnceCallsInPlace({ <!CAPTURED_VAL_INITIALIZATION!>value_1<!> = 11 })
|
||||
<!UNINITIALIZED_VARIABLE!>value_1<!>.inc()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2() {
|
||||
var value_1: Int
|
||||
funWithAtLeastOnceCallsInPlace({ value_1 = 11 })
|
||||
|
||||
+8
-6
@@ -3,20 +3,21 @@
|
||||
// SKIP_TXT
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, controlFlow, initialization
|
||||
NUMBER: 1
|
||||
DESCRIPTION: val/var assignments using contract functions with CallsInPlace effect
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, controlFlow, initialization
|
||||
* NUMBER: 1
|
||||
* DESCRIPTION: val/var assignments using contract functions with CallsInPlace effect
|
||||
*/
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1() {
|
||||
val value_1: Int
|
||||
funWithExactlyOnceCallsInPlace { value_1 = 10 }
|
||||
value_1.inc()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2() {
|
||||
var value_1: Int
|
||||
var value_2: Int
|
||||
@@ -26,6 +27,7 @@ fun case_2() {
|
||||
value_2.div(10)
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
class case_3 {
|
||||
val value_1: Int
|
||||
var value_2: Int
|
||||
|
||||
+15
-9
@@ -3,14 +3,14 @@
|
||||
// SKIP_TXT
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, controlFlow, initialization
|
||||
NUMBER: 2
|
||||
DESCRIPTION: Nested val/var assignments using contract functions with CallsInPlace effect
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, controlFlow, initialization
|
||||
* NUMBER: 2
|
||||
* DESCRIPTION: Nested val/var assignments using contract functions with CallsInPlace effect
|
||||
*/
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1() {
|
||||
val value_1: Int
|
||||
funWithExactlyOnceCallsInPlace {
|
||||
@@ -28,6 +28,7 @@ fun case_1() {
|
||||
value_1.inc()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2() {
|
||||
val value_1: Int
|
||||
funWithAtMostOnceCallsInPlace {
|
||||
@@ -44,6 +45,7 @@ fun case_2() {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun case_3() {
|
||||
var value_1: Int
|
||||
funWithExactlyOnceCallsInPlace {
|
||||
@@ -61,6 +63,7 @@ fun case_3() {
|
||||
value_1.inc()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
fun case_4() {
|
||||
var value_1: Int
|
||||
funWithAtMostOnceCallsInPlace {
|
||||
@@ -80,7 +83,8 @@ fun case_4() {
|
||||
}
|
||||
}
|
||||
|
||||
fun case_7() {
|
||||
// TESTCASE NUMBER: 5
|
||||
fun case_5() {
|
||||
var value_1: Int
|
||||
funWithAtLeastOnceCallsInPlace {
|
||||
funWithAtLeastOnceCallsInPlace {
|
||||
@@ -97,7 +101,8 @@ fun case_7() {
|
||||
value_1.inc()
|
||||
}
|
||||
|
||||
fun case_8() {
|
||||
// TESTCASE NUMBER: 6
|
||||
fun case_6() {
|
||||
var value_1: Int
|
||||
funWithUnknownCallsInPlace {
|
||||
funWithAtMostOnceCallsInPlace {
|
||||
@@ -120,7 +125,8 @@ fun case_8() {
|
||||
}
|
||||
}
|
||||
|
||||
fun case_9() {
|
||||
// TESTCASE NUMBER: 7
|
||||
fun case_7() {
|
||||
var value_1: Int
|
||||
funWithAtMostOnceCallsInPlace {
|
||||
funWithUnknownCallsInPlace {
|
||||
|
||||
+16
-6
@@ -4,14 +4,14 @@
|
||||
// SKIP_TXT
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, controlFlow, initialization
|
||||
NUMBER: 3
|
||||
DESCRIPTION: val/var assignments or subsequent usages with compelx control flow inside/outside lambda of contract function with CallsInPlace effect
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, controlFlow, initialization
|
||||
* NUMBER: 3
|
||||
* DESCRIPTION: val/var assignments or subsequent usages with compelx control flow inside/outside lambda of contract function with CallsInPlace effect
|
||||
*/
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1(value_1: _EnumClass?) {
|
||||
val value_2: Int
|
||||
|
||||
@@ -26,6 +26,7 @@ fun case_1(value_1: _EnumClass?) {
|
||||
value_2.inc()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2(value_1: Any?) {
|
||||
val value_2: Int
|
||||
|
||||
@@ -42,6 +43,7 @@ fun case_2(value_1: Any?) {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
class case_3(value_1: Any?) {
|
||||
var value_2: Int
|
||||
|
||||
@@ -60,6 +62,7 @@ class case_3(value_1: Any?) {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
fun case_4(value_1: _EnumClassSingle?) {
|
||||
var value_2: Int
|
||||
|
||||
@@ -78,6 +81,7 @@ fun case_4(value_1: _EnumClassSingle?) {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 5
|
||||
fun case_5() {
|
||||
var value_2: Int
|
||||
|
||||
@@ -90,6 +94,7 @@ fun case_5() {
|
||||
value_2++
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 6
|
||||
fun case_6() {
|
||||
var value_2: Int
|
||||
|
||||
@@ -104,6 +109,7 @@ fun case_6() {
|
||||
value_2++
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 7
|
||||
fun case_7() {
|
||||
var value_1: Int
|
||||
|
||||
@@ -122,6 +128,7 @@ fun case_7() {
|
||||
println(value_1.inc())
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 8
|
||||
fun case_8() {
|
||||
var value_1: Int
|
||||
|
||||
@@ -138,6 +145,7 @@ fun case_8() {
|
||||
println(value_1.inc())
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 9
|
||||
fun case_9() {
|
||||
val x: Int
|
||||
funWithExactlyOnceCallsInPlace outer@ {
|
||||
@@ -152,6 +160,7 @@ fun case_9() {
|
||||
println(x.inc())
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 10
|
||||
fun case_10() {
|
||||
val x: Int
|
||||
funWithExactlyOnceCallsInPlace outer@ {
|
||||
@@ -163,6 +172,7 @@ fun case_10() {
|
||||
println(x.inc())
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 11
|
||||
fun case_11() {
|
||||
var x: Int
|
||||
funWithAtLeastOnceCallsInPlace outer@ {
|
||||
|
||||
+13
-6
@@ -3,14 +3,14 @@
|
||||
// SKIP_TXT
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, controlFlow, initialization
|
||||
NUMBER: 4
|
||||
DESCRIPTION: CallsInPlace contract functions with name shadowing
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, controlFlow, initialization
|
||||
* NUMBER: 4
|
||||
* DESCRIPTION: CallsInPlace contract functions with name shadowing
|
||||
*/
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1() {
|
||||
val <!UNUSED_VARIABLE!>value_1<!>: Int
|
||||
funWithExactlyOnceCallsInPlace {
|
||||
@@ -19,6 +19,7 @@ fun case_1() {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2() {
|
||||
val <!UNUSED_VARIABLE!>value_1<!>: Int
|
||||
funWithExactlyOnceCallsInPlace {
|
||||
@@ -33,6 +34,7 @@ fun case_2() {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun case_3() {
|
||||
val value_1: Int
|
||||
funWithAtLeastOnceCallsInPlace {
|
||||
@@ -51,6 +53,7 @@ fun case_3() {
|
||||
value_1.inc()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
fun case_4() {
|
||||
val value_1: Int
|
||||
funWithAtMostOnceCallsInPlace {
|
||||
@@ -69,6 +72,7 @@ fun case_4() {
|
||||
value_1.inc()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 5
|
||||
fun case_5() {
|
||||
val value_1: Int
|
||||
funWithUnknownCallsInPlace {
|
||||
@@ -86,6 +90,7 @@ fun case_5() {
|
||||
value_1.inc()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 6
|
||||
fun case_6() {
|
||||
var value_1: Int
|
||||
funWithAtLeastOnceCallsInPlace {
|
||||
@@ -102,6 +107,7 @@ fun case_6() {
|
||||
value_1.dec()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 7
|
||||
fun case_7() {
|
||||
val value_1: Int
|
||||
funWithAtLeastOnceCallsInPlace {
|
||||
@@ -114,6 +120,7 @@ fun case_7() {
|
||||
value_1.dec()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 8
|
||||
fun case_8() {
|
||||
var value_1: Int
|
||||
funWithAtLeastOnceCallsInPlace {
|
||||
|
||||
+9
-8
@@ -1,13 +1,12 @@
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, controlFlow, initialization
|
||||
NUMBER: 5
|
||||
DESCRIPTION: Smart initialization with correspond contract function with default value before lambda.
|
||||
ISSUES: KT-26444
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, controlFlow, initialization
|
||||
* NUMBER: 5
|
||||
* DESCRIPTION: Smart initialization with correspond contract function with default value before lambda.
|
||||
* ISSUES: KT-26444
|
||||
*/
|
||||
|
||||
// FILE: contracts.kt
|
||||
@@ -16,15 +15,17 @@ package contracts
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1(x: Double = 1.0, block: () -> Unit): Double {
|
||||
contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) }
|
||||
return x
|
||||
}
|
||||
|
||||
// FILE: usages.kt
|
||||
// FILE: main.kt
|
||||
|
||||
import contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1() {
|
||||
val value_1: Int
|
||||
contracts.case_1 { value_1 = 10 }
|
||||
|
||||
+12
-9
@@ -2,14 +2,13 @@
|
||||
// !WITH_CONTRACT_FUNCTIONS
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, controlFlow, initialization
|
||||
NUMBER: 6
|
||||
DESCRIPTION: Check the lack of CallsInPlace effect on the lambda in the parentheses.
|
||||
UNEXPECTED BEHAVIOUR
|
||||
ISSUES: KT-26229
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, controlFlow, initialization
|
||||
* NUMBER: 6
|
||||
* DESCRIPTION: Check the lack of CallsInPlace effect on the lambda in the parentheses.
|
||||
* UNEXPECTED BEHAVIOUR
|
||||
* ISSUES: KT-26229
|
||||
*/
|
||||
|
||||
// FILE: contracts.kt
|
||||
@@ -18,6 +17,7 @@ package contracts
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
inline fun case_3(block1: () -> Unit, block2: () -> Unit, block3: () -> Unit) {
|
||||
contract {
|
||||
callsInPlace(block1, InvocationKind.EXACTLY_ONCE)
|
||||
@@ -30,22 +30,25 @@ inline fun case_3(block1: () -> Unit, block2: () -> Unit, block3: () -> Unit) {
|
||||
block3()
|
||||
}
|
||||
|
||||
// FILE: usages.kt
|
||||
// FILE: main.kt
|
||||
|
||||
import contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1() {
|
||||
val value_1: Int
|
||||
funWithExactlyOnceCallsInPlace({ <!CAPTURED_VAL_INITIALIZATION!>value_1<!> = 11 })
|
||||
<!UNINITIALIZED_VARIABLE!>value_1<!>.inc()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2() {
|
||||
var value_1: Int
|
||||
funWithAtLeastOnceCallsInPlace({ value_1 = 11 })
|
||||
<!UNINITIALIZED_VARIABLE!>value_1<!>.inc()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun case_3() {
|
||||
val value_1: Int
|
||||
var value_2: Int
|
||||
|
||||
+10
-7
@@ -1,12 +1,11 @@
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, controlFlow, initialization
|
||||
NUMBER: 7
|
||||
DESCRIPTION: Check initialization when type parameter of the callsInPlace is specify explicitly.
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, controlFlow, initialization
|
||||
* NUMBER: 7
|
||||
* DESCRIPTION: Check initialization when type parameter of the callsInPlace is specify explicitly.
|
||||
*/
|
||||
|
||||
// FILE: contracts.kt
|
||||
@@ -15,6 +14,7 @@ package contracts
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
inline fun <T> case_1(block: () -> T): T {
|
||||
contract {
|
||||
callsInPlace<T>(block, InvocationKind.EXACTLY_ONCE)
|
||||
@@ -22,6 +22,7 @@ inline fun <T> case_1(block: () -> T): T {
|
||||
return block()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
inline fun case_2(block: () -> Int): Int {
|
||||
contract {
|
||||
callsInPlace<Number>(block, InvocationKind.EXACTLY_ONCE)
|
||||
@@ -29,10 +30,11 @@ inline fun case_2(block: () -> Int): Int {
|
||||
return block()
|
||||
}
|
||||
|
||||
// FILE: usages.kt
|
||||
// FILE: main.kt
|
||||
|
||||
import contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1() {
|
||||
val value_1: Int
|
||||
case_1 {
|
||||
@@ -41,6 +43,7 @@ fun case_1() {
|
||||
println(value_1)
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2() {
|
||||
val value_1: Int
|
||||
case_2 {
|
||||
|
||||
+7
-6
@@ -3,14 +3,14 @@
|
||||
// SKIP_TXT
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, controlFlow, unreachableCode
|
||||
NUMBER: 1
|
||||
DESCRIPTION: Using not allowed break and continue inside lambda of contract function
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, controlFlow, unreachableCode
|
||||
* NUMBER: 1
|
||||
* DESCRIPTION: Using not allowed break and continue inside lambda of contract function
|
||||
*/
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1(value_1: Boolean) {
|
||||
while (value_1) {
|
||||
funWithExactlyOnceCallsInPlace {
|
||||
@@ -27,6 +27,7 @@ fun case_1(value_1: Boolean) {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2(value_1: Boolean) {
|
||||
for (i in 0..10) {
|
||||
funWithExactlyOnceCallsInPlace {
|
||||
|
||||
+13
-6
@@ -4,14 +4,14 @@
|
||||
// SKIP_TXT
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, controlFlow, unreachableCode
|
||||
NUMBER: 1
|
||||
DESCRIPTION: Unreachable code detection using contract function with CallsInPlace effect
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, controlFlow, unreachableCode
|
||||
* NUMBER: 1
|
||||
* DESCRIPTION: Unreachable code detection using contract function with CallsInPlace effect
|
||||
*/
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1() {
|
||||
funWithExactlyOnceCallsInPlace {
|
||||
throw Exception()
|
||||
@@ -19,6 +19,7 @@ fun case_1() {
|
||||
<!UNREACHABLE_CODE!>println("1")<!>
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2() {
|
||||
funWithAtLeastOnceCallsInPlace {
|
||||
throw Exception()
|
||||
@@ -26,6 +27,7 @@ fun case_2() {
|
||||
<!UNREACHABLE_CODE!>println("1")<!>
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun case_3() {
|
||||
funWithExactlyOnceCallsInPlace {
|
||||
return
|
||||
@@ -33,6 +35,7 @@ fun case_3() {
|
||||
<!UNREACHABLE_CODE!>println("1")<!>
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
fun case_4() {
|
||||
funWithAtLeastOnceCallsInPlace {
|
||||
return
|
||||
@@ -40,6 +43,7 @@ fun case_4() {
|
||||
<!UNREACHABLE_CODE!>println("1")<!>
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 5
|
||||
fun case_5(args: Array<String>) {
|
||||
fun nestedFun_1() {
|
||||
funWithAtLeastOnceCallsInPlace {
|
||||
@@ -66,6 +70,7 @@ fun case_5(args: Array<String>) {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 6
|
||||
fun case_6(args: Array<String>) {
|
||||
args.forEach {
|
||||
funWithExactlyOnceCallsInPlace {
|
||||
@@ -91,6 +96,7 @@ fun case_6(args: Array<String>) {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 7
|
||||
fun case_7() {
|
||||
<!UNREACHABLE_CODE!>val value_1 =<!> funWithExactlyOnceCallsInPlace {
|
||||
throw Exception()
|
||||
@@ -100,6 +106,7 @@ fun case_7() {
|
||||
}
|
||||
|
||||
|
||||
// TESTCASE NUMBER: 8
|
||||
fun case_8() {
|
||||
<!UNREACHABLE_CODE!>println(<!>funWithExactlyOnceCallsInPlace { return; <!UNREACHABLE_CODE!>println(1)<!> }<!UNREACHABLE_CODE!>)<!>
|
||||
<!UNREACHABLE_CODE!>return<!>
|
||||
|
||||
+9
-6
@@ -3,14 +3,14 @@
|
||||
// SKIP_TXT
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, controlFlow, unreachableCode
|
||||
NUMBER: 2
|
||||
DESCRIPTION: Check for lack of unreachable code report when 'at most once' and 'unknown' invokations in CallsInPlace effect used.
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, controlFlow, unreachableCode
|
||||
* NUMBER: 2
|
||||
* DESCRIPTION: Check for lack of unreachable code report when 'at most once' and 'unknown' invokations in CallsInPlace effect used.
|
||||
*/
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1() {
|
||||
funWithAtMostOnceCallsInPlace {
|
||||
throw Exception()
|
||||
@@ -21,6 +21,7 @@ fun case_1() {
|
||||
println("1")
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2() {
|
||||
funWithUnknownCallsInPlace {
|
||||
throw Exception()
|
||||
@@ -31,6 +32,7 @@ fun case_2() {
|
||||
println("1")
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun case_3() {
|
||||
funWithExactlyOnceCallsInPlace {
|
||||
return@funWithExactlyOnceCallsInPlace
|
||||
@@ -53,6 +55,7 @@ fun case_3() {
|
||||
println("1")
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
fun case_4() {
|
||||
funWithAtLeastOnceCallsInPlace {
|
||||
return@funWithAtLeastOnceCallsInPlace
|
||||
|
||||
+11
-6
@@ -3,14 +3,14 @@
|
||||
// SKIP_TXT
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, controlFlow, unreachableCode
|
||||
NUMBER: 3
|
||||
DESCRIPTION: Unreachable code detection using local functions or labdas combined with contract functions with CallsInPlace effect
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, controlFlow, unreachableCode
|
||||
* NUMBER: 3
|
||||
* DESCRIPTION: Unreachable code detection using local functions or labdas combined with contract functions with CallsInPlace effect
|
||||
*/
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1() {
|
||||
funWithExactlyOnceCallsInPlace {
|
||||
throw Exception()
|
||||
@@ -18,6 +18,7 @@ fun case_1() {
|
||||
<!UNREACHABLE_CODE!>println("1")<!>
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2() {
|
||||
funWithAtLeastOnceCallsInPlace {
|
||||
throw Exception()
|
||||
@@ -25,6 +26,7 @@ fun case_2() {
|
||||
<!UNREACHABLE_CODE!>println("1")<!>
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun case_3() {
|
||||
funWithExactlyOnceCallsInPlace {
|
||||
return
|
||||
@@ -32,6 +34,7 @@ fun case_3() {
|
||||
<!UNREACHABLE_CODE!>println("1")<!>
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
fun case_4() {
|
||||
funWithAtLeastOnceCallsInPlace {
|
||||
return
|
||||
@@ -39,6 +42,7 @@ fun case_4() {
|
||||
<!UNREACHABLE_CODE!>println("1")<!>
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 5
|
||||
fun case_5(args: Array<String>) {
|
||||
fun nestedFun_1() {
|
||||
funWithAtLeastOnceCallsInPlace {
|
||||
@@ -65,6 +69,7 @@ fun case_5(args: Array<String>) {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 6
|
||||
fun case_6(args: Array<String>) {
|
||||
args.forEach {
|
||||
funWithExactlyOnceCallsInPlace {
|
||||
|
||||
+8
-6
@@ -3,14 +3,14 @@
|
||||
// SKIP_TXT
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, controlFlow, unreachableCode
|
||||
NUMBER: 4
|
||||
DESCRIPTION: Unreachable code detection using nested contract functions with CallsInPlace effect
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, controlFlow, unreachableCode
|
||||
* NUMBER: 4
|
||||
* DESCRIPTION: Unreachable code detection using nested contract functions with CallsInPlace effect
|
||||
*/
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1() {
|
||||
funWithExactlyOnceCallsInPlace {
|
||||
funWithExactlyOnceCallsInPlace {
|
||||
@@ -24,6 +24,7 @@ fun case_1() {
|
||||
<!UNREACHABLE_CODE!>println("3")<!>
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2() {
|
||||
funWithAtLeastOnceCallsInPlace {
|
||||
funWithAtLeastOnceCallsInPlace label_1@ {
|
||||
@@ -40,6 +41,7 @@ fun case_2() {
|
||||
<!UNREACHABLE_CODE!>println("3")<!>
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun case_3() {
|
||||
funWithExactlyOnceCallsInPlace {
|
||||
funWithExactlyOnceCallsInPlace {
|
||||
|
||||
+7
-6
@@ -3,14 +3,14 @@
|
||||
// SKIP_TXT
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, controlFlow, unreachableCode
|
||||
NUMBER: 5
|
||||
DESCRIPTION: Unreachable code detection using contract functions with complex control flow inside
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, controlFlow, unreachableCode
|
||||
* NUMBER: 5
|
||||
* DESCRIPTION: Unreachable code detection using contract functions with complex control flow inside
|
||||
*/
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1(b: Boolean?) {
|
||||
funWithExactlyOnceCallsInPlace {
|
||||
if (b == null) return
|
||||
@@ -30,6 +30,7 @@ fun case_1(b: Boolean?) {
|
||||
<!UNREACHABLE_CODE!>println(3)<!>
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2(b: Boolean?, c: Boolean) {
|
||||
funWithAtLeastOnceCallsInPlace {
|
||||
when (b) {
|
||||
|
||||
+7
-6
@@ -3,14 +3,14 @@
|
||||
// SKIP_TXT
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, controlFlow, unreachableCode
|
||||
NUMBER: 6
|
||||
DESCRIPTION: Check for lack of unreachable code report when in complex control flow of contract function lambda not all branches are doing non-local return
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, controlFlow, unreachableCode
|
||||
* NUMBER: 6
|
||||
* DESCRIPTION: Check for lack of unreachable code report when in complex control flow of contract function lambda not all branches are doing non-local return
|
||||
*/
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1(b: Boolean?, c: Boolean) {
|
||||
funWithExactlyOnceCallsInPlace {
|
||||
if (b == null) return
|
||||
@@ -38,6 +38,7 @@ fun case_1(b: Boolean?, c: Boolean) {
|
||||
println(3)
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2(b: Boolean?, c: Boolean) {
|
||||
funWithAtLeastOnceCallsInPlace {
|
||||
when (b) {
|
||||
|
||||
+9
-8
@@ -1,13 +1,12 @@
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, controlFlow, unreachableCode
|
||||
NUMBER: 7
|
||||
DESCRIPTION: Smart initialization with correspond contract function with default value before lambda.
|
||||
ISSUES: KT-26444
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, controlFlow, unreachableCode
|
||||
* NUMBER: 7
|
||||
* DESCRIPTION: Smart initialization with correspond contract function with default value before lambda.
|
||||
* ISSUES: KT-26444
|
||||
*/
|
||||
|
||||
// FILE: contracts.kt
|
||||
@@ -16,15 +15,17 @@ package contracts
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1(x: Double = 1.0, block: () -> Unit): Double {
|
||||
contract { callsInPlace(block, InvocationKind.AT_LEAST_ONCE) }
|
||||
return x
|
||||
}
|
||||
|
||||
// FILE: usages.kt
|
||||
// FILE: main.kt
|
||||
|
||||
import contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1() {
|
||||
contracts.case_1 { throw Exception() }
|
||||
<!UNREACHABLE_CODE!>println(1)<!>
|
||||
|
||||
+16
-6
@@ -3,44 +3,50 @@
|
||||
// SKIP_TXT
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, smartcasts
|
||||
NUMBER: 1
|
||||
DESCRIPTION: Smartcasts using Returns effects with simple type checking, not-null conditions and custom condition (condition for smartcast outside contract).
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, smartcasts
|
||||
* NUMBER: 1
|
||||
* DESCRIPTION: Smartcasts using Returns effects with simple type checking, not-null conditions and custom condition (condition for smartcast outside contract).
|
||||
*/
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1(value_1: Any?) {
|
||||
funWithReturns(value_1 !is String)
|
||||
println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2(value_1: Int?) {
|
||||
funWithReturnsAndInvertCondition(value_1 != null)
|
||||
println(<!DEBUG_INFO_CONSTANT!>value_1<!><!UNSAFE_CALL!>.<!>inc())
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun case_3(value_1: Int?) {
|
||||
funWithReturns(value_1 == null)
|
||||
println(<!DEBUG_INFO_CONSTANT!>value_1<!><!UNSAFE_CALL!>.<!>inc())
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
fun case_4(value_1: Any?) {
|
||||
funWithReturnsAndInvertTypeCheck(value_1)
|
||||
println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 5
|
||||
fun case_5(value_1: String?) {
|
||||
funWithReturnsAndNullCheck(value_1)
|
||||
println(<!DEBUG_INFO_CONSTANT!>value_1<!><!UNSAFE_CALL!>.<!>length)
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 6
|
||||
fun case_6(value_1: String?) {
|
||||
funWithReturnsAndNullCheck(value_1)
|
||||
println(<!DEBUG_INFO_CONSTANT!>value_1<!><!UNSAFE_CALL!>.<!>length)
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 7
|
||||
object case_7_object {
|
||||
val prop_1: Int? = 10
|
||||
}
|
||||
@@ -49,6 +55,7 @@ fun case_7() {
|
||||
<!DEBUG_INFO_CONSTANT!>case_7_object.prop_1<!><!UNSAFE_CALL!>.<!>inc()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 8
|
||||
fun case_8(value_1: Any?) {
|
||||
if (!funWithReturnsTrue(value_1 is String)) println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
if (!funWithReturnsTrueAndInvertCondition(value_1 !is String)) println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
@@ -60,6 +67,7 @@ fun case_8(value_1: Any?) {
|
||||
if (funWithReturnsNull(value_1 is String) != null) println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 9
|
||||
fun case_9(value_1: String?) {
|
||||
if (!funWithReturnsTrue(value_1 != null)) println(value_1<!UNSAFE_CALL!>.<!>length)
|
||||
if (!funWithReturnsTrueAndInvertCondition(value_1 == null)) println(value_1<!UNSAFE_CALL!>.<!>length)
|
||||
@@ -71,6 +79,7 @@ fun case_9(value_1: String?) {
|
||||
if (funWithReturnsNullAndInvertCondition(value_1 == null) != null) println(value_1<!UNSAFE_CALL!>.<!>length)
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 10
|
||||
fun case_10(value_1: Any?) {
|
||||
if (!funWithReturnsTrueAndTypeCheck(value_1)) println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
if (!!funWithReturnsFalseAndTypeCheck(value_1)) println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
@@ -80,6 +89,7 @@ fun case_10(value_1: Any?) {
|
||||
if (!(funWithReturnsNullAndTypeCheck(value_1) == null)) println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 11
|
||||
fun case_11(value_1: Number?) {
|
||||
if (!funWithReturnsTrueAndNotNullCheck(value_1)) println(value_1<!UNSAFE_CALL!>.<!>toByte())
|
||||
if (!funWithReturnsTrueAndNullCheck(value_1)) println(value_1)
|
||||
|
||||
+224
-186
@@ -2,13 +2,12 @@
|
||||
// !WITH_CONTRACT_FUNCTIONS
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, smartcasts
|
||||
NUMBER: 10
|
||||
DESCRIPTION: Check smartcasts using double negation (returnsFalse/invert type checking/not operator).
|
||||
ISSUES: KT-26176
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, smartcasts
|
||||
* NUMBER: 10
|
||||
* DESCRIPTION: Check smartcasts using double negation (returnsFalse/invert type checking/not operator).
|
||||
* ISSUES: KT-26176
|
||||
*/
|
||||
|
||||
// FILE: contracts.kt
|
||||
@@ -17,204 +16,222 @@ package contracts
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1(x: Any?): Boolean {
|
||||
contract { returns(true) implies (x !is Number) }
|
||||
return x !is Number
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2(x: Any?): Boolean {
|
||||
contract { returns(true) implies (x !is Number?) }
|
||||
return x !is Number?
|
||||
}
|
||||
|
||||
fun case_16_1(value_1: Any?, value_2: Any?): Boolean {
|
||||
// TESTCASE NUMBER: 15
|
||||
fun case_15_1(value_1: Any?, value_2: Any?): Boolean {
|
||||
contract { returns(true) implies (value_1 !is String || value_2 !is Number) }
|
||||
return value_1 !is String || value_2 !is Number
|
||||
}
|
||||
fun case_16_2(value_1: Any?, value_2: Any?): Boolean {
|
||||
fun case_15_2(value_1: Any?, value_2: Any?): Boolean {
|
||||
contract { returns(false) implies (value_1 !is String || value_2 !is Number) }
|
||||
return !(value_1 !is String || value_2 !is Number)
|
||||
}
|
||||
fun case_16_3(value_1: Any?, value_2: Any?): Boolean? {
|
||||
fun case_15_3(value_1: Any?, value_2: Any?): Boolean? {
|
||||
contract { returnsNotNull() implies (value_1 !is String || value_2 !is Number) }
|
||||
return if (value_1 !is String || value_2 !is Number) true else null
|
||||
}
|
||||
fun case_16_4(value_1: Any?, value_2: Any?): Boolean? {
|
||||
fun case_15_4(value_1: Any?, value_2: Any?): Boolean? {
|
||||
contract { returns(null) implies (value_1 !is String || value_2 !is Number) }
|
||||
return if (value_1 !is String || value_2 !is Number) null else true
|
||||
}
|
||||
|
||||
fun case_17_1(value_1: Any?, value_2: Any?): Boolean {
|
||||
// TESTCASE NUMBER: 16
|
||||
fun case_16_1(value_1: Any?, value_2: Any?): Boolean {
|
||||
contract { returns(true) implies (value_1 !is String || value_2 != null) }
|
||||
return value_1 !is String || value_2 != null
|
||||
}
|
||||
fun case_17_2(value_1: Any?, value_2: Any?): Boolean {
|
||||
fun case_16_2(value_1: Any?, value_2: Any?): Boolean {
|
||||
contract { returns(false) implies (value_1 !is String || value_2 != null) }
|
||||
return !(value_1 !is String || value_2 != null)
|
||||
}
|
||||
fun case_17_3(value_1: Any?, value_2: Any?): Boolean? {
|
||||
fun case_16_3(value_1: Any?, value_2: Any?): Boolean? {
|
||||
contract { returnsNotNull() implies (value_1 !is String || value_2 != null) }
|
||||
return if (value_1 !is String || value_2 != null) true else null
|
||||
}
|
||||
fun case_17_4(value_1: Any?, value_2: Any?): Boolean? {
|
||||
fun case_16_4(value_1: Any?, value_2: Any?): Boolean? {
|
||||
contract { returns(null) implies (value_1 !is String || value_2 != null) }
|
||||
return if (value_1 !is String || value_2 != null) null else true
|
||||
}
|
||||
|
||||
fun case_18_1(value_1: Any?, value_2: Any?, value_3: Any?, value_4: Any?): Boolean {
|
||||
// TESTCASE NUMBER: 17
|
||||
fun case_17_1(value_1: Any?, value_2: Any?, value_3: Any?, value_4: Any?): Boolean {
|
||||
contract { returns(true) implies (value_1 !is Float? || value_1 == null || value_2 == null || value_3 == null || value_4 == null) }
|
||||
return value_1 !is Float? || value_1 == null || value_2 == null || value_3 == null || value_4 == null
|
||||
}
|
||||
fun case_18_2(value_1: Any?, value_2: Any?, value_3: Any?, value_4: Any?): Boolean {
|
||||
fun case_17_2(value_1: Any?, value_2: Any?, value_3: Any?, value_4: Any?): Boolean {
|
||||
contract { returns(false) implies (value_1 !is Float? || value_1 == null || value_2 == null || value_3 == null || value_4 == null) }
|
||||
return !(value_1 !is Float? || value_1 == null || value_2 == null || value_3 == null || value_4 == null)
|
||||
}
|
||||
fun case_18_3(value_1: Any?, value_2: Any?, value_3: Any?, value_4: Any?): Boolean? {
|
||||
fun case_17_3(value_1: Any?, value_2: Any?, value_3: Any?, value_4: Any?): Boolean? {
|
||||
contract { returnsNotNull() implies (value_1 !is Float? || value_1 == null || value_2 == null || value_3 == null || value_4 == null) }
|
||||
return if (value_1 !is Float? || value_1 == null || value_2 == null || value_3 == null || value_4 == null) true else null
|
||||
}
|
||||
fun case_18_4(value_1: Any?, value_2: Any?, value_3: Any?, value_4: Any?): Boolean? {
|
||||
fun case_17_4(value_1: Any?, value_2: Any?, value_3: Any?, value_4: Any?): Boolean? {
|
||||
contract { returns(null) implies (value_1 !is Float? || value_1 == null || value_2 == null || value_3 == null || value_4 == null) }
|
||||
return if (value_1 !is Float? || value_1 == null || value_2 == null || value_3 == null || value_4 == null) null else true
|
||||
}
|
||||
|
||||
fun <T> T.case_19_1(): Boolean {
|
||||
contract { returns(true) implies (this@case_19_1 !is String) }
|
||||
return this@case_19_1 !is String
|
||||
// TESTCASE NUMBER: 18
|
||||
fun <T> T.case_18_1(): Boolean {
|
||||
contract { returns(true) implies (this@case_18_1 !is String) }
|
||||
return this@case_18_1 !is String
|
||||
}
|
||||
fun <T> T.case_19_2(): Boolean {
|
||||
contract { returns(false) implies (this@case_19_2 is String) }
|
||||
return !(this@case_19_2 is String)
|
||||
fun <T> T.case_18_2(): Boolean {
|
||||
contract { returns(false) implies (this@case_18_2 is String) }
|
||||
return !(this@case_18_2 is String)
|
||||
}
|
||||
fun <T> T.case_19_3(): Boolean? {
|
||||
contract { returnsNotNull() implies (this@case_19_3 is String) }
|
||||
return if (this@case_19_3 is String) true else null
|
||||
fun <T> T.case_18_3(): Boolean? {
|
||||
contract { returnsNotNull() implies (this@case_18_3 is String) }
|
||||
return if (this@case_18_3 is String) true else null
|
||||
}
|
||||
fun <T> T.case_19_4(): Boolean? {
|
||||
contract { returns(null) implies (this@case_19_4 is String) }
|
||||
return if (this@case_19_4 is String) null else true
|
||||
fun <T> T.case_18_4(): Boolean? {
|
||||
contract { returns(null) implies (this@case_18_4 is String) }
|
||||
return if (this@case_18_4 is String) null else true
|
||||
}
|
||||
|
||||
fun <T : Number> T.case_20_1(): Boolean {
|
||||
contract { returns(true) implies (this@case_20_1 !is Int) }
|
||||
return this@case_20_1 !is Int
|
||||
// TESTCASE NUMBER: 19
|
||||
fun <T : Number> T.case_19_1(): Boolean {
|
||||
contract { returns(true) implies (this@case_19_1 !is Int) }
|
||||
return this@case_19_1 !is Int
|
||||
}
|
||||
fun <T : Number> T.case_20_2(): Boolean {
|
||||
contract { returns(false) implies (this@case_20_2 is Int) }
|
||||
return !(this@case_20_2 is Int)
|
||||
fun <T : Number> T.case_19_2(): Boolean {
|
||||
contract { returns(false) implies (this@case_19_2 is Int) }
|
||||
return !(this@case_19_2 is Int)
|
||||
}
|
||||
fun <T : Number> T.case_20_3(): Boolean? {
|
||||
contract { returnsNotNull() implies (this@case_20_3 is Int) }
|
||||
return if (this@case_20_3 is Int) true else null
|
||||
fun <T : Number> T.case_19_3(): Boolean? {
|
||||
contract { returnsNotNull() implies (this@case_19_3 is Int) }
|
||||
return if (this@case_19_3 is Int) true else null
|
||||
}
|
||||
fun <T : Number> T.case_20_4(): Boolean? {
|
||||
contract { returns(null) implies (this@case_20_4 is Int) }
|
||||
return if (this@case_20_4 is Int) null else true
|
||||
fun <T : Number> T.case_19_4(): Boolean? {
|
||||
contract { returns(null) implies (this@case_19_4 is Int) }
|
||||
return if (this@case_19_4 is Int) null else true
|
||||
}
|
||||
|
||||
fun <T : <!FINAL_UPPER_BOUND!>String<!>> T?.case_21_1(): Boolean {
|
||||
// TESTCASE NUMBER: 20
|
||||
fun <T : <!FINAL_UPPER_BOUND!>String<!>> T?.case_20_1(): Boolean {
|
||||
contract { returns(true) implies (this@case_20_1 != null) }
|
||||
return this@case_20_1 != null
|
||||
}
|
||||
fun <T : <!FINAL_UPPER_BOUND!>String<!>> T?.case_20_2(): Boolean {
|
||||
contract { returns(true) implies (this@case_20_2 == null) }
|
||||
return this@case_20_2 == null
|
||||
}
|
||||
fun <T : <!FINAL_UPPER_BOUND!>String<!>> T?.case_20_3(): Boolean {
|
||||
contract { returns(false) implies (this@case_20_3 != null) }
|
||||
return !(this@case_20_3 != null)
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 21
|
||||
fun <T : String?> T.case_21_1(): Boolean {
|
||||
contract { returns(true) implies (this@case_21_1 != null) }
|
||||
return this@case_21_1 != null
|
||||
}
|
||||
fun <T : <!FINAL_UPPER_BOUND!>String<!>> T?.case_21_2(): Boolean {
|
||||
fun <T : String?> T.case_21_2(): Boolean {
|
||||
contract { returns(true) implies (this@case_21_2 == null) }
|
||||
return this@case_21_2 == null
|
||||
}
|
||||
fun <T : <!FINAL_UPPER_BOUND!>String<!>> T?.case_21_3(): Boolean {
|
||||
contract { returns(false) implies (this@case_21_3 != null) }
|
||||
return !(this@case_21_3 != null)
|
||||
fun <T : <!FINAL_UPPER_BOUND!>String<!>> T?.case_21_5(): Boolean? {
|
||||
contract { returnsNotNull() implies (this@case_21_5 != null) }
|
||||
return if (this@case_21_5 != null) true else null
|
||||
}
|
||||
fun <T : <!FINAL_UPPER_BOUND!>String<!>> T?.case_21_7(): Boolean? {
|
||||
contract { returns(null) implies (this@case_21_7 != null) }
|
||||
return if (this@case_21_7 != null) null else true
|
||||
}
|
||||
|
||||
fun <T : String?> T.case_22_1(): Boolean {
|
||||
contract { returns(true) implies (this@case_22_1 != null) }
|
||||
return this@case_22_1 != null
|
||||
// TESTCASE NUMBER: 22
|
||||
fun <T> T?.case_22_1(): Boolean {
|
||||
contract { returns(false) implies (this@case_22_1 == null || this@case_22_1 !is String) }
|
||||
return !(this@case_22_1 == null || this@case_22_1 !is String)
|
||||
}
|
||||
fun <T : String?> T.case_22_2(): Boolean {
|
||||
contract { returns(true) implies (this@case_22_2 == null) }
|
||||
return this@case_22_2 == null
|
||||
fun <T> T?.case_22_2(): Boolean? {
|
||||
contract { returnsNotNull() implies (this@case_22_2 == null || this@case_22_2 !is String) }
|
||||
return if (this@case_22_2 == null || this@case_22_2 !is String) true else null
|
||||
}
|
||||
fun <T : <!FINAL_UPPER_BOUND!>String<!>> T?.case_22_5(): Boolean? {
|
||||
contract { returnsNotNull() implies (this@case_22_5 != null) }
|
||||
return if (this@case_22_5 != null) true else null
|
||||
}
|
||||
fun <T : <!FINAL_UPPER_BOUND!>String<!>> T?.case_22_7(): Boolean? {
|
||||
contract { returns(null) implies (this@case_22_7 != null) }
|
||||
return if (this@case_22_7 != null) null else true
|
||||
fun <T> T?.case_22_3(): Boolean? {
|
||||
contract { returns(null) implies (this@case_22_3 == null || this@case_22_3 !is String) }
|
||||
return if (this@case_22_3 == null || this@case_22_3 !is String) null else true
|
||||
}
|
||||
|
||||
fun <T> T?.case_23_1(): Boolean {
|
||||
contract { returns(false) implies (this@case_23_1 == null || this@case_23_1 !is String) }
|
||||
return !(this@case_23_1 == null || this@case_23_1 !is String)
|
||||
// TESTCASE NUMBER: 23
|
||||
fun <T : Number?> T.case_23_1(): Boolean {
|
||||
contract { returns(false) implies (this@case_23_1 !is Int || <!SENSELESS_COMPARISON!>this@case_23_1 == null<!>) }
|
||||
return !(this@case_23_1 !is Int || <!SENSELESS_COMPARISON!>this@case_23_1 == null<!>)
|
||||
}
|
||||
fun <T> T?.case_23_2(): Boolean? {
|
||||
contract { returnsNotNull() implies (this@case_23_2 == null || this@case_23_2 !is String) }
|
||||
return if (this@case_23_2 == null || this@case_23_2 !is String) true else null
|
||||
fun <T : Number?> T.case_23_2(): Boolean? {
|
||||
contract { returnsNotNull() implies (this@case_23_2 !is Int || <!SENSELESS_COMPARISON!>this@case_23_2 == null<!>) }
|
||||
return if (this@case_23_2 !is Int || <!SENSELESS_COMPARISON!>this@case_23_2 == null<!>) true else null
|
||||
}
|
||||
fun <T> T?.case_23_3(): Boolean? {
|
||||
contract { returns(null) implies (this@case_23_3 == null || this@case_23_3 !is String) }
|
||||
return if (this@case_23_3 == null || this@case_23_3 !is String) null else true
|
||||
fun <T : Number?> T.case_23_3(): Boolean? {
|
||||
contract { returns(null) implies (this@case_23_3 !is Int || <!SENSELESS_COMPARISON!>this@case_23_3 == null<!>) }
|
||||
return if (this@case_23_3 !is Int || <!SENSELESS_COMPARISON!>this@case_23_3 == null<!>) null else true
|
||||
}
|
||||
|
||||
fun <T : Number?> T.case_24_1(): Boolean {
|
||||
contract { returns(false) implies (this@case_24_1 !is Int || <!SENSELESS_COMPARISON!>this@case_24_1 == null<!>) }
|
||||
return !(this@case_24_1 !is Int || <!SENSELESS_COMPARISON!>this@case_24_1 == null<!>)
|
||||
// TESTCASE NUMBER: 24
|
||||
inline fun <reified T : Any?> T?.case_24_1(): Boolean {
|
||||
contract { returns(false) implies (this@case_24_1 !is Number || this@case_24_1 !is Int || <!SENSELESS_COMPARISON!>this@case_24_1 == null<!>) }
|
||||
return !(this@case_24_1 !is Number || this@case_24_1 !is Int || <!SENSELESS_COMPARISON!>this@case_24_1 == null<!>)
|
||||
}
|
||||
fun <T : Number?> T.case_24_2(): Boolean? {
|
||||
contract { returnsNotNull() implies (this@case_24_2 !is Int || <!SENSELESS_COMPARISON!>this@case_24_2 == null<!>) }
|
||||
return if (this@case_24_2 !is Int || <!SENSELESS_COMPARISON!>this@case_24_2 == null<!>) true else null
|
||||
inline fun <reified T : Any?> T?.case_24_2(): Boolean? {
|
||||
contract { returnsNotNull() implies (this@case_24_2 !is Number || this@case_24_2 !is Int || <!SENSELESS_COMPARISON!>this@case_24_2 == null<!>) }
|
||||
return if (this@case_24_2 !is Number || this@case_24_2 !is Int || <!SENSELESS_COMPARISON!>this@case_24_2 == null<!>) true else null
|
||||
}
|
||||
fun <T : Number?> T.case_24_3(): Boolean? {
|
||||
contract { returns(null) implies (this@case_24_3 !is Int || <!SENSELESS_COMPARISON!>this@case_24_3 == null<!>) }
|
||||
return if (this@case_24_3 !is Int || <!SENSELESS_COMPARISON!>this@case_24_3 == null<!>) null else true
|
||||
inline fun <reified T : Any?> T?.case_24_3(): Boolean? {
|
||||
contract { returns(null) implies (this@case_24_3 !is Number || this@case_24_3 !is Int || <!SENSELESS_COMPARISON!>this@case_24_3 == null<!>) }
|
||||
return if (this@case_24_3 !is Number || this@case_24_3 !is Int || <!SENSELESS_COMPARISON!>this@case_24_3 == null<!>) null else true
|
||||
}
|
||||
|
||||
inline fun <reified T : Any?> T?.case_25_1(): Boolean {
|
||||
contract { returns(false) implies (this@case_25_1 !is Number || this@case_25_1 !is Int || <!SENSELESS_COMPARISON!>this@case_25_1 == null<!>) }
|
||||
return !(this@case_25_1 !is Number || this@case_25_1 !is Int || <!SENSELESS_COMPARISON!>this@case_25_1 == null<!>)
|
||||
// TESTCASE NUMBER: 25
|
||||
fun <T> T?.case_25_1(value_1: Int?): Boolean {
|
||||
contract { returns(false) implies (this@case_25_1 == null || this@case_25_1 !is String || value_1 == null) }
|
||||
return !(this@case_25_1 == null || this@case_25_1 !is String || value_1 == null)
|
||||
}
|
||||
inline fun <reified T : Any?> T?.case_25_2(): Boolean? {
|
||||
contract { returnsNotNull() implies (this@case_25_2 !is Number || this@case_25_2 !is Int || <!SENSELESS_COMPARISON!>this@case_25_2 == null<!>) }
|
||||
return if (this@case_25_2 !is Number || this@case_25_2 !is Int || <!SENSELESS_COMPARISON!>this@case_25_2 == null<!>) true else null
|
||||
fun <T> T?.case_25_2(value_1: Int?): Boolean? {
|
||||
contract { returnsNotNull() implies (this@case_25_2 == null || this@case_25_2 !is String || value_1 == null) }
|
||||
return if (this@case_25_2 == null || this@case_25_2 !is String || value_1 == null) true else null
|
||||
}
|
||||
inline fun <reified T : Any?> T?.case_25_3(): Boolean? {
|
||||
contract { returns(null) implies (this@case_25_3 !is Number || this@case_25_3 !is Int || <!SENSELESS_COMPARISON!>this@case_25_3 == null<!>) }
|
||||
return if (this@case_25_3 !is Number || this@case_25_3 !is Int || <!SENSELESS_COMPARISON!>this@case_25_3 == null<!>) null else true
|
||||
fun <T> T?.case_25_3(value_1: Int?): Boolean? {
|
||||
contract { returns(null) implies (this@case_25_3 == null || this@case_25_3 !is String || value_1 == null) }
|
||||
return if (this@case_25_3 == null || this@case_25_3 !is String || value_1 == null) null else true
|
||||
}
|
||||
|
||||
fun <T> T?.case_26_1(value_1: Int?): Boolean {
|
||||
contract { returns(false) implies (this@case_26_1 == null || this@case_26_1 !is String || value_1 == null) }
|
||||
return !(this@case_26_1 == null || this@case_26_1 !is String || value_1 == null)
|
||||
}
|
||||
fun <T> T?.case_26_2(value_1: Int?): Boolean? {
|
||||
contract { returnsNotNull() implies (this@case_26_2 == null || this@case_26_2 !is String || value_1 == null) }
|
||||
return if (this@case_26_2 == null || this@case_26_2 !is String || value_1 == null) true else null
|
||||
}
|
||||
fun <T> T?.case_26_3(value_1: Int?): Boolean? {
|
||||
contract { returns(null) implies (this@case_26_3 == null || this@case_26_3 !is String || value_1 == null) }
|
||||
return if (this@case_26_3 == null || this@case_26_3 !is String || value_1 == null) null else true
|
||||
}
|
||||
|
||||
// FILE: usages.kt
|
||||
// FILE: main.kt
|
||||
|
||||
import contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1(value_1: Any?) {
|
||||
if (!contracts.case_1(value_1)) println(value_1.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>toByte<!>()) // no smartcast
|
||||
if (!contracts.case_1(value_1)) println(value_1.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>toByte<!>())
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2(value_1: Any?) {
|
||||
if (!contracts.case_2(value_1)) println(value_1?.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>toByte<!>()) // no smartcast
|
||||
if (!contracts.case_2(value_1)) println(value_1?.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>toByte<!>())
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun case_3(number: Int?) {
|
||||
if (!funWithReturnsTrueAndNullCheck(number)) number<!UNSAFE_CALL!>.<!>inc() // nullable receiver
|
||||
if (!funWithReturnsTrueAndNullCheck(number)) number<!UNSAFE_CALL!>.<!>inc()
|
||||
}
|
||||
|
||||
fun case_5(value_1: Any?) {
|
||||
// TESTCASE NUMBER: 4
|
||||
fun case_4(value_1: Any?) {
|
||||
if (!funWithReturnsTrue(value_1 !is String)) println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
}
|
||||
|
||||
fun case_6(value_1: Any?) {
|
||||
// TESTCASE NUMBER: 5
|
||||
fun case_5(value_1: Any?) {
|
||||
if (!funWithReturnsTrueAndInvertCondition(value_1 is String)) println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
if (funWithReturnsFalse(value_1 !is String)) println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
if (funWithReturnsFalseAndInvertCondition(value_1 is String)) println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
@@ -222,22 +239,26 @@ fun case_6(value_1: Any?) {
|
||||
if (!(funWithReturnsNullAndInvertCondition(value_1 !is String) == null)) println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
}
|
||||
|
||||
fun case_7(value_1: Any?) {
|
||||
// TESTCASE NUMBER: 6
|
||||
fun case_6(value_1: Any?) {
|
||||
if (!funWithReturnsTrue(value_1 == null)) println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
}
|
||||
|
||||
fun case_8(value_1: Any?) {
|
||||
// TESTCASE NUMBER: 7
|
||||
fun case_7(value_1: Any?) {
|
||||
if (!funWithReturnsTrueAndInvertCondition(value_1 != null)) println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
if (funWithReturnsFalse(value_1 == null)) println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
if (funWithReturnsFalseAndInvertCondition(value_1 != null)) println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
}
|
||||
|
||||
fun case_9(value_1: Any?) {
|
||||
// TESTCASE NUMBER: 8
|
||||
fun case_8(value_1: Any?) {
|
||||
if (!funWithReturnsTrueAndInvertTypeCheck(value_1)) println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
if (funWithReturnsFalseAndInvertTypeCheck(value_1)) println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
}
|
||||
|
||||
fun case_10(value_1: Number?) {
|
||||
// TESTCASE NUMBER: 9
|
||||
fun case_9(value_1: Number?) {
|
||||
if (!funWithReturnsTrueAndNullCheck(value_1)) println(value_1<!UNSAFE_CALL!>.<!>toByte())
|
||||
if (funWithReturnsFalseAndNullCheck(value_1)) println(value_1<!UNSAFE_CALL!>.<!>toByte())
|
||||
if (funWithReturnsFalseAndNotNullCheck(value_1)) println(value_1)
|
||||
@@ -245,14 +266,16 @@ fun case_10(value_1: Number?) {
|
||||
if (!(funWithReturnsNullAndNullCheck(value_1) == null)) println(value_1)
|
||||
}
|
||||
|
||||
fun case_11(value_1: Any?, value_2: Any?) {
|
||||
// TESTCASE NUMBER: 10
|
||||
fun case_10(value_1: Any?, value_2: Any?) {
|
||||
if (!funWithReturnsTrueAndInvertCondition(value_1 is String && value_2 is Number)) {
|
||||
println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
println(value_2.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>toByte<!>())
|
||||
}
|
||||
}
|
||||
|
||||
fun case_12(value_1: Any?, value_2: Any?) {
|
||||
// TESTCASE NUMBER: 11
|
||||
fun case_11(value_1: Any?, value_2: Any?) {
|
||||
if (!funWithReturnsTrue(value_1 !is String || value_2 !is Number)) {
|
||||
println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
println(value_2.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>toByte<!>())
|
||||
@@ -263,7 +286,8 @@ fun case_12(value_1: Any?, value_2: Any?) {
|
||||
}
|
||||
}
|
||||
|
||||
fun case_13(value_1: Any?, value_2: Any?) {
|
||||
// TESTCASE NUMBER: 12
|
||||
fun case_12(value_1: Any?, value_2: Any?) {
|
||||
if (!funWithReturnsTrue(value_1 !is String || value_2 != null)) {
|
||||
println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
println(value_2?.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>toByte<!>())
|
||||
@@ -282,7 +306,8 @@ fun case_13(value_1: Any?, value_2: Any?) {
|
||||
}
|
||||
}
|
||||
|
||||
fun case_14(value_1: Any?, value_2: Any?) {
|
||||
// TESTCASE NUMBER: 13
|
||||
fun case_13(value_1: Any?, value_2: Any?) {
|
||||
if (!funWithReturnsTrueAndInvertCondition(value_1 is Float? && value_1 != null && value_2 != null)) {
|
||||
println(value_1.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>dec<!>())
|
||||
println(value_2?.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>toByte<!>())
|
||||
@@ -321,11 +346,12 @@ fun case_14(value_1: Any?, value_2: Any?) {
|
||||
}
|
||||
}
|
||||
|
||||
class case_15_class {
|
||||
// TESTCASE NUMBER: 14
|
||||
class case_14_class {
|
||||
val prop_1: Int? = 10
|
||||
|
||||
fun case_15(value_1: Any?, value_2: Number?) {
|
||||
val o = case_15_class()
|
||||
fun case_14(value_1: Any?, value_2: Number?) {
|
||||
val o = case_14_class()
|
||||
if (!funWithReturnsTrueAndInvertCondition(value_1 is Float? && value_1 != null && value_2 != null && o.prop_1 != null)) {
|
||||
println(value_1.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>dec<!>())
|
||||
println(value_2?.toByte())
|
||||
@@ -349,67 +375,71 @@ class case_15_class {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 15
|
||||
fun case_15(value_1: Any?, value_2: Any?) {
|
||||
if (!contracts.case_15_1(value_1, value_2)) {
|
||||
println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
println(value_2.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>toByte<!>())
|
||||
}
|
||||
if (contracts.case_15_2(value_1, value_2)) {
|
||||
println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
println(value_2.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>toByte<!>())
|
||||
}
|
||||
if (!(contracts.case_15_3(value_1, value_2) != null)) {
|
||||
println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
println(value_2.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>toByte<!>())
|
||||
}
|
||||
if (!(contracts.case_15_4(value_1, value_2) == null)) {
|
||||
println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
println(value_2.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>toByte<!>())
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 16
|
||||
fun case_16(value_1: Any?, value_2: Any?) {
|
||||
if (!contracts.case_16_1(value_1, value_2)) {
|
||||
println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
println(value_2.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>toByte<!>())
|
||||
println(value_2?.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>toByte<!>())
|
||||
}
|
||||
if (contracts.case_16_2(value_1, value_2)) {
|
||||
println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
println(value_2.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>toByte<!>())
|
||||
println(value_2?.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>toByte<!>())
|
||||
}
|
||||
if (!(contracts.case_16_3(value_1, value_2) != null)) {
|
||||
println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
println(value_2.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>toByte<!>())
|
||||
}
|
||||
if (!(contracts.case_16_4(value_1, value_2) == null)) {
|
||||
println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
println(value_2.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>toByte<!>())
|
||||
}
|
||||
}
|
||||
|
||||
fun case_17(value_1: Any?, value_2: Any?) {
|
||||
if (!contracts.case_17_1(value_1, value_2)) {
|
||||
if (contracts.case_16_3(value_1, value_2) == null) {
|
||||
println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
println(value_2?.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>toByte<!>())
|
||||
}
|
||||
if (contracts.case_17_2(value_1, value_2)) {
|
||||
println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
println(value_2?.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>toByte<!>())
|
||||
}
|
||||
if (contracts.case_17_3(value_1, value_2) == null) {
|
||||
println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
println(value_2?.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>toByte<!>())
|
||||
}
|
||||
if (contracts.case_17_4(value_1, value_2) != null) {
|
||||
if (contracts.case_16_4(value_1, value_2) != null) {
|
||||
println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
println(value_2?.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>toByte<!>())
|
||||
}
|
||||
}
|
||||
|
||||
class case_18_class {
|
||||
// TESTCASE NUMBER: 17
|
||||
class case_17_class {
|
||||
val prop_1: Int? = 10
|
||||
fun case_18(value_1: Any?, value_2: Number?) {
|
||||
val o = case_18_class()
|
||||
if (contracts.case_18_1(value_1, value_2, o.prop_1, this.prop_1)) {
|
||||
|
||||
fun case_17(value_1: Any?, value_2: Number?) {
|
||||
val o = case_17_class()
|
||||
if (contracts.case_17_1(value_1, value_2, o.prop_1, this.prop_1)) {
|
||||
println(value_1.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>dec<!>())
|
||||
println(value_2?.toByte())
|
||||
println(o.prop_1<!UNSAFE_CALL!>.<!>plus(3))
|
||||
println(this.prop_1<!UNSAFE_CALL!>.<!>plus(3))
|
||||
}
|
||||
if (contracts.case_18_2(value_1, value_2, o.prop_1, this.prop_1)) {
|
||||
if (contracts.case_17_2(value_1, value_2, o.prop_1, this.prop_1)) {
|
||||
println(value_1.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>dec<!>())
|
||||
println(value_2?.toByte())
|
||||
println(o.prop_1<!UNSAFE_CALL!>.<!>plus(3))
|
||||
println(this.prop_1<!UNSAFE_CALL!>.<!>plus(3))
|
||||
}
|
||||
if (contracts.case_18_3(value_1, value_2, o.prop_1, this.prop_1) == null) {
|
||||
if (contracts.case_17_3(value_1, value_2, o.prop_1, this.prop_1) == null) {
|
||||
println(value_1.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>dec<!>())
|
||||
println(value_2?.toByte())
|
||||
println(o.prop_1<!UNSAFE_CALL!>.<!>plus(3))
|
||||
println(this.prop_1<!UNSAFE_CALL!>.<!>plus(3))
|
||||
}
|
||||
if (contracts.case_18_4(value_1, value_2, o.prop_1, this.prop_1) != null) {
|
||||
if (contracts.case_17_4(value_1, value_2, o.prop_1, this.prop_1) != null) {
|
||||
println(value_1.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>dec<!>())
|
||||
println(value_2?.toByte())
|
||||
println(o.prop_1<!UNSAFE_CALL!>.<!>plus(3))
|
||||
@@ -418,75 +448,83 @@ class case_18_class {
|
||||
}
|
||||
}
|
||||
|
||||
fun case_19(value_1: Any?) {
|
||||
if (!value_1.case_19_1()) println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
if (value_1.case_19_2()) println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
if (value_1.case_19_3() == null) println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
if (value_1.case_19_4() != null) println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
// TESTCASE NUMBER: 18
|
||||
fun case_18(value_1: Any?) {
|
||||
if (!value_1.case_18_1()) println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
if (value_1.case_18_2()) println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
if (value_1.case_18_3() == null) println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
if (value_1.case_18_4() != null) println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
}
|
||||
|
||||
fun case_20(value_1: Number) {
|
||||
when { !value_1.case_20_1() -> println(value_1.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>inv<!>()) }
|
||||
when { value_1.case_20_2() -> println(value_1.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>inv<!>()) }
|
||||
when { value_1.case_20_3() == null -> println(value_1.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>inv<!>()) }
|
||||
when { value_1.case_20_4() != null -> println(value_1.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>inv<!>()) }
|
||||
// TESTCASE NUMBER: 19
|
||||
fun case_19(value_1: Number) {
|
||||
when { !value_1.case_19_1() -> println(value_1.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>inv<!>()) }
|
||||
when { value_1.case_19_2() -> println(value_1.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>inv<!>()) }
|
||||
when { value_1.case_19_3() == null -> println(value_1.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>inv<!>()) }
|
||||
when { value_1.case_19_4() != null -> println(value_1.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>inv<!>()) }
|
||||
}
|
||||
|
||||
fun case_21(value_1: String?, value_2: String?, value_3: String?, value_4: String?) {
|
||||
if (!value_1.case_21_1()) println(value_1)
|
||||
if (!value_2.case_21_2()) println(value_2<!UNSAFE_CALL!>.<!>length)
|
||||
when (value_3.case_21_3()) {
|
||||
// TESTCASE NUMBER: 20
|
||||
fun case_20(value_1: String?, value_2: String?, value_3: String?, value_4: String?) {
|
||||
if (!value_1.case_20_1()) println(value_1)
|
||||
if (!value_2.case_20_2()) println(value_2<!UNSAFE_CALL!>.<!>length)
|
||||
when (value_3.case_20_3()) {
|
||||
true -> println(value_4<!UNSAFE_CALL!>.<!>length)
|
||||
false -> println(value_3)
|
||||
}
|
||||
}
|
||||
|
||||
fun case_22(value_1: String?) {
|
||||
when { !value_1.case_22_1() -> println(value_1) }
|
||||
when { !value_1.case_22_2() -> println(value_1<!UNSAFE_CALL!>.<!>length) }
|
||||
// TESTCASE NUMBER: 21
|
||||
fun case_21(value_1: String?) {
|
||||
when { !value_1.case_21_1() -> println(value_1) }
|
||||
when { !value_1.case_21_2() -> println(value_1<!UNSAFE_CALL!>.<!>length) }
|
||||
when {
|
||||
value_1.case_22_5() == null -> println(value_1<!UNSAFE_CALL!>.<!>length)
|
||||
value_1.case_22_5() != null -> println(value_1)
|
||||
value_1.case_21_5() == null -> println(value_1<!UNSAFE_CALL!>.<!>length)
|
||||
value_1.case_21_5() != null -> println(value_1)
|
||||
}
|
||||
when {
|
||||
value_1.case_22_7() != null -> println(value_1<!UNSAFE_CALL!>.<!>length)
|
||||
value_1.case_22_7() == null -> println(value_1)
|
||||
value_1.case_21_7() != null -> println(value_1<!UNSAFE_CALL!>.<!>length)
|
||||
value_1.case_21_7() == null -> println(value_1)
|
||||
}
|
||||
}
|
||||
|
||||
fun case_23(value_1: Any?, value_2: Any?) {
|
||||
when { value_1.case_23_1() -> println(value_1.<!UNRESOLVED_REFERENCE!>length<!>) }
|
||||
when { value_2.case_23_2() == null -> println(value_2.<!UNRESOLVED_REFERENCE!>length<!>) }
|
||||
when { value_2.case_23_3() != null -> println(value_2.<!UNRESOLVED_REFERENCE!>length<!>) }
|
||||
// TESTCASE NUMBER: 22
|
||||
fun case_22(value_1: Any?, value_2: Any?) {
|
||||
when { value_1.case_22_1() -> println(value_1.<!UNRESOLVED_REFERENCE!>length<!>) }
|
||||
when { value_2.case_22_2() == null -> println(value_2.<!UNRESOLVED_REFERENCE!>length<!>) }
|
||||
when { value_2.case_22_3() != null -> println(value_2.<!UNRESOLVED_REFERENCE!>length<!>) }
|
||||
}
|
||||
|
||||
fun case_24(value_1: Number?, value_2: Number?) {
|
||||
// TESTCASE NUMBER: 23
|
||||
fun case_23(value_1: Number?, value_2: Number?) {
|
||||
if (value_1.case_23_1()) println(value_1.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>inv<!>())
|
||||
if (value_2.case_23_2() == null) println(value_2.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>inv<!>())
|
||||
if (value_2.case_23_3() != null) println(value_2.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>inv<!>())
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 24
|
||||
fun case_24(value_1: Any?, value_2: Any?) {
|
||||
if (value_1.case_24_1()) println(value_1.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>inv<!>())
|
||||
if (value_2.case_24_2() == null) println(value_2.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>inv<!>())
|
||||
if (value_2.case_24_3() != null) println(value_2.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>inv<!>())
|
||||
if (value_2.case_24_2() != null) println(value_2.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>inv<!>())
|
||||
if (value_2.case_24_3() == null) println(value_2.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>inv<!>())
|
||||
}
|
||||
|
||||
fun case_25(value_1: Any?, value_2: Any?) {
|
||||
if (value_1.case_25_1()) println(value_1.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>inv<!>())
|
||||
if (value_2.case_25_2() != null) println(value_2.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>inv<!>())
|
||||
if (value_2.case_25_3() == null) println(value_2.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>inv<!>())
|
||||
}
|
||||
|
||||
fun case_26(value_1: Any?, value_2: Int?, value_3: Any?, value_4: Int?) {
|
||||
// TESTCASE NUMBER: 25
|
||||
fun case_25(value_1: Any?, value_2: Int?, value_3: Any?, value_4: Int?) {
|
||||
when {
|
||||
value_1.case_26_1(value_2) -> {
|
||||
value_1.case_25_1(value_2) -> {
|
||||
println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
println(value_2<!UNSAFE_CALL!>.<!>inv())
|
||||
}
|
||||
}
|
||||
when {
|
||||
value_3.case_26_2(value_4) == null -> {
|
||||
value_3.case_25_2(value_4) == null -> {
|
||||
println(value_3.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
println(value_4<!UNSAFE_CALL!>.<!>inv())
|
||||
}
|
||||
}
|
||||
when {
|
||||
value_3.case_26_3(value_4) != null -> {
|
||||
value_3.case_25_3(value_4) != null -> {
|
||||
println(value_3.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
println(value_4<!UNSAFE_CALL!>.<!>inv())
|
||||
}
|
||||
|
||||
Vendored
+57
-57
@@ -1,28 +1,28 @@
|
||||
package
|
||||
|
||||
public fun case_1(/*0*/ value_1: kotlin.Any?): kotlin.Unit
|
||||
public fun case_10(/*0*/ value_1: kotlin.Number?): kotlin.Unit
|
||||
public fun case_10(/*0*/ value_1: kotlin.Any?, /*1*/ value_2: kotlin.Any?): kotlin.Unit
|
||||
public fun case_11(/*0*/ value_1: kotlin.Any?, /*1*/ value_2: kotlin.Any?): kotlin.Unit
|
||||
public fun case_12(/*0*/ value_1: kotlin.Any?, /*1*/ value_2: kotlin.Any?): kotlin.Unit
|
||||
public fun case_13(/*0*/ value_1: kotlin.Any?, /*1*/ value_2: kotlin.Any?): kotlin.Unit
|
||||
public fun case_14(/*0*/ value_1: kotlin.Any?, /*1*/ value_2: kotlin.Any?): kotlin.Unit
|
||||
public fun case_15(/*0*/ value_1: kotlin.Any?, /*1*/ value_2: kotlin.Any?): kotlin.Unit
|
||||
public fun case_16(/*0*/ value_1: kotlin.Any?, /*1*/ value_2: kotlin.Any?): kotlin.Unit
|
||||
public fun case_17(/*0*/ value_1: kotlin.Any?, /*1*/ value_2: kotlin.Any?): kotlin.Unit
|
||||
public fun case_19(/*0*/ value_1: kotlin.Any?): kotlin.Unit
|
||||
public fun case_18(/*0*/ value_1: kotlin.Any?): kotlin.Unit
|
||||
public fun case_19(/*0*/ value_1: kotlin.Number): kotlin.Unit
|
||||
public fun case_2(/*0*/ value_1: kotlin.Any?): kotlin.Unit
|
||||
public fun case_20(/*0*/ value_1: kotlin.Number): kotlin.Unit
|
||||
public fun case_21(/*0*/ value_1: kotlin.String?, /*1*/ value_2: kotlin.String?, /*2*/ value_3: kotlin.String?, /*3*/ value_4: kotlin.String?): kotlin.Unit
|
||||
public fun case_22(/*0*/ value_1: kotlin.String?): kotlin.Unit
|
||||
public fun case_23(/*0*/ value_1: kotlin.Any?, /*1*/ value_2: kotlin.Any?): kotlin.Unit
|
||||
public fun case_24(/*0*/ value_1: kotlin.Number?, /*1*/ value_2: kotlin.Number?): kotlin.Unit
|
||||
public fun case_25(/*0*/ value_1: kotlin.Any?, /*1*/ value_2: kotlin.Any?): kotlin.Unit
|
||||
public fun case_26(/*0*/ value_1: kotlin.Any?, /*1*/ value_2: kotlin.Int?, /*2*/ value_3: kotlin.Any?, /*3*/ value_4: kotlin.Int?): kotlin.Unit
|
||||
public fun case_20(/*0*/ value_1: kotlin.String?, /*1*/ value_2: kotlin.String?, /*2*/ value_3: kotlin.String?, /*3*/ value_4: kotlin.String?): kotlin.Unit
|
||||
public fun case_21(/*0*/ value_1: kotlin.String?): kotlin.Unit
|
||||
public fun case_22(/*0*/ value_1: kotlin.Any?, /*1*/ value_2: kotlin.Any?): kotlin.Unit
|
||||
public fun case_23(/*0*/ value_1: kotlin.Number?, /*1*/ value_2: kotlin.Number?): kotlin.Unit
|
||||
public fun case_24(/*0*/ value_1: kotlin.Any?, /*1*/ value_2: kotlin.Any?): kotlin.Unit
|
||||
public fun case_25(/*0*/ value_1: kotlin.Any?, /*1*/ value_2: kotlin.Int?, /*2*/ value_3: kotlin.Any?, /*3*/ value_4: kotlin.Int?): kotlin.Unit
|
||||
public fun case_3(/*0*/ number: kotlin.Int?): kotlin.Unit
|
||||
public fun case_4(/*0*/ value_1: kotlin.Any?): kotlin.Unit
|
||||
public fun case_5(/*0*/ value_1: kotlin.Any?): kotlin.Unit
|
||||
public fun case_6(/*0*/ value_1: kotlin.Any?): kotlin.Unit
|
||||
public fun case_7(/*0*/ value_1: kotlin.Any?): kotlin.Unit
|
||||
public fun case_8(/*0*/ value_1: kotlin.Any?): kotlin.Unit
|
||||
public fun case_9(/*0*/ value_1: kotlin.Any?): kotlin.Unit
|
||||
public fun case_9(/*0*/ value_1: kotlin.Number?): kotlin.Unit
|
||||
public inline fun </*0*/ T> funWithAtLeastOnceCallsInPlace(/*0*/ block: () -> T): T
|
||||
CallsInPlace(block, AT_LEAST_ONCE)
|
||||
|
||||
@@ -131,19 +131,19 @@ public fun funWithReturnsTrueAndTypeCheck(/*0*/ value_1: kotlin.Any?): kotlin.Bo
|
||||
public inline fun funWithUnknownCallsInPlace(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
|
||||
CallsInPlace(block, UNKNOWN)
|
||||
|
||||
public final class case_15_class {
|
||||
public constructor case_15_class()
|
||||
public final class case_14_class {
|
||||
public constructor case_14_class()
|
||||
public final val prop_1: kotlin.Int? = 10
|
||||
public final fun case_15(/*0*/ value_1: kotlin.Any?, /*1*/ value_2: kotlin.Number?): kotlin.Unit
|
||||
public final fun case_14(/*0*/ value_1: kotlin.Any?, /*1*/ value_2: kotlin.Number?): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final class case_18_class {
|
||||
public constructor case_18_class()
|
||||
public final class case_17_class {
|
||||
public constructor case_17_class()
|
||||
public final val prop_1: kotlin.Int? = 10
|
||||
public final fun case_18(/*0*/ value_1: kotlin.Any?, /*1*/ value_2: kotlin.Number?): kotlin.Unit
|
||||
public final fun case_17(/*0*/ value_1: kotlin.Any?, /*1*/ value_2: kotlin.Number?): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
@@ -153,124 +153,124 @@ package contracts {
|
||||
public fun case_1(/*0*/ x: kotlin.Any?): kotlin.Boolean
|
||||
Returns(TRUE) -> x !is Number
|
||||
|
||||
public fun case_16_1(/*0*/ value_1: kotlin.Any?, /*1*/ value_2: kotlin.Any?): kotlin.Boolean
|
||||
public fun case_15_1(/*0*/ value_1: kotlin.Any?, /*1*/ value_2: kotlin.Any?): kotlin.Boolean
|
||||
Returns(TRUE) -> value_1 !is String || value_2 !is Number
|
||||
|
||||
public fun case_16_2(/*0*/ value_1: kotlin.Any?, /*1*/ value_2: kotlin.Any?): kotlin.Boolean
|
||||
public fun case_15_2(/*0*/ value_1: kotlin.Any?, /*1*/ value_2: kotlin.Any?): kotlin.Boolean
|
||||
Returns(FALSE) -> value_1 !is String || value_2 !is Number
|
||||
|
||||
public fun case_16_3(/*0*/ value_1: kotlin.Any?, /*1*/ value_2: kotlin.Any?): kotlin.Boolean?
|
||||
public fun case_15_3(/*0*/ value_1: kotlin.Any?, /*1*/ value_2: kotlin.Any?): kotlin.Boolean?
|
||||
Returns(NOT_NULL) -> value_1 !is String || value_2 !is Number
|
||||
|
||||
public fun case_16_4(/*0*/ value_1: kotlin.Any?, /*1*/ value_2: kotlin.Any?): kotlin.Boolean?
|
||||
public fun case_15_4(/*0*/ value_1: kotlin.Any?, /*1*/ value_2: kotlin.Any?): kotlin.Boolean?
|
||||
Returns(NULL) -> value_1 !is String || value_2 !is Number
|
||||
|
||||
public fun case_17_1(/*0*/ value_1: kotlin.Any?, /*1*/ value_2: kotlin.Any?): kotlin.Boolean
|
||||
public fun case_16_1(/*0*/ value_1: kotlin.Any?, /*1*/ value_2: kotlin.Any?): kotlin.Boolean
|
||||
Returns(TRUE) -> value_1 !is String || value_2 != null
|
||||
|
||||
public fun case_17_2(/*0*/ value_1: kotlin.Any?, /*1*/ value_2: kotlin.Any?): kotlin.Boolean
|
||||
public fun case_16_2(/*0*/ value_1: kotlin.Any?, /*1*/ value_2: kotlin.Any?): kotlin.Boolean
|
||||
Returns(FALSE) -> value_1 !is String || value_2 != null
|
||||
|
||||
public fun case_17_3(/*0*/ value_1: kotlin.Any?, /*1*/ value_2: kotlin.Any?): kotlin.Boolean?
|
||||
public fun case_16_3(/*0*/ value_1: kotlin.Any?, /*1*/ value_2: kotlin.Any?): kotlin.Boolean?
|
||||
Returns(NOT_NULL) -> value_1 !is String || value_2 != null
|
||||
|
||||
public fun case_17_4(/*0*/ value_1: kotlin.Any?, /*1*/ value_2: kotlin.Any?): kotlin.Boolean?
|
||||
public fun case_16_4(/*0*/ value_1: kotlin.Any?, /*1*/ value_2: kotlin.Any?): kotlin.Boolean?
|
||||
Returns(NULL) -> value_1 !is String || value_2 != null
|
||||
|
||||
public fun case_18_1(/*0*/ value_1: kotlin.Any?, /*1*/ value_2: kotlin.Any?, /*2*/ value_3: kotlin.Any?, /*3*/ value_4: kotlin.Any?): kotlin.Boolean
|
||||
public fun case_17_1(/*0*/ value_1: kotlin.Any?, /*1*/ value_2: kotlin.Any?, /*2*/ value_3: kotlin.Any?, /*3*/ value_4: kotlin.Any?): kotlin.Boolean
|
||||
Returns(TRUE) -> value_1 !is Float? || value_1 == null || value_2 == null || value_3 == null || value_4 == null
|
||||
|
||||
public fun case_18_2(/*0*/ value_1: kotlin.Any?, /*1*/ value_2: kotlin.Any?, /*2*/ value_3: kotlin.Any?, /*3*/ value_4: kotlin.Any?): kotlin.Boolean
|
||||
public fun case_17_2(/*0*/ value_1: kotlin.Any?, /*1*/ value_2: kotlin.Any?, /*2*/ value_3: kotlin.Any?, /*3*/ value_4: kotlin.Any?): kotlin.Boolean
|
||||
Returns(FALSE) -> value_1 !is Float? || value_1 == null || value_2 == null || value_3 == null || value_4 == null
|
||||
|
||||
public fun case_18_3(/*0*/ value_1: kotlin.Any?, /*1*/ value_2: kotlin.Any?, /*2*/ value_3: kotlin.Any?, /*3*/ value_4: kotlin.Any?): kotlin.Boolean?
|
||||
public fun case_17_3(/*0*/ value_1: kotlin.Any?, /*1*/ value_2: kotlin.Any?, /*2*/ value_3: kotlin.Any?, /*3*/ value_4: kotlin.Any?): kotlin.Boolean?
|
||||
Returns(NOT_NULL) -> value_1 !is Float? || value_1 == null || value_2 == null || value_3 == null || value_4 == null
|
||||
|
||||
public fun case_18_4(/*0*/ value_1: kotlin.Any?, /*1*/ value_2: kotlin.Any?, /*2*/ value_3: kotlin.Any?, /*3*/ value_4: kotlin.Any?): kotlin.Boolean?
|
||||
public fun case_17_4(/*0*/ value_1: kotlin.Any?, /*1*/ value_2: kotlin.Any?, /*2*/ value_3: kotlin.Any?, /*3*/ value_4: kotlin.Any?): kotlin.Boolean?
|
||||
Returns(NULL) -> value_1 !is Float? || value_1 == null || value_2 == null || value_3 == null || value_4 == null
|
||||
|
||||
public fun case_2(/*0*/ x: kotlin.Any?): kotlin.Boolean
|
||||
Returns(TRUE) -> x !is Number?
|
||||
|
||||
public fun </*0*/ T> T.case_19_1(): kotlin.Boolean
|
||||
public fun </*0*/ T> T.case_18_1(): kotlin.Boolean
|
||||
Returns(TRUE) -> <this> !is String
|
||||
|
||||
public fun </*0*/ T> T.case_19_2(): kotlin.Boolean
|
||||
public fun </*0*/ T> T.case_18_2(): kotlin.Boolean
|
||||
Returns(FALSE) -> <this> is String
|
||||
|
||||
public fun </*0*/ T> T.case_19_3(): kotlin.Boolean?
|
||||
public fun </*0*/ T> T.case_18_3(): kotlin.Boolean?
|
||||
Returns(NOT_NULL) -> <this> is String
|
||||
|
||||
public fun </*0*/ T> T.case_19_4(): kotlin.Boolean?
|
||||
public fun </*0*/ T> T.case_18_4(): kotlin.Boolean?
|
||||
Returns(NULL) -> <this> is String
|
||||
|
||||
public fun </*0*/ T : kotlin.Number> T.case_20_1(): kotlin.Boolean
|
||||
public fun </*0*/ T : kotlin.Number> T.case_19_1(): kotlin.Boolean
|
||||
Returns(TRUE) -> <this> !is Int
|
||||
|
||||
public fun </*0*/ T : kotlin.Number> T.case_20_2(): kotlin.Boolean
|
||||
public fun </*0*/ T : kotlin.Number> T.case_19_2(): kotlin.Boolean
|
||||
Returns(FALSE) -> <this> is Int
|
||||
|
||||
public fun </*0*/ T : kotlin.Number> T.case_20_3(): kotlin.Boolean?
|
||||
public fun </*0*/ T : kotlin.Number> T.case_19_3(): kotlin.Boolean?
|
||||
Returns(NOT_NULL) -> <this> is Int
|
||||
|
||||
public fun </*0*/ T : kotlin.Number> T.case_20_4(): kotlin.Boolean?
|
||||
public fun </*0*/ T : kotlin.Number> T.case_19_4(): kotlin.Boolean?
|
||||
Returns(NULL) -> <this> is Int
|
||||
|
||||
public fun </*0*/ T : kotlin.String> T?.case_21_1(): kotlin.Boolean
|
||||
public fun </*0*/ T : kotlin.String> T?.case_20_1(): kotlin.Boolean
|
||||
Returns(TRUE) -> <this> != null
|
||||
|
||||
public fun </*0*/ T : kotlin.String> T?.case_21_2(): kotlin.Boolean
|
||||
public fun </*0*/ T : kotlin.String> T?.case_20_2(): kotlin.Boolean
|
||||
Returns(TRUE) -> <this> == null
|
||||
|
||||
public fun </*0*/ T : kotlin.String> T?.case_21_3(): kotlin.Boolean
|
||||
public fun </*0*/ T : kotlin.String> T?.case_20_3(): kotlin.Boolean
|
||||
Returns(FALSE) -> <this> != null
|
||||
|
||||
public fun </*0*/ T : kotlin.String?> T.case_22_1(): kotlin.Boolean
|
||||
public fun </*0*/ T : kotlin.String?> T.case_21_1(): kotlin.Boolean
|
||||
Returns(TRUE) -> <this> != null
|
||||
|
||||
public fun </*0*/ T : kotlin.String?> T.case_22_2(): kotlin.Boolean
|
||||
public fun </*0*/ T : kotlin.String?> T.case_21_2(): kotlin.Boolean
|
||||
Returns(TRUE) -> <this> == null
|
||||
|
||||
public fun </*0*/ T : kotlin.String> T?.case_22_5(): kotlin.Boolean?
|
||||
public fun </*0*/ T : kotlin.String> T?.case_21_5(): kotlin.Boolean?
|
||||
Returns(NOT_NULL) -> <this> != null
|
||||
|
||||
public fun </*0*/ T : kotlin.String> T?.case_22_7(): kotlin.Boolean?
|
||||
public fun </*0*/ T : kotlin.String> T?.case_21_7(): kotlin.Boolean?
|
||||
Returns(NULL) -> <this> != null
|
||||
|
||||
public fun </*0*/ T> T?.case_23_1(): kotlin.Boolean
|
||||
public fun </*0*/ T> T?.case_22_1(): kotlin.Boolean
|
||||
Returns(FALSE) -> <this> == null || <this> !is String
|
||||
|
||||
public fun </*0*/ T> T?.case_23_2(): kotlin.Boolean?
|
||||
public fun </*0*/ T> T?.case_22_2(): kotlin.Boolean?
|
||||
Returns(NOT_NULL) -> <this> == null || <this> !is String
|
||||
|
||||
public fun </*0*/ T> T?.case_23_3(): kotlin.Boolean?
|
||||
public fun </*0*/ T> T?.case_22_3(): kotlin.Boolean?
|
||||
Returns(NULL) -> <this> == null || <this> !is String
|
||||
|
||||
public fun </*0*/ T : kotlin.Number?> T.case_24_1(): kotlin.Boolean
|
||||
public fun </*0*/ T : kotlin.Number?> T.case_23_1(): kotlin.Boolean
|
||||
Returns(FALSE) -> <this> !is Int || <this> == null
|
||||
|
||||
public fun </*0*/ T : kotlin.Number?> T.case_24_2(): kotlin.Boolean?
|
||||
public fun </*0*/ T : kotlin.Number?> T.case_23_2(): kotlin.Boolean?
|
||||
Returns(NOT_NULL) -> <this> !is Int || <this> == null
|
||||
|
||||
public fun </*0*/ T : kotlin.Number?> T.case_24_3(): kotlin.Boolean?
|
||||
public fun </*0*/ T : kotlin.Number?> T.case_23_3(): kotlin.Boolean?
|
||||
Returns(NULL) -> <this> !is Int || <this> == null
|
||||
|
||||
public inline fun </*0*/ reified T> T?.case_25_1(): kotlin.Boolean
|
||||
public inline fun </*0*/ reified T> T?.case_24_1(): kotlin.Boolean
|
||||
Returns(FALSE) -> <this> !is Number || <this> !is Int || <this> == null
|
||||
|
||||
public inline fun </*0*/ reified T> T?.case_25_2(): kotlin.Boolean?
|
||||
public inline fun </*0*/ reified T> T?.case_24_2(): kotlin.Boolean?
|
||||
Returns(NOT_NULL) -> <this> !is Number || <this> !is Int || <this> == null
|
||||
|
||||
public inline fun </*0*/ reified T> T?.case_25_3(): kotlin.Boolean?
|
||||
public inline fun </*0*/ reified T> T?.case_24_3(): kotlin.Boolean?
|
||||
Returns(NULL) -> <this> !is Number || <this> !is Int || <this> == null
|
||||
|
||||
public fun </*0*/ T> T?.case_26_1(/*0*/ value_1: kotlin.Int?): kotlin.Boolean
|
||||
public fun </*0*/ T> T?.case_25_1(/*0*/ value_1: kotlin.Int?): kotlin.Boolean
|
||||
Returns(FALSE) -> <this> == null || <this> !is String || value_1 == null
|
||||
|
||||
public fun </*0*/ T> T?.case_26_2(/*0*/ value_1: kotlin.Int?): kotlin.Boolean?
|
||||
public fun </*0*/ T> T?.case_25_2(/*0*/ value_1: kotlin.Int?): kotlin.Boolean?
|
||||
Returns(NOT_NULL) -> <this> == null || <this> !is String || value_1 == null
|
||||
|
||||
public fun </*0*/ T> T?.case_26_3(/*0*/ value_1: kotlin.Int?): kotlin.Boolean?
|
||||
public fun </*0*/ T> T?.case_25_3(/*0*/ value_1: kotlin.Int?): kotlin.Boolean?
|
||||
Returns(NULL) -> <this> == null || <this> !is String || value_1 == null
|
||||
|
||||
}
|
||||
|
||||
+14
-9
@@ -2,12 +2,11 @@
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, smartcasts
|
||||
NUMBER: 11
|
||||
DESCRIPTION: Smartcast using many of the various Returns effects on the same values.
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, smartcasts
|
||||
* NUMBER: 11
|
||||
* DESCRIPTION: Smartcast using many of the various Returns effects on the same values.
|
||||
*/
|
||||
|
||||
// FILE: contracts.kt
|
||||
@@ -16,16 +15,17 @@ package contracts
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun <T> T?.case_1_1(): Boolean {
|
||||
contract { returns(false) implies (this@case_1_1 != null) }
|
||||
return !(this@case_1_1 != null)
|
||||
}
|
||||
|
||||
fun <T> T?.case_1_2(): Boolean? {
|
||||
contract { returns(null) implies (this@case_1_2 is String) }
|
||||
return if (this@case_1_2 is String) null else true
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun <T : Number?> T.case_2_1(): Boolean? {
|
||||
contract { returnsNotNull() implies (this@case_2_1 != null) }
|
||||
return if (this@case_2_1 != null) true else null
|
||||
@@ -35,17 +35,22 @@ fun <T : Number?> T.case_2_2(): Boolean? {
|
||||
return if (this@case_2_2 != null) null else true
|
||||
}
|
||||
|
||||
// FILE: usages.kt
|
||||
// FILE: main.kt
|
||||
|
||||
import contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1(value_1: Any?) {
|
||||
if (!(value_1.case_1_1() || value_1.case_1_2() == null)) {
|
||||
println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
}
|
||||
}
|
||||
|
||||
// DISCUSSION: maybe make unreachable code in the second condition?
|
||||
/*
|
||||
* TESTCASE NUMBER: 2
|
||||
* DISCUSSION: maybe make the code unreachable in the second condition?
|
||||
* UNEXPECTED BEHAVIOUR
|
||||
*/
|
||||
fun case_2(value_1: Number?) {
|
||||
if (value_1?.case_2_1() != null) println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.toByte())
|
||||
if (value_1?.case_2_2() != null) println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.toByte())
|
||||
|
||||
+12
-9
@@ -1,14 +1,13 @@
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, smartcasts
|
||||
NUMBER: 12
|
||||
DESCRIPTION: Check smartcast to upper bound of the types in disjunction.
|
||||
UNEXPECTED BEHAVIOUR
|
||||
ISSUES: KT-1982
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, smartcasts
|
||||
* NUMBER: 12
|
||||
* DESCRIPTION: Check smartcast to upper bound of the types in disjunction.
|
||||
* UNEXPECTED BEHAVIOUR
|
||||
* ISSUES: KT-1982
|
||||
*/
|
||||
|
||||
// FILE: contracts.kt
|
||||
@@ -17,25 +16,29 @@ package contracts
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun <T : Any?> T?.case_1() {
|
||||
contract { returns() implies (this@case_1 is Number || this@case_1 is Int) }
|
||||
if (!(this@case_1 is Number || this@case_1 is Int)) throw Exception()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
inline fun <reified T : Any?> T?.case_2(value_2: Number, value_3: Any?, value_4: String?) {
|
||||
contract { returns() implies ((this@case_2 is Number || this@case_2 is Int) && value_2 is Int && value_3 != null && value_3 is Number && value_4 != null) }
|
||||
if (!((this is Number || this is Int) && value_2 is Int && value_3 != null && value_3 is Number && value_4 != null)) throw Exception()
|
||||
}
|
||||
|
||||
// FILE: usages.kt
|
||||
// FILE: main.kt
|
||||
|
||||
import contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1(value_1: Any?) {
|
||||
value_1.case_1()
|
||||
println(value_1.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>toByte<!>())
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2(value_1: Any?, value_2: Number, value_3: Any?, value_4: String?) {
|
||||
value_1.case_2(value_2, value_3, value_4)
|
||||
println(value_1.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>toByte<!>())
|
||||
|
||||
+13
-14
@@ -1,15 +1,12 @@
|
||||
// !LANGUAGE: +AllowContractsForCustomFunctions +UseReturnsEffect
|
||||
// !WITH_CONTRACT_FUNCTIONS
|
||||
// !DIAGNOSTICS: -INVISIBLE_REFERENCE -INVISIBLE_MEMBER
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
// !WITH_CONTRACT_FUNCTIONS
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, smartcasts
|
||||
NUMBER: 13
|
||||
DESCRIPTION: Smartcast using many of the various Returns effects on the same values.
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, smartcasts
|
||||
* NUMBER: 13
|
||||
* DESCRIPTION: Smartcast using many of the various Returns effects on the same values.
|
||||
*/
|
||||
|
||||
// FILE: contracts.kt
|
||||
@@ -18,30 +15,31 @@ package contracts
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun <T> T?.case_1_1(): Boolean {
|
||||
contract { returns(false) implies (this@case_1_1 != null) }
|
||||
return !(this@case_1_1 != null)
|
||||
}
|
||||
|
||||
fun <T> T?.case_1_2(): Boolean? {
|
||||
contract { returns(null) implies (this@case_1_2 is String) }
|
||||
return if (this@case_1_2 is String) null else true
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun <T> T?.case_2_1(): Boolean {
|
||||
contract { returns(true) implies (this@case_2_1 is Float) }
|
||||
return this@case_2_1 is Float
|
||||
}
|
||||
|
||||
fun <T> T?.case_2_2(): Boolean {
|
||||
contract { returns(false) implies (this@case_2_2 is Double) }
|
||||
return !(this@case_2_2 is Double)
|
||||
}
|
||||
|
||||
// FILE: usages.kt
|
||||
// FILE: main.kt
|
||||
|
||||
import contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1(value_1: Any?) {
|
||||
if (!(value_1.case_1_1() || value_1.case_1_2() == null)) {
|
||||
println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
@@ -49,8 +47,9 @@ fun case_1(value_1: Any?) {
|
||||
}
|
||||
|
||||
/*
|
||||
UNEXPECTED BEHAVIOUR
|
||||
ISSUES: KT-1982
|
||||
* TESTCASE NUMBER: 2
|
||||
* UNEXPECTED BEHAVIOUR
|
||||
* ISSUES: KT-1982
|
||||
*/
|
||||
fun case_2(value_1: Any?) {
|
||||
if (value_1.case_2_1() || !value_1.case_2_2()) {
|
||||
|
||||
+58
@@ -0,0 +1,58 @@
|
||||
// !WITH_CONTRACT_FUNCTIONS
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, smartcasts
|
||||
* NUMBER: 14
|
||||
* DESCRIPTION: Smartcast using many of the various Returns effects on the same values.
|
||||
*/
|
||||
|
||||
// FILE: contracts.kt
|
||||
|
||||
package contracts
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun <T> T?.case_1_1(): Boolean {
|
||||
contract { returns(false) implies (this@case_1_1 != null) }
|
||||
return !(this@case_1_1 != null)
|
||||
}
|
||||
fun <T> T?.case_1_2(): Boolean? {
|
||||
contract { returns(null) implies (this@case_1_2 is String) }
|
||||
return if (this@case_1_2 is String) null else true
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun <T> T?.case_2_1(): Boolean {
|
||||
contract { returns(true) implies (this@case_2_1 is Float) }
|
||||
return this@case_2_1 is Float
|
||||
}
|
||||
fun <T> T?.case_2_2(): Boolean {
|
||||
contract { returns(false) implies (this@case_2_2 is Double) }
|
||||
return !(this@case_2_2 is Double)
|
||||
}
|
||||
|
||||
// FILE: main.kt
|
||||
|
||||
import contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1(value_1: Any?) {
|
||||
if (!(value_1.case_1_1() || value_1.case_1_2() == null)) {
|
||||
println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* TESTCASE NUMBER: 2
|
||||
* UNEXPECTED BEHAVIOUR
|
||||
* ISSUES: KT-1982
|
||||
*/
|
||||
fun case_2(value_1: Any?) {
|
||||
if (value_1.case_2_1() || !value_1.case_2_2()) {
|
||||
println(value_1.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>toByte<!>())
|
||||
}
|
||||
}
|
||||
Vendored
+126
@@ -0,0 +1,126 @@
|
||||
package
|
||||
|
||||
public fun case_1(/*0*/ value_1: kotlin.Any?): kotlin.Unit
|
||||
public fun case_2(/*0*/ value_1: kotlin.Any?): kotlin.Unit
|
||||
public inline fun </*0*/ T> funWithAtLeastOnceCallsInPlace(/*0*/ block: () -> T): T
|
||||
CallsInPlace(block, AT_LEAST_ONCE)
|
||||
|
||||
public inline fun funWithAtLeastOnceCallsInPlace(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
|
||||
CallsInPlace(block, AT_LEAST_ONCE)
|
||||
|
||||
public inline fun funWithAtMostOnceCallsInPlace(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
|
||||
CallsInPlace(block, AT_MOST_ONCE)
|
||||
|
||||
public inline fun </*0*/ T> funWithExactlyOnceCallsInPlace(/*0*/ block: () -> T): T
|
||||
CallsInPlace(block, EXACTLY_ONCE)
|
||||
|
||||
public inline fun funWithExactlyOnceCallsInPlace(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
|
||||
CallsInPlace(block, EXACTLY_ONCE)
|
||||
|
||||
public fun funWithReturns(/*0*/ cond: kotlin.Boolean): kotlin.Unit
|
||||
Returns(WILDCARD) -> cond
|
||||
|
||||
public fun funWithReturnsAndInvertCondition(/*0*/ cond: kotlin.Boolean): kotlin.Unit
|
||||
Returns(WILDCARD) -> !cond
|
||||
|
||||
public fun funWithReturnsAndInvertTypeCheck(/*0*/ value_1: kotlin.Any?): kotlin.Unit
|
||||
Returns(WILDCARD) -> value_1 !is String
|
||||
|
||||
public fun funWithReturnsAndNotNullCheck(/*0*/ value_1: kotlin.Any?): kotlin.Unit
|
||||
Returns(WILDCARD) -> value_1 != null
|
||||
|
||||
public fun funWithReturnsAndNullCheck(/*0*/ value_1: kotlin.Any?): kotlin.Unit
|
||||
Returns(WILDCARD) -> value_1 == null
|
||||
|
||||
public fun funWithReturnsAndTypeCheck(/*0*/ value_1: kotlin.Any?): kotlin.Unit
|
||||
Returns(WILDCARD) -> value_1 is String
|
||||
|
||||
public fun funWithReturnsFalse(/*0*/ cond: kotlin.Boolean): kotlin.Boolean
|
||||
Returns(FALSE) -> cond
|
||||
|
||||
public fun funWithReturnsFalseAndInvertCondition(/*0*/ cond: kotlin.Boolean): kotlin.Boolean
|
||||
Returns(FALSE) -> !cond
|
||||
|
||||
public fun funWithReturnsFalseAndInvertTypeCheck(/*0*/ value_1: kotlin.Any?): kotlin.Boolean
|
||||
Returns(FALSE) -> value_1 !is String
|
||||
|
||||
public fun funWithReturnsFalseAndNotNullCheck(/*0*/ value_1: kotlin.Number?): kotlin.Boolean
|
||||
Returns(FALSE) -> value_1 != null
|
||||
|
||||
public fun funWithReturnsFalseAndNullCheck(/*0*/ value_1: kotlin.Number?): kotlin.Boolean
|
||||
Returns(FALSE) -> value_1 == null
|
||||
|
||||
public fun funWithReturnsFalseAndTypeCheck(/*0*/ value_1: kotlin.Any?): kotlin.Boolean
|
||||
Returns(FALSE) -> value_1 is String
|
||||
|
||||
public fun funWithReturnsNotNull(/*0*/ cond: kotlin.Boolean): kotlin.Boolean?
|
||||
Returns(NOT_NULL) -> cond
|
||||
|
||||
public fun funWithReturnsNotNullAndInvertCondition(/*0*/ cond: kotlin.Boolean): kotlin.Boolean?
|
||||
Returns(NOT_NULL) -> !cond
|
||||
|
||||
public fun funWithReturnsNotNullAndInvertTypeCheck(/*0*/ value_1: kotlin.Any?): kotlin.Boolean?
|
||||
Returns(NOT_NULL) -> value_1 !is String
|
||||
|
||||
public fun funWithReturnsNotNullAndNotNullCheck(/*0*/ value_1: kotlin.Number?): kotlin.Boolean?
|
||||
Returns(NOT_NULL) -> value_1 != null
|
||||
|
||||
public fun funWithReturnsNotNullAndNullCheck(/*0*/ value_1: kotlin.Number?): kotlin.Boolean?
|
||||
Returns(NOT_NULL) -> value_1 == null
|
||||
|
||||
public fun funWithReturnsNotNullAndTypeCheck(/*0*/ value_1: kotlin.Any?): kotlin.Boolean?
|
||||
Returns(NOT_NULL) -> value_1 is String
|
||||
|
||||
public fun funWithReturnsNull(/*0*/ cond: kotlin.Boolean): kotlin.Boolean?
|
||||
Returns(NULL) -> cond
|
||||
|
||||
public fun funWithReturnsNullAndInvertCondition(/*0*/ cond: kotlin.Boolean): kotlin.Boolean?
|
||||
Returns(NULL) -> !cond
|
||||
|
||||
public fun funWithReturnsNullAndInvertTypeCheck(/*0*/ value_1: kotlin.Any?): kotlin.Boolean?
|
||||
Returns(NULL) -> value_1 !is String
|
||||
|
||||
public fun funWithReturnsNullAndNotNullCheck(/*0*/ value_1: kotlin.Number?): kotlin.Boolean?
|
||||
Returns(NULL) -> value_1 != null
|
||||
|
||||
public fun funWithReturnsNullAndNullCheck(/*0*/ value_1: kotlin.Number?): kotlin.Boolean?
|
||||
Returns(NULL) -> value_1 == null
|
||||
|
||||
public fun funWithReturnsNullAndTypeCheck(/*0*/ value_1: kotlin.Any?): kotlin.Boolean?
|
||||
Returns(NULL) -> value_1 is String
|
||||
|
||||
public fun funWithReturnsTrue(/*0*/ cond: kotlin.Boolean): kotlin.Boolean
|
||||
Returns(TRUE) -> cond
|
||||
|
||||
public fun funWithReturnsTrueAndInvertCondition(/*0*/ cond: kotlin.Boolean): kotlin.Boolean
|
||||
Returns(TRUE) -> !cond
|
||||
|
||||
public fun funWithReturnsTrueAndInvertTypeCheck(/*0*/ value_1: kotlin.Any?): kotlin.Boolean
|
||||
Returns(TRUE) -> value_1 !is String
|
||||
|
||||
public fun funWithReturnsTrueAndNotNullCheck(/*0*/ value_1: kotlin.Any?): kotlin.Boolean
|
||||
Returns(TRUE) -> value_1 != null
|
||||
|
||||
public fun funWithReturnsTrueAndNullCheck(/*0*/ value_1: kotlin.Any?): kotlin.Boolean
|
||||
Returns(TRUE) -> value_1 == null
|
||||
|
||||
public fun funWithReturnsTrueAndTypeCheck(/*0*/ value_1: kotlin.Any?): kotlin.Boolean
|
||||
Returns(TRUE) -> value_1 is String
|
||||
|
||||
public inline fun funWithUnknownCallsInPlace(/*0*/ block: () -> kotlin.Unit): kotlin.Unit
|
||||
CallsInPlace(block, UNKNOWN)
|
||||
|
||||
package contracts {
|
||||
public fun </*0*/ T> T?.case_1_1(): kotlin.Boolean
|
||||
Returns(FALSE) -> <this> != null
|
||||
|
||||
public fun </*0*/ T> T?.case_1_2(): kotlin.Boolean?
|
||||
Returns(NULL) -> <this> is String
|
||||
|
||||
public fun </*0*/ T> T?.case_2_1(): kotlin.Boolean
|
||||
Returns(TRUE) -> <this> is Float
|
||||
|
||||
public fun </*0*/ T> T?.case_2_2(): kotlin.Boolean
|
||||
Returns(FALSE) -> <this> is Double
|
||||
|
||||
}
|
||||
+13
-10
@@ -2,14 +2,13 @@
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, smartcasts
|
||||
NUMBER: 15
|
||||
DESCRIPTION: Check smartcasts working if type checking for contract function is used
|
||||
UNEXPECTED BEHAVIOUR
|
||||
ISSUES: KT-27241
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, smartcasts
|
||||
* NUMBER: 15
|
||||
* DESCRIPTION: Check smartcasts working if type checking for contract function is used
|
||||
* UNEXPECTED BEHAVIOUR
|
||||
* ISSUES: KT-27241
|
||||
*/
|
||||
|
||||
// FILE: contracts.kt
|
||||
@@ -18,37 +17,41 @@ package contracts
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1_1(cond: Boolean): Any {
|
||||
contract { returns(true) implies cond }
|
||||
return cond
|
||||
}
|
||||
|
||||
fun case_1_2(value: Any): Boolean {
|
||||
contract { returns(true) implies (value is Boolean) }
|
||||
return value is Boolean
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2(cond: Boolean): Any {
|
||||
contract { returns(true) implies cond }
|
||||
return cond
|
||||
}
|
||||
|
||||
// FILE: usages.kt
|
||||
// FILE: main.kt
|
||||
|
||||
import contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1(value: Any) {
|
||||
if (contracts.case_1_2(contracts.case_1_1(value is Char))) {
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value<!>.category)
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2(value: Any) {
|
||||
if (contracts.case_2(value is Char) is Boolean) {
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value<!>.category)
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun case_3(value: String?) {
|
||||
if (<!USELESS_IS_CHECK!>!value.isNullOrEmpty() is Boolean<!>) {
|
||||
<!DEBUG_INFO_SMARTCAST!>value<!>.length
|
||||
|
||||
+16
-7
@@ -3,41 +3,44 @@
|
||||
// SKIP_TXT
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, smartcasts
|
||||
NUMBER: 2
|
||||
DESCRIPTION: Smartcasts using Returns effects with complex (conjunction/disjunction) type checking and not-null conditions outside contract (custom condition).
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, smartcasts
|
||||
* NUMBER: 2
|
||||
* DESCRIPTION: Smartcasts using Returns effects with complex (conjunction/disjunction) type checking and not-null conditions outside contract (custom condition).
|
||||
*/
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1(value_1: Any?, value_2: Any?) {
|
||||
funWithReturns(value_1 !is String || value_2 !is Number)
|
||||
println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
println(value_2.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>toByte<!>())
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2(value_1: Any?, value_2: Any?) {
|
||||
funWithReturnsAndInvertCondition(value_1 is String && value_2 is Number)
|
||||
println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
println(value_2.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>toByte<!>())
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun case_3(value_1: Any?, value_2: Any?) {
|
||||
funWithReturnsAndInvertCondition(value_1 is String && value_2 == null)
|
||||
println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
println(value_2?.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>toByte<!>())
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
fun case_4(value_1: Any?, value_2: Number?) {
|
||||
funWithReturns(value_1 !is Float? || value_1 == null || value_2 == null)
|
||||
println(value_1.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>dec<!>())
|
||||
println(value_2?.toByte())
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 5
|
||||
class case_5_class {
|
||||
val prop_1: Int? = 10
|
||||
|
||||
fun case_5(value_1: Any?, value_2: Number?) {
|
||||
val o = case_5_class()
|
||||
funWithReturns(value_1 !is Float? || value_1 == null || value_2 == null || o.prop_1 == null)
|
||||
@@ -47,6 +50,7 @@ class case_5_class {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 6
|
||||
fun case_6(value_1: Any?, value_2: Any) {
|
||||
if (funWithReturnsTrue(value_1 !is String || value_2 !is Number)) {
|
||||
println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
@@ -66,6 +70,7 @@ fun case_6(value_1: Any?, value_2: Any) {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 7
|
||||
fun case_7(value_1: Any?, value_2: Any?) {
|
||||
if (funWithReturnsTrueAndInvertCondition(value_1 is String && value_2 is Number)) {
|
||||
println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
@@ -85,6 +90,7 @@ fun case_7(value_1: Any?, value_2: Any?) {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 8
|
||||
fun case_8(value_1: Any?, value_2: Any?) {
|
||||
if (funWithReturnsTrueAndInvertCondition(value_1 is String && value_2 == null)) {
|
||||
println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
@@ -104,6 +110,7 @@ fun case_8(value_1: Any?, value_2: Any?) {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 9
|
||||
fun case_9(value_1: Any?, value_2: Number?) {
|
||||
if (funWithReturnsTrue(value_1 !is Float? || value_1 == null || value_2 == null)) {
|
||||
println(value_1.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>dec<!>())
|
||||
@@ -123,6 +130,7 @@ fun case_9(value_1: Any?, value_2: Number?) {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 10
|
||||
class case_10_class {
|
||||
val prop_1: Int? = 10
|
||||
|
||||
@@ -151,6 +159,7 @@ class case_10_class {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 11
|
||||
fun case_11(value_1: Any?, value_2: Any?, value_3: Any?) {
|
||||
funWithReturnsAndInvertCondition(value_1 !is String? || value_2 !is Number && value_3 !is Float)
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_1<!>!!.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
|
||||
+20
-7
@@ -1,12 +1,11 @@
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, smartcasts
|
||||
NUMBER: 3
|
||||
DESCRIPTION: Smartcasts using Returns effects with complex (conjunction/disjunction) type checking and not-null conditions inside contract.
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, smartcasts
|
||||
* NUMBER: 3
|
||||
* DESCRIPTION: Smartcasts using Returns effects with complex (conjunction/disjunction) type checking and not-null conditions inside contract.
|
||||
*/
|
||||
|
||||
// FILE: contracts.kt
|
||||
@@ -15,21 +14,25 @@ package contracts
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1(value_1: Any?, value_2: Any?) {
|
||||
contract { returns() implies (value_1 !is String || value_2 !is Number) }
|
||||
if (!(value_1 !is String || value_2 !is Number)) throw Exception()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2(value_1: Any?, value_2: Any?) {
|
||||
contract { returns() implies (value_1 !is String || value_2 != null) }
|
||||
if (!(value_1 !is String || value_2 != null)) throw Exception()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun case_3(value_1: Any?, value_2: Any?, value_3: Any?, value_4: Any?) {
|
||||
contract { returns() implies (value_1 !is Float? || value_1 == null || value_2 == null || value_3 == null || value_4 == null) }
|
||||
if (!(value_1 !is Float? || value_1 == null || value_2 == null || value_3 == null || value_4 == null)) throw Exception()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
fun case_4_1(value_1: Any?, value_2: Any?): Boolean {
|
||||
contract { returns(true) implies (value_1 !is String || value_2 !is Number) }
|
||||
return value_1 !is String || value_2 !is Number
|
||||
@@ -47,6 +50,7 @@ fun case_4_4(value_1: Any?, value_2: Any?): Boolean? {
|
||||
return if (value_1 !is String || value_2 !is Number) null else true
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 5
|
||||
fun case_5_1(value_1: Any?, value_2: Any?): Boolean {
|
||||
contract { returns(true) implies (value_1 !is String || value_2 != null) }
|
||||
return value_1 !is String || value_2 != null
|
||||
@@ -64,6 +68,7 @@ fun case_5_4(value_1: Any?, value_2: Any?): Boolean? {
|
||||
return if (value_1 is String && value_2 == null) null else true
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 6
|
||||
fun case_6_1(value_1: Any?, value_2: Any?, value_3: Any?, value_4: Any?): Boolean {
|
||||
contract { returns(true) implies (value_1 !is Float? || value_1 == null || value_2 == null || value_3 == null || value_4 == null) }
|
||||
return value_1 !is Float? || value_1 == null || value_2 == null || value_3 == null || value_4 == null
|
||||
@@ -81,24 +86,28 @@ fun case_6_4(value_1: Any?, value_2: Any?, value_3: Any?, value_4: Any?): Boolea
|
||||
return if (value_1 is Float? && value_1 != null && value_2 != null && value_3 != null && value_4 != null) null else true
|
||||
}
|
||||
|
||||
// FILE: usages.kt
|
||||
// FILE: main.kt
|
||||
|
||||
import contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1(value_1: Any?, value_2: Any?) {
|
||||
contracts.case_1(value_1, value_2)
|
||||
println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
println(value_2.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>toByte<!>())
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2(value_1: Any?, value_2: Any?) {
|
||||
contracts.case_2(value_1, value_2)
|
||||
println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
println(value_2?.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>toByte<!>())
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
class case_3_class {
|
||||
val prop_1: Int? = 10
|
||||
|
||||
fun case_3(value_1: Any?, value_2: Number?) {
|
||||
val o = case_3_class()
|
||||
contracts.case_3(value_1, value_2, o.prop_1, this.prop_1)
|
||||
@@ -108,6 +117,7 @@ class case_3_class {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
fun case_4(value_1: Any?, value_2: Any?) {
|
||||
if (contracts.case_4_1(value_1, value_2)) {
|
||||
println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
@@ -127,6 +137,7 @@ fun case_4(value_1: Any?, value_2: Any?) {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 5
|
||||
fun case_5(value_1: Any?, value_2: Any?) {
|
||||
if (contracts.case_5_1(value_1, value_2)) {
|
||||
println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
@@ -146,8 +157,10 @@ fun case_5(value_1: Any?, value_2: Any?) {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 6
|
||||
class case_6_class {
|
||||
val prop_1: Int? = 10
|
||||
|
||||
fun case_6(value_1: Any?, value_2: Number?) {
|
||||
val o = case_6_class()
|
||||
if (contracts.case_6_1(value_1, value_2, o.prop_1, this.prop_1)) {
|
||||
|
||||
+29
-8
@@ -1,12 +1,11 @@
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, smartcasts
|
||||
NUMBER: 4
|
||||
DESCRIPTION: Smartcasts using Returns effects with simple type checking and not-null conditions on receiver inside contract.
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, smartcasts
|
||||
* NUMBER: 4
|
||||
* DESCRIPTION: Smartcasts using Returns effects with simple type checking and not-null conditions on receiver inside contract.
|
||||
*/
|
||||
|
||||
// FILE: contracts.kt
|
||||
@@ -15,16 +14,19 @@ package contracts
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun <T> T.case_1() {
|
||||
contract { returns() implies (this@case_1 !is String) }
|
||||
if (!(this@case_1 !is String)) throw Exception()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun <T : Number> T.case_2() {
|
||||
contract { returns() implies (this@case_2 !is Int) }
|
||||
if (!(this@case_2 !is Int)) throw Exception()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun <T : <!FINAL_UPPER_BOUND!>String<!>> T?.case_3_1() {
|
||||
contract { returns() implies (this@case_3_1 == null) }
|
||||
if (!(this@case_3_1 == null)) throw Exception()
|
||||
@@ -34,6 +36,7 @@ fun <T : <!FINAL_UPPER_BOUND!>String<!>> T?.case_3_2() {
|
||||
if (!(this@case_3_2 != null)) throw Exception()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
fun <T : String?> T.case_4_1() {
|
||||
contract { returns() implies (this@case_4_1 == null) }
|
||||
if (!(this@case_4_1 == null)) throw Exception()
|
||||
@@ -43,6 +46,7 @@ fun <T : String?> T.case_4_2() {
|
||||
if (!(this@case_4_2 != null)) throw Exception()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 5
|
||||
fun <T> T.case_5_1(): Boolean {
|
||||
contract { returns(true) implies (this@case_5_1 !is String) }
|
||||
return this@case_5_1 !is String
|
||||
@@ -60,6 +64,7 @@ fun <T> T.case_5_4(): Boolean? {
|
||||
return if (this@case_5_4 !is String) null else true
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 6
|
||||
fun <T : Number> T.case_6_1(): Boolean {
|
||||
contract { returns(true) implies (this@case_6_1 !is Int) }
|
||||
return this@case_6_1 !is Int
|
||||
@@ -77,6 +82,7 @@ fun <T : Number> T.case_6_4(): Boolean? {
|
||||
return if (this@case_6_4 !is Int) null else true
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 7
|
||||
fun <T : <!FINAL_UPPER_BOUND!>String<!>> T?.case_7_1(): Boolean {
|
||||
contract { returns(true) implies (this@case_7_1 == null) }
|
||||
return this@case_7_1 == null
|
||||
@@ -94,6 +100,7 @@ fun <T : <!FINAL_UPPER_BOUND!>String<!>> T?.case_7_4(): Boolean? {
|
||||
return if (this@case_7_4 != null) null else true
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 8
|
||||
fun <T : String?> T.case_8_1(): Boolean {
|
||||
contract { returns(true) implies (this@case_8_1 == null) }
|
||||
return this@case_8_1 == null
|
||||
@@ -111,16 +118,19 @@ fun <T : String?> T.case_8_4(): Boolean? {
|
||||
return if (this@case_8_4 != null) null else true
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 9
|
||||
fun <T : Number?> T.case_9(): Boolean? {
|
||||
contract { returnsNotNull() implies (this@case_9 != null) }
|
||||
return if (this@case_9 != null) true else null
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 10
|
||||
fun <T : Number?> T.case_10(): Boolean? {
|
||||
contract { returnsNotNull() implies (this@case_10 == null) }
|
||||
return if (this@case_10 == null) true else null
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 11
|
||||
fun <T : Number?> T.case_11_1(): Boolean? {
|
||||
contract { returns(null) implies (this@case_11_1 != null) }
|
||||
return if (this@case_11_1 != null) null else true
|
||||
@@ -130,20 +140,23 @@ fun <T : Number?> T.case_11_2(): Boolean? {
|
||||
return if (this@case_11_2 != null) null else true
|
||||
}
|
||||
|
||||
// FILE: usages.kt
|
||||
// FILE: main.kt
|
||||
|
||||
import contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1(value_1: Any?) {
|
||||
value_1.case_1()
|
||||
println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2(value_1: Number) {
|
||||
value_1.case_2()
|
||||
println(value_1.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>inv<!>())
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun case_3(value_1: String?, value_2: String?) {
|
||||
value_1.case_3_1()
|
||||
println(<!DEBUG_INFO_CONSTANT!>value_1<!><!UNSAFE_CALL!>.<!>length)
|
||||
@@ -151,6 +164,7 @@ fun case_3(value_1: String?, value_2: String?) {
|
||||
println(value_2)
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
fun case_4(value_1: String?, value_2: String?) {
|
||||
value_1.case_4_1()
|
||||
println(<!DEBUG_INFO_CONSTANT!>value_1<!><!UNSAFE_CALL!>.<!>length)
|
||||
@@ -158,6 +172,7 @@ fun case_4(value_1: String?, value_2: String?) {
|
||||
println(value_2)
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 5
|
||||
fun case_5(value_1: Any?) {
|
||||
if (value_1.case_5_1()) println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
if (!value_1.case_5_2()) println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
@@ -165,6 +180,7 @@ fun case_5(value_1: Any?) {
|
||||
if (value_1.case_5_4() == null) println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 6
|
||||
fun case_6(value_1: Number) {
|
||||
when { value_1.case_6_1() -> println(value_1.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>inv<!>()) }
|
||||
when { !value_1.case_6_2() -> println(value_1.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>inv<!>()) }
|
||||
@@ -172,6 +188,7 @@ fun case_6(value_1: Number) {
|
||||
when { value_1.case_6_4() != null -> println(value_1.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>inv<!>()) }
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 7
|
||||
fun case_7(value_1: String?, value_2: String?) {
|
||||
if (value_1.case_7_1()) println(<!DEBUG_INFO_CONSTANT!>value_1<!><!UNSAFE_CALL!>.<!>length)
|
||||
if (value_2.case_7_2()) println(value_2)
|
||||
@@ -179,6 +196,7 @@ fun case_7(value_1: String?, value_2: String?) {
|
||||
if (value_2.case_7_3() == null) println(value_2)
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 8
|
||||
fun case_8(value_1: String?, value_2: String?) {
|
||||
when { value_1.case_8_1() -> println(<!DEBUG_INFO_CONSTANT!>value_1<!><!UNSAFE_CALL!>.<!>length) }
|
||||
when { value_2.case_8_2() -> println(value_2) }
|
||||
@@ -186,10 +204,12 @@ fun case_8(value_1: String?, value_2: String?) {
|
||||
when { value_2.case_8_3() == null -> println(value_2) }
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 9
|
||||
fun case_9(value_1: Number?) {
|
||||
if (value_1?.case_9() == null) println(value_1<!UNSAFE_CALL!>.<!>toByte())
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 10
|
||||
fun case_10(value_1: Number?) {
|
||||
if (value_1?.case_10() == null) {
|
||||
println(value_1<!UNSAFE_CALL!>.<!>toByte())
|
||||
@@ -199,7 +219,8 @@ fun case_10(value_1: Number?) {
|
||||
}
|
||||
|
||||
/*
|
||||
ISSUES: KT-26382
|
||||
* TESTCASE NUMBER: 11
|
||||
* ISSUES: KT-26382
|
||||
*/
|
||||
fun case_11(value_1: Number?, value_2: Number?) {
|
||||
if (value_1?.case_11_1() == null) {
|
||||
|
||||
+18
-7
@@ -1,12 +1,11 @@
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, smartcasts
|
||||
NUMBER: 5
|
||||
DESCRIPTION: Smartcasts using Returns effects with complex (conjunction/disjunction) type checking and not-null conditions on receiver inside contract.
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, smartcasts
|
||||
* NUMBER: 5
|
||||
* DESCRIPTION: Smartcasts using Returns effects with complex (conjunction/disjunction) type checking and not-null conditions on receiver inside contract.
|
||||
*/
|
||||
|
||||
// FILE: contracts.kt
|
||||
@@ -15,21 +14,25 @@ package contracts
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun <T> T?.case_1() {
|
||||
contract { returns() implies (this@case_1 == null || this@case_1 !is String) }
|
||||
if (!(this@case_1 == null || this@case_1 !is String)) throw Exception()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun <T : Number?> T.case_2() {
|
||||
contract { returns() implies (this@case_2 !is Int || <!SENSELESS_COMPARISON!>this@case_2 == null<!>) }
|
||||
if (!(this@case_2 !is Int || <!SENSELESS_COMPARISON!>this@case_2 == null<!>)) throw Exception()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
inline fun <reified T : Any?> T?.case_3() {
|
||||
contract { returns() implies (this@case_3 !is Number || this@case_3 !is Int || <!SENSELESS_COMPARISON!>this@case_3 == null<!>) }
|
||||
if (!(this@case_3 !is Number || this@case_3 !is Int || <!SENSELESS_COMPARISON!>this@case_3 == null<!>)) throw Exception()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
fun <T> T?.case_4_1(): Boolean {
|
||||
contract { returns(true) implies (this@case_4_1 == null || this@case_4_1 !is String) }
|
||||
return this@case_4_1 == null || this@case_4_1 !is String
|
||||
@@ -47,6 +50,7 @@ fun <T> T?.case_4_4(): Boolean? {
|
||||
return if (this@case_4_4 == null || this@case_4_4 !is String) null else true
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 5
|
||||
fun <T : Number?> T.case_5_1(): Boolean {
|
||||
contract { returns(true) implies (this@case_5_1 !is Int || <!SENSELESS_COMPARISON!>this@case_5_1 == null<!>) }
|
||||
return this@case_5_1 !is Int || <!SENSELESS_COMPARISON!>this@case_5_1 == null<!>
|
||||
@@ -64,6 +68,7 @@ fun <T : Number?> T.case_5_4(): Boolean? {
|
||||
return if (this@case_5_4 !is Int || <!SENSELESS_COMPARISON!>this@case_5_4 == null<!>) null else true
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 6
|
||||
inline fun <reified T : Any?> T?.case_6_1(): Boolean {
|
||||
contract { returns(true) implies (this@case_6_1 !is Number || this@case_6_1 !is Int || <!SENSELESS_COMPARISON!>this@case_6_1 == null<!>) }
|
||||
return this@case_6_1 !is Number || this@case_6_1 !is Int || <!SENSELESS_COMPARISON!>this@case_6_1 == null<!>
|
||||
@@ -81,25 +86,29 @@ inline fun <reified T : Any?> T?.case_6_4(): Boolean? {
|
||||
return if (this@case_6_4 is Number && this@case_6_4 is Int && <!SENSELESS_COMPARISON!>this@case_6_4 != null<!>) null else true
|
||||
}
|
||||
|
||||
// FILE: usages.kt
|
||||
// FILE: main.kt
|
||||
|
||||
import contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1(value_1: Any?) {
|
||||
value_1.case_1()
|
||||
println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2(value_1: Number?) {
|
||||
value_1.case_2()
|
||||
println(value_1.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>inv<!>())
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun case_3(value_1: Any?) {
|
||||
value_1.case_3()
|
||||
println(value_1.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>inv<!>())
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
fun case_4(value_1: Any?, value_2: Any?, value_3: Any?) {
|
||||
when { value_1.case_4_1() -> println(value_1.<!UNRESOLVED_REFERENCE!>length<!>) }
|
||||
when { !value_2.case_4_2() -> println(value_2.<!UNRESOLVED_REFERENCE!>length<!>) }
|
||||
@@ -107,6 +116,7 @@ fun case_4(value_1: Any?, value_2: Any?, value_3: Any?) {
|
||||
when { value_3.case_4_4() == null -> println(value_3.<!UNRESOLVED_REFERENCE!>length<!>) }
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 5
|
||||
fun case_5(value_1: Number?, value_2: Number?, value_3: Number?) {
|
||||
if (value_1.case_5_1()) println(value_1.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>inv<!>())
|
||||
if (!value_2.case_5_2()) println(value_2.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>inv<!>())
|
||||
@@ -114,6 +124,7 @@ fun case_5(value_1: Number?, value_2: Number?, value_3: Number?) {
|
||||
if (value_3.case_5_4() == null) println(value_3.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>inv<!>())
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 6
|
||||
fun case_6(value_1: Any?, value_2: Any?, value_3: Any?) {
|
||||
if (value_1.case_6_1()) println(value_1.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>inv<!>())
|
||||
if (!value_2.case_6_2()) println(value_2.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>inv<!>())
|
||||
|
||||
+22
-7
@@ -1,12 +1,11 @@
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, smartcasts
|
||||
NUMBER: 6
|
||||
DESCRIPTION: Smartcasts using Returns effects with complex (conjunction/disjunction) type checking and not-null conditions on receiver and some values (mixed) inside contract.
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, smartcasts
|
||||
* NUMBER: 6
|
||||
* DESCRIPTION: Smartcasts using Returns effects with complex (conjunction/disjunction) type checking and not-null conditions on receiver and some values (mixed) inside contract.
|
||||
*/
|
||||
|
||||
// FILE: contracts.kt
|
||||
@@ -15,26 +14,31 @@ package contracts
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun <T> T?.case_1(value_1: Int?) {
|
||||
contract { returns() implies (this@case_1 == null || this@case_1 !is String || value_1 == null) }
|
||||
if (!(this@case_1 == null || this@case_1 !is String || value_1 == null)) throw Exception()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun <T : Number?> T.case_2(value_2: Any?) {
|
||||
contract { returns() implies (this@case_2 !is Int || <!SENSELESS_COMPARISON!>this@case_2 == null<!> || value_2 !is Number || <!SENSELESS_COMPARISON!>value_2 == null<!>) }
|
||||
if (!(this@case_2 !is Int || <!SENSELESS_COMPARISON!>this@case_2 == null<!> || value_2 !is Number || <!SENSELESS_COMPARISON!>value_2 == null<!>)) throw Exception()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun <T : Any?> T?.case_3(value_2: Any?) {
|
||||
contract { returns() implies (this@case_3 !is Number || this@case_3 !is Int || <!SENSELESS_COMPARISON!>this@case_3 == null<!> || value_2 == null) }
|
||||
if (!(this@case_3 !is Number || this@case_3 !is Int || <!SENSELESS_COMPARISON!>this@case_3 == null<!> || value_2 == null)) throw Exception()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
inline fun <reified T : Any?> T?.case_4(value_2: Number, value_3: Any?, value_4: String?) {
|
||||
contract { returns() implies ((this@case_4 !is Number && this@case_4 !is Int) || value_2 !is Int || value_3 == null || value_3 !is Number || value_4 == null) }
|
||||
if (!((this@case_4 !is Number && this@case_4 !is Int) || value_2 !is Int || value_3 == null || value_3 !is Number || value_4 == null)) throw Exception()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 5
|
||||
fun <T> T?.case_5_1(value_1: Int?): Boolean {
|
||||
contract { returns(true) implies (this@case_5_1 == null || this@case_5_1 !is String || value_1 == null) }
|
||||
return this@case_5_1 == null || this@case_5_1 !is String || value_1 == null
|
||||
@@ -52,6 +56,7 @@ fun <T> T?.case_5_4(value_1: Int?): Boolean? {
|
||||
return if (this@case_5_4 == null || this@case_5_4 !is String || value_1 == null) null else true
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 6
|
||||
fun <T : Number?> T.case_6_1(value_2: Any?): Boolean {
|
||||
contract { returns(true) implies (this@case_6_1 !is Int || <!SENSELESS_COMPARISON!>this@case_6_1 == null<!> || value_2 !is Number || <!SENSELESS_COMPARISON!>value_2 == null<!>) }
|
||||
return this@case_6_1 !is Int || <!SENSELESS_COMPARISON!>this@case_6_1 == null<!> || value_2 !is Number || <!SENSELESS_COMPARISON!>value_2 == null<!>
|
||||
@@ -69,6 +74,7 @@ fun <T : Number?> T.case_6_4(value_2: Any?): Boolean? {
|
||||
return if (this@case_6_4 !is Int || <!SENSELESS_COMPARISON!>this@case_6_4 == null<!> || value_2 !is Number || <!SENSELESS_COMPARISON!>value_2 == null<!>) null else true
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 7
|
||||
fun <T : Any?> T?.case_7_1(value_2: Any?): Boolean {
|
||||
contract { returns(true) implies (this@case_7_1 !is Number || this@case_7_1 !is Int || <!SENSELESS_COMPARISON!>this@case_7_1 == null<!> || value_2 == null) }
|
||||
return this@case_7_1 !is Number || this@case_7_1 !is Int || <!SENSELESS_COMPARISON!>this@case_7_1 == null<!> || value_2 == null
|
||||
@@ -86,6 +92,7 @@ fun <T : Any?> T?.case_7_4(value_2: Any?): Boolean? {
|
||||
return if (this@case_7_4 !is Number || this@case_7_4 !is Int || <!SENSELESS_COMPARISON!>this@case_7_4 == null<!> || value_2 == null) null else true
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 8
|
||||
inline fun <reified T : Any?> T?.case_8_1(value_2: Number, value_3: Any?, value_4: String?): Boolean {
|
||||
contract { returns(true) implies ((this@case_8_1 !is Number && this@case_8_1 !is Int) || value_2 !is Int || value_3 == null || value_3 !is Number || value_4 == null) }
|
||||
return (this@case_8_1 !is Number && this@case_8_1 !is Int) || value_2 !is Int || value_3 == null || value_3 !is Number || value_4 == null
|
||||
@@ -103,28 +110,32 @@ inline fun <reified T : Any?> T?.case_8_4(value_2: Number, value_3: Any?, value_
|
||||
return if ((this@case_8_4 is Number || this@case_8_4 is Int) && value_2 is Int && value_3 != null && value_3 is Number && value_4 != null) null else true
|
||||
}
|
||||
|
||||
// FILE: usages.kt
|
||||
// FILE: main.kt
|
||||
|
||||
import contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1(value_1: Any?, value_2: Int?) {
|
||||
value_1.case_1(value_2)
|
||||
println(value_1.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
println(value_2<!UNSAFE_CALL!>.<!>inv())
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2(value_1: Number?, value_2: Any?) {
|
||||
value_1.case_2(value_2)
|
||||
println(value_1.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>inv<!>())
|
||||
println(value_2.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>toByte<!>())
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun case_3(value_1: Any?, value_2: String?) {
|
||||
value_1.case_3(value_2)
|
||||
println(value_1.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>inv<!>())
|
||||
println(value_2<!UNSAFE_CALL!>.<!>length)
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
fun case_4(value_1: Any?, value_2: Number, value_3: Any?, value_4: String?) {
|
||||
value_1.case_4(value_2, value_3, value_4)
|
||||
println(value_2.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>inv<!>())
|
||||
@@ -132,6 +143,7 @@ fun case_4(value_1: Any?, value_2: Number, value_3: Any?, value_4: String?) {
|
||||
println(value_4<!UNSAFE_CALL!>.<!>length)
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 5
|
||||
fun case_5(value_1: Any?, value_2: Int?, value_3: Any?, value_4: Int?, value_5: Any?, value_6: Int?) {
|
||||
when {
|
||||
value_1.case_5_1(value_2) -> {
|
||||
@@ -153,6 +165,7 @@ fun case_5(value_1: Any?, value_2: Int?, value_3: Any?, value_4: Int?, value_5:
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 6
|
||||
fun case_6(value_1: Number?, value_2: Any?, value_3: Number?, value_4: Any?, value_5: Number?, value_6: Any?) {
|
||||
if (value_1.case_6_1(value_2)) {
|
||||
println(value_1.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>inv<!>())
|
||||
@@ -172,6 +185,7 @@ fun case_6(value_1: Number?, value_2: Any?, value_3: Number?, value_4: Any?, val
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 7
|
||||
fun case_7(value_1: Any?, value_2: String?, value_3: Any?, value_4: String?, value_5: Any?, value_6: String?) {
|
||||
if (value_1.case_7_1(value_2)) {
|
||||
println(value_1.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>inv<!>())
|
||||
@@ -191,6 +205,7 @@ fun case_7(value_1: Any?, value_2: String?, value_3: Any?, value_4: String?, val
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 8
|
||||
fun case_8(value_1: Any?, value_2: Number, value_3: Any?, value_4: String?) {
|
||||
when { value_1.case_8_1(value_2, value_3, value_4) -> println(value_2.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>inv<!>()) }
|
||||
when { value_1.case_8_1(value_2, value_3, value_4) -> println(value_3.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>toByte<!>()) }
|
||||
|
||||
+22
-7
@@ -1,12 +1,11 @@
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, smartcasts
|
||||
NUMBER: 7
|
||||
DESCRIPTION: Smartcasts using Returns effects with nested or subsequent contract function calls.
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, smartcasts
|
||||
* NUMBER: 7
|
||||
* DESCRIPTION: Smartcasts using Returns effects with nested or subsequent contract function calls.
|
||||
*/
|
||||
|
||||
// FILE: contracts.kt
|
||||
@@ -15,6 +14,7 @@ package contracts
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1_1(value_1: Int?) {
|
||||
contract { returns() implies (value_1 == null) }
|
||||
if (!(value_1 == null)) throw Exception()
|
||||
@@ -24,6 +24,7 @@ fun case_1_2(value_1: Int?) {
|
||||
if (!(value_1 != null)) throw Exception()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2_1(value_1: Number?) {
|
||||
contract { returns() implies (value_1 !is Float) }
|
||||
if (!(value_1 !is Float)) throw Exception()
|
||||
@@ -33,6 +34,7 @@ fun case_2_2(value_1: Number?) {
|
||||
if (!(value_1 !is Int)) throw Exception()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun case_3_1(value_1: Any?) {
|
||||
contract { returns() implies (value_1 !is String) }
|
||||
if (!(value_1 !is String)) throw Exception()
|
||||
@@ -42,6 +44,7 @@ fun case_3_2(value_1: Any?) {
|
||||
if (!(value_1 is String)) throw Exception()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
fun case_4_1(value_1: Any?) {
|
||||
contract { returns() implies (value_1 !is Number?) }
|
||||
if (!(value_1 !is Number?)) throw Exception()
|
||||
@@ -55,6 +58,7 @@ fun case_4_3(value_1: Number) {
|
||||
if (!(value_1 !is Int)) throw Exception()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 5
|
||||
fun case_5_1(value_1: Int?): Boolean {
|
||||
contract { returns(true) implies (value_1 == null) }
|
||||
return value_1 == null
|
||||
@@ -88,6 +92,7 @@ fun case_5_8(value_1: Int?): Boolean? {
|
||||
return if (value_1 != null) null else true
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 6
|
||||
fun case_6_1(value_1: Number?): Boolean {
|
||||
contract { returns(true) implies (value_1 !is Float) }
|
||||
return value_1 !is Float
|
||||
@@ -121,6 +126,7 @@ fun case_6_8(value_1: Number?): Boolean? {
|
||||
return if (value_1 !is Int) null else true
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 7
|
||||
fun case_7_1(value_1: Any?): Boolean {
|
||||
contract { returns(true) implies (value_1 !is String) }
|
||||
return value_1 !is String
|
||||
@@ -154,6 +160,7 @@ fun case_7_8(value_1: Any?): Boolean? {
|
||||
return if (value_1 is String) null else true
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 8
|
||||
fun case_8_1(value_1: Any?): Boolean {
|
||||
contract { returns(true) implies (value_1 !is Number?) }
|
||||
return value_1 !is Number?
|
||||
@@ -203,10 +210,11 @@ fun case_8_12(value_1: Number): Boolean? {
|
||||
return if (value_1 !is Int) null else true
|
||||
}
|
||||
|
||||
// FILE: usages.kt
|
||||
// FILE: main.kt
|
||||
|
||||
import contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1(value_1: Int?) {
|
||||
case_1_1(value_1)
|
||||
<!DEBUG_INFO_CONSTANT!>value_1<!><!UNSAFE_CALL!>.<!>inv()
|
||||
@@ -216,6 +224,7 @@ fun case_1(value_1: Int?) {
|
||||
<!UNREACHABLE_CODE!><!DEBUG_INFO_SMARTCAST!>value_1<!>.inv()<!>
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2(value_1: Number?) {
|
||||
case_2_1(value_1)
|
||||
value_1<!UNSAFE_CALL!>.<!>toByte()
|
||||
@@ -223,6 +232,7 @@ fun case_2(value_1: Number?) {
|
||||
value_1.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>inv<!>()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun case_3(value_1: Any?) {
|
||||
case_3_1(value_1)
|
||||
value_1.<!UNRESOLVED_REFERENCE!>length<!>
|
||||
@@ -230,6 +240,7 @@ fun case_3(value_1: Any?) {
|
||||
<!DEBUG_INFO_SMARTCAST!>value_1<!>.length
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
fun case_4(value_1: Any?) {
|
||||
case_4_1(value_1)
|
||||
value_1?.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>toByte<!>()
|
||||
@@ -239,6 +250,7 @@ fun case_4(value_1: Any?) {
|
||||
<!DEBUG_INFO_CONSTANT!>value_1<!><!UNSAFE_CALL!>.<!><!MISSING_DEPENDENCY_CLASS, MISSING_DEPENDENCY_CLASS!>inv<!>()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 5
|
||||
fun case_5(value_1: Int?) {
|
||||
if (case_5_1(value_1)) {
|
||||
<!DEBUG_INFO_CONSTANT!>value_1<!><!UNSAFE_CALL!>.<!>inv()
|
||||
@@ -274,6 +286,7 @@ fun case_5(value_1: Int?) {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 6
|
||||
fun case_6(value_1: Number?) {
|
||||
when {
|
||||
case_6_1(value_1) -> {
|
||||
@@ -301,6 +314,7 @@ fun case_6(value_1: Number?) {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 7
|
||||
fun case_7(value_1: Any?) {
|
||||
if (case_7_1(value_1)) {
|
||||
value_1.<!UNRESOLVED_REFERENCE!>length<!>
|
||||
@@ -320,6 +334,7 @@ fun case_7(value_1: Any?) {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 8
|
||||
fun case_8(value_1: Any?) {
|
||||
if (case_8_1(value_1)) {
|
||||
value_1?.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>toByte<!>()
|
||||
|
||||
+16
-7
@@ -2,12 +2,11 @@
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, smartcasts
|
||||
NUMBER: 8
|
||||
DESCRIPTION: Smartcasts using some Returns effects.
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, smartcasts
|
||||
* NUMBER: 8
|
||||
* DESCRIPTION: Smartcasts using some Returns effects.
|
||||
*/
|
||||
|
||||
// FILE: contracts.kt
|
||||
@@ -16,6 +15,7 @@ package contracts
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun <T> T?.case_3(value_1: Int?, value_2: Boolean): Boolean {
|
||||
contract {
|
||||
returns(true) implies (value_1 != null)
|
||||
@@ -26,6 +26,7 @@ fun <T> T?.case_3(value_1: Int?, value_2: Boolean): Boolean {
|
||||
return value_1 == null
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
fun case_4(value_1: Number, block: (() -> Unit)?): Boolean? {
|
||||
contract {
|
||||
returns(true) implies (block != null)
|
||||
@@ -36,6 +37,7 @@ fun case_4(value_1: Number, block: (() -> Unit)?): Boolean? {
|
||||
return <!SENSELESS_COMPARISON!>value_1 == null<!>
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 5
|
||||
fun String?.case_5(value_1: Number?): Boolean? {
|
||||
contract {
|
||||
returns(true) implies (value_1 == null)
|
||||
@@ -46,6 +48,7 @@ fun String?.case_5(value_1: Number?): Boolean? {
|
||||
return value_1 == null
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 6
|
||||
fun <T> T?.case_6(value_1: Number, value_2: String?): Boolean? {
|
||||
contract {
|
||||
returns(true) implies (this@case_6 == null)
|
||||
@@ -57,10 +60,11 @@ fun <T> T?.case_6(value_1: Number, value_2: String?): Boolean? {
|
||||
return <!SENSELESS_COMPARISON!>value_1 == null<!>
|
||||
}
|
||||
|
||||
// FILE: usages.kt
|
||||
// FILE: main.kt
|
||||
|
||||
import contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1(value_1: Any?) {
|
||||
funWithReturns(value_1 !is Number?)
|
||||
println(value_1?.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>toByte<!>())
|
||||
@@ -70,6 +74,7 @@ fun case_1(value_1: Any?) {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2(value_1: Any?) {
|
||||
if (!funWithReturnsFalse(value_1 !is Number?)) {
|
||||
println(value_1?.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>toByte<!>())
|
||||
@@ -79,6 +84,7 @@ fun case_2(value_1: Any?) {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun case_3(value_1: Int?, value_2: Any?) {
|
||||
if (!value_1.case_3(value_1, value_2 is Number?)) {
|
||||
println(value_2?.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>toByte<!>())
|
||||
@@ -90,6 +96,7 @@ fun case_3(value_1: Int?, value_2: Any?) {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
fun case_4(value_1: Number, value_2: (() -> Unit)?) {
|
||||
if (contracts.case_4(value_1, value_2) == true) {
|
||||
value_1.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>inv<!>()
|
||||
@@ -100,6 +107,7 @@ fun case_4(value_1: Number, value_2: (() -> Unit)?) {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 5
|
||||
fun case_5(value_1: Number?, value_2: String?) {
|
||||
when (value_2.case_5(value_1)) {
|
||||
true -> {
|
||||
@@ -113,6 +121,7 @@ fun case_5(value_1: Number?, value_2: String?) {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 6
|
||||
fun case_6(value_1: Number, value_2: String?, value_3: Any?) {
|
||||
when (value_3.case_6(value_1, value_2)) {
|
||||
true -> {
|
||||
|
||||
+9
-6
@@ -3,30 +3,33 @@
|
||||
// SKIP_TXT
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, smartcasts
|
||||
NUMBER: 9
|
||||
DESCRIPTION: Check the lack of smartcasts after non-null assertions or not-null value assignment in lambdas of contract function with 'unknown' or 'at most once' CallsInPlace effects.
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, smartcasts
|
||||
* NUMBER: 9
|
||||
* DESCRIPTION: Check the lack of smartcasts after non-null assertions or not-null value assignment in lambdas of contract function with 'unknown' or 'at most once' CallsInPlace effects.
|
||||
*/
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1(arg: Int?) {
|
||||
funWithAtMostOnceCallsInPlace { arg!! }
|
||||
arg<!UNSAFE_CALL!>.<!>inc()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2(arg: Int?) {
|
||||
funWithUnknownCallsInPlace { arg!! }
|
||||
arg<!UNSAFE_CALL!>.<!>inc()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun case_3() {
|
||||
val value_1: Boolean?
|
||||
funWithAtMostOnceCallsInPlace { value_1 = false }
|
||||
<!UNINITIALIZED_VARIABLE!>value_1<!><!UNSAFE_CALL!>.<!>not()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
fun case_4() {
|
||||
val value_1: Boolean?
|
||||
funWithUnknownCallsInPlace { <!VAL_REASSIGNMENT!>value_1<!> = true }
|
||||
|
||||
+16
-6
@@ -3,44 +3,50 @@
|
||||
// SKIP_TXT
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, smartcasts
|
||||
NUMBER: 1
|
||||
DESCRIPTION: Smartcasts using Returns effects with simple type checking, not-null conditions and custom condition (condition for smartcast outside contract).
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, smartcasts
|
||||
* NUMBER: 1
|
||||
* DESCRIPTION: Smartcasts using Returns effects with simple type checking, not-null conditions and custom condition (condition for smartcast outside contract).
|
||||
*/
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1(value_1: Any?) {
|
||||
funWithReturns(value_1 is String)
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.length)
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2(value_1: Int?) {
|
||||
funWithReturns(value_1 != null)
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.inc())
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun case_3(value_1: Int?) {
|
||||
funWithReturns(value_1 == null)
|
||||
println(<!DEBUG_INFO_CONSTANT!>value_1<!>)
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
fun case_4(value_1: Any?) {
|
||||
funWithReturnsAndTypeCheck(value_1)
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.length)
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 5
|
||||
fun case_5(value_1: String?) {
|
||||
funWithReturnsAndNotNullCheck(value_1)
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.length)
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 6
|
||||
fun case_6(value_1: String?) {
|
||||
funWithReturnsAndNullCheck(value_1)
|
||||
println(<!DEBUG_INFO_CONSTANT!>value_1<!>)
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 7
|
||||
object case_7_object {
|
||||
val prop_1: Int? = 10
|
||||
}
|
||||
@@ -49,6 +55,7 @@ fun case_7() {
|
||||
<!DEBUG_INFO_SMARTCAST!>case_7_object.prop_1<!>.inc()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 8
|
||||
fun case_8(value_1: Any?) {
|
||||
if (funWithReturnsTrue(value_1 is String)) println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.length)
|
||||
if (funWithReturnsTrueAndInvertCondition(value_1 !is String)) println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.length)
|
||||
@@ -58,6 +65,7 @@ fun case_8(value_1: Any?) {
|
||||
if (!(funWithReturnsNotNull(value_1 is String) == null)) println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.length)
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 9
|
||||
fun case_9(value_1: String?) {
|
||||
if (funWithReturnsTrue(value_1 != null)) println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.length)
|
||||
if (funWithReturnsTrueAndInvertCondition(value_1 == null)) println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.length)
|
||||
@@ -68,6 +76,7 @@ fun case_9(value_1: String?) {
|
||||
if (!(funWithReturnsNotNullAndInvertCondition(value_1 == null) == null)) println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.length)
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 10
|
||||
fun case_10(value_1: Any?) {
|
||||
if (funWithReturnsTrueAndTypeCheck(value_1)) println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.length)
|
||||
if (!funWithReturnsFalseAndTypeCheck(value_1)) println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.length)
|
||||
@@ -75,6 +84,7 @@ fun case_10(value_1: Any?) {
|
||||
if (!(funWithReturnsNotNullAndTypeCheck(value_1) == null)) println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.length)
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 11
|
||||
fun case_11(value_1: Number?, value_2: Int?) {
|
||||
if (funWithReturnsTrueAndNotNullCheck(value_1)) println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.toByte())
|
||||
if (funWithReturnsTrueAndNullCheck(value_1)) println(<!DEBUG_INFO_CONSTANT!>value_1<!>)
|
||||
|
||||
+11
-8
@@ -3,13 +3,12 @@
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, smartcasts
|
||||
NUMBER: 10
|
||||
DESCRIPTION: Smartcasts with correspond contract function with default value in last parameter.
|
||||
ISSUES: KT-26444
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, smartcasts
|
||||
* NUMBER: 10
|
||||
* DESCRIPTION: Smartcasts with correspond contract function with default value in last parameter.
|
||||
* ISSUES: KT-26444
|
||||
*/
|
||||
|
||||
// FILE: contracts.kt
|
||||
@@ -18,26 +17,30 @@ package contracts
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1(value_1: Int?, value_2: Int? = 10): Boolean {
|
||||
contract { returns(true) implies (value_1 != null) }
|
||||
return value_1 != null
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2(value_1: Int? = 10, value_2: Int? = 10, value_3: Int? = 10): Boolean {
|
||||
contract { returns(true) implies (value_2 != null) }
|
||||
return value_1 != null
|
||||
}
|
||||
|
||||
// FILE: usages.kt
|
||||
// FILE: main.kt
|
||||
|
||||
import contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1(value_1: Int?) {
|
||||
if (contracts.case_1(value_1)) {
|
||||
<!DEBUG_INFO_SMARTCAST!>value_1<!>.inc()
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2(value_1: Int?) {
|
||||
if (contracts.case_2(10, value_1)) {
|
||||
<!DEBUG_INFO_SMARTCAST!>value_1<!>.inc()
|
||||
|
||||
+13
-8
@@ -2,13 +2,12 @@
|
||||
// !WITH_CONTRACT_FUNCTIONS
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, smartcasts
|
||||
NUMBER: 11
|
||||
DESCRIPTION: Check smartcasts with passing same fields of instances of the same class in contract function with conjunction not-null condition.
|
||||
ISSUES: KT-26300
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, smartcasts
|
||||
* NUMBER: 11
|
||||
* DESCRIPTION: Check smartcasts with passing same fields of instances of the same class in contract function with conjunction not-null condition.
|
||||
* ISSUES: KT-26300
|
||||
*/
|
||||
|
||||
// FILE: contracts.kt
|
||||
@@ -17,20 +16,23 @@ package contracts
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun case_3(value_1: Any?, value_2: Any?, value_3: Any?, value_4: Any?) {
|
||||
contract { returns() implies (value_1 is Float? && value_1 != null && value_2 != null && value_3 != null && value_4 != null) }
|
||||
if (!(value_1 is Float? && value_1 != null && value_2 != null && value_3 != null && value_4 != null)) throw Exception()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
fun case_4(value_1: Any?, value_2: Any?, value_3: Any?, value_4: Any?): Boolean {
|
||||
contract { returns(true) implies (value_1 is Float? && value_1 != null && value_2 != null && value_3 != null && value_4 != null) }
|
||||
return value_1 is Float? && value_1 != null && value_2 != null && value_3 != null && value_4 != null
|
||||
}
|
||||
|
||||
// FILE: usages.kt
|
||||
// FILE: main.kt
|
||||
|
||||
import contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
class case_1 {
|
||||
val prop_1: Int? = 10
|
||||
fun case_1(value_1: Any?, value_2: Number?) {
|
||||
@@ -41,6 +43,7 @@ class case_1 {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
class case_2 {
|
||||
val prop_1: Int? = 10
|
||||
fun case_2(value_1: Any?, value_2: Number?) {
|
||||
@@ -52,6 +55,7 @@ class case_2 {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
class case_3 {
|
||||
val prop_1: Int? = 10
|
||||
fun case_3(value_1: Any?, value_2: Number?) {
|
||||
@@ -62,6 +66,7 @@ class case_3 {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
class case_4 {
|
||||
val prop_1: Int? = 10
|
||||
fun case_4(value_1: Any?, value_2: Number?) {
|
||||
|
||||
+11
-8
@@ -3,32 +3,35 @@
|
||||
// SKIP_TXT
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, smartcasts
|
||||
NUMBER: 12
|
||||
DESCRIPTION: Smartcasts after non-null assertions or not-null value assignment in lambdas of contract function with 'exactly once' or 'at least once' CallsInPlace effects.
|
||||
UNEXPECTED BEHAVIOUR
|
||||
ISSUES: KT-26148
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, smartcasts
|
||||
* NUMBER: 12
|
||||
* DESCRIPTION: Smartcasts after non-null assertions or not-null value assignment in lambdas of contract function with 'exactly once' or 'at least once' CallsInPlace effects.
|
||||
* UNEXPECTED BEHAVIOUR
|
||||
* ISSUES: KT-26148
|
||||
*/
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1(arg: Int?) {
|
||||
funWithExactlyOnceCallsInPlace { arg!! }
|
||||
arg<!UNSAFE_CALL!>.<!>inc()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2(arg: Int?) {
|
||||
funWithAtLeastOnceCallsInPlace { arg!! }
|
||||
arg<!UNSAFE_CALL!>.<!>inc()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun case_3() {
|
||||
val value_1: Boolean?
|
||||
funWithExactlyOnceCallsInPlace { value_1 = false }
|
||||
value_1<!UNSAFE_CALL!>.<!>not()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
fun case_4() {
|
||||
val value_1: Boolean?
|
||||
funWithAtLeastOnceCallsInPlace { <!VAL_REASSIGNMENT!>value_1<!> = true }
|
||||
|
||||
+12
-9
@@ -1,14 +1,13 @@
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, smartcasts
|
||||
NUMBER: 13
|
||||
DESCRIPTION: Check smartcast to upper bound of the types in disjunction.
|
||||
UNEXPECTED BEHAVIOUR
|
||||
ISSUES: KT-1982
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, smartcasts
|
||||
* NUMBER: 13
|
||||
* DESCRIPTION: Check smartcast to upper bound of the types in disjunction.
|
||||
* UNEXPECTED BEHAVIOUR
|
||||
* ISSUES: KT-1982
|
||||
*/
|
||||
|
||||
// FILE: contracts.kt
|
||||
@@ -17,25 +16,29 @@ package contracts
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun <T : Any?> T?.case_1() {
|
||||
contract { returns() implies (this@case_1 is Number || this@case_1 is Int) }
|
||||
if (!(this@case_1 is Number || this@case_1 is Int)) throw Exception()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
inline fun <reified T : Any?> T?.case_2(value_2: Number, value_3: Any?, value_4: String?) {
|
||||
contract { returns() implies ((this@case_2 is Number || this@case_2 is Int) && value_2 is Int && value_3 != null && value_3 is Number && value_4 != null) }
|
||||
if (!((this is Number || this is Int) && value_2 is Int && value_3 != null && value_3 is Number && value_4 != null)) throw Exception()
|
||||
}
|
||||
|
||||
// FILE: usages.kt
|
||||
// FILE: main.kt
|
||||
|
||||
import contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1(value_1: Any?) {
|
||||
value_1.case_1()
|
||||
println(value_1.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>toByte<!>())
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2(value_1: Any?, value_2: Number, value_3: Any?, value_4: String?) {
|
||||
value_1.case_2(value_2, value_3, value_4)
|
||||
println(value_1.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>toByte<!>())
|
||||
|
||||
+16
-9
@@ -1,14 +1,13 @@
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, smartcasts
|
||||
NUMBER: 14
|
||||
DESCRIPTION: Check smartcast with non-null assertion for a contract function.
|
||||
UNEXPECTED BEHAVIOUR
|
||||
ISSUES: KT-26856
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, smartcasts
|
||||
* NUMBER: 14
|
||||
* DESCRIPTION: Check smartcast with non-null assertion for a contract function.
|
||||
* UNEXPECTED BEHAVIOUR
|
||||
* ISSUES: KT-26856
|
||||
*/
|
||||
|
||||
// FILE: contracts.kt
|
||||
@@ -17,6 +16,7 @@ package contracts
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1(value_1: Int?): Boolean? {
|
||||
contract {
|
||||
returns(true) implies (value_1 != null)
|
||||
@@ -25,6 +25,7 @@ fun case_1(value_1: Int?): Boolean? {
|
||||
return value_1 != null
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2(value_1: Int?): Boolean {
|
||||
contract {
|
||||
returns(false) implies (value_1 != null)
|
||||
@@ -33,6 +34,7 @@ fun case_2(value_1: Int?): Boolean {
|
||||
return value_1 != null
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun case_3(value_1: Int?): Boolean? {
|
||||
contract {
|
||||
returnsNotNull() implies (value_1 != null)
|
||||
@@ -41,6 +43,7 @@ fun case_3(value_1: Int?): Boolean? {
|
||||
return value_1 != null
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
fun case_4(value_1: Any?): Boolean {
|
||||
contract {
|
||||
returnsNotNull() implies (value_1 is Number)
|
||||
@@ -49,28 +52,32 @@ fun case_4(value_1: Any?): Boolean {
|
||||
return value_1 is Number
|
||||
}
|
||||
|
||||
// FILE: usages.kt
|
||||
// FILE: main.kt
|
||||
|
||||
import contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1(value_1: Int?) {
|
||||
if (contracts.case_1(value_1)!!) {
|
||||
value_1<!UNSAFE_CALL!>.<!>inv()
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2(value_1: Int?) {
|
||||
if (!contracts.case_2(value_1)<!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>) {
|
||||
value_1<!UNSAFE_CALL!>.<!>inv()
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun case_3(value_1: Int?) {
|
||||
if (contracts.case_3(value_1)!!) {
|
||||
value_1<!UNSAFE_CALL!>.<!>inv()
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
fun case_4(value_1: Any?) {
|
||||
if (<!SENSELESS_COMPARISON!>contracts.case_4(value_1) != null<!>) {
|
||||
<!DEBUG_INFO_SMARTCAST!>value_1<!>.toByte()
|
||||
|
||||
+19
-10
@@ -3,38 +3,42 @@
|
||||
// SKIP_TXT
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, smartcasts
|
||||
NUMBER: 2
|
||||
DESCRIPTION: Smartcasts using Returns effects with complex (conjunction/disjunction) type checking and not-null conditions outside contract (custom condition).
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, smartcasts
|
||||
* NUMBER: 2
|
||||
* DESCRIPTION: Smartcasts using Returns effects with complex (conjunction/disjunction) type checking and not-null conditions outside contract (custom condition).
|
||||
*/
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1(value_1: Any?, value_2: Any?) {
|
||||
funWithReturns(value_1 is String && value_2 is Number)
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.length)
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_2<!>.toByte())
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2(value_1: Any?, value_2: Any?) {
|
||||
funWithReturnsAndInvertCondition(value_1 !is String || value_2 !is Number)
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.length)
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_2<!>.toByte())
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun case_3(value_1: Any?, value_2: Any?) {
|
||||
funWithReturnsAndInvertCondition(value_1 !is String || value_2 != null)
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.length)
|
||||
println(<!DEBUG_INFO_CONSTANT!>value_2<!>?.toByte())
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
fun case_4(value_1: Any?, value_2: Number?) {
|
||||
funWithReturns(value_1 is Float? && value_1 != null && value_2 != null)
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.dec())
|
||||
println(value_2<!UNNECESSARY_SAFE_CALL!>?.<!>toByte())
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 5
|
||||
class case_5_class {
|
||||
val prop_1: Int? = 10
|
||||
|
||||
@@ -47,6 +51,7 @@ class case_5_class {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 6
|
||||
fun case_6(value_1: Any?, value_2: Any) {
|
||||
if (funWithReturnsTrue(value_1 is String && value_2 is Number)) {
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.length)
|
||||
@@ -66,6 +71,7 @@ fun case_6(value_1: Any?, value_2: Any) {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 7
|
||||
fun case_7(value_1: Any?, value_2: Any?) {
|
||||
if (funWithReturnsTrueAndInvertCondition(value_1 !is String || value_2 !is Number)) {
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.length)
|
||||
@@ -85,6 +91,7 @@ fun case_7(value_1: Any?, value_2: Any?) {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 8
|
||||
fun case_8(value_1: Any?, value_2: Any?) {
|
||||
if (funWithReturnsTrueAndInvertCondition(value_1 !is String || value_2 != null)) {
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.length)
|
||||
@@ -104,6 +111,7 @@ fun case_8(value_1: Any?, value_2: Any?) {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 9
|
||||
fun case_9(value_1: Any?, value_2: Number?) {
|
||||
if (funWithReturnsTrue(value_1 is Float? && value_1 != null && value_2 != null)) {
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.dec())
|
||||
@@ -123,6 +131,7 @@ fun case_9(value_1: Any?, value_2: Number?) {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 10
|
||||
class case_10_class {
|
||||
val prop_1: Int? = 10
|
||||
|
||||
@@ -152,11 +161,11 @@ class case_10_class {
|
||||
}
|
||||
|
||||
/*
|
||||
CASE DESCRIPTION: check resolve reference when is used not null assertion and safe call operators
|
||||
UNEXPECTED BEHAVIOUR
|
||||
ISSUES: KT-26747
|
||||
* TESTCASE NUMBER: 11
|
||||
* UNEXPECTED BEHAVIOUR
|
||||
* ISSUES: KT-26747
|
||||
*/
|
||||
fun case_12(value_1: Any?, value_2: Any?, value_3: Any?) {
|
||||
fun case_11(value_1: Any?, value_2: Any?, value_3: Any?) {
|
||||
funWithReturnsAndInvertCondition(value_1 !is String || value_2 !is Number || <!USELESS_IS_CHECK!>value_3 !is Any?<!>)
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_1<!><!UNNECESSARY_NOT_NULL_ASSERTION!>!!<!>.<!UNRESOLVED_REFERENCE!>length<!>)
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_2<!><!UNNECESSARY_SAFE_CALL!>?.<!>toByte())
|
||||
|
||||
+18
-7
@@ -1,12 +1,11 @@
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, smartcasts
|
||||
NUMBER: 3
|
||||
DESCRIPTION: Smartcasts using Returns effects with complex (conjunction/disjunction) type checking and not-null conditions inside contract.
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, smartcasts
|
||||
* NUMBER: 3
|
||||
* DESCRIPTION: Smartcasts using Returns effects with complex (conjunction/disjunction) type checking and not-null conditions inside contract.
|
||||
*/
|
||||
|
||||
// FILE: contracts.kt
|
||||
@@ -15,21 +14,25 @@ package contracts
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1(value_1: Any?, value_2: Any?) {
|
||||
contract { returns() implies (value_1 is String && value_2 is Number) }
|
||||
if (!(value_1 is String && value_2 is Number)) throw Exception()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2(value_1: Any?, value_2: Any?) {
|
||||
contract { returns() implies (value_1 is String && value_2 == null) }
|
||||
if (!(value_1 is String && value_2 == null)) throw Exception()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun case_3(value_1: Any?, value_2: Any?, value_3: Any?, value_4: Any?) {
|
||||
contract { returns() implies (value_1 is Float? && value_1 != null && value_2 != null && value_3 != null && value_4 != null) }
|
||||
if (!(value_1 is Float? && value_1 != null && value_2 != null && value_3 != null && value_4 != null)) throw Exception()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
fun case_4_1(value_1: Any?, value_2: Any?): Boolean {
|
||||
contract { returns(true) implies (value_1 is String && value_2 is Number) }
|
||||
return value_1 is String && value_2 is Number
|
||||
@@ -47,6 +50,7 @@ fun case_4_4(value_1: Any?, value_2: Any?): Boolean? {
|
||||
return if (value_1 is String && value_2 is Number) null else true
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 5
|
||||
fun case_5_1(value_1: Any?, value_2: Any?): Boolean {
|
||||
contract { returns(true) implies (value_1 is String && value_2 == null) }
|
||||
return value_1 is String && value_2 == null
|
||||
@@ -64,6 +68,7 @@ fun case_5_4(value_1: Any?, value_2: Any?): Boolean? {
|
||||
return if (value_1 is String && value_2 == null) null else true
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 6
|
||||
fun case_6_1(value_1: Any?, value_2: Any?, value_3: Any?, value_4: Any?): Boolean {
|
||||
contract { returns(true) implies (value_1 is Float? && value_1 != null && value_2 != null && value_3 != null && value_4 != null) }
|
||||
return value_1 is Float? && value_1 != null && value_2 != null && value_3 != null && value_4 != null
|
||||
@@ -81,22 +86,25 @@ fun case_6_4(value_1: Any?, value_2: Any?, value_3: Any?, value_4: Any?): Boolea
|
||||
return if (value_1 is Float? && value_1 != null && value_2 != null && value_3 != null && value_4 != null) null else true
|
||||
}
|
||||
|
||||
// FILE: usages.kt
|
||||
// FILE: main.kt
|
||||
|
||||
import contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1(value_1: Any?, value_2: Any?) {
|
||||
contracts.case_1(value_1, value_2)
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.length)
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_2<!>.toByte())
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2(value_1: Any?, value_2: Any?) {
|
||||
contracts.case_2(value_1, value_2)
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.length)
|
||||
println(<!DEBUG_INFO_CONSTANT!>value_2<!>?.toByte())
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
class case_3_class {
|
||||
val prop_1: Int? = 10
|
||||
fun case_3(value_1: Any?, value_2: Number?) {
|
||||
@@ -108,6 +116,7 @@ class case_3_class {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
fun case_4(value_1: Any?, value_2: Any?) {
|
||||
if (contracts.case_4_1(value_1, value_2)) {
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.length)
|
||||
@@ -127,6 +136,7 @@ fun case_4(value_1: Any?, value_2: Any?) {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 5
|
||||
fun case_5(value_1: Any?, value_2: Any?) {
|
||||
if (contracts.case_5_1(value_1, value_2)) {
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.length)
|
||||
@@ -146,6 +156,7 @@ fun case_5(value_1: Any?, value_2: Any?) {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 6
|
||||
class case_6_class {
|
||||
val prop_1: Int? = 10
|
||||
fun case_6(value_1: Any?, value_2: Number?) {
|
||||
|
||||
+26
-11
@@ -1,12 +1,11 @@
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, smartcasts
|
||||
NUMBER: 4
|
||||
DESCRIPTION: Smartcasts using Returns effects with simple type checking and not-null conditions on receiver inside contract.
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, smartcasts
|
||||
* NUMBER: 4
|
||||
* DESCRIPTION: Smartcasts using Returns effects with simple type checking and not-null conditions on receiver inside contract.
|
||||
*/
|
||||
|
||||
// FILE: contracts.kt
|
||||
@@ -15,16 +14,19 @@ package contracts
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun <T> T.case_1() {
|
||||
contract { returns() implies (this@case_1 is String) }
|
||||
if (!(this@case_1 is String)) throw Exception()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun <T : Number> T.case_2() {
|
||||
contract { returns() implies (this@case_2 is Int) }
|
||||
if (!(this@case_2 is Int)) throw Exception()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun <T : <!FINAL_UPPER_BOUND!>String<!>> T?.case_3_1() {
|
||||
contract { returns() implies (this@case_3_1 != null) }
|
||||
if (!(this@case_3_1 != null)) throw Exception()
|
||||
@@ -34,6 +36,7 @@ fun <T : <!FINAL_UPPER_BOUND!>String<!>> T?.case_3_2() {
|
||||
if (!(this@case_3_2 == null)) throw Exception()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
fun <T : String?> T.case_4_1() {
|
||||
contract { returns() implies (this@case_4_1 != null) }
|
||||
if (!(this@case_4_1 != null)) throw Exception()
|
||||
@@ -43,6 +46,7 @@ fun <T : String?> T.case_4_2() {
|
||||
if (!(this@case_4_2 == null)) throw Exception()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 5
|
||||
fun <T> T.case_5_1(): Boolean {
|
||||
contract { returns(true) implies (this@case_5_1 is String) }
|
||||
return this@case_5_1 is String
|
||||
@@ -60,6 +64,7 @@ fun <T> T.case_5_4(): Boolean? {
|
||||
return if (this@case_5_4 is String) null else true
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 6
|
||||
fun <T : Number> T.case_6_1(): Boolean {
|
||||
contract { returns(true) implies (this@case_6_1 is Int) }
|
||||
return this@case_6_1 is Int
|
||||
@@ -77,6 +82,7 @@ fun <T : Number> T.case_6_4(): Boolean? {
|
||||
return if (this@case_6_4 is Int) null else true
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 7
|
||||
fun <T : <!FINAL_UPPER_BOUND!>String<!>> T?.case_7_1(): Boolean {
|
||||
contract { returns(true) implies (this@case_7_1 != null) }
|
||||
return this@case_7_1 != null
|
||||
@@ -122,6 +128,7 @@ fun <T : <!FINAL_UPPER_BOUND!>String<!>> T?.case_7_11(): Boolean? {
|
||||
return if (this@case_7_11 == null) null else true
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 8
|
||||
fun <T : String?> T.case_8_1(): Boolean {
|
||||
contract { returns(true) implies (this@case_8_1 != null) }
|
||||
return this@case_8_1 != null
|
||||
@@ -139,30 +146,33 @@ fun <T : String?> T.case_8_4(): Boolean? {
|
||||
return if (this@case_8_4 == null) null else true
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 9
|
||||
fun <T> T?.case_9_1(): Boolean {
|
||||
contract { returns(true) implies (this@case_9_1 is Float) }
|
||||
return this@case_9_1 is Float
|
||||
}
|
||||
|
||||
fun <T> T?.case_9_2(): Boolean {
|
||||
contract { returns(false) implies (this@case_9_2 is Double) }
|
||||
return !(this@case_9_2 is Double)
|
||||
}
|
||||
|
||||
// FILE: usages.kt
|
||||
// FILE: main.kt
|
||||
|
||||
import contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1(value_1: Any?) {
|
||||
value_1.case_1()
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.length)
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2(value_1: Number) {
|
||||
value_1.case_2()
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.inv())
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun case_3(value_1: String?, value_2: String?) {
|
||||
value_1.case_3_1()
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.length)
|
||||
@@ -170,6 +180,7 @@ fun case_3(value_1: String?, value_2: String?) {
|
||||
println(<!DEBUG_INFO_CONSTANT!>value_2<!>)
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
fun case_4(value_1: String?, value_2: String?) {
|
||||
value_1.case_4_1()
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.length)
|
||||
@@ -177,6 +188,7 @@ fun case_4(value_1: String?, value_2: String?) {
|
||||
println(<!DEBUG_INFO_CONSTANT!>value_2<!>)
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 5
|
||||
fun case_5(value_1: Any?) {
|
||||
if (value_1.case_5_1()) println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.length)
|
||||
if (!value_1.case_5_2()) println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.length)
|
||||
@@ -184,6 +196,7 @@ fun case_5(value_1: Any?) {
|
||||
if (value_1.case_5_4() == null) println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.length)
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 6
|
||||
fun case_6(value_1: Number) {
|
||||
when { value_1.case_6_1() -> println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.inv()) }
|
||||
when { !value_1.case_6_2() -> println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.inv()) }
|
||||
@@ -191,6 +204,7 @@ fun case_6(value_1: Number) {
|
||||
when { value_1.case_6_4() == null -> println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.inv()) }
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 7
|
||||
fun case_7(value_1: String?) {
|
||||
if (value_1.case_7_1()) println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.length)
|
||||
if (value_1.case_7_2()) println(<!DEBUG_INFO_CONSTANT!>value_1<!>)
|
||||
@@ -222,6 +236,7 @@ fun case_7(value_1: String?) {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 8
|
||||
fun case_8(value_1: String?, value_2: String?) {
|
||||
when { value_1.case_8_1() -> println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.length) }
|
||||
when { value_2.case_8_2() -> println(<!DEBUG_INFO_CONSTANT!>value_2<!>) }
|
||||
@@ -230,9 +245,9 @@ fun case_8(value_1: String?, value_2: String?) {
|
||||
}
|
||||
|
||||
/*
|
||||
CASE DESCRIPTION: check the infererence of the Number super type
|
||||
UNEXPECTED BEHAVIOUR
|
||||
ISSUES: KT-1982
|
||||
* TESTCASE NUMBER: 9
|
||||
* UNEXPECTED BEHAVIOUR
|
||||
* ISSUES: KT-1982
|
||||
*/
|
||||
fun case_9(value_1: Any?) {
|
||||
if (value_1.case_9_1() || !value_1.case_9_2()) {
|
||||
|
||||
+18
-7
@@ -1,12 +1,11 @@
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, smartcasts
|
||||
NUMBER: 5
|
||||
DESCRIPTION: Smartcasts using Returns effects with complex (conjunction/disjunction) type checking and not-null conditions on receiver inside contract.
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, smartcasts
|
||||
* NUMBER: 5
|
||||
* DESCRIPTION: Smartcasts using Returns effects with complex (conjunction/disjunction) type checking and not-null conditions on receiver inside contract.
|
||||
*/
|
||||
|
||||
// FILE: contracts.kt
|
||||
@@ -15,21 +14,25 @@ package contracts
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun <T> T?.case_1() {
|
||||
contract { returns() implies (this@case_1 != null && this@case_1 is String) }
|
||||
if (!(this@case_1 != null && this@case_1 is String)) throw Exception()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun <T : Number?> T.case_2() {
|
||||
contract { returns() implies (this@case_2 is Int && <!SENSELESS_COMPARISON!>this@case_2 != null<!>) }
|
||||
if (!(this@case_2 is Int && <!SENSELESS_COMPARISON!>this@case_2 != null<!>)) throw Exception()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
inline fun <reified T : Any?> T?.case_3() {
|
||||
contract { returns() implies (this@case_3 is Number && this@case_3 is Int && <!SENSELESS_COMPARISON!>this@case_3 != null<!>) }
|
||||
if (!(this@case_3 is Number && this@case_3 is Int && <!SENSELESS_COMPARISON!>this@case_3 != null<!>)) throw Exception()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
fun <T> T?.case_4_1(): Boolean {
|
||||
contract { returns(true) implies (this@case_4_1 != null && this@case_4_1 is String) }
|
||||
return this@case_4_1 != null && this@case_4_1 is String
|
||||
@@ -47,6 +50,7 @@ fun <T> T?.case_4_4(): Boolean? {
|
||||
return if (this@case_4_4 != null && this@case_4_4 is String) null else true
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 5
|
||||
fun <T : Number?> T.case_5_1(): Boolean {
|
||||
contract { returns(true) implies (this@case_5_1 is Int && <!SENSELESS_COMPARISON!>this@case_5_1 != null<!>) }
|
||||
return this@case_5_1 is Int && <!SENSELESS_COMPARISON!>this@case_5_1 != null<!>
|
||||
@@ -64,6 +68,7 @@ fun <T : Number?> T.case_5_4(): Boolean? {
|
||||
return if (this@case_5_4 is Int && <!SENSELESS_COMPARISON!>this@case_5_4 != null<!>) null else true
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 6
|
||||
inline fun <reified T : Any?> T?.case_6_1(): Boolean {
|
||||
contract { returns(true) implies (this@case_6_1 is Number && this@case_6_1 is Int && <!SENSELESS_COMPARISON!>this@case_6_1 != null<!>) }
|
||||
return this@case_6_1 is Number && this@case_6_1 is Int && <!SENSELESS_COMPARISON!>this@case_6_1 != null<!>
|
||||
@@ -81,25 +86,29 @@ inline fun <reified T : Any?> T?.case_6_4(): Boolean? {
|
||||
return if (this@case_6_4 is Number && this@case_6_4 is Int && <!SENSELESS_COMPARISON!>this@case_6_4 != null<!>) null else true
|
||||
}
|
||||
|
||||
// FILE: usages.kt
|
||||
// FILE: main.kt
|
||||
|
||||
import contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1(value_1: Any?) {
|
||||
value_1.case_1()
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.length)
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2(value_1: Number?) {
|
||||
value_1.case_2()
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.inv())
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun case_3(value_1: Any?) {
|
||||
value_1.case_3()
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.inv())
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
fun case_4(value_1: Any?, value_2: Any?, value_3: Any?) {
|
||||
when { value_1.case_4_1() -> println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.length) }
|
||||
when { !value_2.case_4_2() -> println(<!DEBUG_INFO_SMARTCAST!>value_2<!>.length) }
|
||||
@@ -107,6 +116,7 @@ fun case_4(value_1: Any?, value_2: Any?, value_3: Any?) {
|
||||
when { value_3.case_4_4() == null -> println(<!DEBUG_INFO_SMARTCAST!>value_3<!>.length) }
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 5
|
||||
fun case_5(value_1: Number?, value_2: Number?, value_3: Number?) {
|
||||
if (value_1.case_5_1()) println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.inv())
|
||||
if (!value_2.case_5_2()) println(<!DEBUG_INFO_SMARTCAST!>value_2<!>.inv())
|
||||
@@ -114,6 +124,7 @@ fun case_5(value_1: Number?, value_2: Number?, value_3: Number?) {
|
||||
if (value_3.case_5_4() == null) println(<!DEBUG_INFO_SMARTCAST!>value_3<!>.inv())
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 6
|
||||
fun case_6(value_1: Any?, value_2: Any?, value_3: Any?) {
|
||||
if (value_1.case_6_1()) println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.inv())
|
||||
if (!value_2.case_6_2()) println(<!DEBUG_INFO_SMARTCAST!>value_2<!>.inv())
|
||||
|
||||
+22
-7
@@ -1,12 +1,11 @@
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, smartcasts
|
||||
NUMBER: 6
|
||||
DESCRIPTION: Smartcasts using Returns effects with complex (conjunction/disjunction) type checking and not-null conditions on receiver and some values (mixed) inside contract.
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, smartcasts
|
||||
* NUMBER: 6
|
||||
* DESCRIPTION: Smartcasts using Returns effects with complex (conjunction/disjunction) type checking and not-null conditions on receiver and some values (mixed) inside contract.
|
||||
*/
|
||||
|
||||
// FILE: contracts.kt
|
||||
@@ -15,26 +14,31 @@ package contracts
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun <T> T?.case_1(value_1: Int?) {
|
||||
contract { returns() implies (this@case_1 != null && this@case_1 is String && value_1 != null) }
|
||||
if (!(this@case_1 != null && this@case_1 is String && value_1 != null)) throw Exception()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun <T : Number?> T.case_2(value_2: Any?) {
|
||||
contract { returns() implies (this@case_2 is Int && <!SENSELESS_COMPARISON!>this@case_2 != null<!> && value_2 is Number && <!SENSELESS_COMPARISON!>value_2 != null<!>) }
|
||||
if (!(this@case_2 is Int && <!SENSELESS_COMPARISON!>this@case_2 != null<!> && value_2 is Number && <!SENSELESS_COMPARISON!>value_2 != null<!>)) throw Exception()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun <T : Any?> T?.case_3(value_2: Any?) {
|
||||
contract { returns() implies (this@case_3 is Number && this@case_3 is Int && <!SENSELESS_COMPARISON!>this@case_3 != null<!> && value_2 != null) }
|
||||
if (!(this@case_3 is Number && this@case_3 is Int && <!SENSELESS_COMPARISON!>this@case_3 != null<!> && value_2 != null)) throw Exception()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
inline fun <reified T : Any?> T?.case_4(value_2: Number, value_3: Any?, value_4: String?) {
|
||||
contract { returns() implies ((this@case_4 is Number || this@case_4 is Int) && value_2 is Int && value_3 != null && value_3 is Number && value_4 != null) }
|
||||
if (!((this@case_4 is Number || this@case_4 is Int) && value_2 is Int && value_3 != null && value_3 is Number && value_4 != null)) throw Exception()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 5
|
||||
fun <T> T?.case_5_1(value_1: Int?): Boolean {
|
||||
contract { returns(true) implies (this@case_5_1 != null && this@case_5_1 is String && value_1 != null) }
|
||||
return this@case_5_1 != null && this@case_5_1 is String && value_1 != null
|
||||
@@ -52,6 +56,7 @@ fun <T> T?.case_5_4(value_1: Int?): Boolean? {
|
||||
return if (this@case_5_4 != null && this@case_5_4 is String && value_1 != null) null else true
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 6
|
||||
fun <T : Number?> T.case_6_1(value_2: Any?): Boolean {
|
||||
contract { returns(true) implies (this@case_6_1 is Int && <!SENSELESS_COMPARISON!>this@case_6_1 != null<!> && value_2 is Number && <!SENSELESS_COMPARISON!>value_2 != null<!>) }
|
||||
return this@case_6_1 is Int && <!SENSELESS_COMPARISON!>this@case_6_1 != null<!> && value_2 is Number && <!SENSELESS_COMPARISON!>value_2 != null<!>
|
||||
@@ -69,6 +74,7 @@ fun <T : Number?> T.case_6_4(value_2: Any?): Boolean? {
|
||||
return if (this@case_6_4 is Int && <!SENSELESS_COMPARISON!>this@case_6_4 != null<!> && value_2 is Number && <!SENSELESS_COMPARISON!>value_2 != null<!>) null else true
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 7
|
||||
fun <T : Any?> T?.case_7_1(value_2: Any?): Boolean {
|
||||
contract { returns(true) implies (this@case_7_1 is Number && this@case_7_1 is Int && <!SENSELESS_COMPARISON!>this@case_7_1 != null<!> && value_2 != null) }
|
||||
return this@case_7_1 is Number && this@case_7_1 is Int && <!SENSELESS_COMPARISON!>this@case_7_1 != null<!> && value_2 != null
|
||||
@@ -86,6 +92,7 @@ fun <T : Any?> T?.case_7_4(value_2: Any?): Boolean? {
|
||||
return if (this@case_7_4 is Number && this@case_7_4 is Int && <!SENSELESS_COMPARISON!>this@case_7_4 != null<!> && value_2 != null) null else true
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 8
|
||||
inline fun <reified T : Any?> T?.case_8_1(value_2: Number, value_3: Any?, value_4: String?): Boolean {
|
||||
contract { returns(true) implies ((this@case_8_1 is Number || this@case_8_1 is Int) && value_2 is Int && value_3 != null && value_3 is Number && value_4 != null) }
|
||||
return (this@case_8_1 is Number || this@case_8_1 is Int) && value_2 is Int && value_3 != null && value_3 is Number && value_4 != null
|
||||
@@ -103,28 +110,32 @@ inline fun <reified T : Any?> T?.case_8_4(value_2: Number, value_3: Any?, value_
|
||||
return if ((this@case_8_4 is Number || this@case_8_4 is Int) && value_2 is Int && value_3 != null && value_3 is Number && value_4 != null) null else true
|
||||
}
|
||||
|
||||
// FILE: usages.kt
|
||||
// FILE: main.kt
|
||||
|
||||
import contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1(value_1: Any?, value_2: Int?) {
|
||||
value_1.case_1(value_2)
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.length)
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_2<!>.inv())
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2(value_1: Number?, value_2: Any?) {
|
||||
value_1.case_2(value_2)
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.inv())
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_2<!>.toByte())
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun case_3(value_1: Any?, value_2: String?) {
|
||||
value_1.case_3(value_2)
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.inv())
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_2<!>.length)
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
fun case_4(value_1: Any?, value_2: Number, value_3: Any?, value_4: String?) {
|
||||
value_1.case_4(value_2, value_3, value_4)
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_2<!>.inv())
|
||||
@@ -132,6 +143,7 @@ fun case_4(value_1: Any?, value_2: Number, value_3: Any?, value_4: String?) {
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_4<!>.length)
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 5
|
||||
fun case_5(value_1: Any?, value_2: Int?, value_3: Any?, value_4: Int?, value_5: Any?, value_6: Int?) {
|
||||
when {
|
||||
value_1.case_5_1(value_2) -> {
|
||||
@@ -159,6 +171,7 @@ fun case_5(value_1: Any?, value_2: Int?, value_3: Any?, value_4: Int?, value_5:
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 6
|
||||
fun case_6(value_1: Number?, value_2: Any?, value_3: Number?, value_4: Any?, value_5: Number?, value_6: Any?) {
|
||||
if (value_1.case_6_1(value_2)) {
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.inv())
|
||||
@@ -178,6 +191,7 @@ fun case_6(value_1: Number?, value_2: Any?, value_3: Number?, value_4: Any?, val
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 7
|
||||
fun case_7(value_1: Any?, value_2: String?, value_3: Any?, value_4: String?, value_5: Any?, value_6: String?) {
|
||||
if (value_1.case_7_1(value_2)) {
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.inv())
|
||||
@@ -197,6 +211,7 @@ fun case_7(value_1: Any?, value_2: String?, value_3: Any?, value_4: String?, val
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 8
|
||||
fun case_8(value_1: Any?, value_2: Number, value_3: Any?, value_4: String?, value_5: Any?, value_6: Number, value_7: Any?, value_8: String?) {
|
||||
when { value_1.case_8_1(value_2, value_3, value_4) -> println(<!DEBUG_INFO_SMARTCAST!>value_2<!>.inv()) }
|
||||
when { value_1.case_8_1(value_2, value_3, value_4) -> println(<!DEBUG_INFO_SMARTCAST!>value_3<!>.toByte()) }
|
||||
|
||||
+22
-7
@@ -1,12 +1,11 @@
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, smartcasts
|
||||
NUMBER: 7
|
||||
DESCRIPTION: Smartcasts using Returns effects with nested or subsequent contract function calls.
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, smartcasts
|
||||
* NUMBER: 7
|
||||
* DESCRIPTION: Smartcasts using Returns effects with nested or subsequent contract function calls.
|
||||
*/
|
||||
|
||||
// FILE: contracts.kt
|
||||
@@ -15,6 +14,7 @@ package contracts
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1_1(value_1: Int?) {
|
||||
contract { returns() implies (value_1 != null) }
|
||||
if (!(value_1 != null)) throw Exception()
|
||||
@@ -24,6 +24,7 @@ fun case_1_2(value_1: Int?) {
|
||||
if (!(value_1 == null)) throw Exception()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2_1(value_1: Number?) {
|
||||
contract { returns() implies (value_1 is Float) }
|
||||
if (!(value_1 is Float)) throw Exception()
|
||||
@@ -33,6 +34,7 @@ fun case_2_2(value_1: Number?) {
|
||||
if (!(value_1 is Int)) throw Exception()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun case_3_1(value_1: Any?) {
|
||||
contract { returns() implies (value_1 is String) }
|
||||
if (!(value_1 is String)) throw Exception()
|
||||
@@ -42,6 +44,7 @@ fun case_3_2(value_1: Any?) {
|
||||
if (!(value_1 !is String)) throw Exception()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
fun case_4_1(value_1: Any?) {
|
||||
contract { returns() implies (value_1 is Number?) }
|
||||
if (!(value_1 is Number?)) throw Exception()
|
||||
@@ -55,6 +58,7 @@ fun case_4_3(value_1: Number) {
|
||||
if (!(value_1 is Int)) throw Exception()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 5
|
||||
fun case_5_1(value_1: Int?): Boolean {
|
||||
contract { returns(true) implies (value_1 != null) }
|
||||
return value_1 != null
|
||||
@@ -88,6 +92,7 @@ fun case_5_8(value_1: Int?): Boolean? {
|
||||
return if (value_1 == null) null else true
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 6
|
||||
fun case_6_1(value_1: Number?): Boolean {
|
||||
contract { returns(true) implies (value_1 is Float) }
|
||||
return value_1 is Float
|
||||
@@ -121,6 +126,7 @@ fun case_6_8(value_1: Number?): Boolean? {
|
||||
return if (value_1 is Int) null else true
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 7
|
||||
fun case_7_1(value_1: Any?): Boolean {
|
||||
contract { returns(true) implies (value_1 is String) }
|
||||
return value_1 is String
|
||||
@@ -154,6 +160,7 @@ fun case_7_8(value_1: Any?): Boolean? {
|
||||
return if (value_1 !is String) null else true
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 8
|
||||
fun case_8_1(value_1: Any?): Boolean {
|
||||
contract { returns(true) implies (value_1 is Number?) }
|
||||
return value_1 is Number?
|
||||
@@ -203,10 +210,11 @@ fun case_8_12(value_1: Number): Boolean? {
|
||||
return if (value_1 is Int) null else true
|
||||
}
|
||||
|
||||
// FILE: usages.kt
|
||||
// FILE: main.kt
|
||||
|
||||
import contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1(value_1: Int?) {
|
||||
case_1_1(value_1)
|
||||
<!DEBUG_INFO_SMARTCAST!>value_1<!>.inv()
|
||||
@@ -216,6 +224,7 @@ fun case_1(value_1: Int?) {
|
||||
<!UNREACHABLE_CODE!><!DEBUG_INFO_SMARTCAST!>value_1<!>.inv()<!>
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2(value_1: Number?) {
|
||||
case_2_1(value_1)
|
||||
<!DEBUG_INFO_SMARTCAST!>value_1<!>.toByte()
|
||||
@@ -223,6 +232,7 @@ fun case_2(value_1: Number?) {
|
||||
<!DEBUG_INFO_SMARTCAST!>value_1<!>.inv()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun case_3(value_1: Any?) {
|
||||
case_3_1(value_1)
|
||||
<!DEBUG_INFO_SMARTCAST!>value_1<!>.length
|
||||
@@ -230,6 +240,7 @@ fun case_3(value_1: Any?) {
|
||||
<!DEBUG_INFO_SMARTCAST!>value_1<!>.length
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
fun case_4(value_1: Any?) {
|
||||
case_4_1(value_1)
|
||||
<!DEBUG_INFO_SMARTCAST!>value_1<!>?.toByte()
|
||||
@@ -239,6 +250,7 @@ fun case_4(value_1: Any?) {
|
||||
<!DEBUG_INFO_SMARTCAST!>value_1<!>.inv()
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 5
|
||||
fun case_5(value_1: Int?, value_2: Int?) {
|
||||
if (case_5_1(value_1)) {
|
||||
<!DEBUG_INFO_SMARTCAST!>value_1<!>.inv()
|
||||
@@ -270,6 +282,7 @@ fun case_5(value_1: Int?, value_2: Int?) {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 6
|
||||
fun case_6(value_1: Number?, value_2: Number?) {
|
||||
when {
|
||||
case_6_1(value_1) -> {
|
||||
@@ -297,6 +310,7 @@ fun case_6(value_1: Number?, value_2: Number?) {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 7
|
||||
fun case_7(value_1: Any?, value_2: Any?) {
|
||||
if (case_7_1(value_1)) {
|
||||
<!DEBUG_INFO_SMARTCAST!>value_1<!>.length
|
||||
@@ -316,6 +330,7 @@ fun case_7(value_1: Any?, value_2: Any?) {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 8
|
||||
fun case_8(value_1: Any?, value_2: Any?) {
|
||||
if (case_8_1(value_1)) {
|
||||
<!DEBUG_INFO_SMARTCAST!>value_1<!>?.toByte()
|
||||
|
||||
+20
-13
@@ -2,12 +2,11 @@
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, smartcasts
|
||||
NUMBER: 8
|
||||
DESCRIPTION: Smartcasts using some Returns effects.
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, smartcasts
|
||||
* NUMBER: 8
|
||||
* DESCRIPTION: Smartcasts using some Returns effects.
|
||||
*/
|
||||
|
||||
// FILE: contracts.kt
|
||||
@@ -16,6 +15,7 @@ package contracts
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun <T> T?.case_3(value_1: Int?, value_2: Boolean): Boolean {
|
||||
contract {
|
||||
returns(true) implies (value_1 == null)
|
||||
@@ -26,6 +26,7 @@ fun <T> T?.case_3(value_1: Int?, value_2: Boolean): Boolean {
|
||||
return value_1 == null
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
fun case_4(value_1: Number, block: (() -> Unit)?): Boolean? {
|
||||
contract {
|
||||
returns(true) implies (value_1 is Int)
|
||||
@@ -36,6 +37,7 @@ fun case_4(value_1: Number, block: (() -> Unit)?): Boolean? {
|
||||
return <!SENSELESS_COMPARISON!>value_1 == null<!>
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 5
|
||||
fun String?.case_5(value_1: Number?): Boolean? {
|
||||
contract {
|
||||
returns(true) implies (value_1 != null)
|
||||
@@ -46,6 +48,7 @@ fun String?.case_5(value_1: Number?): Boolean? {
|
||||
return value_1 == null
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 6
|
||||
fun <T> T?.case_6(value_1: Number, value_2: String?): Boolean? {
|
||||
contract {
|
||||
returns(true) implies (this@case_6 != null)
|
||||
@@ -57,10 +60,11 @@ fun <T> T?.case_6(value_1: Number, value_2: String?): Boolean? {
|
||||
return <!SENSELESS_COMPARISON!>value_1 == null<!>
|
||||
}
|
||||
|
||||
// FILE: usages.kt
|
||||
// FILE: main.kt
|
||||
|
||||
import contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1(value_1: Any?) {
|
||||
funWithReturns(value_1 is Number?)
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_1<!>?.toByte())
|
||||
@@ -70,6 +74,7 @@ fun case_1(value_1: Any?) {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2(value_1: Any?) {
|
||||
if (!funWithReturnsFalse(value_1 is Number?)) {
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_1<!>?.toByte())
|
||||
@@ -79,6 +84,7 @@ fun case_2(value_1: Any?) {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun case_3(value_1: Int?, value_2: Any?) {
|
||||
if (!value_1.case_3(value_1, value_2 is Number?)) {
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_2<!>?.toByte())
|
||||
@@ -90,6 +96,7 @@ fun case_3(value_1: Int?, value_2: Any?) {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
fun case_4(value_1: Number, value_2: (() -> Unit)?) {
|
||||
if (contracts.case_4(value_1, value_2) == true) {
|
||||
<!DEBUG_INFO_SMARTCAST!>value_1<!>.inv()
|
||||
@@ -101,9 +108,9 @@ fun case_4(value_1: Number, value_2: (() -> Unit)?) {
|
||||
}
|
||||
|
||||
/*
|
||||
CASE DESCRIPTION: check the conclusion that not-null conditions corresponds to the contract with not null effect
|
||||
UNEXPECTED BEHAVIOUR: unsafe calls
|
||||
ISSUES: KT-26612
|
||||
* TESTCASE NUMBER: 5
|
||||
* UNEXPECTED BEHAVIOUR: unsafe calls
|
||||
* ISSUES: KT-26612
|
||||
*/
|
||||
fun case_5(value_1: Number?, value_2: String?) {
|
||||
when (value_2.case_5(value_1)) {
|
||||
@@ -119,9 +126,9 @@ fun case_5(value_1: Number?, value_2: String?) {
|
||||
}
|
||||
|
||||
/*
|
||||
CASE DESCRIPTION: check the conclusion that not-null conditions corresponds to the contract with not null effect (with null branch)
|
||||
UNEXPECTED BEHAVIOUR: unsafe calls
|
||||
ISSUES: KT-26612
|
||||
* TESTCASE NUMBER: 6
|
||||
* UNEXPECTED BEHAVIOUR: unsafe calls
|
||||
* ISSUES: KT-26612
|
||||
*/
|
||||
fun case_6(value_1: Number, value_2: String?, value_3: Any?) {
|
||||
when (value_3.case_6(value_1, value_2)) {
|
||||
|
||||
+21
-10
@@ -3,12 +3,11 @@
|
||||
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
|
||||
|
||||
/*
|
||||
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
|
||||
SECTION: contracts
|
||||
CATEGORIES: analysis, smartcasts
|
||||
NUMBER: 9
|
||||
DESCRIPTION: Smartcast using complex condition with some contract functions (Returns effect).
|
||||
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
|
||||
*
|
||||
* SECTIONS: contracts, analysis, smartcasts
|
||||
* NUMBER: 9
|
||||
* DESCRIPTION: Smartcast using complex condition with some contract functions (Returns effect).
|
||||
*/
|
||||
|
||||
// FILE: contracts.kt
|
||||
@@ -17,88 +16,97 @@ package contracts
|
||||
|
||||
import kotlin.contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
fun <T> T?.case_4(): Boolean {
|
||||
contract { returns(true) implies (this@case_4 != null) }
|
||||
return this@case_4 != null
|
||||
}
|
||||
|
||||
fun <T> T?.case_4_1(): Boolean {
|
||||
contract { returns(false) implies (this@case_4_1 != null) }
|
||||
return !(this@case_4_1 != null)
|
||||
}
|
||||
|
||||
fun <T> T?.case_4_2(): Boolean? {
|
||||
contract { returns(null) implies (this@case_4_2 is String) }
|
||||
return if (this@case_4_2 is String) null else true
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 11
|
||||
fun <T> T?.case_11_1(): Boolean {
|
||||
contract { returns(false) implies (this@case_11_1 != null) }
|
||||
return !(this@case_11_1 != null)
|
||||
}
|
||||
|
||||
fun <T> T?.case_11_2(): Boolean? {
|
||||
contract { returns(null) implies (this@case_11_2 is String) }
|
||||
return if (this@case_11_2 is String) null else true
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 12
|
||||
fun <T> T?.case_12(): Boolean {
|
||||
contract { returns(false) implies (this@case_12 is String) }
|
||||
return if (this@case_12 is String) false else true
|
||||
}
|
||||
|
||||
// FILE: usages.kt
|
||||
// FILE: main.kt
|
||||
|
||||
import contracts.*
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
fun case_1(value_1: Any?) {
|
||||
if (funWithReturnsTrue(value_1 is String) && funWithReturnsTrueAndNotNullCheck(value_1)) {
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.length)
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
fun case_2(value_1: Any?) {
|
||||
if (!funWithReturnsFalse(value_1 is String) && !funWithReturnsTrueAndNullCheck(value_1)) {
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.length)
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
fun case_3(value_1: Any?) {
|
||||
if (funWithReturnsNull(value_1 is String?) == null && funWithReturnsTrue(value_1 != null)) {
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.length)
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 4
|
||||
fun case_4(value_1: Any?) {
|
||||
if (!value_1.case_4_1() && value_1.case_4_2() == null) {
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.length)
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 5
|
||||
fun case_5(value_1: Any?, value_2: Boolean) {
|
||||
if (!funWithReturnsFalse(value_1 is String) && value_2) {
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.length)
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 6
|
||||
fun case_6(value_1: Any?, value_2: Boolean?) {
|
||||
if (funWithReturnsNull(value_1 is String) == null && value_2 != null && <!DEBUG_INFO_SMARTCAST!>value_2<!>) {
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.length)
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 7
|
||||
fun case_7(value_1: String?) {
|
||||
if (funWithReturnsTrueAndNotNullCheck(value_1) && true) {
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.length)
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 8
|
||||
fun case_8(value_1: Any?) {
|
||||
if (funWithReturnsTrueAndNullCheck(value_1) && false) {
|
||||
println(<!DEBUG_INFO_CONSTANT!>value_1<!>)
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 9
|
||||
fun case_9(value_1: Any?) {
|
||||
if (funWithReturnsFalse(value_1 is String) || funWithReturnsFalse(value_1 is Int)) {
|
||||
|
||||
@@ -108,6 +116,7 @@ fun case_9(value_1: Any?) {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 10
|
||||
fun case_10(value_1: Any?) {
|
||||
if (funWithReturnsFalse(value_1 is String) || getBoolean()) {
|
||||
|
||||
@@ -116,12 +125,14 @@ fun case_10(value_1: Any?) {
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 11
|
||||
fun case_11(value_1: Any?) {
|
||||
if (!(value_1.case_11_1() || value_1.case_11_2() != null)) {
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.length)
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 12
|
||||
fun case_12(value_1: Any?) {
|
||||
if (!value_1.case_12() || !value_1.case_12()) {
|
||||
println(<!DEBUG_INFO_SMARTCAST!>value_1<!>.length)
|
||||
|
||||
+76
-7
@@ -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
|
||||
}
|
||||
|
||||
+5
@@ -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
|
||||
|
||||
+7
-7
@@ -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)
|
||||
|
||||
+21
-10
@@ -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()
|
||||
}
|
||||
|
||||
+6
-3
@@ -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
|
||||
}
|
||||
|
||||
+24
-12
@@ -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()
|
||||
}
|
||||
|
||||
+8
-5
@@ -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
|
||||
}
|
||||
|
||||
+7
-7
@@ -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()
|
||||
|
||||
+15
-9
@@ -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)
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
+9
-8
@@ -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
|
||||
|
||||
+12
-8
@@ -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 {
|
||||
|
||||
+10
-8
@@ -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
|
||||
|
||||
+10
-9
@@ -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
|
||||
}
|
||||
}
|
||||
+9
-6
@@ -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
|
||||
|
||||
+11
-6
@@ -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
|
||||
|
||||
+8
-6
@@ -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
|
||||
|
||||
+17
-12
@@ -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
|
||||
|
||||
+7
-7
@@ -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()
|
||||
|
||||
|
||||
+11
-11
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -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()
|
||||
|
||||
+9
-7
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
+7
-7
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+8
-6
@@ -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)
|
||||
|
||||
+7
-6
@@ -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()
|
||||
|
||||
-53
@@ -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
|
||||
}
|
||||
-7
@@ -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
|
||||
+16
-12
@@ -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()
|
||||
}
|
||||
|
||||
+5
-5
@@ -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
|
||||
|
||||
+9
-8
@@ -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)
|
||||
|
||||
+9
-6
@@ -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()
|
||||
|
||||
+9
-9
@@ -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)
|
||||
|
||||
+8
-8
@@ -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)
|
||||
|
||||
+12
-7
@@ -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
|
||||
|
||||
+10
-7
@@ -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
|
||||
|
||||
+9
-6
@@ -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<!>)
|
||||
|
||||
+7
-7
@@ -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
|
||||
|
||||
+9
-7
@@ -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 == '-'
|
||||
|
||||
+7
-7
@@ -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
|
||||
|
||||
+12
-6
@@ -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
|
||||
|
||||
+10
-7
@@ -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()
|
||||
|
||||
+17
-6
@@ -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()
|
||||
|
||||
+9
-6
@@ -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)
|
||||
|
||||
+8
-6
@@ -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()
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user