[Spec tests] Add prefix increment expression codegen tests

This commit is contained in:
anastasiia.spaseeva
2019-12-04 16:58:18 +03:00
parent 86d072e3aa
commit 6accbf6284
17 changed files with 760 additions and 6 deletions
@@ -0,0 +1,30 @@
// WITH_RUNTIME
/*
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
*
* SPEC VERSION: 0.1-213
* PLACE: expressions, prefix-expressions, prefix-increment-expression -> paragraph 1 -> sentence 1
* RELEVANT PLACES: expressions, prefix-expressions, prefix-increment-expression -> paragraph 5 -> sentence 1
* overloadable-operators -> paragraph 4 -> sentence 1
* statements, assignments -> paragraph 3 -> sentence 1
* NUMBER: 1
* DESCRIPTION:
*/
fun box(): String {
var a = A()
val res: A = ++a
return if (a.i == 1) "OK"
else "NOK"
}
class A() {
var i = 0
operator fun inc(): A {
this.i++
return this
}
}
@@ -0,0 +1,31 @@
// WITH_RUNTIME
/*
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
*
* SPEC VERSION: 0.1-213
* PLACE: expressions, prefix-expressions, prefix-increment-expression -> paragraph 1 -> sentence 1
* RELEVANT PLACES: expressions, prefix-expressions, prefix-increment-expression -> paragraph 5 -> sentence 1
* overloadable-operators -> paragraph 4 -> sentence 1
* statements, assignments -> paragraph 3 -> sentence 1
* NUMBER: 2
* DESCRIPTION:
*/
fun box(): String {
var a = A()
val res = (++a).i
return if (res == 1 && a.i == 1)
"OK"
else "NOK"
}
open class A() {
var i = 0
open operator fun inc(): A {
this.i++
return this
}
}
@@ -0,0 +1,34 @@
// WITH_RUNTIME
/*
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
*
* SPEC VERSION: 0.1-213
* PLACE: expressions, prefix-expressions, prefix-increment-expression -> paragraph 4 -> sentence 1
* RELEVANT PLACES: statements, assignments -> paragraph 3 -> sentence 3
* NUMBER: 1
* DESCRIPTION: check for a prefix increment expression ++A expression A must be an assignable expression (an indexing expression)
*/
fun box(): String {
val arr = arrayOf(A(), A(), A())
val a = ++arr[0]
val b = (++arr[2]).i
return if (arr[0].i == 1 && a.i == 1 && arr[1].i == 0 && arr[2].i == 1 && b == 1)
"OK"
else "NOK"
}
class A() {
var i = 0
operator fun inc(): A {
this.i++
return this
}
}
@@ -0,0 +1,35 @@
// WITH_RUNTIME
/*
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
*
* SPEC VERSION: 0.1-213
* PLACE: expressions, prefix-expressions, prefix-increment-expression -> paragraph 4 -> sentence 1
* RELEVANT PLACES: statements, assignments -> paragraph 3 -> sentence 2
* NUMBER: 2
* DESCRIPTION: check for a prefix increment expression ++A expression A must be an assignable expression (a navigation expression referring to a mutable property)
*/
fun box(): String {
var b = B()
++b.a
return if (b.a.i == 1)
"OK"
else "NOK"
}
class A() {
var i = 0
operator fun inc(): A {
this.i++
return this
}
}
class B() {
var a: A = A()
}
@@ -0,0 +1,39 @@
// WITH_RUNTIME
/*
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
*
* SPEC VERSION: 0.1-213
* PLACE: expressions, prefix-expressions, prefix-increment-expression -> paragraph 5 -> sentence 1
* NUMBER: 1
* DESCRIPTION: check the result of inc() is assigned to A, the return type of inc must be a subtype of A.
*/
fun box(): String {
var res = BIncrement(1)
val res1: Any = ++res
return if (res1 is BIncrement && res.i == 1 && res.j == 2 && res1.i == 1 && res1.j == 2) {
val res2: Any? = ++res
if (res2 is BIncrement && res.i == 2 && res.j == 3 && res2.i == 2 && res2.j == 3)
"OK"
else "NOK"
} else
"NOK"
}
data class BIncrement(var j: Int) : AIncrement() {
override operator fun inc(): BIncrement {
super.inc()
this.j += 1
return this
}
}
open class AIncrement() {
var i = 0
open operator fun inc(): AIncrement {
this.i += 1
return this
}
}
@@ -0,0 +1,31 @@
// WITH_RUNTIME
/*
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
*
* SPEC VERSION: 0.1-213
* PLACE: expressions, prefix-expressions, prefix-increment-expression -> paragraph 6 -> sentence 1
* RELEVANT PLACES: expressions, prefix-expressions, prefix-increment-expression -> paragraph 5 -> sentence 1
* overloadable-operators -> paragraph 4 -> sentence 1
* statements, assignments -> paragraph 3 -> sentence 1
* NUMBER: 1
* DESCRIPTION:
*/
fun box(): String {
var a = A()
val res: Any? = ++a
return if (res is A) "OK"
else "NOK"
}
class A() {
var i = 0
operator fun inc(): A {
this.i++
return this
}
}
@@ -0,0 +1,34 @@
// WITH_RUNTIME
/*
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
*
* SPEC VERSION: 0.1-213
* PLACE: expressions, prefix-expressions, prefix-increment-expression -> paragraph 6 -> sentence 1
* RELEVANT PLACES: expressions, prefix-expressions, prefix-increment-expression -> paragraph 5 -> sentence 1
* overloadable-operators -> paragraph 4 -> sentence 1
* NUMBER: 2
* DESCRIPTION:
*/
fun box(): String {
var a = A()
val res: Any? = ++a
return if (res is B) "OK"
else "NOK"
}
open class A() {
var i = 0
open operator fun inc(): B {
var b = B()
b.i = this.i
b.i++
return b
}
}
class B() : A() {}
@@ -0,0 +1,96 @@
{
"6": {
"pos": {
"1": [
{
"specVersion": "0.1-213",
"casesNumber": 0,
"description": "",
"unexpectedBehaviour": false
},
{
"specVersion": "0.1-213",
"casesNumber": 0,
"description": "",
"unexpectedBehaviour": false
}
]
}
},
"5": {
"pos": {
"1": [
{
"specVersion": "0.1-213",
"casesNumber": 0,
"description": "",
"path": "compiler/tests-spec/testData/codegen/box/linked/expressions/prefix-expressions/prefix-increment-expression/p-6/pos/1.2.kt",
"unexpectedBehaviour": false
},
{
"specVersion": "0.1-213",
"casesNumber": 0,
"description": "",
"path": "compiler/tests-spec/testData/codegen/box/linked/expressions/prefix-expressions/prefix-increment-expression/p-6/pos/1.1.kt",
"unexpectedBehaviour": false
},
{
"specVersion": "0.1-213",
"casesNumber": 0,
"description": "",
"path": "compiler/tests-spec/testData/codegen/box/linked/expressions/prefix-expressions/prefix-increment-expression/p-1/pos/1.2.kt",
"unexpectedBehaviour": false
},
{
"specVersion": "0.1-213",
"casesNumber": 0,
"description": "",
"path": "compiler/tests-spec/testData/codegen/box/linked/expressions/prefix-expressions/prefix-increment-expression/p-1/pos/1.1.kt",
"unexpectedBehaviour": false
},
{
"specVersion": "0.1-213",
"casesNumber": 0,
"description": "check the result of inc() is assigned to A, the return type of inc must be a subtype of A.",
"unexpectedBehaviour": false
}
]
}
},
"1": {
"pos": {
"1": [
{
"specVersion": "0.1-213",
"casesNumber": 0,
"description": "",
"unexpectedBehaviour": false
},
{
"specVersion": "0.1-213",
"casesNumber": 0,
"description": "",
"unexpectedBehaviour": false
}
]
}
},
"4": {
"pos": {
"1": [
{
"specVersion": "0.1-213",
"casesNumber": 0,
"description": "check for a prefix increment expression ++A expression A must be an assignable expression (a navigation expression referring to a mutable property)",
"unexpectedBehaviour": false
},
{
"specVersion": "0.1-213",
"casesNumber": 0,
"description": "check for a prefix increment expression ++A expression A must be an assignable expression (an indexing expression)",
"unexpectedBehaviour": false
}
]
}
}
}
@@ -0,0 +1,24 @@
{
"3": {
"pos": {
"2": [
{
"specVersion": "0.1-213",
"casesNumber": 0,
"description": "check for a prefix increment expression ++A expression A must be an assignable expression (a navigation expression referring to a mutable property)",
"path": "compiler/tests-spec/testData/codegen/box/linked/expressions/prefix-expressions/prefix-increment-expression/p-4/pos/1.2.kt",
"unexpectedBehaviour": false
}
],
"3": [
{
"specVersion": "0.1-213",
"casesNumber": 0,
"description": "check for a prefix increment expression ++A expression A must be an assignable expression (an indexing expression)",
"path": "compiler/tests-spec/testData/codegen/box/linked/expressions/prefix-expressions/prefix-increment-expression/p-4/pos/1.1.kt",
"unexpectedBehaviour": false
}
]
}
}
}