Add more tests for inline class equality

This commit is contained in:
Steven Schäfer
2019-08-22 16:02:43 +02:00
committed by Alexander Udalov
parent cdc5e1347b
commit b85b2d9af8
23 changed files with 1028 additions and 9 deletions
@@ -0,0 +1,84 @@
// FILE: inlineClasses.kt
inline class A(val x: Int)
inline class B(val x: String)
inline class C(val x: Any?)
// FILE: a.kt
// False
fun isNullVacuousLeftA(s: A) = s == null
fun isNullVacuousRightA(s: A) = null == s
// IFNONNULL
fun isNullLeftA(s: A?) = s == null
fun isNullRightA(s: A?) = null == s
// equals-impl0
fun isEqualSameA(s: A, t: A) = s == t
// equals-impl
fun isEqualAnyLeftA(s: A, t: Any?) = s == t
// boxes
// fun isEqualAnyRightA(s: Any?, t: A) = s == t
// Intrinsics.areEqual
fun isEqualSameNullableA(s: A?, t: A?) = s == t
fun isEqualAnyNullableLeftA(s: A?, t: Any?) = s == t
fun isEqualAnyNullableRightA(s: Any?, t: A?) = s == t
// FILE: b.kt
// False
fun isNullVacuousLeftB(s: B) = s == null
fun isNullVacuousRightB(s: B) = null == s
// IFNONNULL
fun isNullLeftB(s: B?) = s == null
fun isNullRightB(s: B?) = null == s
// equals-impl0
fun isEqualSameB(s: B, t: B) = s == t
// equals-impl
fun isEqualAnyLeftB(s: B, t: Any?) = s == t
// boxes
// fun isEqualAnyRightB(s: Any?, t: B) = s == t
// equals-impl0
fun isEqualSameNullableB(s: B?, t: B?) = s == t
// equals-impl
fun isEqualAnyNullableLeftB(s: B?, t: Any?) = s == t
// boxes
// fun isEqualAnyNullableRightB(s: Any?, t: B?) = s == t
// FILE: c.kt
// False
fun isNullVacuousLeftC(s: C) = s == null
fun isNullVacuousRightC(s: C) = null == s
// IFNONULL
fun isNullLeftC(s: C?) = s == null
fun isNullRightC(s: C?) = null == s
// equals-impl0
fun isEqualSameC(s: C, t: C) = s == t
// equals-impl
fun isEqualAnyLeftC(s: C, t: Any?) = s == t
// boxes
// fun isEqualAnyRightC(s: Any?, t: C) = s == t
// Intrinsics.areEqual
fun isEqualSameNullableC(s: C?, t: C?) = s == t
fun isEqualAnyNullableLeftC(s: C?, t: Any?) = s == t
fun isEqualAnyNullableRightC(s: Any?, t: C?) = s == t
// @AKt.class:
// 0 INVOKESTATIC A.box-impl
// 0 INVOKEVIRTUAL A.unbox-impl
// 1 INVOKESTATIC A.equals-impl \(
// 1 INVOKESTATIC A.equals-impl0
// 3 INVOKESTATIC kotlin/jvm/internal/Intrinsics.areEqual
// @BKt.class:
// 0 INVOKESTATIC B.box-impl
// 0 INVOKEVIRTUAL B.unbox-impl
// 2 INVOKESTATIC B.equals-impl \(
// 2 INVOKESTATIC B.equals-impl0
// 0 INVOKESTATIC kotlin/jvm/internal/Intrinsics.areEqual
// @CKt.class:
// 0 INVOKESTATIC C.box-impl
// 0 INVOKEVIRTUAL C.unbox-impl
// 1 INVOKESTATIC C.equals-impl \(
// 1 INVOKESTATIC C.equals-impl0
// 3 INVOKESTATIC kotlin/jvm/internal/Intrinsics.areEqual
@@ -1,3 +1,4 @@
// IGNORE_BACKEND: JVM
// IGNORE_BACKEND: JVM_IR
// WITH_COROUTINES
// FILE: test.kt
@@ -14,25 +15,24 @@ fun test() {
val other = Result.success("nope")
if (result == other) println("==")
if (result != other) println("!=")
if (result.equals(other)) println("equals")
if (!result.equals(other)) println("!equals")
if (result.equals(other)) println("equals") // Boxes (JVM, JVM_IR)
if (!result.equals(other)) println("!equals") // Boxes (JVM, JVM_IR)
println(result.hashCode())
println(result.toString())
println("$result")
println("$result") // Boxes (JVM_IR)
val ans1 = runCatching { 42 }
println(ans1)
println(ans1) // Boxes (JVM, JVM_IR)
val ans2 = 42.runCatching { this }
println(ans2)
println(ans2) // Boxes (JVM, JVM_IR)
println(result.getOrElse { "oops" })
println(result.getOrDefault("oops"))
}
// @TestKt.class:
// 0 INVOKESTATIC Result.box-impl
// 0 INVOKESTATIC Result.unbox-impl
// 0 Result\$Failure
// 46 Result
// 0 INVOKESTATIC kotlin/Result.box-impl
// 0 INVOKEVIRTUAL kotlin/Result.unbox-impl
// 0 Result\$Failure