JS: decomposition of binary operator

#KT-6437 fixed
 #KT-7359 fixed
This commit is contained in:
Alexey Tsvetkov
2015-04-10 18:13:29 +03:00
parent fd844ad6e3
commit c0111d6e33
10 changed files with 170 additions and 0 deletions
@@ -0,0 +1,14 @@
package foo
class A(var x: Int) {
override fun toString(): String = "A($x)"
}
fun box(): String {
val a = A(10)
fizz(a).x = buzz(20)
assertEquals(20, a.x)
assertEquals("fizz(A(10));buzz(20);", pullLog())
return "OK"
}
@@ -0,0 +1,8 @@
package foo
fun box(): String {
assertEquals(3, fizz(1) + buzz(2))
assertEquals("fizz(1);buzz(2);", pullLog())
return "OK"
}
@@ -0,0 +1,8 @@
package foo
fun box(): String {
assertEquals(10, (fizz(1) + buzz(2)) + (fizz(3) + buzz(4)))
assertEquals("fizz(1);buzz(2);fizz(3);buzz(4);", pullLog())
return "OK"
}
@@ -0,0 +1,14 @@
package foo
fun box(): String {
assertEquals(false, fizz(false) && buzz(false))
assertEquals("fizz(false);", pullLog())
assertEquals(false, fizz(true) && buzz(false))
assertEquals("fizz(true);buzz(false);", pullLog())
assertEquals(true, fizz(true) && buzz(true))
assertEquals("fizz(true);buzz(true);", pullLog())
return "OK"
}
@@ -0,0 +1,8 @@
package foo
fun box(): String {
assertEquals(true, fizz(true) || buzz(true) && (fizz(false) || buzz(true)))
assertEquals("fizz(true);", pullLog())
return "OK"
}
@@ -0,0 +1,14 @@
package foo
fun box(): String {
assertEquals(true, fizz(true) || buzz(false))
assertEquals("fizz(true);", pullLog())
assertEquals(true, fizz(false) || buzz(true))
assertEquals("fizz(false);buzz(true);", pullLog())
assertEquals(false, fizz(false) || buzz(false))
assertEquals("fizz(false);buzz(false);", pullLog())
return "OK"
}
@@ -0,0 +1,20 @@
package foo
class A(val x: Int = fizz(1) + 1) {
val y = buzz(x) + 1
val z: Int
init {
z = fizz(x) + buzz(y)
}
}
fun box(): String {
val a = A()
assertEquals(2, a.x)
assertEquals(3, a.y)
assertEquals(5, a.z)
assertEquals("fizz(1);buzz(2);fizz(2);buzz(3);", pullLog())
return "OK"
}
@@ -0,0 +1,17 @@
package foo
class A {
val x: Int
init {
x = fizz(1) + buzz(2)
}
}
fun box(): String {
val a = A()
assertEquals(3, a.x)
assertEquals("fizz(1);buzz(2);", pullLog())
return "OK"
}