Add more tests for inline class equality
This commit is contained in:
committed by
Alexander Udalov
parent
cdc5e1347b
commit
b85b2d9af8
@@ -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
|
||||
+9
-9
@@ -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
|
||||
Reference in New Issue
Block a user