JS: decomposition of invocation/"new"

This commit is contained in:
Alexey Tsvetkov
2015-04-10 18:04:00 +03:00
parent b7e26c3bf7
commit 92942fd1c5
8 changed files with 190 additions and 0 deletions
@@ -0,0 +1,13 @@
package foo
fun sum(x: Int, y: Int): Int {
log("sum($x, $y)")
return x + y
}
fun box(): String {
assertEquals(3, sum(fizz(1), buzz(2)))
assertEquals("fizz(1);buzz(2);sum(1, 2);", pullLog())
return "OK"
}
@@ -0,0 +1,13 @@
package foo
fun sum(a: Int, b: Int, c: Int, d: Int): Int {
log("sum($a, $b, $c, $d)")
return a + b + c + d
}
fun box(): String {
assertEquals(10, sum(fizz(1), buzz(2), fizz(3), buzz(4)))
assertEquals("fizz(1);buzz(2);fizz(3);buzz(4);sum(1, 2, 3, 4);", pullLog())
return "OK"
}
@@ -0,0 +1,19 @@
package foo
// CHECK_NOT_CALLED: max
inline fun max(a: Int, b: Int): Int {
log("max($a, $b)")
if (a > b) return a
return b
}
fun box(): String {
val test = max(fizz(1), max(fizz(2), buzz(3)))
assertEquals(3, test)
assertEquals("fizz(1);fizz(2);buzz(3);max(2, 3);max(1, 3);", pullLog())
return "OK"
}
@@ -0,0 +1,16 @@
package foo
class Sum(x: Int, y: Int) {
init {
log("new Sum($x, $y)")
}
val value = x + y
}
fun box(): String {
assertEquals(3, Sum(fizz(1), buzz(2)).value)
assertEquals("fizz(1);buzz(2);new Sum(1, 2);", pullLog())
return "OK"
}
@@ -0,0 +1,13 @@
package foo
fun multiplyFun(): (Int, Int)->Int {
log("multiplyFun()")
return { x, y -> x * y }
}
fun box(): String {
assertEquals(6, multiplyFun()(fizz(2), buzz(3)))
assertEquals("multiplyFun();fizz(2);buzz(3);", pullLog())
return "OK"
}
@@ -0,0 +1,8 @@
package foo
fun box(): String {
assertEquals(3, buzz(fizz(1) + buzz(2)))
assertEquals("fizz(1);buzz(2);buzz(3);", pullLog())
return "OK"
}