Minor. Add tests
This commit is contained in:
+24
@@ -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"
|
||||
}
|
||||
+24
@@ -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"
|
||||
}
|
||||
Vendored
+26
@@ -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"
|
||||
}
|
||||
Vendored
+26
@@ -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"
|
||||
}
|
||||
Vendored
+20
@@ -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"
|
||||
}
|
||||
+19
@@ -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"
|
||||
}
|
||||
Vendored
+29
@@ -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"
|
||||
}
|
||||
+20
@@ -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"
|
||||
}
|
||||
Vendored
+24
@@ -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"
|
||||
}
|
||||
Vendored
+24
@@ -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"
|
||||
}
|
||||
+26
@@ -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"
|
||||
}
|
||||
Vendored
+26
@@ -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"
|
||||
}
|
||||
Vendored
+26
@@ -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"
|
||||
}
|
||||
+20
@@ -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"
|
||||
}
|
||||
Vendored
+20
@@ -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"
|
||||
}
|
||||
+38
@@ -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"
|
||||
}
|
||||
+21
@@ -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"
|
||||
}
|
||||
Vendored
+21
@@ -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"
|
||||
}
|
||||
Vendored
+19
@@ -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"
|
||||
}
|
||||
+27
@@ -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"
|
||||
}
|
||||
+33
@@ -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"
|
||||
}
|
||||
+33
@@ -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"
|
||||
}
|
||||
+33
@@ -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"
|
||||
}
|
||||
+33
@@ -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"
|
||||
}
|
||||
+10
@@ -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"
|
||||
+32
@@ -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"
|
||||
}
|
||||
+32
@@ -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"
|
||||
}
|
||||
Reference in New Issue
Block a user