[Spec tests] Add tests for additive-expression and Multiplicative expression

This commit is contained in:
anastasiia.spaseeva
2019-12-23 14:41:40 +03:00
parent 72358aa52a
commit 01a4562076
13 changed files with 683 additions and 0 deletions
@@ -0,0 +1,43 @@
// WITH_RUNTIME
/*
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
*
* SPEC VERSION: 0.1-218
* PLACE: expressions, additive-expression -> paragraph 2 -> sentence 1
* RELEVANT PLACES: expressions, additive-expression -> paragraph 1 -> sentence 1
* expressions, additive-expression -> paragraph 1 -> sentence 2
* expressions, additive-expression -> paragraph 3 -> sentence 1
* NUMBER: 1
* DESCRIPTION: A + B is exactly the same as A.plus(B)
*/
class A(var a: Int) {
var isCalled = false
var isCalledInt = false
operator fun plus(o: Int): A {
isCalledInt = true
a += o
return this
}
operator fun plus(o: A): A {
isCalled = true
return A(a + o.a)
}
}
fun box(): String {
val a1 = A(-1)
val a2 = A(5)
val x = a1 + a2
if (a1.isCalled && !a2.isCalled && x.a == 4) {
val a3 = A(3)
val y = a3 + 8
if (a3.isCalledInt && y.a == 11)
return "OK"
}
return "NOK"
}
@@ -0,0 +1,43 @@
// WITH_RUNTIME
/*
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
*
* SPEC VERSION: 0.1-218
* PLACE: expressions, additive-expression -> paragraph 2 -> sentence 2
* RELEVANT PLACES: expressions, additive-expression -> paragraph 1 -> sentence 1
* expressions, additive-expression -> paragraph 1 -> sentence 2
* expressions, additive-expression -> paragraph 3 -> sentence 1
* NUMBER: 1
* DESCRIPTION: A - B is exactly the same as A.MINUS(B)
*/
class A(var a: Int) {
var isCalled = false
var isCalledInt = false
operator fun minus(o: Int): A {
isCalledInt = true
a -= o
return this
}
operator fun minus(o: A): A {
isCalled = true
return A(a - o.a)
}
}
fun box(): String {
val a1 = A(-1)
val a2 = A(5)
val x = a1 - a2
if (a1.isCalled && !a2.isCalled && x.a == -6) {
val a3 = A(3)
val y = a3 - 8
if (a3.isCalledInt && y.a == -5)
return "OK"
}
return "NOK"
}
@@ -0,0 +1,42 @@
{
"2": {
"pos": {
"2": [
{
"specVersion": "0.1-218",
"casesNumber": 0,
"description": "A - B is exactly the same as A.MINUS(B)",
"unexpectedBehaviour": false
}
],
"1": [
{
"specVersion": "0.1-218",
"casesNumber": 0,
"description": "A + B is exactly the same as A.plus(B)",
"unexpectedBehaviour": false
}
]
}
},
"1": {
"pos": {
"1": [
{
"specVersion": "0.1-218",
"casesNumber": 0,
"description": "A - B is exactly the same as A.MINUS(B)",
"path": "compiler/tests-spec/testData/codegen/box/linked/expressions/additive-expression/p-2/pos/2.1.kt",
"unexpectedBehaviour": false
},
{
"specVersion": "0.1-218",
"casesNumber": 0,
"description": "A + B is exactly the same as A.plus(B)",
"path": "compiler/tests-spec/testData/codegen/box/linked/expressions/additive-expression/p-2/pos/1.1.kt",
"unexpectedBehaviour": false
}
]
}
}
}
@@ -0,0 +1,41 @@
// WITH_RUNTIME
/*
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
*
* SPEC VERSION: 0.1-218
* PLACE: expressions, multiplicative-expression -> paragraph 2 -> sentence 1
* RELEVANT PLACES: expressions, multiplicative-expression -> paragraph 1 -> sentence 1
* expressions, multiplicative-expression -> paragraph 1 -> sentence 2
* NUMBER: 1
* DESCRIPTION: A * B is exactly the same as A.times(B)
*/
class A(var a: Int) {
var isCalled = false
var isCalledInt = false
operator fun times(o: Int): A {
isCalledInt = true
a *= o
return this
}
operator fun times(o: A): A {
isCalled = true
return A(a * o.a)
}
}
fun box(): String {
val a1 = A(-1)
val a2 = A(5)
val x = a1 * a2
if (a1.isCalled && !a2.isCalled && x.a == -5) {
val a3 = A(3)
val y = a3 * 2
if (a3.isCalledInt && y.a == 6)
return "OK"
}
return "NOK"
}
@@ -0,0 +1,40 @@
// WITH_RUNTIME
/*
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
*
* SPEC VERSION: 0.1-218
* PLACE: expressions, multiplicative-expression -> paragraph 2 -> sentence 2
* RELEVANT PLACES: expressions, multiplicative-expression -> paragraph 1 -> sentence 1
* expressions, multiplicative-expression -> paragraph 1 -> sentence 2
* NUMBER: 1
* DESCRIPTION: A / B is exactly the same as A.div(B)
*/
class A(var a: Int) {
var isCalled = false
var isCalledInt = false
operator fun div(o: Int): A {
isCalledInt = true
return this
}
operator fun div(o: A): A {
isCalled = true
return this
}
}
fun box(): String {
val a1 = A(-1)
val a2 = A(5)
val x = a1 / a2
if (a1.isCalled && !a2.isCalled) {
val a3 = A(3)
val y = a3 / 2
if (a3.isCalledInt)
return "OK"
}
return "NOK"
}
@@ -0,0 +1,40 @@
// WITH_RUNTIME
/*
* KOTLIN CODEGEN BOX SPEC TEST (POSITIVE)
*
* SPEC VERSION: 0.1-218
* PLACE: expressions, multiplicative-expression -> paragraph 2 -> sentence 3
* RELEVANT PLACES: expressions, multiplicative-expression -> paragraph 1 -> sentence 1
* expressions, multiplicative-expression -> paragraph 1 -> sentence 2
* NUMBER: 1
* DESCRIPTION: A % B is exactly the same as A.rem(B)
*/
class A(var a: Int) {
var isCalled = false
var isCalledInt = false
operator fun rem(o: Int): A {
isCalledInt = true
return this
}
operator fun rem(o: A): A {
isCalled = true
return this
}
}
fun box(): String {
val a1 = A(-1)
val a2 = A(5)
val x = a1 % a2
if (a1.isCalled && !a2.isCalled) {
val a3 = A(3)
val y = a3 % 2
if (a3.isCalledInt)
return "OK"
}
return "NOK"
}
@@ -0,0 +1,57 @@
{
"2": {
"pos": {
"2": [
{
"specVersion": "0.1-218",
"casesNumber": 0,
"description": "A / B is exactly the same as A.div(B)",
"unexpectedBehaviour": false
}
],
"3": [
{
"specVersion": "0.1-218",
"casesNumber": 0,
"description": "A % B is exactly the same as A.rem(B)",
"unexpectedBehaviour": false
}
],
"1": [
{
"specVersion": "0.1-218",
"casesNumber": 0,
"description": "A * B is exactly the same as A.times(B)",
"unexpectedBehaviour": false
}
]
}
},
"1": {
"pos": {
"1": [
{
"specVersion": "0.1-218",
"casesNumber": 0,
"description": "A / B is exactly the same as A.div(B)",
"path": "compiler/tests-spec/testData/codegen/box/linked/expressions/multiplicative-expression/p-2/pos/2.1.kt",
"unexpectedBehaviour": false
},
{
"specVersion": "0.1-218",
"casesNumber": 0,
"description": "A % B is exactly the same as A.rem(B)",
"path": "compiler/tests-spec/testData/codegen/box/linked/expressions/multiplicative-expression/p-2/pos/3.1.kt",
"unexpectedBehaviour": false
},
{
"specVersion": "0.1-218",
"casesNumber": 0,
"description": "A * B is exactly the same as A.times(B)",
"path": "compiler/tests-spec/testData/codegen/box/linked/expressions/multiplicative-expression/p-2/pos/1.1.kt",
"unexpectedBehaviour": false
}
]
}
}
}