Move blackBoxFile() testData to box/ directory

Delete all test methods (and empty test classes), since they'll be
auto-generated
This commit is contained in:
Alexander Udalov
2013-01-25 16:13:45 +04:00
committed by Alexander Udalov
parent ecbb2f10ef
commit 41a416da60
438 changed files with 156 additions and 2005 deletions
@@ -0,0 +1,11 @@
class C() {
class object {
fun create() = C()
}
}
fun box(): String {
val c = C.create()
return if (c is C) "OK" else "fail"
}
@@ -0,0 +1,7 @@
class A() {
class object {
val value = 10
}
}
fun box() = if (A.value == 10) "OK" else "Fail ${A.value}"
@@ -0,0 +1,12 @@
// EA-38323 - Illegal field modifiers in class: classObject field in C must be static and final
trait C {
class object {
public val FOO: String = "OK"
}
}
fun box(): String {
return C.FOO
}
@@ -0,0 +1,24 @@
trait Trait1 {
fun foo() : String
}
trait Trait2 {
fun bar() : String
}
class T1 : Trait1{
override fun foo() = "aaa"
}
class T2 : Trait2{
override fun bar() = "bbb"
}
class C(a:Trait1, b:Trait2) : Trait1 by a, Trait2 by b
fun box() : String {
val c = C(T1(),T2())
if(c.foo() != "aaa") return "fail"
if(c.bar() != "bbb") return "fail"
return "OK"
}
@@ -0,0 +1,35 @@
trait One {
public open fun foo() : Int
public open fun faz() : Int = 10
}
trait Two {
public open fun foo() : Int
public open fun quux() : Int = 100
}
class OneImpl : One {
public override fun foo() = 1
}
class TwoImpl : Two {
public override fun foo() = 2
}
class Test2(a : One, b : Two) : Two by b, One by a {
public override fun foo() = 0
}
fun box() : String {
var t2 = Test2(OneImpl(), TwoImpl())
if (t2.foo() != 0)
return "Fail #1"
if (t2.faz() != 10)
return "Fail #2"
if (t2.quux() != 100)
return "Fail #3"
if (t2 !is One)
return "Fail #4"
if (t2 !is Two)
return "Fail #5"
return "OK"
}
@@ -0,0 +1,28 @@
open trait First {
public open fun foo() : Int
}
open trait Second : First {
public open fun bar() : Int
}
class Impl : Second {
public override fun foo() = 1
public override fun bar() = 2
}
class Test(s : Second) : Second by s {}
fun box() : String {
var t = Test(Impl())
if (t.foo() != 1)
return "Fail #1"
if (t.bar() != 2)
return "Fail #2"
if (t !is First)
return "Fail #3"
if (t !is Second)
return "Fail #4"
return "OK"
}
@@ -0,0 +1,12 @@
trait A<T> {
fun foo(t: T): String
}
class Derived(a: A<Int>) : A<Int> by a
fun box(): String {
val o = object : A<Int> {
override fun foo(t: Int) = if (t == 42) "OK" else "Fail $t"
}
return Derived(o).foo(42)
}
@@ -0,0 +1,12 @@
trait A<T: Number> {
fun foo(t: T): String
}
class Derived(a: A<Int>) : A<Int> by a
fun box(): String {
val o = object : A<Int> {
override fun foo(t: Int) = if (t == 42) "OK" else "Fail $t"
}
return Derived(o).foo(42)
}
@@ -0,0 +1,12 @@
trait A<T, U> {
fun foo(t: T, u: U): String
}
class Derived(a: A<Long, Int>) : A<Long, Int> by a
fun box(): String {
val o = object : A<Long, Int> {
override fun foo(t: Long, u: Int) = if (t == u.toLong()) "OK" else "Fail $t $u"
}
return Derived(o).foo(42, 42)
}
@@ -0,0 +1,13 @@
class TestJava(r : Runnable) : Runnable by r {}
class TestRunnable() : Runnable {
public override fun run() = System.out.println("foobar")
}
fun box() : String {
var del = TestJava(TestRunnable())
del.run()
if (del !is Runnable)
return "Fail #1"
return "OK"
}
@@ -0,0 +1,34 @@
package test
trait TextField {
fun getText(): String
}
trait InputTextField : TextField {
fun setText(text: String)
}
trait MooableTextField : InputTextField {
fun moo(a: Int, b: Int, c: Int): Int
}
class SimpleTextField : MooableTextField {
private var text = ""
override fun getText() = text
override fun setText(text: String) {
this.text = text
}
override fun moo(a: Int, b: Int, c: Int) = a + b + c
}
class TextFieldWrapper(textField: MooableTextField) : MooableTextField by textField
fun box() : String {
val textField = TextFieldWrapper(SimpleTextField())
textField.setText("hello world!")
if (!textField.getText().equals("hello world!")) return "FAIL #!1"
if (textField.moo(1,2,3) != 6) return "FAIL #2"
return "OK"
}
@@ -0,0 +1,24 @@
// Changed when traits were introduced. May not make sense any more
open class Base() {
public var v : Int = 0
}
open class Left() : Base() {}
trait Right : Base {}
class D() : Left(), Right
fun vl(l : Left) : Int = l.v
fun vr(r : Right) : Int = r.v
fun box() : String {
val d = D()
d.v = 42
if (d.v != 42) return "Fail #1"
if (vl(d) != 42) return "Fail #2"
if (vr(d) != 42) return "Fail #3"
return "OK"
}
@@ -0,0 +1,7 @@
class GameError(msg: String): Exception(msg) {
}
fun box(): String {
val e = GameError("foo")
return if (e.getMessage() == "foo") "OK" else "fail"
}
@@ -0,0 +1,17 @@
open class Base() {
fun n(n : Int) : Int = n + 1
}
trait Abstract {}
class Derived1() : Base(), Abstract {}
class Derived2() : Abstract, Base() {}
fun test(s : Base) : Boolean = s.n(238) == 239
fun box() : String {
if (!test(Base())) return "Fail #1"
if (!test(Derived1())) return "Fail #2"
if (!test(Derived2())) return "Fail #3"
return "OK"
}
@@ -0,0 +1,41 @@
// Changed when traits were introduced. May not make sense any more
open class X(val x : Int) {}
trait Y {
abstract val y : Int
}
class YImpl(override val y : Int) : Y {}
class Point(x : Int, yy : Int) : X(x) , Y {
override val y : Int = yy
}
trait Abstract {}
class P1(x : Int, yy : Y) : Abstract, X(x), Y by yy {}
class P2(x : Int, yy : Y) : X(x), Abstract, Y by yy {}
class P3(x : Int, yy : Y) : X(x), Y by yy, Abstract {}
class P4(x : Int, yy : Y) : Y by yy, Abstract, X(x) {}
fun box() : String {
if (X(239).x != 239) return "FAIL #1"
if (YImpl(239).y != 239) return "FAIL #2"
val p = Point(240, -1)
if (p.x + p.y != 239) return "FAIL #3"
val y = YImpl(-1)
val p1 = P1(240, y)
if (p1.x + p1.y != 239) return "FAIL #4"
val p2 = P2(240, y)
if (p2.x + p2.y != 239) return "FAIL #5"
val p3 = P3(240, y)
if (p3.x + p3.y != 239) return "FAIL #6"
val p4 = P4(240, y)
if (p4.x + p4.y != 239) return "FAIL #7"
return "OK"
}
@@ -0,0 +1,14 @@
class Outer() {
open inner class InnerBase() {
}
inner class InnerDerived(): InnerBase() {
}
public val foo: InnerBase? = InnerDerived()
}
fun box() : String {
val o = Outer()
return if (o.foo === null) "fail" else "OK"
}
@@ -0,0 +1,13 @@
open class Foo {
fun xyzzy(): String = "xyzzy"
}
class Bar(): Foo() {
fun test(): String = xyzzy()
}
fun box() : String {
val bar = Bar()
val f = bar.test()
return if (f == "xyzzy") "OK" else "fail"
}
@@ -0,0 +1,13 @@
class C() {
public var f: Int
{
$f = 610
}
}
fun box(): String {
val c = C()
if (c.f != 610) return "fail"
return "OK"
}
@@ -0,0 +1,20 @@
import java.util.*
import java.io.*
class World() {
public val items: ArrayList<Item> = ArrayList<Item>()
inner class Item() {
{
items.add(this)
}
}
val foo = Item()
}
fun box() : String {
val w = World()
if (w.items.size() != 1) return "fail"
return "OK"
}
@@ -0,0 +1,19 @@
class Outer(val foo: StringBuilder) {
inner class Inner() {
fun len() : Int {
return foo.length()
}
}
fun test() : Inner {
return Inner()
}
}
fun box() : String {
val sb = StringBuilder("xyzzy")
val o = Outer(sb)
val i = o.test()
val l = i.len()
return if (l != 5) "fail" else "OK"
}
@@ -0,0 +1,12 @@
public class StockMarketTableModel() {
public fun getColumnCount() : Int {
return COLUMN_TITLES?.size!!
}
class object {
private val COLUMN_TITLES : Array<Int?> = arrayOfNulls<Int>(10)
}
}
fun box() : String = if(StockMarketTableModel().getColumnCount()==10) "OK" else "fail"
@@ -0,0 +1,14 @@
object RefreshQueue {
val workerThread: Thread = Thread(object : Runnable {
override fun run() {
val a = workerThread
val b = RefreshQueue.workerThread
if (a != b) throw AssertionError()
}
})
}
fun box() : String {
RefreshQueue.workerThread.run()
return "OK"
}
@@ -0,0 +1,7 @@
public class SomeClass() : java.lang.Object() {
}
public fun box():String {
System.out?.println(SomeClass().getClass())
return "OK"
}
@@ -0,0 +1,28 @@
public object SomeClass {
var bug: Any = ""
private val workerThread = object : Thread() {
override fun run() {
try {
foo()
bug = "none"
}
catch(t: Throwable) {
bug = t
}
}
}
{
workerThread.start()
}
private fun foo() : Unit {
}
}
public fun box():String {
if(SomeClass.bug is Throwable)
throw SomeClass.bug as Throwable
return "OK"
}
@@ -0,0 +1,6 @@
fun f(a : Int?, b : Int.(Int)->Int) = a?.b(1)
fun box(): String {
val x = f(1) { this+it+2 }
return if (x == 4) "OK" else "fail"
}
@@ -0,0 +1,13 @@
trait Creator<T> {
fun create() : T
}
class Actor(val code: String = "OK")
trait Factory : Creator<Actor>
class MyFactory() : Factory {
override fun create(): Actor = Actor()
}
fun box() : String = MyFactory().create().code
@@ -0,0 +1,17 @@
class MyClass(var fnc : () -> String) {
fun test(): String {
return fnc()
}
}
fun printtest() : String {
return "OK"
}
fun box(): String {
var c = MyClass({ printtest() })
return c.test()
}
@@ -0,0 +1,20 @@
class Works() : jet.Function0<Object>() {
public override fun invoke():Object {
return "Works" as Object
}
}
class Broken() : jet.Function0<String>() {
public override fun invoke():String {
return "Broken"
}
}
fun box(): String {
val works1: ()->Object = Works();
works1()
val broken1: ()->String = Broken();
broken1()
return "OK"
}
@@ -0,0 +1,23 @@
import java.util.HashMap
data class Pair<First, Second>(val first: First, val second: Second)
fun parseCatalogs(hashMap: Any?) {
val r = toHasMap(hashMap)
if (!r.first) {
return
}
val nodes = r.second
}
fun toHasMap(value: Any?): Pair<Boolean, HashMap<String, Any?>?> {
if(value is HashMap<*, *>) {
return Pair(true, value as HashMap<String, Any?>)
}
return Pair(false, null as HashMap<String, Any?>?)
}
fun box() : String {
parseCatalogs(null)
return "OK"
}
@@ -0,0 +1,9 @@
fun box() : String {
var i = 0
{
i++
}()
i++ //the problem is here
// i = i + 1 //this way it works
return if (i == 2) "OK" else "fail"
}
@@ -0,0 +1,11 @@
fun box(): String {
return Foo().doBar("OK")
}
class Foo() {
val bar : (str : String) -> String = { it }
fun doBar(str : String): String {
return bar(str);
}
}
@@ -0,0 +1,6 @@
class T(val f : () -> Any?) {
fun call() : Any? = f()
}
fun box(): String {
return T({ "OK" }).call() as String
}
@@ -0,0 +1,15 @@
class Foo(
var state : Int,
val f : (Int) -> Int){
fun next() : Int {
val nextState = f(state)
state = nextState
return state
}
}
fun box(): String {
val f = Foo(23, {x -> 2 * x})
return if (f.next() == 46) "OK" else "fail"
}
@@ -0,0 +1,11 @@
class Greeter(var name : String) {
fun greet() {
name = name.plus("")
System.out?.println("Hello, $name");
}
}
fun box() : String {
Greeter("OK").greet()
return "OK"
}
@@ -0,0 +1,14 @@
class MyList<T>() {
var value: T? = null
fun get(index: Int): T = value!!
fun set(index: Int, value: T) { this.value = value }
}
fun box(): String {
val list = MyList<Int>()
list[17] = 1
list[17] = list[18]++
return "OK"
}
@@ -0,0 +1,20 @@
class Bar {
}
trait Foo {
fun xyzzy(x: Any?): String
}
fun buildFoo(bar: Bar.() -> Unit): Foo {
return object : Foo {
override fun xyzzy(x: Any?): String {
(x as? Bar)?.bar()
return "OK"
}
}
}
fun box(): String {
val foo = buildFoo({})
return foo.xyzzy(Bar())
}
@@ -0,0 +1,8 @@
class A {
public val f : ()->String = {"OK"}
}
fun box(): String {
val a = A()
return a.f() // does not work: (in runtime) ClassCastException: A cannot be cast to jet.Function0
}
@@ -0,0 +1,29 @@
import java.util.*
public inline fun Int.times(body : () -> Unit) {
var count = this;
while (count > 0) {
body()
count--
}
}
fun calc() : Int {
val a = ArrayList<()->Int>()
2.times {
var j = 1
a.add({ j })
++j
}
var sum = 0
for (f in a) {
val g = f as () -> Int
sum += g()
}
return sum
}
fun box() : String {
val x = calc()
return if (x == 4) "OK" else x.toString()
}
@@ -0,0 +1,44 @@
trait A {
fun foo(): Int
}
class B1 : A {
override fun foo() = 10
}
class B2(val z: Int) : A {
override fun foo() = z
}
fun f1(b: B1): Int {
val o = object : A by b { }
return o.foo()
}
fun f2(b: B2): Int {
val o = object : A by B2(b.z) { }
return o.foo()
}
fun f3(b: B2, mult: Int): Int {
val o = object : A by B2(mult * b.z) { }
return o.foo()
}
fun f4(b: B1, x: Int, y: Int, z: Int): Int {
val o = object : A by b {
fun bar() = x + y + z
}
return o.foo()
}
fun box(): String {
if (f1(B1()) != 10) return "fail #1"
if (f2(B2(239)) != 239) return "fail #2"
if (f3(B2(239), 2) != 239*2) return "fail #3"
if (f4(B1(), 1, 2, 3) != 10) return "fail #4"
return "OK"
}
@@ -0,0 +1,8 @@
public open class Test(): java.util.RandomAccess, Cloneable, java.io.Serializable
{
public override fun clone(): Test = Test() // Override 'clone()' with more precise type 'Test'
public override fun toString() = "OK"
}
fun box() = Test().clone().toString()
@@ -0,0 +1,15 @@
class A {
class object {
val b = 0
val c = b
{
val d = b
}
}
}
fun box(): String {
A()
return if (A.c == A.b) "OK" else "Fail"
}
@@ -0,0 +1,35 @@
class JsonObject() {
}
class JsonArray() {
}
public trait Formatter<in IN: Any, out OUT: Any> {
public fun format(source: IN?): OUT
}
public trait MultiFormatter <in IN: Any, out OUT: Any> {
public fun format(source: Collection<IN>): OUT
}
public class Project() {
}
public trait JsonFormatter<in IN: Any>: Formatter<IN, JsonObject>, MultiFormatter<IN, JsonArray> {
public override fun format(source: Collection<IN>): JsonArray {
return JsonArray();
}
}
public class ProjectJsonFormatter(): JsonFormatter<Project> {
public override fun format(source: Project?): JsonObject {
return JsonObject()
}
}
fun box(): String {
val formatter = ProjectJsonFormatter()
return if (formatter.format(Project()) != null) "OK" else "fail"
}
@@ -0,0 +1,19 @@
public trait LoggerAware {
public val logger: StringBuilder
}
public abstract class HttpServer(): LoggerAware {
public fun start() {
logger.append("OK")
}
}
public class MyHttpServer(): HttpServer() {
public override val logger = StringBuilder()
}
fun box(): String {
val server = MyHttpServer()
server.start()
return server.logger.toString()!!
}
@@ -0,0 +1,11 @@
import java.util.AbstractList
class MyList(): AbstractList<String>() {
public fun getModificationCount(): Int = modCount
public override fun get(index: Int): String = ""
public override fun size(): Int = 0
}
fun box(): String {
return if (MyList().getModificationCount() == 0) "OK" else "fail"
}
@@ -0,0 +1,25 @@
import java.util.HashSet
fun box() : String{
val set = HashSet<String>()
set.add("foo")
val t1 = "foo" in set // returns true, valid
if(!t1) return "fail1"
val t2 = "foo" !in set // returns true, invalid
if(t2) return "fail2"
val t3 = "bar" in set // returns false, valid
if(t3) return "fail3"
val t4 = "bar" !in set // return false, invalid
if(!t4) return "fail4"
val t5 = when("foo") {
in set -> true
else -> false
}
if(!t5) return "fail5"
val t6 = when("foo") {
!in set -> true
else -> false
}
if(t6) return "fail6"
return "OK"
}
@@ -0,0 +1,22 @@
package test
trait A {
public val c: String
get() = "OK"
}
trait B {
protected val c: String
}
open class C {
private val c: String = "FAIL"
}
open class D: C(), A, B {
val b = c
}
fun box() : String {
return D().c
}
@@ -0,0 +1,13 @@
fun box() = Class().printSome()
public abstract class AbstractClass<T> {
public fun printSome() : T = some
public abstract val some: T
}
public class Class: AbstractClass<String>() {
public override val some: String
get() = "OK"
}
@@ -0,0 +1,9 @@
public fun box() : String {
if ( 0 == 0 ) { // Does not crash if either this...
if ( 0 == 0 ) { // ...or this is changed to if ( true )
// Does not crash if the following is uncommented.
//println("foo")
}
}
return "OK"
}
@@ -0,0 +1,12 @@
fun f1(a : Any?) {}
fun f2(a : Boolean?) {}
fun f3(a : Any) {}
fun f4(a : Boolean) {}
fun box() : String {
f1(1 == 1)
f2(1 == 1)
f3(1 == 1)
f4(1 == 1)
return "OK"
}
@@ -0,0 +1,13 @@
package x
class Outer() {
class object {
class Inner() {
}
}
}
fun box (): String {
val inner = Outer.Inner()
return "OK"
}
@@ -0,0 +1,15 @@
package foo
trait B {
val c: Int
get() = 2
}
class A(val b: B) : B by b {
override val c: Int = 3
}
fun box(): String {
val c = A(object: B {}).c
return if (c == 3) "OK" else "fail: $c"
}
@@ -0,0 +1,15 @@
open class A {
open fun foo() = "OK"
}
open class B : A() {
override fun foo() = super.foo()
}
trait I
class C : I, B() {
override fun foo() = super<B>.foo()
}
fun box() = C().foo()
@@ -0,0 +1,17 @@
open class A {
open val foo: String = "OK"
}
open class B : A() {
inner class E {
val foo: String = super<A>@B.foo
}
}
class C : B() {
inner class D {
val foo: String = super<B>@C.foo
}
}
fun box() = C().foo
@@ -0,0 +1,9 @@
fun box() : String {
val o = object {
inner class C {
fun foo() = "OK"
}
}
return o.C().foo()
}
@@ -0,0 +1,10 @@
package example2
fun box() = Context.OsType.OK.toString()
object Context
{
public enum class OsType {
WIN2000; WINDOWS; MACOSX; LINUX; OTHER; OK
}
}
@@ -0,0 +1,15 @@
class IntRange {
fun contains(a: Int) = (1..2).contains(a)
}
class C() {
fun rangeTo(i: Int) = IntRange()
}
fun box(): String {
if (2 in C()..2) {
2 == 2
}
return "OK"
}
@@ -0,0 +1,12 @@
trait Trait {
fun foo() = "O"
fun toString() = "K"
}
class SimpleClass : Trait
class ComplexClass : Trait by SimpleClass() {
override fun toString() = foo() + super.toString()
}
fun box() = ComplexClass().toString()
@@ -0,0 +1,24 @@
import java.util.ArrayList
fun launch(f : () -> Unit) {
f()
}
fun box(): String {
val list = ArrayList<Int>()
val foo : () -> Unit = {
list.add(2) //first exception
}
foo()
launch({
list.add(3)
})
val bar = {
val x = 1 //second exception
}
bar()
return if (list.size() == 2 && list.get(0) == 2 && list.get(1) == 3) "OK" else "fail"
}
@@ -0,0 +1,5 @@
fun box(): String {
var s1 = (@l1 "s")
val s2 = (@l2 if (@l3 true) s1 else null)
return if (s2 == "s") "OK" else "fail"
}
@@ -0,0 +1,110 @@
class MyNumber(val i: Int) {
fun inc(): MyNumber = MyNumber(i+1)
}
class MNR(var ref: MyNumber) {}
fun test1() : Boolean {
var m = MyNumber(42)
m++
if (m.i != 43) return false
return true
}
fun test2() : Boolean {
var m = MyNumber(44)
var m2 = m++
if (m2.i != 44) return false
if (m.i != 45) return false
return true
}
fun test3() : Boolean {
var mnr = MNR(MyNumber(42))
mnr.ref++
if (mnr.ref.i != 43) return false
return true
}
fun test4() : Boolean {
var mnr = MNR(MyNumber(42))
val m3 = mnr.ref++
if (m3.i != 42) return false
return true
}
fun test5() : Boolean {
var mnr = Array<MyNumber>(2,{MyNumber(42)})
mnr[0]++
if (mnr[0].i != 43) return false
return true
}
fun test6() : Boolean {
var mnr = Array<MyNumber>(2,{it -> MyNumber(42-it)})
mnr[1] = mnr[0]++
if (mnr[0].i != 43) return false
if (mnr[1].i != 42) return false
return true
}
// ArrayList without jdk-annotations cannot be used in these tests
class MyArrayList<T>() {
private var value17: T? = null
private var value39: T? = null
fun get(index: Int): T {
if (index == 17) return value17!!
if (index == 39) return value39!!
throw Exception()
}
fun set(index: Int, value: T): T? {
if (index == 17) value17 = value
else if (index == 39) value39 = value
else throw Exception()
return null
}
}
fun test7() : Boolean {
var mnr = MyArrayList<MyNumber>()
mnr[17] = MyNumber(42)
mnr[17]++
if (mnr[17].i != 43) return false
return true
}
fun test8() : Boolean {
var mnr = MyArrayList<MyNumber>()
mnr[17] = MyNumber(42)
mnr[39] = mnr[17]++
if (mnr[17].i != 43) return false
if (mnr[39].i != 42) return false
return true
}
fun box() : String {
var m = MyNumber(42)
if (!test1()) return "fail test 1"
if (!test2()) return "fail test 2"
if (!test3()) return "fail test 3"
if (!test4()) return "fail test 4"
if (!test5()) return "fail test 5"
if (!test6()) return "fail test 6"
if (!test7()) return "fail test 7"
if (!test8()) return "fail test 8"
++m
if (m.i != 43) return "fail 0"
var m1 = ++m
if (m1.i != 44) return "fail 3"
if (m.i != 44) return "fail 4"
return "OK"
}
@@ -0,0 +1,29 @@
class A() {
var xi = 0
var xin : Int? = 0
var xinn : Int? = null
var xl = 0.toLong()
var xln : Long? = 0.toLong()
var xlnn : Long? = null
var xb = 0.toByte()
var xbn : Byte? = 0.toByte()
var xbnn : Byte? = null
var xf = 0.toFloat()
var xfn : Float? = 0.toFloat()
var xfnn : Float? = null
var xd = 0.toDouble()
var xdn : Double? = 0.toDouble()
var xdnn : Double? = null
var xs = 0.toShort()
var xsn : Short? = 0.toShort()
var xsnn : Short? = null
}
fun box() : String {
return "OK"
}
@@ -0,0 +1,88 @@
fun test1() : Boolean {
try {
return true
} finally {
if(true) // otherwise we wisely have unreachable code
return false
}
}
var x = true
fun test2() : Boolean {
try {
} finally {
x = false;
}
return x
}
fun test3() : Int {
var y = 0
try {
++y
} finally {
++y
}
return y
}
var z = 0
fun test4() : Int {
z = 0
return try {
try {
z++
}
finally {
z++
}
} finally {
++z
}
}
fun test5() : Int {
var x = 0
System.out?.println("test 5")
while(true) {
System.out?.println(x)
try {
if(x < 10)
x++
else
break
}
finally {
x++
}
}
return x
}
fun test6() : Int {
var x = 0
System.out?.println("test 6")
while(x < 10) {
System.out?.println(x)
try {
x++
continue
}
finally {
x++
}
}
return x
}
fun box() : String {
if(test1()) return "test1 failed"
if(test2()) return "test2 failed"
if(test3() != 2) return "test3 failed"
System.out?.println(test4())
if(test4() != 0) return "test4 failed"
if(test5() != 11) return "test5 failed"
if(test6() != 10) return "test6 failed"
return "OK"
}
@@ -0,0 +1,30 @@
var GUEST_USER_ID = 3
val USER_ID =
try {
getUserIdFromEnvironment()
}
catch (e : UnsupportedOperationException) {
++GUEST_USER_ID
}
val USER_ID_2 =
try {
getUserIdFromEnvironment()
}
catch (e : UnsupportedOperationException) {
GUEST_USER_ID
}
finally {
GUEST_USER_ID++
}
fun getUserIdFromEnvironment() : Int = throw UnsupportedOperationException()
fun box() : String {
System.out?.println("G: " + GUEST_USER_ID + " U1:" + USER_ID + " U2: " + USER_ID_2)
if(USER_ID != 4) return "test0 failed"
if(USER_ID_2 != 4) return "test2 failed"
if(GUEST_USER_ID != 5) return "test3 failed"
return "OK"
}
@@ -0,0 +1,24 @@
class Reluctant() {
{
throw Exception("I'm not coming out")
}
}
fun p(o : Any?) = System.out?.println(o)
fun test1() : String {
try {
val b = Reluctant()
return "Surprise!"
}
catch (ex : Exception) {
return "I told you so"
}
}
fun box() : String {
if(test1() != "I told you so") return "test1 failed"
return "OK"
}
@@ -0,0 +1,15 @@
import java.util.HashMap
import java.io.*
fun <K, V> MutableMap<K, V>.set(key : K, value : V) = put(key, value)
fun box() : String {
val commands : MutableMap<String, String> = HashMap()
commands["c1"] = "239"
if(commands["c1"] != "239") return "fail"
commands["c1"] += "932"
return if(commands["c1"] == "239932") "OK" else "fail"
}
@@ -0,0 +1,17 @@
package mult_constructors_3_bug
public open class Identifier() {
private var myNullable : Boolean = true
class object {
open public fun init(isNullable : Boolean) : Identifier {
val __ = Identifier()
__.myNullable = isNullable
return __
}
}
}
fun box() : String {
Identifier.init(true)
return "OK"
}
@@ -0,0 +1,26 @@
class mInt(val i : Int) {
fun toString() : String = "mint: $i"
fun plus(i : Int) = mInt(this.i + i)
fun inc() = mInt(i + 1)
}
class MyArray() {
val a = Array<mInt>(10, {mInt(0)})
fun get(i : mInt) : mInt = a[i.i]
fun set(i : mInt, v : mInt) {
a[i.i] = v
}
}
fun box() : String {
val a = MyArray()
var i = mInt(0)
System.out?.println(i)
a[i++]// = mInt(1)
System.out?.println(i)
a[i++] = mInt(1)
System.out?.println(i)
for (i in 0..9)
System.out?.println("ar: ${a[mInt(i)]}")
return "OK"
}
@@ -0,0 +1,9 @@
class List<T>(val head: T, val tail: List<T>? = null)
fun <T> List<T>.mapHead(f: (T)-> T): List<T> = List<T>(f(head), null)
fun box() : String {
val a: Int = List<Int>(1).mapHead{it * 2}.head
System.out?.println(a)
return "OK"
}
@@ -0,0 +1,8 @@
fun Int?.inc() : Int { if (this != null) return this.inc() else throw NullPointerException() }
public fun box() : String {
var i : Int? = 10
val j = i++
return if(j==10 && 11 == i) "OK" else "fail"
}
@@ -0,0 +1,8 @@
fun Int?.inc() = this!!.inc()
public fun box() : String {
var i : Int? = 10
val j = i++
return if(j==10 && 11 == i) "OK" else "fail"
}
@@ -0,0 +1,25 @@
import java.util.ArrayList
fun Int.plus(a: Int?) = this + a!!
public open class PerfectNumberFinder() {
open public fun isPerfect(number : Int) : Boolean {
var factors : MutableList<Int?> = ArrayList<Int?>()
factors?.add(1)
factors?.add(number)
for (i in 2..(Math.sqrt((number).toDouble()) - 1).toInt())
if (((number % i) == 0)) {
factors?.add(i)
if (((number / i) != i))
factors?.add((number / i))
}
var sum : Int = 0
for (i : Int? in factors)
sum += i
return ((sum - number) == number)
}
}
fun box () = if (PerfectNumberFinder().isPerfect(28)) "OK" else "fail"
@@ -0,0 +1,17 @@
import java.util.*
fun box() : String {
val w = object : Comparator<String?> {
override fun compare(o1 : String?, o2 : String?) : Int {
val l1 : Int = o1?.length ?: 0
val l2 = o2?.length ?: 0
return l1 - l2
}
override fun equals(obj: Any?): Boolean = obj === this
}
w.compare("aaa", "bbb")
return "OK"
}
@@ -0,0 +1,12 @@
class Outer() {
inner class Inner() {
val outer: Outer get() = this@Outer
}
public val x : Inner = Inner()
}
fun box() : String {
val o = Outer()
return if (o === o.x.outer) "OK" else "fail"
}
@@ -0,0 +1,25 @@
import java.util.*
class ArrayWrapper<T>() {
val contents = ArrayList<T>()
fun add(item: T) {
contents.add(item)
}
fun plus(b: ArrayWrapper<T>): ArrayWrapper<T> {
val result = ArrayWrapper<T>()
result.contents.addAll(contents)
result.contents.addAll(b.contents)
return result
}
}
fun box(): String {
val v1 = ArrayWrapper<String>()
val v2 = ArrayWrapper<String>()
v1.add("foo")
v2.add("bar")
val v3 = v1 + v2
return if (v3.contents.size() == 2) "OK" else "fail"
}
@@ -0,0 +1,26 @@
import java.util.*
class ArrayWrapper<T>() {
val contents = ArrayList<T>()
fun add(item: T) {
contents.add(item)
}
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,30 @@
import java.util.*
class ArrayWrapper<T>() {
val contents = ArrayList<T>()
fun add(item: T) {
contents.add(item)
}
fun plus(rhs: ArrayWrapper<T>): ArrayWrapper<T> {
val result = ArrayWrapper<T>()
result.contents.addAll(contents)
result.contents.addAll(rhs.contents)
return result
}
fun get(index: Int): T {
return contents.get(index)!!
}
}
fun box(): String {
var v1 = ArrayWrapper<String>()
val v2 = ArrayWrapper<String>()
v1.add("foo")
val v3 = v1
v2.add("bar")
v1 += v2
return if (v1.contents.size() == 2 && v3.contents.size() == 1) "OK" else "fail"
}
@@ -0,0 +1,30 @@
import java.util.*
class ArrayWrapper<T>() {
val contents = ArrayList<T>()
fun add(item: T) {
contents.add(item)
}
fun plus(rhs: ArrayWrapper<T>): ArrayWrapper<T> {
val result = ArrayWrapper<T>()
result.contents.addAll(contents)
result.contents.addAll(rhs.contents)
return result
}
fun get(index: Int): T {
return contents.get(index)!!
}
}
fun box(): String {
var v1 = ArrayWrapper<String>()
val v2 = ArrayWrapper<String>()
v1.add("foo")
val v3 = v1
v2.add("bar")
v1 += v2
return if (v1.contents.size() == 2 && v3.contents.size() == 1) "OK" else "fail"
}
@@ -0,0 +1,28 @@
import java.util.*
class ArrayWrapper<T>() {
val contents = ArrayList<T>()
fun add(item: T) {
contents.add(item)
}
fun minus(): ArrayWrapper<T> {
val result = ArrayWrapper<T>()
result.contents.addAll(contents)
Collections.reverse(result.contents)
return result
}
fun get(index: Int): T {
return contents.get(index)!!
}
}
fun box(): String {
val v1 = ArrayWrapper<String>()
v1.add("foo")
v1.add("bar")
val v2 = -v1
return if (v2[0] == "bar" && v2[1] == "foo") "OK" else "fail"
}
@@ -0,0 +1,31 @@
class C {
private fun String.ext() : String = ""
private fun f() {}
public fun foo() : String {
{
"".ext()
f()
}.invoke()
object : Runnable {
public override fun run() {
"".ext()
f()
}
}.run()
Inner().innerFun()
return "OK"
}
private inner class Inner() {
fun innerFun() {
"".ext()
f()
}
}
}
fun box() = C().foo()
@@ -0,0 +1,27 @@
class C{
private var v : Int = 0
public fun foo() : Int {
{
v = v + 1
}.invoke()
object : Runnable {
public override fun run() {
v = v + 1
}
}.run()
Inner().innerFun()
return v
}
private inner class Inner() {
fun innerFun() {
v = v + 1
}
}
}
fun box() = if (C().foo() == 3) "OK" else "NOT OK"
@@ -0,0 +1,33 @@
open class Base() {
val plain = 239
public val read : Int
get() = 239
public var readwrite : Int = 0
get() = $readwrite + 1
set(n : Int) {
$readwrite = n
}
}
trait Abstract {}
class Derived1() : Base(), Abstract {}
class Derived2() : Abstract, Base() {}
fun code(s : Base) : Int {
if (s.plain != 239) return 1
if (s.read != 239) return 2
s.readwrite = 238
if (s.readwrite != 239) return 3
return 0
}
fun test(s : Base) : Boolean = code(s) == 0
fun box() : String {
if (!test(Base())) return "Fail #1"
if (!test(Derived1())) return "Fail #2"
if (!test(Derived2())) return "Fail #3"
return "OK"
}
@@ -0,0 +1,16 @@
class Outer() {
val s = "xyzzy"
open inner class InnerBase(public val name: String) {
}
inner class InnerDerived(): InnerBase(s) {
}
val x = InnerDerived()
}
fun box() : String {
val o = Outer()
return if (o.x.name != "xyzzy") "fail" else "OK"
}
@@ -0,0 +1,75 @@
fun box() : String {
if (!B().test()) return "fail 1";
if (!D().test()) return "fail 2"
if (!F().test()) return "fail 3"
if (!L().test()) return "fail 4"
if (!H().test()) return "fail 5"
if (!N().test()) return "fail 6"
return "OK"
}
class A {
fun foo() = 1
}
class B {
fun foo() = 2
fun A.bar() = foo()
fun test() = A().bar() == 1
}
class C {
fun D.foo() = 2
}
class D {
fun C.foo() = 1
fun C.bar() = foo()
fun test() = C().bar() == 1
}
class E
fun E.foo() = 2
class F {
fun foo() = 1
fun E.bar() = foo()
fun test() = E().bar() == 1
}
class G
fun G.foo() = 2
class H {
fun G.foo() = 1
fun G.bar() = foo()
fun test() = G().bar() == 1
}
class K
class L {
fun K.bar() = foo()
fun test() = K().bar() == 1
}
fun K.foo() = 1
fun L.foo() = 2
class M
class N {
fun foo() = 1
fun M.foo() = 2
fun M.bar() = foo()
fun test() = M().bar() == 1
}
@@ -0,0 +1,20 @@
// Changed when traits were introduced. May not make sense any more
trait Left {}
open class Right() {
open fun f() = 42
}
class D() : Left, Right() {
override fun f() = 239
}
fun box() : String {
val r : Right = Right()
val d : D = D()
if (r.f() != 42) return "Fail #1"
if (d.f() != 239) return "Fail #2"
return "OK"
}
@@ -0,0 +1,10 @@
class B () {}
open class A(val b : B) {
fun a() = object: A(b) {}
}
fun box() : String {
A(B()).a()
return "OK"
}
@@ -0,0 +1,8 @@
class Box<T>(t: T) {
var value = t
}
fun box(): String {
val box: Box<Int> = Box<Int>(1)
return if (box.value == 1) "OK" else "fail"
}
@@ -0,0 +1,31 @@
trait A<T> {
var zzzValue : T
fun zzz() : T
}
class Base<T> : A<T?> {
override var zzzValue : T? = null
override fun zzz() : T? = zzzValue
}
class X : A<String?> by Base<String?>()
fun box() : String {
(Base<String?>() as A<String?>).zzz()
if (X().zzz() != null) {
return "Fail"
}
val x = X()
x.zzzValue = "aa"
if (x.zzzValue != "aa") {
return "Fail 2";
}
if (x.zzz() != "aa") {
return "Fail 3";
}
return "OK"
}