JS: move more test to box tests

This commit is contained in:
Alexey Andreev
2016-08-29 12:37:13 +03:00
parent efb82a044f
commit cdf2212c73
70 changed files with 484 additions and 749 deletions
@@ -0,0 +1,9 @@
package foo
class A() {
operator fun div(other: A) = "OK"
}
fun box() = A() / A()
@@ -0,0 +1,18 @@
package foo
class A(t: Int) {
var i = t
operator fun compareTo(other: A) = (this.i - other.i)
}
fun box(): String {
if (A(3) <= A(2)) return "fail1"
if (A(2) < A(2)) return "fail2"
if (A(1) < A(0)) return "fail3"
if (A(2) > A(2)) return "fail4"
if (A(3) > A(4)) return "fail5"
if (A(0) >= A(100)) return "fail6"
return "OK"
}
@@ -0,0 +1,16 @@
package foo
class A(t: Int) {
var i = t
infix operator fun compareTo(other: A) = (this.i - other.i)
}
fun box(): String {
if (A(3) compareTo A(2) <= 0) return "fail1"
if (A(2) compareTo A(2) != 0) return "fail2"
if (A(1) compareTo A(0) <= 0) return "fail3"
if (A(3) compareTo A(4) >= 0) return "fail4"
if (A(0) compareTo A(100) >= 0) return "fail5"
return "OK"
}
@@ -0,0 +1,27 @@
package foo
var global = ""
fun log(message: String) {
global += message
}
fun test1(): String {
val list = mutableListOf<(Int) -> Unit>()
var result = ""
list += { log("<$it>") }
list += { result += "($it)" }
list += { result += "[$it]"; result += "{$it}" }
for(f in list) f(1)
return result
}
fun box(): String {
assertEquals("(1)[1]{1}", test1())
assertEquals(global, "<1>")
return "OK"
}
@@ -0,0 +1,9 @@
package foo
class A() {
operator fun not() = "OK"
}
fun box() = !A()
@@ -0,0 +1,34 @@
package foo
class MyInt(i: Int) {
var b = i
operator fun inc(): MyInt {
b = b + 1;
return this;
}
}
class A() {
var gc = 0
var sc = 0
var b = MyInt(0)
get() {
gc = gc + 1;
return field;
}
set(a: MyInt) {
sc = sc + 1;
}
}
fun box(): String {
val t = A()
val d = t.b++
if (t.sc != 1) return "fail1"
if (t.gc != 1) return "fail2"
return "OK"
}
@@ -0,0 +1,28 @@
package foo
import java.util.*
class ArrayWrapper<T>() {
val contents = ArrayList<T>()
fun add(item: T) {
contents.add(item)
}
operator fun plusAssign(rhs: ArrayWrapper<T>) {
contents.addAll(rhs.contents)
}
fun get(index: Int): T {
return contents.get(index)
}
}
fun box(): String {
var v1 = ArrayWrapper<String>()
val v2 = ArrayWrapper<String>()
v1.add("foo")
v2.add("bar")
v1 += v2
return if (v1.contents.size == 2) "OK" else "fail"
}
@@ -0,0 +1,27 @@
package foo
import java.util.*
class A<T>(val list: MutableList<T>) {
fun addAll(c: Collection<T>) {
list.addAll(c)
}
}
operator fun <T> A<T>.plusAssign(other: Collection<T>) {
addAll(other)
}
fun box(): String {
var v1 = arrayListOf("foo")
val v2 = listOf("bar")
val a = A(v1)
a += v2
if (v1.size != 2) return "fail1: ${v1.size}"
if (v1[0] != "foo") return "fail2: ${v1[0]}"
if (v1[1] != "bar") return "fail3: ${v1[1]}"
return "OK"
}
@@ -0,0 +1,16 @@
package foo
open class Foo<out T>(open val value: T)
open class MutableFoo<T>(override var value: T): Foo<T>(value)
operator fun <T> Foo<T>.plus(x: T): Foo<T> = Foo(x)
// overloading:
operator fun <T> MutableFoo<T>.plus(x: T): MutableFoo<T> = MutableFoo(x)
fun box(): String {
var f = MutableFoo(1)
f += 2
return if (f is MutableFoo && f.value == 2) "OK" else "fail"
}
@@ -0,0 +1,24 @@
package foo
import java.util.*
operator fun <T> ArrayList<T>.plus(other: Collection<T>): List<T> {
val c = ArrayList<T>()
c.addAll(this)
c.addAll(other)
return c
}
fun box(): String {
var v1 = ArrayList<String>()
v1.add("foo")
val v2 = ArrayList<String>()
v2.add("bar")
val v = v1 + v2
if (v.size != 2) return "fail1: ${v.size}"
if (v[0] != "foo") return "fail2: ${v[0]}"
if (v[1] != "bar") return "fail3: ${v[1]}"
return "OK"
}
@@ -0,0 +1,19 @@
package foo
class A(val c: Int) {
}
operator fun A.inc() = A(5)
operator fun A.dec() = A(10)
fun box(): String {
var a = A(1)
if ((++a).c != 5) return "fail1"
if ((a++).c != 5) return "fail2"
if ((--a).c != 10) return "fail3"
if ((a--).c != 10) return "fail4"
return "OK"
}
@@ -0,0 +1,21 @@
package foo
var a = MyInt()
class MyInt() {
var b = 0
operator fun inc(): MyInt {
val res = MyInt();
res.b = b;
res.b++;
return res;
}
}
fun box(): String {
a++;
a++;
return if (a.b == 2) "OK" else "fail"
}
@@ -0,0 +1,13 @@
package foo
class A() {
operator fun unaryPlus() = "O"
operator fun unaryMinus() = "K"
}
fun box(): String {
var c = A()
return +c + -c
}
@@ -0,0 +1,17 @@
package foo
class A() {
var message = ""
operator fun plusAssign(other: A) {
message = message + "!"
}
}
fun box(): String {
var c = A()
c += A()
c += A()
return if (c.message == "!!") return "OK" else "fail"
}
@@ -0,0 +1,12 @@
package foo
class myInt(a: Int) {
val value = a;
operator fun plus(other: myInt): myInt = myInt(value + other.value)
}
fun box(): String {
return if ((myInt(3) + myInt(5)).value == 8) "OK" else "fail"
}
@@ -0,0 +1,18 @@
package foo
class MyInt() {
var b = 0
operator fun inc(): MyInt {
val res = MyInt()
res.b++;
return res;
}
}
fun box(): String {
var c = MyInt()
c++;
return if (c.b == 1) "OK" else "fail"
}
@@ -0,0 +1,22 @@
package foo
var a = MyInt()
class MyInt() {
var b = 0
operator fun inc(): MyInt {
b = b + 1;
return this;
}
}
fun box(): String {
val d = a++;
if (a.b != 1) return "fail1: ${a.b}"
if (d.b != 1) return "fail2: ${d.b}"
return "OK"
}
@@ -0,0 +1,18 @@
package foo
class MyInt() {
var b = 0
operator fun dec(): MyInt {
val res = MyInt()
res.b++;
return res;
}
}
fun box(): String {
var c = MyInt()
--c;
return if (c.b == 1) "OK" else "fail: ${c.b}"
}
@@ -0,0 +1,17 @@
package foo
class MyInt() {
var b = 0
operator fun dec(): MyInt {
b = b + 1;
return this;
}
}
fun box(): String {
var c = MyInt()
val d = --c;
return if (c.b == 1) "OK" else "fail: ${c.b}"
}
@@ -0,0 +1,15 @@
package foo
class MyInt(i: Int) {
var b = i
operator fun inc(): MyInt {
b = b++;
return this;
}
}
fun box(): String {
var t = MyInt(0)
t++;
return if (t.b == 0) "OK" else "fail: ${t.b}"
}
@@ -0,0 +1,15 @@
package foo
class MyInt(i: Int) {
var b = i
operator fun inc(): MyInt {
b++;
return this;
}
}
fun box(): String {
var t = MyInt(0)
t++;
return if (t.b == 1) "OK" else "fail: ${t.b}"
}
@@ -0,0 +1,15 @@
package foo
class A() {
var p = "yeah"
operator fun mod(other: A): A {
return A();
}
}
fun box(): String {
var c = A()
val d = c;
c %= A();
return if ((c != d) && (c.p == "yeah")) "OK" else "fail"
}