Minor. Add tests

This commit is contained in:
Ilmir Usmanov
2021-12-22 09:05:10 +01:00
parent 909b455758
commit 4f95171472
103 changed files with 6538 additions and 2 deletions
@@ -0,0 +1,24 @@
// WITH_STDLIB
// WORKS_WHEN_VALUE_CLASS
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter
OPTIONAL_JVM_INLINE_ANNOTATION
value class Z<T: Int>(val x: T)
OPTIONAL_JVM_INLINE_ANNOTATION
value class L<T: Long>(val x: T)
OPTIONAL_JVM_INLINE_ANNOTATION
value class S<T: String>(val x: T)
fun Z<Int>.test() = x
fun L<Long>.test() = x
fun S<String>.test() = x
fun box(): String {
if (Z(42)::test.invoke() != 42) throw AssertionError()
if (L(1234L)::test.invoke() != 1234L) throw AssertionError()
if (S("abcdef")::test.invoke() != "abcdef") throw AssertionError()
return "OK"
}
@@ -0,0 +1,24 @@
// WITH_STDLIB
// WORKS_WHEN_VALUE_CLASS
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter
OPTIONAL_JVM_INLINE_ANNOTATION
value class Z<T: Int>(val x: T)
OPTIONAL_JVM_INLINE_ANNOTATION
value class L<T: Long>(val x: T)
OPTIONAL_JVM_INLINE_ANNOTATION
value class S<T: String>(val x: T)
val Z<Int>.xx get() = x
val L<Long>.xx get() = x
val S<String>.xx get() = x
fun box(): String {
if (Z(42)::xx.get() != 42) throw AssertionError()
if (L(1234L)::xx.get() != 1234L) throw AssertionError()
if (S("abcdef")::xx.get() != "abcdef") throw AssertionError()
return "OK"
}
@@ -0,0 +1,26 @@
// WITH_STDLIB
// WORKS_WHEN_VALUE_CLASS
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter
OPTIONAL_JVM_INLINE_ANNOTATION
value class Z<T: Int>(val x: T) {
fun test() = x
}
OPTIONAL_JVM_INLINE_ANNOTATION
value class L<T: Long>(val x: T) {
fun test() = x
}
OPTIONAL_JVM_INLINE_ANNOTATION
value class S<T: String>(val x: T) {
fun test() = x
}
fun box(): String {
if (Z(42)::test.invoke() != 42) throw AssertionError()
if (L(1234L)::test.invoke() != 1234L) throw AssertionError()
if (S("abcdef")::test.invoke() != "abcdef") throw AssertionError()
return "OK"
}
@@ -0,0 +1,26 @@
// WITH_STDLIB
// WORKS_WHEN_VALUE_CLASS
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter
OPTIONAL_JVM_INLINE_ANNOTATION
value class Z<T: Int>(val x: T) {
val xx get() = x
}
OPTIONAL_JVM_INLINE_ANNOTATION
value class L<T: Long>(val x: T) {
val xx get() = x
}
OPTIONAL_JVM_INLINE_ANNOTATION
value class S<T: String>(val x: T) {
val xx get() = x
}
fun box(): String {
if (Z(42)::xx.get() != 42) throw AssertionError()
if (L(1234L)::xx.get() != 1234L) throw AssertionError()
if (S("abcdef")::xx.get() != "abcdef") throw AssertionError()
return "OK"
}
@@ -0,0 +1,20 @@
// WITH_STDLIB
// WORKS_WHEN_VALUE_CLASS
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter
OPTIONAL_JVM_INLINE_ANNOTATION
value class Z<T: Int>(val x: T)
OPTIONAL_JVM_INLINE_ANNOTATION
value class L<T: Long>(val x: T)
OPTIONAL_JVM_INLINE_ANNOTATION
value class S<T: String>(val x: T)
fun box(): String {
if (Z(42)::x.get() != 42) throw AssertionError()
if (L(1234L)::x.get() != 1234L) throw AssertionError()
if (S("abcdef")::x.get() != "abcdef") throw AssertionError()
return "OK"
}
@@ -0,0 +1,19 @@
// WITH_STDLIB
// WORKS_WHEN_VALUE_CLASS
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter
import kotlin.test.assertEquals
OPTIONAL_JVM_INLINE_ANNOTATION
value class Z<T: Int>(val x: T)
class Outer(val z1: Z<Int>) {
inner class Inner(val z2: Z<Int>)
}
fun box(): String {
assertEquals(Z(1), ::Outer.invoke(Z(1)).z1)
assertEquals(Z(2), Outer::Inner.invoke(Outer(Z(1)), Z(2)).z2)
return "OK"
}
@@ -0,0 +1,29 @@
// IGNORE_BACKEND: WASM
// WASM_MUTE_REASON: IGNORED_IN_JS
// IGNORE_BACKEND: JS, JS_IR, JS_IR_ES6, NATIVE
// WITH_REFLECT
// WITH_STDLIB
// WORKS_WHEN_VALUE_CLASS
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter
import kotlin.test.*
OPTIONAL_JVM_INLINE_ANNOTATION
value class Z<T: String>(val s: T)
fun box(): String {
val a = Z("a")
val b = Z("b")
val equals = Z<String>::equals
assertTrue(equals.call(a, a))
assertFalse(equals.call(a, b))
val hashCode = Z<String>::hashCode
assertEquals(a.s.hashCode(), hashCode.call(a))
val toString = Z<String>::toString
assertEquals("Z(s=${a.s})", toString.call(a))
return "OK"
}
@@ -0,0 +1,20 @@
// WITH_STDLIB
// WORKS_WHEN_VALUE_CLASS
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter
OPTIONAL_JVM_INLINE_ANNOTATION
value class Z<T: Int>(val x: T)
OPTIONAL_JVM_INLINE_ANNOTATION
value class L<T: Long>(val x: T)
OPTIONAL_JVM_INLINE_ANNOTATION
value class S<T: String>(val x: T)
fun test(aZ: Z<Int>, aL: L<Long>, aS: S<String>) = "${aZ.x} ${aL.x} ${aS.x}"
fun box(): String {
if (::test.invoke(Z(1), L(1L), S("abc")) != "1 1 abc") throw AssertionError()
return "OK"
}
@@ -0,0 +1,24 @@
// WITH_STDLIB
// WORKS_WHEN_VALUE_CLASS
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter
OPTIONAL_JVM_INLINE_ANNOTATION
value class Z<T: Int>(val x: T)
OPTIONAL_JVM_INLINE_ANNOTATION
value class L<T: Long>(val x: T)
OPTIONAL_JVM_INLINE_ANNOTATION
value class S<T: String>(val x: T)
fun Z<Int>.test() = x
fun L<Long>.test() = x
fun S<String>.test() = x
fun box(): String {
if (Z<Int>::test.invoke(Z(42)) != 42) throw AssertionError()
if (L<Long>::test.invoke(L(1234L)) != 1234L) throw AssertionError()
if (S<String>::test.invoke(S("abcdef")) != "abcdef") throw AssertionError()
return "OK"
}
@@ -0,0 +1,24 @@
// WITH_STDLIB
// WORKS_WHEN_VALUE_CLASS
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter
OPTIONAL_JVM_INLINE_ANNOTATION
value class Z<T: Int>(val x: T)
OPTIONAL_JVM_INLINE_ANNOTATION
value class L<T: Long>(val x: T)
OPTIONAL_JVM_INLINE_ANNOTATION
value class S<T: String>(val x: T)
val Z<Int>.xx get() = x
val L<Long>.xx get() = x
val S<String>.xx get() = x
fun box(): String {
if ((Z<Int>::xx).get(Z(42)) != 42) throw AssertionError()
if ((L<Long>::xx).get(L(1234L)) != 1234L) throw AssertionError()
if ((S<String>::xx).get(S("abcdef")) != "abcdef") throw AssertionError()
return "OK"
}
@@ -0,0 +1,26 @@
// WITH_STDLIB
// WORKS_WHEN_VALUE_CLASS
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter
import kotlin.test.assertEquals
OPTIONAL_JVM_INLINE_ANNOTATION
value class Z<T: Int>(internal val x: T)
OPTIONAL_JVM_INLINE_ANNOTATION
value class L<T: Long>(internal val x: T)
OPTIONAL_JVM_INLINE_ANNOTATION
value class S<T: String>(internal val x: T)
fun box(): String {
assertEquals(42, Z<Int>::x.get(Z(42)))
assertEquals(1234L, L<Long>::x.get(L(1234L)))
assertEquals("abc", S<String>::x.get(S("abc")))
assertEquals(42, Z<Int>::x.invoke(Z(42)))
assertEquals(1234L, L<Long>::x.invoke(L(1234L)))
assertEquals("abc", S<String>::x.invoke(S("abc")))
return "OK"
}
@@ -0,0 +1,26 @@
// WITH_STDLIB
// WORKS_WHEN_VALUE_CLASS
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter
OPTIONAL_JVM_INLINE_ANNOTATION
value class Z<T: Int>(val x: T) {
fun test() = x
}
OPTIONAL_JVM_INLINE_ANNOTATION
value class L<T: Long>(val x: T) {
fun test() = x
}
OPTIONAL_JVM_INLINE_ANNOTATION
value class S<T: String>(val x: T) {
fun test() = x
}
fun box(): String {
if (Z<Int>::test.invoke(Z(42)) != 42) throw AssertionError()
if (L<Long>::test.invoke(L(1234L)) != 1234L) throw AssertionError()
if (S<String>::test.invoke(S("abcdef")) != "abcdef") throw AssertionError()
return "OK"
}
@@ -0,0 +1,26 @@
// WITH_STDLIB
// WORKS_WHEN_VALUE_CLASS
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter
OPTIONAL_JVM_INLINE_ANNOTATION
value class Z<T: Int>(val x: T) {
val xx get() = x
}
OPTIONAL_JVM_INLINE_ANNOTATION
value class L<T: Long>(val x: T) {
val xx get() = x
}
OPTIONAL_JVM_INLINE_ANNOTATION
value class S<T: String>(val x: T) {
val xx get() = x
}
fun box(): String {
if ((Z<Int>::xx).get(Z(42)) != 42) throw AssertionError()
if ((L<Long>::xx).get(L(1234L)) != 1234L) throw AssertionError()
if ((S<String>::xx).get(S("abcdef")) != "abcdef") throw AssertionError()
return "OK"
}
@@ -0,0 +1,20 @@
// WITH_STDLIB
// WORKS_WHEN_VALUE_CLASS
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter
OPTIONAL_JVM_INLINE_ANNOTATION
value class Z<T: Int>(val x: T)
OPTIONAL_JVM_INLINE_ANNOTATION
value class L<T: Long>(val x: T)
OPTIONAL_JVM_INLINE_ANNOTATION
value class S<T: String>(val x: T)
fun box(): String {
if (42.let(::Z).x != 42) throw AssertionError()
if (1234L.let(::L).x != 1234L) throw AssertionError()
if ("abcdef".let(::S).x != "abcdef") throw AssertionError()
return "OK"
}
@@ -0,0 +1,20 @@
// WITH_STDLIB
// WORKS_WHEN_VALUE_CLASS
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter
OPTIONAL_JVM_INLINE_ANNOTATION
value class Z<T: Int>(val x: T)
OPTIONAL_JVM_INLINE_ANNOTATION
value class L<T: Long>(val x: T)
OPTIONAL_JVM_INLINE_ANNOTATION
value class S<T: String>(val x: T)
fun box(): String {
if ((Z<Int>::x).get(Z(42)) != 42) throw AssertionError()
if ((L<Long>::x).get(L(1234L)) != 1234L) throw AssertionError()
if ((S<String>::x).get(S("abcdef")) != "abcdef") throw AssertionError()
return "OK"
}
@@ -0,0 +1,38 @@
// WITH_STDLIB
// WORKS_WHEN_VALUE_CLASS
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter
import kotlin.test.assertEquals
OPTIONAL_JVM_INLINE_ANNOTATION
value class Z<T: Int>(private val x: T) {
companion object {
val xref = Z<Int>::x
}
}
OPTIONAL_JVM_INLINE_ANNOTATION
value class L<T: Long>(private val x: T) {
companion object {
val xref = L<Long>::x
}
}
OPTIONAL_JVM_INLINE_ANNOTATION
value class S<T: String>(private val x: T) {
companion object {
val xref = S<String>::x
}
}
fun box(): String {
assertEquals(42, Z.xref.get(Z(42)))
assertEquals(1234L, L.xref.get(L(1234L)))
assertEquals("abc", S.xref.get(S("abc")))
assertEquals(42, Z.xref.invoke(Z(42)))
assertEquals(1234L, L.xref.invoke(L(1234L)))
assertEquals("abc", S.xref.invoke(S("abc")))
return "OK"
}
@@ -0,0 +1,21 @@
// WITH_STDLIB
// WORKS_WHEN_VALUE_CLASS
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter
OPTIONAL_JVM_INLINE_ANNOTATION
value class Z<T: Int>(val x: T)
class C(var z: Z<Int>)
fun box(): String {
val x = C(Z(42))
val ref = x::z
if (ref.get().x != 42) throw AssertionError()
ref.set(Z(1234))
if (ref.get().x != 1234) throw AssertionError()
return "OK"
}
@@ -0,0 +1,21 @@
// WITH_STDLIB
// WORKS_WHEN_VALUE_CLASS
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter
OPTIONAL_JVM_INLINE_ANNOTATION
value class Z<T: Int>(val x: T)
class C(var z: Z<Int>)
fun box(): String {
val ref = C::z
val x = C(Z(42))
if (ref.get(x).x != 42) throw AssertionError()
ref.set(x, Z(1234))
if (ref.get(x).x != 1234) throw AssertionError()
return "OK"
}
@@ -0,0 +1,19 @@
// WITH_STDLIB
// WORKS_WHEN_VALUE_CLASS
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter
OPTIONAL_JVM_INLINE_ANNOTATION
value class Z<T: Int>(val x: T)
var topLevel = Z(42)
fun box(): String {
val ref = ::topLevel
if (ref.get().x != 42) throw AssertionError()
ref.set(Z(1234))
if (ref.get().x != 1234) throw AssertionError()
return "OK"
}
@@ -0,0 +1,27 @@
// WITH_STDLIB
// WORKS_WHEN_VALUE_CLASS
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter
OPTIONAL_JVM_INLINE_ANNOTATION
value class R<T: Any>(val x: T)
fun useR(r: R<String>) {
if (r.x as String != "OK") throw AssertionError("$r")
}
fun useR0(fn: () -> R<String>) {
useR(fn())
}
fun useR1(r: R<String>, fn: (R<String>) -> R<String>) {
useR(fn(r))
}
fun fnWithDefaultR(r: R<String> = R("OK")) = r
fun box(): String {
useR0(::fnWithDefaultR)
useR1(R("OK"), ::fnWithDefaultR)
return "OK"
}
@@ -0,0 +1,33 @@
// WITH_STDLIB
// WORKS_WHEN_VALUE_CLASS
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter
OPTIONAL_JVM_INLINE_ANNOTATION
value class Value<T: Any>(val value: T)
object Foo {
fun foo(value: Value<String>) {
res = value.value
}
fun bar(value: Value<String>?) {
res = value?.value
}
}
var res: String? = "FAIL"
fun box(): String {
Value("OK").let(Foo::foo)
if (res != "OK") return "FAIL 1: $res"
res = "FAIL 2"
Value("OK").let(Foo::bar)
if (res != "OK") return "FAIL 3: $res"
res = "FAIL 4"
null.let(Foo::bar)
if (res != null) return "FAIL 5: $res"
return "OK"
}
@@ -0,0 +1,33 @@
// WITH_STDLIB
// WORKS_WHEN_VALUE_CLASS
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter
OPTIONAL_JVM_INLINE_ANNOTATION
value class Value<T>(val value: T)
object Foo {
fun foo(value: Value<String?>) {
res = value.value
}
fun bar(value: Value<String?>?) {
res = value?.value
}
}
var res: String? = "FAIL"
fun box(): String {
Value<String?>("OK").let(Foo::foo)
if (res != "OK") return "FAIL 1: $res"
res = "FAIL 2"
Value<String?>("OK").let(Foo::bar)
if (res != "OK") return "FAIL 3: $res"
res = "FAIL 4"
null.let(Foo::bar)
if (res != null) return "FAIL 5: $res"
return "OK"
}
@@ -0,0 +1,33 @@
// WITH_STDLIB
// WORKS_WHEN_VALUE_CLASS
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter
OPTIONAL_JVM_INLINE_ANNOTATION
value class Value<T: Int>(val value: T)
object Foo {
fun foo(value: Value<Int>) {
res = value.value
}
fun bar(value: Value<Int>?) {
res = value?.value
}
}
var res: Int? = 0
fun box(): String {
Value(42).let(Foo::foo)
if (res != 42) return "FAIL 1 $res"
res = 0
Value(42).let(Foo::bar)
if (res != 42) return "FAIL 2 $res"
res = 0
null.let(Foo::bar)
if (res != null) return "FAIL 3: $res"
return "OK"
}
@@ -0,0 +1,33 @@
// WITH_STDLIB
// WORKS_WHEN_VALUE_CLASS
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter
OPTIONAL_JVM_INLINE_ANNOTATION
value class Value<T: Int?>(val value: T)
object Foo {
fun foo(value: Value<Int?>) {
res = value.value
}
fun bar(value: Value<Int?>?) {
res = value?.value
}
}
var res: Int? = 0
fun box(): String {
Value<Int?>(42).let(Foo::foo)
if (res != 42) return "FAIL 1 $res"
res = 0
Value<Int?>(42).let(Foo::bar)
if (res != 42) return "FAIL 2 $res"
res = 0
null.let(Foo::bar)
if (res != null) return "FAIL 3: $res"
return "OK"
}
@@ -0,0 +1,10 @@
// WITH_STDLIB
// WORKS_WHEN_VALUE_CLASS
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter
OPTIONAL_JVM_INLINE_ANNOTATION
value class Value<T: Any>(val value: T)
fun foo(value: Value<String>?) = value?.value
fun box(): String = (null as Value<String>?).let(::foo) ?: "OK"
@@ -0,0 +1,32 @@
// WITH_STDLIB
// WORKS_WHEN_VALUE_CLASS
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter
OPTIONAL_JVM_INLINE_ANNOTATION
value class Value<T: String>(val value: T)
object Foo {
fun foo(value: Value<String>) {
res = value.value
}
fun bar(value: Value<String>?) {
res = value?.value
}
}
var res: String? = "FAIL"
fun box(): String {
Value("OK").let(Foo::foo)
if (res != "OK") return "FAIL 1: $res"
res = "FAIL 2"
Value("OK").let(Foo::bar)
if (res != "OK") return "FAIL 3: $res"
res = "FAIL 4"
null.let(Foo::bar)
if (res != null) return "FAIL 3: $res"
return "OK"
}
@@ -0,0 +1,32 @@
// WITH_STDLIB
// WORKS_WHEN_VALUE_CLASS
// LANGUAGE: +ValueClasses, +GenericInlineClassParameter
OPTIONAL_JVM_INLINE_ANNOTATION
value class Value<T: String?>(val value: T)
object Foo {
fun foo(value: Value<String?>) {
res = value.value
}
fun bar(value: Value<String?>?) {
res = value?.value
}
}
var res: String? = "FAIL"
fun box(): String {
Value<String?>("OK").let(Foo::foo)
if (res != "OK") return "FAIL 1: $res"
res = "FAIL 2"
Value<String?>("OK").let(Foo::bar)
if (res != "OK") return "FAIL 3: $res"
res = "FAIL 4"
null.let(Foo::bar)
if (res != null) return "FAIL 3: $res"
return "OK"
}