JS: move inline test to box tests
This commit is contained in:
@@ -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"
|
||||
}
|
||||
+28
@@ -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"
|
||||
}
|
||||
Vendored
+29
@@ -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"
|
||||
}
|
||||
Reference in New Issue
Block a user