JS: move inline test to box tests

This commit is contained in:
Alexey Andreev
2016-08-29 11:55:22 +03:00
parent b159049be8
commit efb82a044f
150 changed files with 1417 additions and 1430 deletions
@@ -0,0 +1,73 @@
package foo
// CHECK_VARS_COUNT: function=test1 count=0
// CHECK_VARS_COUNT: function=test2 count=0
// CHECK_VARS_COUNT: function=test3 count=0
// CHECK_VARS_COUNT: function=test4 count=0
// CHECK_VARS_COUNT: function=test5 count=0
var global = ""
var globalNum = 1
var returnValue = 0
fun pure(n: Int) = n
fun x(n: Int) = globalNum++ * n
inline fun a(n: Int) = x(n)
fun b(n: Int) {
returnValue = n
}
fun c(first: Int, second: Int, third: Int) = first + second + third
inline fun d(first: Int, second: Int, third: Int) {
returnValue = first + second + third
}
fun test1(): Int {
globalNum = 1
return x(a(1) + a(10) + a(100))
}
fun test2() {
globalNum = 1
b(a(1) + a(10) + a(100))
}
fun test3(): Int {
globalNum = 1
return c(a(1), a(10), a(100))
}
fun test4() {
globalNum = 1
d(a(1), a(10), a(100))
}
fun test5(): Int {
globalNum = 1
return globalNum++ + a(10) + (globalNum++ * 100)
}
fun box(): String {
var result = test1()
if (result != 1284) return "fail1: $result"
test2()
result = returnValue
if (result != 321) return "fail2: $result"
result = test3()
if (result != 321) return "fail3: $result"
test4()
result = returnValue
if (result != 321) return "fail4: $result"
result = test5()
if (result != 321) return "fail5: $result"
return "OK"
}
@@ -0,0 +1,37 @@
package foo
// CHECK_NOT_CALLED: f1
// CHECK_NOT_CALLED: f2
// CHECK_BREAKS_COUNT: function=test count=3
internal var even = arrayListOf<Int>()
internal var odd = arrayListOf<Int>()
internal inline fun f2(x: Int): Unit {
if (x % 2 == 0) {
even.add(x)
return
}
odd.add(x)
return
}
internal inline fun f1(x: Boolean, y: Int, z: Int): Unit {
if (x) {
return f2(y)
}
return f2(z)
}
internal fun test(x: Boolean, y: Int, z: Int): Unit = f1(x, y, z)
fun box(): String {
test(true, 2, 1)
test(false, 2, 1)
assertEquals(listOf(2), even)
assertEquals(listOf(1), odd)
return "OK"
}
@@ -0,0 +1,28 @@
package foo
// CHECK_VARS_COUNT: function=test_za3lpa$ count=2
inline fun if1(f: (Int) -> Int, a: Int, b: Int, c: Int): Int {
val result = f(a)
if (result == b) {
return f(a)
}
return f(c)
}
fun test(x: Int): Int {
val test1 = if1({ it }, x, 2, 3)
return test1
}
fun box(): String {
var result = test(2)
if (result != 2) return "fail1: $result"
result = test(100)
if (result != 3) return "fail2: $result"
return "OK"
}
@@ -0,0 +1,39 @@
package foo
// CHECK_CONTAINS_NO_CALLS: test1
// CHECK_CONTAINS_NO_CALLS: test2
// CHECK_VARS_COUNT: function=test1 count=0
// CHECK_VARS_COUNT: function=test2 count=1
var log = ""
internal inline fun run1(fn: ()->Int): Int {
log += "1;"
return 1 + fn()
}
internal inline fun run2(fn: ()->Int): Int {
log += "2;"
return 2 + run1(fn)
}
internal inline fun run3(fn: ()->Int): Int {
log += "3;"
return 3 + run2(fn)
}
internal fun test1(x: Int): Int = run3 { x }
internal fun test2(x: Int): Int {
val result = 1 + run3 { x }
return result
}
fun box(): String {
assertEquals(7, test1(1))
assertEquals("3;2;1;", log)
assertEquals(8, test2(1))
return "OK"
}
@@ -0,0 +1,25 @@
package foo
// CHECK_CONTAINS_NO_CALLS: test
// CHECK_VARS_COUNT: function=test count=0
object SumHolder {
var sum = 0
}
internal inline fun sum(x: Int, y: Int): Int {
if (x == 0 || y == 0) return 0
return x + y
}
internal fun test(x: Int, y: Int) {
SumHolder.sum = sum(x, y)
}
fun box(): String {
test(1, 2)
assertEquals(3, SumHolder.sum)
return "OK"
}
@@ -0,0 +1,29 @@
// CHECK_VARS_COUNT: function=box count=1
package foo
var log = ""
class A() {
var x = 23
}
fun sideEffect(): Int {
log += "sideEffect();"
return 42
}
fun bar(a: Int, b: Int) {
log += "bar($a, $b);"
}
inline fun test(a: Int, b: Int) {
bar(b, a)
}
fun box(): String {
val a = A()
test(sideEffect(), a.x)
assertEquals("sideEffect();bar(23, 42);", log)
return "OK"
}
@@ -0,0 +1,30 @@
package foo
// CHECK_CONTAINS_NO_CALLS: test
// CHECK_VARS_COUNT: function=test count=0
internal inline fun sign(x: Int): Int {
if (x < 0) return -1
if (x == 0) return 0
return 1
}
internal fun test(x: Int, y: Int): Int {
if (x != 0) {
return sign(x)
}
return sign(y)
}
fun box(): String {
assertEquals(-1, test(-2, 2))
assertEquals(1, test(2, -2))
assertEquals(-1, test(0, -2))
assertEquals(1, test(0, 2))
assertEquals(0, test(0, 0))
return "OK"
}
@@ -0,0 +1,21 @@
package foo
// CHECK_CONTAINS_NO_CALLS: test
// CHECK_VARS_COUNT: function=test count=0
// A copy of stdlib run function.
// Copied to not to depend on run implementation.
// It's important, that the body is just `return fn()`.
internal inline fun <T> evaluate(fn: ()->T): T = fn()
internal fun test(x: Int): Int =
evaluate {
evaluate { 2 } * evaluate { x }
}
fun box(): String {
assertEquals(6, test(3))
assertEquals(8, test(4))
return "OK"
}
@@ -0,0 +1,46 @@
package foo
// CHECK_VARS_COUNT: function=test1_za3lpa$ count=0
// CHECK_VARS_COUNT: function=test2_za3lpa$ count=1
// CHECK_VARS_COUNT: function=test3_za3lpa$ count=0
inline fun a(x: Int) = b(x)
fun b(x: Int) = x
fun test1(n: Int) = if (n > 0) a(n + 10) else a(n - 10)
fun test2(n: Int): Int {
var result = if (n > 0) a(n + 10) else a(n - 10)
return result
}
fun test3(n: Int): Int {
Holder.value = if (n > 0) a(n + 10) else a(n - 10)
return Holder.value
}
object Holder {
var value = 0
}
fun box(): String {
var result: Int
result = test1(5)
if (result != 15) return "fail1a: $result"
result = test1(-5)
if (result != -15) return "fail1b: $result"
result = test2(5)
if (result != 15) return "fail2a: $result"
result = test2(-5)
if (result != -15) return "fail2b: $result"
result = test3(5)
if (result != 15) return "fail3a: $result"
result = test3(-5)
if (result != -15) return "fail3b: $result"
return "OK"
}
@@ -0,0 +1,19 @@
package foo
// CHECK_CONTAINS_NO_CALLS: test
// CHECK_VARS_COUNT: function=test count=0
internal class A(val x: Int) {
inline fun f(): Int = x
inline fun ff(): Int = f()
}
internal fun test(a: A): Int = a.ff()
fun box(): String {
assertEquals(1, test(A(1)))
assertEquals(2, test(A(2)))
return "OK"
}
@@ -0,0 +1,22 @@
package foo
// CHECK_CONTAINS_NO_CALLS: test
// CHECK_VARS_COUNT: function=test count=1
internal inline fun sum(x: Int, y: Int): Int {
if (x == 0 || y == 0) return 0
return x + y
}
internal fun test(x: Int, y: Int): Int {
val sum: Int
sum = sum(x, y)
return sum
}
fun box(): String {
assertEquals(3, test(1, 2))
return "OK"
}
@@ -0,0 +1,21 @@
package foo
// CHECK_CONTAINS_NO_CALLS: test
// CHECK_VARS_COUNT: function=test count=1
internal inline fun sum(x: Int, y: Int): Int {
if (x == 0 || y == 0) return 0
return x + y
}
internal fun test(x: Int, y: Int): Int {
val sum = sum(x, y)
return sum
}
fun box(): String {
assertEquals(3, test(1, 2))
return "OK"
}