Minor. Add more tests
This commit is contained in:
+12
@@ -0,0 +1,12 @@
|
||||
// !JVM_DEFAULT_MODE: all
|
||||
// TARGET_BACKEND: JVM
|
||||
// JVM_TARGET: 1.8
|
||||
// LANGUAGE: +GenericInlineClassParameter
|
||||
|
||||
interface I {
|
||||
fun foo(): A<String> = A("OK")
|
||||
}
|
||||
|
||||
inline class A<T: String>(val x: T): I { }
|
||||
|
||||
fun box() = A("").foo().x
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
// TARGET_BACKEND: JVM
|
||||
// JVM_TARGET: 1.8
|
||||
// LANGUAGE: +GenericInlineClassParameter
|
||||
|
||||
interface I {
|
||||
fun foo(): A<String> = A("OK")
|
||||
}
|
||||
|
||||
inline class A<T: String>(val x: T): I { }
|
||||
|
||||
fun box() = A("").foo().x
|
||||
Vendored
+41
@@ -0,0 +1,41 @@
|
||||
// TARGET_BACKEND: JVM
|
||||
// JVM_TARGET: 1.8
|
||||
// WITH_STDLIB
|
||||
// WORKS_WHEN_VALUE_CLASS
|
||||
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter
|
||||
|
||||
// FILE: javaDefaultMethod.kt
|
||||
|
||||
OPTIONAL_JVM_INLINE_ANNOTATION
|
||||
value class K<T: String>(val k: T) : J {
|
||||
override fun get2() = k
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val k = K("K")
|
||||
|
||||
val test1 = k.get1() + k.get2()
|
||||
if (test1 != "OK") throw AssertionError("test1: $test1")
|
||||
|
||||
val j: J = k
|
||||
val test2 = j.get1() + j.get2()
|
||||
if (test2 != "OK") throw AssertionError("test2: $test2")
|
||||
|
||||
val test3 = JT.test(k)
|
||||
if (test3 != "OK") throw AssertionError("test3: $test3")
|
||||
|
||||
return "OK"
|
||||
}
|
||||
|
||||
// FILE: J.java
|
||||
public interface J {
|
||||
default String get1() { return "O"; }
|
||||
default String get2() { return "Failed"; }
|
||||
}
|
||||
|
||||
// FILE: JT.java
|
||||
public class JT {
|
||||
public static String test(J j) {
|
||||
return j.get1() + j.get2();
|
||||
}
|
||||
}
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
// TARGET_BACKEND: JVM
|
||||
// JVM_TARGET: 1.8
|
||||
// WITH_STDLIB
|
||||
// WORKS_WHEN_VALUE_CLASS
|
||||
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter
|
||||
|
||||
// FILE: javaDefaultMethod.kt
|
||||
interface K2 : J {
|
||||
override fun get2() = "Kotlin"
|
||||
}
|
||||
|
||||
OPTIONAL_JVM_INLINE_ANNOTATION
|
||||
value class K<T: String>(val k: T) : K2 {
|
||||
override fun get2() = k
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val k = K("K")
|
||||
|
||||
val test1 = k.get1() + k.get2()
|
||||
if (test1 != "OK") throw AssertionError("test1: $test1")
|
||||
|
||||
val j: J = k
|
||||
val test2 = j.get1() + j.get2()
|
||||
if (test2 != "OK") throw AssertionError("test2: $test2")
|
||||
|
||||
val test3 = JT.test(k)
|
||||
if (test3 != "OK") throw AssertionError("test3: $test3")
|
||||
|
||||
val k2: K2 = k
|
||||
val test4 = k2.get1() + k2.get2()
|
||||
if (test4 != "OK") throw AssertionError("test4: $test4")
|
||||
|
||||
val test5 = JT.test(k2)
|
||||
if (test5 != "OK") throw AssertionError("test5: $test5")
|
||||
|
||||
return "OK"
|
||||
}
|
||||
|
||||
// FILE: J.java
|
||||
public interface J {
|
||||
default String get1() { return "O"; }
|
||||
default String get2() { return "Java"; }
|
||||
}
|
||||
|
||||
// FILE: JT.java
|
||||
public class JT {
|
||||
public static String test(J j) {
|
||||
return j.get1() + j.get2();
|
||||
}
|
||||
}
|
||||
Vendored
+50
@@ -0,0 +1,50 @@
|
||||
// !JVM_DEFAULT_MODE: all
|
||||
// TARGET_BACKEND: JVM
|
||||
// WITH_STDLIB
|
||||
// JVM_TARGET: 1.8
|
||||
// WORKS_WHEN_VALUE_CLASS
|
||||
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter
|
||||
|
||||
// FILE: jvmDefaultAll.kt
|
||||
|
||||
interface IFooBar {
|
||||
fun foo() = "O"
|
||||
fun bar() = "Failed"
|
||||
}
|
||||
|
||||
interface IFooBar2 : IFooBar
|
||||
|
||||
OPTIONAL_JVM_INLINE_ANNOTATION
|
||||
value class Test1<T: String>(val k: T): IFooBar {
|
||||
override fun bar(): String = k
|
||||
}
|
||||
|
||||
OPTIONAL_JVM_INLINE_ANNOTATION
|
||||
value class Test2<T: String>(val k: T): IFooBar2 {
|
||||
override fun bar(): String = k
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val k = Test1("K")
|
||||
val ik: IFooBar = k
|
||||
val k2 = Test2("K")
|
||||
val ik2: IFooBar = k2
|
||||
val ik3: IFooBar2 = k2
|
||||
|
||||
val test1 = k.foo() + k.bar()
|
||||
if (test1 != "OK") throw AssertionError("test1: $test1")
|
||||
|
||||
val test2 = ik.foo() + ik.bar()
|
||||
if (test2 != "OK") throw AssertionError("test2: $test2")
|
||||
|
||||
val test3 = k2.foo() + k2.bar()
|
||||
if (test3 != "OK") throw AssertionError("test3: $test3")
|
||||
|
||||
val test4 = ik2.foo() + ik2.bar()
|
||||
if (test4 != "OK") throw AssertionError("test4: $test4")
|
||||
|
||||
val test5 = ik3.foo() + ik3.bar()
|
||||
if (test5 != "OK") throw AssertionError("test5: $test5")
|
||||
|
||||
return "OK"
|
||||
}
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
// !JVM_DEFAULT_MODE: all
|
||||
// TARGET_BACKEND: JVM
|
||||
// WITH_STDLIB
|
||||
// JVM_TARGET: 1.8
|
||||
// WORKS_WHEN_VALUE_CLASS
|
||||
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter
|
||||
|
||||
// FILE: jvmDefaultAll.kt
|
||||
|
||||
interface IFooBar {
|
||||
val foo get() = "O"
|
||||
val bar get() = "Failed"
|
||||
}
|
||||
|
||||
interface IFooBar2 : IFooBar
|
||||
|
||||
OPTIONAL_JVM_INLINE_ANNOTATION
|
||||
value class Test1<T: String>(override val bar: T): IFooBar
|
||||
|
||||
OPTIONAL_JVM_INLINE_ANNOTATION
|
||||
value class Test2<T: String>(override val bar: T): IFooBar2
|
||||
|
||||
fun box(): String {
|
||||
val k = Test1("K")
|
||||
val ik: IFooBar = k
|
||||
val k2 = Test2("K")
|
||||
val ik2: IFooBar = k2
|
||||
val ik3: IFooBar2 = k2
|
||||
|
||||
val test1 = k.foo + k.bar
|
||||
if (test1 != "OK") throw AssertionError("test1: $test1")
|
||||
|
||||
val test2 = ik.foo + ik.bar
|
||||
if (test2 != "OK") throw AssertionError("test2: $test2")
|
||||
|
||||
val test3 = k2.foo + k2.bar
|
||||
if (test3 != "OK") throw AssertionError("test3: $test3")
|
||||
|
||||
val test4 = ik2.foo + ik2.bar
|
||||
if (test4 != "OK") throw AssertionError("test4: $test4")
|
||||
|
||||
val test5 = ik3.foo + ik3.bar
|
||||
if (test5 != "OK") throw AssertionError("test5: $test5")
|
||||
|
||||
return "OK"
|
||||
}
|
||||
+52
@@ -0,0 +1,52 @@
|
||||
// !JVM_DEFAULT_MODE: all
|
||||
// TARGET_BACKEND: JVM
|
||||
// WITH_STDLIB
|
||||
// JVM_TARGET: 1.8
|
||||
// WORKS_WHEN_VALUE_CLASS
|
||||
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter
|
||||
|
||||
// FILE: jvmDefaultAll.kt
|
||||
|
||||
interface IFooBar {
|
||||
val foo get() = "O"
|
||||
val bar get() = "Failed"
|
||||
}
|
||||
|
||||
interface IFooBar2 : IFooBar
|
||||
|
||||
OPTIONAL_JVM_INLINE_ANNOTATION
|
||||
value class Test1<T: String>(val k: T): IFooBar {
|
||||
override val bar: String
|
||||
get() = k
|
||||
}
|
||||
|
||||
OPTIONAL_JVM_INLINE_ANNOTATION
|
||||
value class Test2<T: String>(val k: T): IFooBar2 {
|
||||
override val bar: String
|
||||
get() = k
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val k = Test1("K")
|
||||
val ik: IFooBar = k
|
||||
val k2 = Test2("K")
|
||||
val ik2: IFooBar = k2
|
||||
val ik3: IFooBar2 = k2
|
||||
|
||||
val test1 = k.foo + k.bar
|
||||
if (test1 != "OK") throw AssertionError("test1: $test1")
|
||||
|
||||
val test2 = ik.foo + ik.bar
|
||||
if (test2 != "OK") throw AssertionError("test2: $test2")
|
||||
|
||||
val test3 = k2.foo + k2.bar
|
||||
if (test3 != "OK") throw AssertionError("test3: $test3")
|
||||
|
||||
val test4 = ik2.foo + ik2.bar
|
||||
if (test4 != "OK") throw AssertionError("test4: $test4")
|
||||
|
||||
val test5 = ik3.foo + ik3.bar
|
||||
if (test5 != "OK") throw AssertionError("test5: $test5")
|
||||
|
||||
return "OK"
|
||||
}
|
||||
Vendored
+50
@@ -0,0 +1,50 @@
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// TARGET_BACKEND: JVM
|
||||
// WITH_STDLIB
|
||||
// JVM_TARGET: 1.8
|
||||
// WORKS_WHEN_VALUE_CLASS
|
||||
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter
|
||||
|
||||
// FILE: jvmDefaultEnable.kt
|
||||
|
||||
interface IFooBar {
|
||||
@JvmDefault fun foo() = "O"
|
||||
@JvmDefault fun bar() = "Failed"
|
||||
}
|
||||
|
||||
interface IFooBar2 : IFooBar
|
||||
|
||||
OPTIONAL_JVM_INLINE_ANNOTATION
|
||||
value class Test1<T: String>(val k: T): IFooBar {
|
||||
override fun bar(): String = k
|
||||
}
|
||||
|
||||
OPTIONAL_JVM_INLINE_ANNOTATION
|
||||
value class Test2<T: String>(val k: T): IFooBar2 {
|
||||
override fun bar(): String = k
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val k = Test1("K")
|
||||
val ik: IFooBar = k
|
||||
val k2 = Test2("K")
|
||||
val ik2: IFooBar = k2
|
||||
val ik3: IFooBar2 = k2
|
||||
|
||||
val test1 = k.foo() + k.bar()
|
||||
if (test1 != "OK") throw AssertionError("test1: $test1")
|
||||
|
||||
val test2 = ik.foo() + ik.bar()
|
||||
if (test2 != "OK") throw AssertionError("test2: $test2")
|
||||
|
||||
val test3 = k2.foo() + k2.bar()
|
||||
if (test3 != "OK") throw AssertionError("test3: $test3")
|
||||
|
||||
val test4 = ik2.foo() + ik2.bar()
|
||||
if (test4 != "OK") throw AssertionError("test4: $test4")
|
||||
|
||||
val test5 = ik3.foo() + ik3.bar()
|
||||
if (test5 != "OK") throw AssertionError("test5: $test5")
|
||||
|
||||
return "OK"
|
||||
}
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// TARGET_BACKEND: JVM
|
||||
// WITH_STDLIB
|
||||
// JVM_TARGET: 1.8
|
||||
// WORKS_WHEN_VALUE_CLASS
|
||||
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter
|
||||
|
||||
// FILE: jvmDefaultEnable.kt
|
||||
|
||||
interface IFooBar {
|
||||
@JvmDefault val foo get() = "O"
|
||||
@JvmDefault val bar get() = "Failed"
|
||||
}
|
||||
|
||||
interface IFooBar2 : IFooBar
|
||||
|
||||
OPTIONAL_JVM_INLINE_ANNOTATION
|
||||
value class Test1<T: String>(override val bar: T): IFooBar
|
||||
|
||||
OPTIONAL_JVM_INLINE_ANNOTATION
|
||||
value class Test2<T: String>(override val bar: T): IFooBar2
|
||||
|
||||
fun box(): String {
|
||||
val k = Test1("K")
|
||||
val ik: IFooBar = k
|
||||
val k2 = Test2("K")
|
||||
val ik2: IFooBar = k2
|
||||
val ik3: IFooBar2 = k2
|
||||
|
||||
val test1 = k.foo + k.bar
|
||||
if (test1 != "OK") throw AssertionError("test1: $test1")
|
||||
|
||||
val test2 = ik.foo + ik.bar
|
||||
if (test2 != "OK") throw AssertionError("test2: $test2")
|
||||
|
||||
val test3 = k2.foo + k2.bar
|
||||
if (test3 != "OK") throw AssertionError("test3: $test3")
|
||||
|
||||
val test4 = ik2.foo + ik2.bar
|
||||
if (test4 != "OK") throw AssertionError("test4: $test4")
|
||||
|
||||
val test5 = ik3.foo + ik3.bar
|
||||
if (test5 != "OK") throw AssertionError("test5: $test5")
|
||||
|
||||
return "OK"
|
||||
}
|
||||
+52
@@ -0,0 +1,52 @@
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// TARGET_BACKEND: JVM
|
||||
// WITH_STDLIB
|
||||
// JVM_TARGET: 1.8
|
||||
// WORKS_WHEN_VALUE_CLASS
|
||||
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter
|
||||
|
||||
// FILE: jvmDefaultEnable.kt
|
||||
|
||||
interface IFooBar {
|
||||
@JvmDefault val foo get() = "O"
|
||||
@JvmDefault val bar get() = "Failed"
|
||||
}
|
||||
|
||||
interface IFooBar2 : IFooBar
|
||||
|
||||
OPTIONAL_JVM_INLINE_ANNOTATION
|
||||
value class Test1<T: String>(val k: T): IFooBar {
|
||||
override val bar: String
|
||||
get() = k
|
||||
}
|
||||
|
||||
OPTIONAL_JVM_INLINE_ANNOTATION
|
||||
value class Test2<T: String>(val k: T): IFooBar2 {
|
||||
override val bar: String
|
||||
get() = k
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val k = Test1("K")
|
||||
val ik: IFooBar = k
|
||||
val k2 = Test2("K")
|
||||
val ik2: IFooBar = k2
|
||||
val ik3: IFooBar2 = k2
|
||||
|
||||
val test1 = k.foo + k.bar
|
||||
if (test1 != "OK") throw AssertionError("test1: $test1")
|
||||
|
||||
val test2 = ik.foo + ik.bar
|
||||
if (test2 != "OK") throw AssertionError("test2: $test2")
|
||||
|
||||
val test3 = k2.foo + k2.bar
|
||||
if (test3 != "OK") throw AssertionError("test3: $test3")
|
||||
|
||||
val test4 = ik2.foo + ik2.bar
|
||||
if (test4 != "OK") throw AssertionError("test4: $test4")
|
||||
|
||||
val test5 = ik3.foo + ik3.bar
|
||||
if (test5 != "OK") throw AssertionError("test5: $test5")
|
||||
|
||||
return "OK"
|
||||
}
|
||||
Vendored
+19
@@ -0,0 +1,19 @@
|
||||
// !JVM_DEFAULT_MODE: all
|
||||
// TARGET_BACKEND: JVM
|
||||
// WITH_STDLIB
|
||||
// JVM_TARGET: 1.8
|
||||
// WORKS_WHEN_VALUE_CLASS
|
||||
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter
|
||||
|
||||
class Cell<T>(val x: T)
|
||||
|
||||
interface IOk {
|
||||
fun ok(): String = "OK"
|
||||
}
|
||||
|
||||
OPTIONAL_JVM_INLINE_ANNOTATION
|
||||
value class InlineClass<T: String>(val s: T) : IOk
|
||||
|
||||
fun test(cell: Cell<InlineClass<String>>): String = cell.x.ok()
|
||||
|
||||
fun box() = test(Cell(InlineClass("FAIL")))
|
||||
compiler/testData/codegen/box/inlineClasses/jvm8DefaultInterfaceMethods/jvmDefaultSafeCallGeneric.kt
Vendored
+17
@@ -0,0 +1,17 @@
|
||||
// !JVM_DEFAULT_MODE: all
|
||||
// TARGET_BACKEND: JVM
|
||||
// WITH_STDLIB
|
||||
// JVM_TARGET: 1.8
|
||||
// WORKS_WHEN_VALUE_CLASS
|
||||
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter
|
||||
|
||||
interface IOk {
|
||||
fun ok(): String = "OK"
|
||||
}
|
||||
|
||||
OPTIONAL_JVM_INLINE_ANNOTATION
|
||||
value class InlineClass<T: String>(val s: T) : IOk
|
||||
|
||||
fun test(x: InlineClass<String>?) = x?.ok() ?: "Failed"
|
||||
|
||||
fun box() = test(InlineClass(""))
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
// !JVM_DEFAULT_MODE: all
|
||||
// TARGET_BACKEND: JVM
|
||||
// WITH_STDLIB
|
||||
// JVM_TARGET: 1.8
|
||||
// WORKS_WHEN_VALUE_CLASS
|
||||
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter
|
||||
|
||||
interface IOk {
|
||||
fun ok(): String = "OK"
|
||||
}
|
||||
|
||||
OPTIONAL_JVM_INLINE_ANNOTATION
|
||||
value class InlineClass<T: String>(val s: T) : IOk
|
||||
|
||||
fun test(x: Any): String {
|
||||
return if (x is InlineClass<*>) x.ok() else "FAIL"
|
||||
}
|
||||
|
||||
fun box() = test(InlineClass("Dummy"))
|
||||
Vendored
+33
@@ -0,0 +1,33 @@
|
||||
// !JVM_DEFAULT_MODE: all
|
||||
// TARGET_BACKEND: JVM
|
||||
// WITH_STDLIB
|
||||
// JVM_TARGET: 1.8
|
||||
// WORKS_WHEN_VALUE_CLASS
|
||||
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter
|
||||
|
||||
import kotlin.coroutines.*
|
||||
|
||||
interface IOk {
|
||||
fun ok(): String = "OK"
|
||||
}
|
||||
|
||||
OPTIONAL_JVM_INLINE_ANNOTATION
|
||||
value class InlineClass<T: String>(val s: T) : IOk
|
||||
|
||||
suspend fun returnsUnboxed() = InlineClass("")
|
||||
|
||||
suspend fun test(): String = returnsUnboxed().ok()
|
||||
|
||||
fun builder(c: suspend () -> Unit) {
|
||||
c.startCoroutine(Continuation(EmptyCoroutineContext) {
|
||||
it.getOrThrow()
|
||||
})
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
var res = "FAIL"
|
||||
builder {
|
||||
res = test()
|
||||
}
|
||||
return res
|
||||
}
|
||||
Reference in New Issue
Block a user