Minor. Add more tests

This commit is contained in:
Ilmir Usmanov
2021-12-28 11:52:26 +01:00
parent c8817893d4
commit cece7120df
274 changed files with 20551 additions and 25 deletions
@@ -0,0 +1,20 @@
// WITH_STDLIB
// WORKS_WHEN_VALUE_CLASS
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter
interface IFoo {
fun getO(): String
val k: String
val ok: String get() = getO() + k
}
OPTIONAL_JVM_INLINE_ANNOTATION
value class InlineFooImpl<T: String>(val s: T): IFoo {
override fun getO(): String = s
override val k: String get() = "K"
}
class Test(s: String) : IFoo by InlineFooImpl(s)
fun box() = Test("O").ok
@@ -0,0 +1,14 @@
// WITH_STDLIB
// WORKS_WHEN_VALUE_CLASS
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter
OPTIONAL_JVM_INLINE_ANNOTATION
value class Wrapper<T: Int>(val id: T)
class DMap(private val map: Map<Wrapper<Int>, String>) :
Map<Wrapper<Int>, String> by map
fun box(): String {
val dmap = DMap(mutableMapOf(Wrapper(42) to "OK"))
return dmap[Wrapper(42)] ?: "Fail"
}
@@ -0,0 +1,42 @@
// WITH_STDLIB
// WORKS_WHEN_VALUE_CLASS
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter
import kotlin.test.assertEquals
OPTIONAL_JVM_INLINE_ANNOTATION
value class S<T: String>(val x: T)
interface IFoo {
val S<String>.extVal: String
}
interface GFoo<T> {
val T.extVal: String
}
object FooImpl : IFoo {
override val S<String>.extVal: String
get() = x
}
object GFooImpl : GFoo<S<String>> {
override val S<String>.extVal: String
get() = x
}
class TestFoo : IFoo by FooImpl
class TestGFoo : GFoo<S<String>> by GFooImpl
fun box(): String {
with(TestFoo()) {
assertEquals("OK", S("OK").extVal)
}
with(TestGFoo()) {
assertEquals("OK", S("OK").extVal)
}
return "OK"
}
@@ -0,0 +1,22 @@
// WITH_STDLIB
// WORKS_WHEN_VALUE_CLASS
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter
import kotlin.test.assertEquals
interface IFoo {
fun foo(s: String): String
}
OPTIONAL_JVM_INLINE_ANNOTATION
value class Z<T: Int>(val x: T) : IFoo {
override fun foo(s: String): String = x.toString() + s
}
class Test(x: Int) : IFoo by Z(x)
fun box(): String {
assertEquals("1OK", Test(1).foo("OK"))
return "OK"
}
@@ -0,0 +1,22 @@
// WITH_STDLIB
// WORKS_WHEN_VALUE_CLASS
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter
import kotlin.test.assertEquals
interface IFoo {
fun foo(s: String): String
}
OPTIONAL_JVM_INLINE_ANNOTATION
value class Z<T: Long>(val x: T) : IFoo {
override fun foo(s: String): String = x.toString() + s
}
class Test(x: Long) : IFoo by Z(x)
fun box(): String {
assertEquals("1OK", Test(1L).foo("OK"))
return "OK"
}
@@ -0,0 +1,45 @@
// WITH_STDLIB
// WORKS_WHEN_VALUE_CLASS
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter
import kotlin.test.assertEquals
OPTIONAL_JVM_INLINE_ANNOTATION
value class S<T: String>(val x: T)
interface IFoo<T> {
fun memberFun(s1: S<String>, s2: String): String
fun memberFunT(x1: T, x2: String): String
fun <X> genericMemberFun(x1: T, x2: X): String
fun S<String>.memberExtFun(s: String): String
fun T.memberExtFunT(x: String): String
fun <X> T.genericMemberExtFun(x: X): String
}
OPTIONAL_JVM_INLINE_ANNOTATION
value class FooImpl(val xs: Array<String>) : IFoo<S<String>> {
override fun memberFun(s1: S<String>, s2: String): String = xs[0] + s1.x + s2
override fun memberFunT(x1: S<String>, x2: String): String = xs[0] + x1.x + x2
override fun <X> genericMemberFun(x1: S<String>, x2: X): String = xs[0] + x1.x + x2.toString()
override fun S<String>.memberExtFun(s: String): String = xs[0] + this.x + s
override fun S<String>.memberExtFunT(x: String): String = xs[0] + this.x + x
override fun <X> S<String>.genericMemberExtFun(x: X): String = xs[0] + this.x + x.toString()
}
class Test : IFoo<S<String>> by FooImpl(arrayOf("1"))
fun box(): String {
val test = Test()
assertEquals("1OK", test.memberFun(S("O"), "K"))
assertEquals("1OK", test.memberFunT(S("O"), "K"))
assertEquals("1OK", test.genericMemberFun(S("O"), "K"))
with(test) {
assertEquals("1OK", S("O").memberExtFun("K"))
assertEquals("1OK", S("O").memberExtFunT("K"))
assertEquals("1OK", S("O").genericMemberExtFun("K"))
}
return "OK"
}
@@ -0,0 +1,44 @@
// WITH_STDLIB
// WORKS_WHEN_VALUE_CLASS
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter
import kotlin.test.assertEquals
OPTIONAL_JVM_INLINE_ANNOTATION
value class S<T: String>(val x: T)
interface IFoo<T> {
fun memberFun(s1: S<String>, s2: String): String
fun memberFunT(x1: T, x2: String): String
fun <X> genericMemberFun(x1: T, x2: X): String
fun S<String>.memberExtFun(s: String): String
fun T.memberExtFunT(x: String): String
fun <X> T.genericMemberExtFun(x: X): String
}
object FooImpl : IFoo<S<String>> {
override fun memberFun(s1: S<String>, s2: String): String = s1.x + s2
override fun memberFunT(x1: S<String>, x2: String): String = x1.x + x2
override fun <X> genericMemberFun(x1: S<String>, x2: X): String = x1.x + x2.toString()
override fun S<String>.memberExtFun(s: String): String = this.x + s
override fun S<String>.memberExtFunT(x: String): String = this.x + x
override fun <X> S<String>.genericMemberExtFun(x: X): String = this.x + x.toString()
}
class Test : IFoo<S<String>> by FooImpl
fun box(): String {
val test = Test()
assertEquals("OK", test.memberFun(S("O"), "K"))
assertEquals("OK", test.memberFunT(S("O"), "K"))
assertEquals("OK", test.genericMemberFun(S("O"), "K"))
with(test) {
assertEquals("OK", S("O").memberExtFun("K"))
assertEquals("OK", S("O").memberExtFunT("K"))
assertEquals("OK", S("O").genericMemberExtFun("K"))
}
return "OK"
}