tests: Update external tests (1.1.2-dev-393)

This commit is contained in:
Ilya Matveev
2017-03-13 12:38:08 +03:00
committed by ilmat192
parent ac56fccb15
commit bc074e6d39
3178 changed files with 22396 additions and 696 deletions
@@ -0,0 +1,17 @@
// IGNORE_BACKEND: NATIVE
class N() : ArrayList<Any>() {
override fun add(el: Any) : Boolean {
if (!super<ArrayList>.add(el)) {
throw Exception()
}
return false
}
}
fun box(): String {
val n = N()
if (n.add("239")) return "fail"
if (n.get(0) == "239") return "OK";
return "fail";
}
@@ -0,0 +1,14 @@
interface Tr {
fun extra() : String = "_"
}
class N() : Tr {
override fun extra() : String = super<Tr>.extra() + super<Tr>.extra()
}
fun box(): String {
val n = N()
if (n.extra() == "__") return "OK"
return "fail";
}
@@ -0,0 +1,24 @@
open class M() {
open var b: Int = 0
}
class N() : M() {
val a : Int
get() {
super.b = super.b + 1
return super.b + 1
}
override var b: Int = a + 1
val superb : Int
get() = super.b
}
fun box(): String {
val n = N()
n.a
n.b
n.superb
if (n.b == 3 && n.a == 4 && n.superb == 3) return "OK";
return "fail";
}
@@ -0,0 +1,31 @@
interface BK {
fun x() : Int = 50
}
interface K : BK {
override fun x() : Int = super.x() * 2
}
open class M() {
open fun x() : Int = 10
}
open class N() : M(), K {
override fun x() : Int = 20
open inner class C() : K {
fun test1() = x()
fun test2() = super<M>@N.x()
fun test3() = super<K>@N.x()
fun test4() = super<K>.x()
}
}
fun box(): String {
if (N().C().test1() != 100) return "test1 fail";
if (N().C().test2() != 10) return "test2 fail";
if (N().C().test3() != 100) return "test3 fail";
if (N().C().test4() != 100) return "test4 fail";
return "OK";
}
@@ -0,0 +1,22 @@
open class M() {
open var y = 500
}
open class N() : M() {
override var y = 200
open inner class C() {
fun test5() = y
fun test6() : Int {
super<M>@N.y += 200
return super<M>@N.y
}
}
}
fun box(): String {
if (N().C().test5() != 200) return "test5 fail";
if (N().C().test6() != 700) return "test6 fail";
return "OK";
}
@@ -0,0 +1,38 @@
interface BK {
fun foo(): String
fun bar(): String
}
interface K : BK {
override fun foo() = bar()
}
class A : K {
override fun foo() = "A.foo"
override fun bar() = "A.bar"
inner class B : K {
override fun foo() = "B.foo"
override fun bar() = "B.bar"
fun test1() = super<K>@A.foo()
fun test2() = super<K>@B.foo()
fun test3() = super<K>.foo()
fun test4() = super@A.foo()
fun test5() = super@B.foo()
fun test6() = super.foo()
}
}
fun box(): String {
val b = A().B()
if (b.test1() != "A.bar") return "test1 ${b.test1()}"
if (b.test2() != "B.bar") return "test2 ${b.test2()}"
if (b.test3() != "B.bar") return "test3 ${b.test3()}"
if (b.test4() != "A.bar") return "test4 ${b.test4()}"
if (b.test5() != "B.bar") return "test5 ${b.test5()}"
if (b.test6() != "B.bar") return "test6 ${b.test6()}"
return "OK"
}
@@ -0,0 +1,44 @@
//inspired by kt3492
interface BK {
fun foo(): String
fun bar(): String
}
interface KTrait: BK {
override fun foo() = bar()
}
open abstract class K : KTrait {
}
class A : K() {
override fun foo() = "A.foo"
override fun bar() = "A.bar"
inner class B : K() {
override fun foo() = "B.foo"
override fun bar() = "B.bar"
fun test1() = super<K>@A.foo()
fun test2() = super<K>@B.foo()
fun test3() = super<K>.foo()
fun test4() = super@A.foo()
fun test5() = super@B.foo()
fun test6() = super.foo()
}
}
fun box(): String {
val b = A().B()
if (b.test1() != "A.bar") return "test1 ${b.test1()}"
if (b.test2() != "B.bar") return "test2 ${b.test2()}"
if (b.test3() != "B.bar") return "test3 ${b.test3()}"
if (b.test4() != "A.bar") return "test4 ${b.test4()}"
if (b.test5() != "B.bar") return "test5 ${b.test5()}"
if (b.test6() != "B.bar") return "test6 ${b.test6()}"
return "OK"
}
@@ -0,0 +1,38 @@
interface Base {
val foo: String
fun bar(): String
}
abstract class K : Base {
override val foo = bar()
}
class A : K() {
override val foo = "A.foo"
override fun bar() = "A.bar"
inner class B : K() {
override val foo = "B.foo"
override fun bar() = "B.bar"
fun test1() = super<K>@A.foo
fun test2() = super<K>@B.foo
fun test3() = super<K>.foo
fun test4() = super@A.foo
fun test5() = super@B.foo
fun test6() = super.foo
}
}
fun box(): String {
val b = A().B()
if (b.test1() != "A.bar") return "test1 ${b.test1()}"
if (b.test2() != "B.bar") return "test2 ${b.test2()}"
if (b.test3() != "B.bar") return "test3 ${b.test3()}"
if (b.test4() != "A.bar") return "test4 ${b.test4()}"
if (b.test5() != "B.bar") return "test5 ${b.test5()}"
if (b.test6() != "B.bar") return "test6 ${b.test6()}"
return "OK"
}
@@ -0,0 +1,43 @@
//inspired by kt3492
interface Base {
val foo: String
fun bar(): String
}
abstract class KWithOverride : Base {
override val foo = bar()
}
abstract class K : KWithOverride() {
}
class A : K() {
override val foo = "A.foo"
override fun bar() = "A.bar"
inner class B : K() {
override val foo = "B.foo"
override fun bar() = "B.bar"
fun test1() = super<K>@A.foo
fun test2() = super<K>@B.foo
fun test3() = super<K>.foo
fun test4() = super@A.foo
fun test5() = super@B.foo
fun test6() = super.foo
}
}
fun box(): String {
val b = A().B()
if (b.test1() != "A.bar") return "test1 ${b.test1()}"
if (b.test2() != "B.bar") return "test2 ${b.test2()}"
if (b.test3() != "B.bar") return "test3 ${b.test3()}"
if (b.test4() != "A.bar") return "test4 ${b.test4()}"
if (b.test5() != "B.bar") return "test5 ${b.test5()}"
if (b.test6() != "B.bar") return "test6 ${b.test6()}"
return "OK"
}
@@ -0,0 +1,46 @@
interface T {
open fun baz(): String = "T.baz"
}
open class A {
open val foo: String = "OK"
open fun bar(): String = "OK"
open fun boo(): String = "OK"
}
open class B : A(), T {
override fun bar(): String = "B"
override fun baz(): String = "B.baz"
inner class E {
val foo: String = super<A>@B.foo
fun bar() = super<A>@B.bar() + super@B.bar() + super@B.baz()
}
}
class C : B() {
override fun bar(): String = "C"
override fun boo(): String = "C"
inner class D {
val foo: String = super<B>@C.foo
fun bar() = super<B>@C.bar() + super<B>@C.boo()
}
}
fun box(): String {
var r = ""
r = B().E().foo
if (r != "OK") return "fail 1; r = $r"
r = ""
r = B().E().bar()
if (r != "OKOKT.baz") return "fail 2; r = $r"
r = ""
r = C().D().foo
if (r != "OK") return "fail 3; r = $r"
r = ""
r = C().D().bar()
if (r != "BOK") return "fail 4; r = $r"
return "OK"
}
@@ -0,0 +1,45 @@
interface T {
open val baz: String
get() = "T.baz"
}
open class A {
open val bar: String
get() = "OK"
open val boo: String
get() = "OK"
}
open class B : A(), T {
override val bar: String
get() = "B"
override val baz: String
get() = "B.baz"
inner class E {
val bar: String
get() = super<A>@B.bar + super@B.bar + super@B.baz
}
}
class C : B() {
override val bar: String
get() = "C"
override val boo: String
get() = "C"
inner class D {
val bar: String
get() = super<B>@C.bar + super<B>@C.boo
}
}
fun box(): String {
var r = ""
r = B().E().bar
if (r != "OKOKT.baz") return "fail 1; r = $r"
r = C().D().bar
if (r != "BOK") return "fail 2; r = $r"
return "OK"
}
@@ -0,0 +1,18 @@
interface Z<T> {
fun test(p: T): T {
return p
}
}
open class ZImpl : Z<String>
class ZImpl2 : ZImpl() {
override fun test(p: String): String {
return super.test(p)
}
}
fun box(): String {
return ZImpl2().test("OK")
}
@@ -0,0 +1,20 @@
interface Z<T> {
fun test(p: T): T {
return p
}
}
open class ZImpl : Z<String>
open class ZImpl2 : Z<String>, ZImpl()
class ZImpl3 : ZImpl2() {
override fun test(p: String): String {
return super.test(p)
}
}
fun box(): String {
return ZImpl3().test("OK")
}
@@ -0,0 +1,20 @@
open class Z<T, Y> {
open fun test(p: T, z: Y): T {
return p
}
}
open class ZImpl<X> : Z<String, X>()
open class ZImpl2 : ZImpl<String>()
class ZImpl3 : ZImpl2() {
override fun test(p: String, z: String): String {
return super.test(p, z)
}
}
fun box(): String {
return ZImpl3().test("OK", "fail")
}
@@ -0,0 +1,21 @@
interface Z<T> {
val value: T
val z: T
get() = value
}
open class ZImpl : Z<String> {
override val value: String
get() = "OK"
}
open class ZImpl2 : ZImpl() {
override val z: String
get() = super.z
}
fun box(): String {
return ZImpl2().value
}
@@ -0,0 +1,19 @@
open class A {
open fun foo2(): String = "OK"
}
open class B : A() {
}
class C : B() {
inner class D {
val foo: String = super<B>@C.foo2()
}
}
fun box() : String {
val obj = C().D();
return obj.foo
}
@@ -0,0 +1,15 @@
open class A {
open val foo: String = "OK"
}
open class B : A() {
}
class C : B() {
inner class D {
val foo: String = super<B>@C.foo
}
}
fun box() = C().D().foo
@@ -0,0 +1,19 @@
interface ATrait {
open fun foo2(): String = "OK"
}
open class B : ATrait {
}
class C : B() {
inner class D {
val foo: String = super<B>@C.foo2()
}
}
fun box() : String {
val obj = C().D();
return obj.foo
}
@@ -0,0 +1,16 @@
interface A {
open val foo: String
get() = "OK"
}
open class B : A {
}
class C : B() {
inner class D {
val foo: String = super<B>@C.foo
}
}
fun box() = C().D().foo
@@ -0,0 +1,18 @@
open class C(val f: () -> Unit) {
fun test() {
f()
}
}
class B(var x: Int) {
fun foo() {
object : C({x = 3}) {}.test()
}
}
fun box() : String {
val b = B(1)
b.foo()
return if (b.x != 3) "fail: b.x = ${b.x}" else "OK"
}
@@ -0,0 +1,20 @@
open class X(var s: ()-> Unit)
open class C(val f: X) {
fun test() {
f.s()
}
}
class B(var x: Int) {
fun foo() {
object : C(object: X({x = 3}) {}) {}.test()
}
}
fun box() : String {
val b = B(1)
b.foo()
return if (b.x != 3) "fail: b.x = ${b.x}" else "OK"
}
@@ -0,0 +1,27 @@
open class C(s: Int) {
fun test() {
}
}
class B(var x: Int) {
fun foo() {
class A(val a: Int) : C({a}()) {
}
A(11).test()
class B(val a: Int) : C(a) {
}
B(11).test()
}
}
fun box() : String {
val b = B(1)
b.foo()
return "OK"
}
@@ -0,0 +1,21 @@
abstract class WaitFor {
init {
condition()
}
abstract fun condition() : Boolean;
}
fun box(): String {
val local = ""
var result = "fail"
val s = object: WaitFor() {
override fun condition(): Boolean {
result = "OK"
return result.length== 2
}
}
return result;
}
@@ -0,0 +1,13 @@
interface T1 {
fun foo() = "O"
}
interface T2 {
fun foo() = "K"
}
class A : T1, T2 {
override fun foo() = super<T1>.foo() + super<T2>.foo()
}
fun box() = A().foo()
@@ -0,0 +1,31 @@
interface M {
var backingB : Int
var b : Int
get() = backingB
set(value: Int) {
backingB = value
}
}
class N() : M {
public override var backingB : Int = 0
val a : Int
get() {
super.b = super.b + 1
return super.b + 1
}
override var b: Int = a + 1
val superb : Int
get() = super.b
}
fun box(): String {
val n = N()
n.a
n.b
n.superb
if (n.b == 3 && n.a == 4 && n.superb == 3) return "OK";
return "fail";
}
@@ -0,0 +1,66 @@
open class Base() {
open fun baseFun(): String = "Base.baseFun()"
open fun unambiguous(): String = "Base.unambiguous()"
open val baseProp: String
get() = "Base.baseProp"
}
interface Interface {
fun interfaceFun(): String = "Interface.interfaceFun()"
fun unambiguous(): String // NB abstract
}
interface AnotherInterface
interface DerivedInterface: Interface, AnotherInterface {
override fun interfaceFun(): String = "DerivedInterface.interfaceFun()"
override fun unambiguous(): String = "DerivedInterface.unambiguous()"
fun callsFunFromSuperInterface(): String = super.interfaceFun()
}
class Derived : Base(), Interface {
override fun baseFun(): String = "Derived.baseFun()"
override fun unambiguous(): String = "Derived.unambiguous()"
override fun interfaceFun(): String = "Derived.interfaceFun()"
override val baseProp: String
get() = "Derived.baseProp"
fun callsBaseFun(): String = super.baseFun()
fun callsUnambiguousFun(): String = super.unambiguous()
fun getsBaseProp(): String = super.baseProp
fun callsInterfaceFun(): String = super.interfaceFun()
}
fun box(): String {
val d = Derived()
val test1 = d.callsBaseFun()
if (test1 != "Base.baseFun()") return "Failed: d.callsBaseFun()==$test1"
val test2 = d.callsUnambiguousFun()
if (test2 != "Base.unambiguous()") return "Failed: d.callsUnambiguousFun()==$test2"
val test3 = d.getsBaseProp()
if (test3 != "Base.baseProp") return "Failed: d.getsBaseProp()==$test3"
val test4 = d.callsInterfaceFun()
if (test4 != "Interface.interfaceFun()") return "Failed: d.callsInterfaceFun()==$test4"
val di = object : DerivedInterface {}
val test5 = di.callsFunFromSuperInterface()
if (test5 != "Interface.interfaceFun()") return "Failed: di.callsFunFromSuperInterface()==$test5"
return "OK"
}
@@ -0,0 +1,63 @@
open class DeeperBase {
open fun deeperBaseFun(): String = "DeeperBase.deeperBaseFun()"
open val deeperBaseProp: String
get() = "DeeperBase.deeperBaseProp"
}
open class DeepBase : DeeperBase() {
}
interface DeeperInterface {
fun deeperInterfaceFun(): String = "DeeperInterface.deeperInterfaceFun()"
val deeperInterfaceProp: String
get() = "DeeperInterface.deeperInterfaceProp"
}
interface DeepInterface : DeeperInterface {
fun deepInterfaceFun(): String = "DeepInterface.deepInterfaceFun()"
}
class DeepDerived : DeepBase(), DeepInterface {
override fun deeperBaseFun(): String = "DeepDerived.deeperBaseFun()"
override val deeperBaseProp: String
get() = "DeepDerived.deeperBaseProp"
override fun deeperInterfaceFun(): String = "DeepDerived.deeperInterfaceFun()"
override val deeperInterfaceProp: String
get() = "DeepDerived.deeperInterfaceProp"
override fun deepInterfaceFun(): String = "DeepDerived.deepInterfaceFun()"
fun callsSuperDeeperBaseFun(): String = super.deeperBaseFun()
fun getsSuperDeeperBaseProp(): String = super.deeperBaseProp
fun callsSuperDeepInterfaceFun(): String = super.deepInterfaceFun()
fun callsSuperDeeperInterfaceFun(): String = super.deeperInterfaceFun()
fun getsSuperDeeperInterfaceProp(): String = super.deeperInterfaceProp
}
fun box(): String {
val dd = DeepDerived()
val test1 = dd.callsSuperDeeperBaseFun()
if (test1 != "DeeperBase.deeperBaseFun()") return "Failed: dd.callsSuperDeeperBaseFun()==$test1"
val test2 = dd.getsSuperDeeperBaseProp()
if (test2 != "DeeperBase.deeperBaseProp") return "Failed: dd.getsSuperDeeperBaseProp()==$test2"
val test3 = dd.callsSuperDeepInterfaceFun()
if (test3 != "DeepInterface.deepInterfaceFun()") return "Failed: dd.callsSuperDeepInterfaceFun()==$test3"
val test4 = dd.callsSuperDeeperInterfaceFun()
if (test4 != "DeeperInterface.deeperInterfaceFun()") return "Failed: dd.callsSuperDeeperInterfaceFun()==$test4"
val test5 = dd.getsSuperDeeperInterfaceProp()
if (test5 != "DeeperInterface.deeperInterfaceProp") return "Failed: dd.getsSuperDeeperInterfaceProp()==$test5"
return "OK"
}
@@ -0,0 +1,25 @@
interface ISomething
open class ClassWithToString {
override fun toString(): String = "C"
}
interface IWithToString {
override fun toString(): String
}
class C1 : ClassWithToString(), ISomething {
override fun toString(): String = super.toString()
}
class C2 : ClassWithToString(), IWithToString, ISomething {
override fun toString(): String = super.toString()
}
fun box(): String {
return when {
C1().toString() != "C" -> "Failed #1"
C2().toString() != "C" -> "Failed #2"
else -> "OK"
}
}