// WITH_STDLIB // WORKS_WHEN_VALUE_CLASS // IGNORE_BACKEND: JS_IR, JS_IR_ES6 // LANGUAGE: +ValueClasses, +GenericInlineClassParameter OPTIONAL_JVM_INLINE_ANNOTATION value class X(val x: T) OPTIONAL_JVM_INLINE_ANNOTATION value class Y(val y: T) OPTIONAL_JVM_INLINE_ANNOTATION value class NX(val x: T) OPTIONAL_JVM_INLINE_ANNOTATION value class NX2(val x: T?) OPTIONAL_JVM_INLINE_ANNOTATION value class NY(val y: T) OPTIONAL_JVM_INLINE_ANNOTATION value class NY2(val y: T?) fun testNotNull(x: X?, y: Y?) { val xs = listOf(x) val ys = listOf(y) if (!xs.contains(y)) throw AssertionError() if (xs[0] != ys[0]) throw AssertionError() if (xs[0] !== ys[0]) throw AssertionError() } fun testNullable(x: NX?, y: NY?) { val xs = listOf(x) val ys = listOf(y) if (xs.contains(y)) throw AssertionError() if (xs[0] == ys[0]) throw AssertionError() if (xs[0] === ys[0]) throw AssertionError() } fun testNullable2(x: NX2?, y: NY2?) { val xs = listOf(x) val ys = listOf(y) if (xs.contains(y)) throw AssertionError() if (xs[0] == ys[0]) throw AssertionError() if (xs[0] === ys[0]) throw AssertionError() } fun testNullsAsNullable(x: NX?, y: NY?) { val xs = listOf(x) val ys = listOf(y) if (!xs.contains(y)) throw AssertionError() if (xs[0] != ys[0]) throw AssertionError() if (xs[0] !== ys[0]) throw AssertionError() } fun testNullsAsNullable2(x: NX2?, y: NY2?) { val xs = listOf(x) val ys = listOf(y) if (!xs.contains(y)) throw AssertionError() if (xs[0] != ys[0]) throw AssertionError() if (xs[0] !== ys[0]) throw AssertionError() } fun box(): String { testNotNull(null, null) testNullable(NX(null), NY(null)) testNullable(NX(null), null) testNullable(null, NY(null)) testNullable2(NX2(null), NY2(null)) testNullable2(NX2(null), null) testNullable2(null, NY2(null)) testNullsAsNullable(null, null) testNullsAsNullable2(null, null) return "OK" }