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,50 @@
// !LANGUAGE: +InlineClasses
inline class Inner(val w: String)
inline class A(val x: Inner)
fun isNullVacuousLeft(s: A) = s == null
fun isNullVacuousRight(s: A) = null == s
fun isNullLeft(s: A?) = s == null
fun isNullRight(s: A?) = null == s
fun isEqualSame(s: A, t: A) = s == t
fun isEqualAnyLeft(s: A, t: Any?) = s == t
fun isEqualAnyRight(s: Any?, t: A) = s == t
fun isEqualSameNullable(s: A?, t: A?) = s == t
fun isEqualAnyNullableLeft(s: A?, t: Any?) = s == t
fun isEqualAnyNullableRight(s: Any?, t: A?) = s == t
fun box(): String {
if (isNullVacuousLeft(A(Inner("")))) return "Fail 1"
if (isNullVacuousRight(A(Inner("")))) return "Fail 2"
if (isNullLeft(A(Inner("")))) return "Fail 3"
if (isNullRight(A(Inner("")))) return "Fail 4"
if (!isNullLeft(null)) return "Fail 5"
if (!isNullRight(null)) return "Fail 6"
if (!isEqualSame(A(Inner("")), A(Inner("")))) return "Fail 7"
if (isEqualSame(A(Inner("")), A(Inner("a")))) return "Fail 8"
if (isEqualAnyLeft(A(Inner("")), Inner(""))) return "Fail 9"
if (isEqualAnyLeft(A(Inner("")), null)) return "Fail 10"
if (!isEqualAnyLeft(A(Inner("")), A(Inner("")))) return "Fail 11"
if (isEqualAnyRight(Inner(""), A(Inner("")))) return "Fail 12"
if (isEqualAnyRight(null, A(Inner("")))) return "Fail 13"
if (!isEqualAnyRight(A(Inner("")), A(Inner("")))) return "Fail 14"
if (!isEqualSameNullable(null, null)) return "Fail 15"
if (!isEqualSameNullable(A(Inner("")), A(Inner("")))) return "Fail 16"
if (isEqualSameNullable(null, A(Inner("")))) return "Fail 17"
if (isEqualSameNullable(A(Inner("")), null)) return "Fail 18"
if (isEqualSameNullable(A(Inner("")), A(Inner("a")))) return "Fail 19"
if (!isEqualAnyNullableLeft(null, null)) return "Fail 20"
if (!isEqualAnyNullableLeft(A(Inner("")), A(Inner("")))) return "Fail 21"
if (isEqualAnyNullableLeft(A(Inner("")), "")) return "Fail 22"
if (isEqualAnyNullableLeft(null, Inner(""))) return "Fail 23"
if (isEqualAnyNullableLeft(A(Inner("")), null)) return "Fail 24"
if (isEqualAnyNullableLeft(A(Inner("")), A(Inner("a")))) return "Fail 25"
if (!isEqualAnyNullableRight(null, null)) return "Fail 26"
if (!isEqualAnyNullableRight(A(Inner("a")), A(Inner("a")))) return "Fail 27"
if (isEqualAnyNullableRight(Inner(""), A(Inner("")))) return "Fail 28"
if (isEqualAnyNullableRight(Inner(""), null)) return "Fail 29"
if (isEqualAnyNullableRight(null, A(Inner("")))) return "Fail 30"
if (isEqualAnyNullableRight(A(Inner("a")), A(Inner("b")))) return "Fail 31"
return "OK"
}
@@ -0,0 +1,14 @@
// !LANGUAGE: +InlineClasses
inline class A(val a: String)
fun isEqualNA(x: A?, y: A) = x == y
fun isEqualAN(x: A, y: A?) = x == y
fun box(): String {
if (isEqualNA(null, A(""))) return "Fail 1"
if (isEqualAN(A(""), null)) return "Fail 2"
if (!isEqualNA(A(""), A(""))) return "Fail 3"
if (!isEqualAN(A(""), A(""))) return "Fail 4"
return "OK"
}
@@ -0,0 +1,50 @@
// !LANGUAGE: +InlineClasses
inline class Inner(val w: String)
inline class A(val x: Inner)
fun isNotNullVacuousLeft(s: A) = s != null
fun isNotNullVacuousRight(s: A) = null != s
fun isNotNullLeft(s: A?) = s != null
fun isNotNullRight(s: A?) = null != s
fun isNotEqualSame(s: A, t: A) = s != t
fun isNotEqualAnyLeft(s: A, t: Any?) = s != t
fun isNotEqualAnyRight(s: Any?, t: A) = s != t
fun isNotEqualSameNullable(s: A?, t: A?) = s != t
fun isNotEqualAnyNullableLeft(s: A?, t: Any?) = s != t
fun isNotEqualAnyNullableRight(s: Any?, t: A?) = s != t
fun box(): String {
if (!isNotNullVacuousLeft(A(Inner("")))) return "Fail 1"
if (!isNotNullVacuousRight(A(Inner("")))) return "Fail 2"
if (!isNotNullLeft(A(Inner("")))) return "Fail 3"
if (!isNotNullRight(A(Inner("")))) return "Fail 4"
if (isNotNullLeft(null)) return "Fail 5"
if (isNotNullRight(null)) return "Fail 6"
if (isNotEqualSame(A(Inner("")), A(Inner("")))) return "Fail 7"
if (!isNotEqualSame(A(Inner("")), A(Inner("a")))) return "Fail 8"
if (!isNotEqualAnyLeft(A(Inner("")), Inner(""))) return "Fail 9"
if (!isNotEqualAnyLeft(A(Inner("")), null)) return "Fail 10"
if (isNotEqualAnyLeft(A(Inner("")), A(Inner("")))) return "Fail 11"
if (!isNotEqualAnyRight(Inner(""), A(Inner("")))) return "Fail 12"
if (!isNotEqualAnyRight(null, A(Inner("")))) return "Fail 13"
if (isNotEqualAnyRight(A(Inner("")), A(Inner("")))) return "Fail 14"
if (isNotEqualSameNullable(null, null)) return "Fail 15"
if (isNotEqualSameNullable(A(Inner("")), A(Inner("")))) return "Fail 16"
if (!isNotEqualSameNullable(null, A(Inner("")))) return "Fail 17"
if (!isNotEqualSameNullable(A(Inner("")), null)) return "Fail 18"
if (!isNotEqualSameNullable(A(Inner("")), A(Inner("a")))) return "Fail 19"
if (isNotEqualAnyNullableLeft(null, null)) return "Fail 20"
if (isNotEqualAnyNullableLeft(A(Inner("")), A(Inner("")))) return "Fail 21"
if (!isNotEqualAnyNullableLeft(A(Inner("")), "")) return "Fail 22"
if (!isNotEqualAnyNullableLeft(null, Inner(""))) return "Fail 23"
if (!isNotEqualAnyNullableLeft(A(Inner("")), null)) return "Fail 24"
if (!isNotEqualAnyNullableLeft(A(Inner("")), A(Inner("a")))) return "Fail 25"
if (isNotEqualAnyNullableRight(null, null)) return "Fail 26"
if (isNotEqualAnyNullableRight(A(Inner("a")), A(Inner("a")))) return "Fail 27"
if (!isNotEqualAnyNullableRight(Inner(""), A(Inner("")))) return "Fail 28"
if (!isNotEqualAnyNullableRight(Inner(""), null)) return "Fail 29"
if (!isNotEqualAnyNullableRight(null, A(Inner("")))) return "Fail 30"
if (!isNotEqualAnyNullableRight(A(Inner("a")), A(Inner("b")))) return "Fail 31"
return "OK"
}
@@ -0,0 +1,49 @@
// !LANGUAGE: +InlineClasses
inline class A(val x: String)
fun isNotNullVacuousLeft(s: A) = s != null
fun isNotNullVacuousRight(s: A) = null != s
fun isNotNullLeft(s: A?) = s != null
fun isNotNullRight(s: A?) = null != s
fun isNotEqualSame(s: A, t: A) = s != t
fun isNotEqualAnyLeft(s: A, t: Any?) = s != t
fun isNotEqualAnyRight(s: Any?, t: A) = s != t
fun isNotEqualSameNullable(s: A?, t: A?) = s != t
fun isNotEqualAnyNullableLeft(s: A?, t: Any?) = s != t
fun isNotEqualAnyNullableRight(s: Any?, t: A?) = s != t
fun box(): String {
if (!isNotNullVacuousLeft(A(""))) return "Fail 1"
if (!isNotNullVacuousRight(A(""))) return "Fail 2"
if (!isNotNullLeft(A(""))) return "Fail 3"
if (!isNotNullRight(A(""))) return "Fail 4"
if (isNotNullLeft(null)) return "Fail 5"
if (isNotNullRight(null)) return "Fail 6"
if (isNotEqualSame(A(""), A(""))) return "Fail 7"
if (!isNotEqualSame(A("a"), A("b"))) return "Fail 8"
if (!isNotEqualAnyLeft(A(""), "")) return "Fail 9"
if (!isNotEqualAnyLeft(A(""), null)) return "Fail 10"
if (isNotEqualAnyLeft(A(""), A(""))) return "Fail 11"
if (!isNotEqualAnyRight("", A(""))) return "Fail 12"
if (!isNotEqualAnyRight(null, A(""))) return "Fail 13"
if (isNotEqualAnyRight(A(""), A(""))) return "Fail 14"
if (isNotEqualSameNullable(null, null)) return "Fail 15"
if (isNotEqualSameNullable(A(""), A(""))) return "Fail 16"
if (!isNotEqualSameNullable(null, A(""))) return "Fail 17"
if (!isNotEqualSameNullable(A(""), null)) return "Fail 18"
if (!isNotEqualSameNullable(A(""), A("a"))) return "Fail 19"
if (isNotEqualAnyNullableLeft(null, null)) return "Fail 20"
if (isNotEqualAnyNullableLeft(A(""), A(""))) return "Fail 21"
if (!isNotEqualAnyNullableLeft(A(""), "")) return "Fail 22"
if (!isNotEqualAnyNullableLeft(null, "")) return "Fail 23"
if (!isNotEqualAnyNullableLeft(A(""), null)) return "Fail 24"
if (!isNotEqualAnyNullableLeft(A(""), A("a"))) return "Fail 25"
if (isNotEqualAnyNullableRight(null, null)) return "Fail 26"
if (isNotEqualAnyNullableRight(A(""), A(""))) return "Fail 27"
if (!isNotEqualAnyNullableRight("", A(""))) return "Fail 28"
if (!isNotEqualAnyNullableRight("", null)) return "Fail 29"
if (!isNotEqualAnyNullableRight(null, A(""))) return "Fail 30"
if (!isNotEqualAnyNullableRight(A(""), A("a"))) return "Fail 31"
return "OK"
}
@@ -0,0 +1,61 @@
// !LANGUAGE: +InlineClasses
inline class A(val x: Any?)
fun isNotNullVacuousLeft(s: A) = s != null
fun isNotNullVacuousRight(s: A) = null != s
fun isNotNullLeft(s: A?) = s != null
fun isNotNullRight(s: A?) = null != s
fun isNotEqualSame(s: A, t: A) = s != t
fun isNotEqualAnyLeft(s: A, t: Any?) = s != t
fun isNotEqualAnyRight(s: Any?, t: A) = s != t
fun isNotEqualSameNullable(s: A?, t: A?) = s != t
fun isNotEqualAnyNullableLeft(s: A?, t: Any?) = s != t
fun isNotEqualAnyNullableRight(s: Any?, t: A?) = s != t
fun box(): String {
if (!isNotNullVacuousLeft(A(0))) return "Fail 1"
if (!isNotNullVacuousRight(A(0))) return "Fail 2"
if (!isNotNullLeft(A(0))) return "Fail 3"
if (!isNotNullRight(A(0))) return "Fail 4"
if (isNotNullLeft(null)) return "Fail 5"
if (isNotNullRight(null)) return "Fail 6"
if (isNotEqualSame(A(0), A(0))) return "Fail 7"
if (!isNotEqualSame(A(0), A(1))) return "Fail 8"
if (!isNotEqualAnyLeft(A(0), 0)) return "Fail 9"
if (!isNotEqualAnyLeft(A(0), null)) return "Fail 10"
if (isNotEqualAnyLeft(A(0), A(0))) return "Fail 11"
if (!isNotEqualAnyRight(0, A(0))) return "Fail 12"
if (!isNotEqualAnyRight(null, A(0))) return "Fail 13"
if (isNotEqualAnyRight(A(0), A(0))) return "Fail 14"
if (isNotEqualSameNullable(null, null)) return "Fail 15"
if (isNotEqualSameNullable(A(0), A(0))) return "Fail 16"
if (!isNotEqualSameNullable(null, A(0))) return "Fail 17"
if (!isNotEqualSameNullable(A(0), null)) return "Fail 18"
if (!isNotEqualSameNullable(A(0), A(1))) return "Fail 19"
if (isNotEqualAnyNullableLeft(null, null)) return "Fail 20"
if (isNotEqualAnyNullableLeft(A(0), A(0))) return "Fail 21"
if (!isNotEqualAnyNullableLeft(A(0), 0)) return "Fail 22"
if (!isNotEqualAnyNullableLeft(null, 0)) return "Fail 23"
if (!isNotEqualAnyNullableLeft(A(0), null)) return "Fail 24"
if (!isNotEqualAnyNullableLeft(A(0), A(1))) return "Fail 25"
if (isNotEqualAnyNullableRight(null, null)) return "Fail 26"
if (isNotEqualAnyNullableRight(A(0), A(0))) return "Fail 27"
if (!isNotEqualAnyNullableRight(0, A(0))) return "Fail 28"
if (!isNotEqualAnyNullableRight(0, null)) return "Fail 29"
if (!isNotEqualAnyNullableRight(null, A(0))) return "Fail 30"
if (!isNotEqualAnyNullableRight(A(0), A(1))) return "Fail 31"
if (!isNotNullVacuousLeft(A(null))) return "Fail 32"
if (!isNotNullVacuousRight(A(null))) return "Fail 33"
if (!isNotNullLeft(A(null))) return "Fail 34"
if (!isNotNullRight(A(null))) return "Fail 35"
if (!isNotEqualAnyLeft(A(null), null)) return "Fail 36"
if (!isNotEqualAnyRight(null, A(null))) return "Fail 37"
if (!isNotEqualAnyNullableLeft(A(null), null)) return "Fail 38"
if (!isNotEqualAnyNullableRight(null, A(null))) return "Fail 39"
if (!isNotEqualSameNullable(A(null), null)) return "Fail 42"
if (!isNotEqualSameNullable(null, A(null))) return "Fail 43"
return "OK"
}
@@ -0,0 +1,49 @@
// !LANGUAGE: +InlineClasses
inline class A(val x: Int)
fun isNotNullVacuousLeft(s: A) = s != null
fun isNotNullVacuousRight(s: A) = null != s
fun isNotNullLeft(s: A?) = s != null
fun isNotNullRight(s: A?) = null != s
fun isNotEqualSame(s: A, t: A) = s != t
fun isNotEqualAnyLeft(s: A, t: Any?) = s != t
fun isNotEqualAnyRight(s: Any?, t: A) = s != t
fun isNotEqualSameNullable(s: A?, t: A?) = s != t
fun isNotEqualAnyNullableLeft(s: A?, t: Any?) = s != t
fun isNotEqualAnyNullableRight(s: Any?, t: A?) = s != t
fun box(): String {
if (!isNotNullVacuousLeft(A(0))) return "Fail 1"
if (!isNotNullVacuousRight(A(0))) return "Fail 2"
if (!isNotNullLeft(A(0))) return "Fail 3"
if (!isNotNullRight(A(0))) return "Fail 4"
if (isNotNullLeft(null)) return "Fail 5"
if (isNotNullRight(null)) return "Fail 6"
if (isNotEqualSame(A(0), A(0))) return "Fail 7"
if (!isNotEqualSame(A(0), A(1))) return "Fail 8"
if (!isNotEqualAnyLeft(A(0), 0)) return "Fail 9"
if (!isNotEqualAnyLeft(A(0), null)) return "Fail 10"
if (isNotEqualAnyLeft(A(0), A(0))) return "Fail 11"
if (!isNotEqualAnyRight(0, A(0))) return "Fail 12"
if (!isNotEqualAnyRight(null, A(0))) return "Fail 13"
if (isNotEqualAnyRight(A(0), A(0))) return "Fail 14"
if (isNotEqualSameNullable(null, null)) return "Fail 15"
if (isNotEqualSameNullable(A(0), A(0))) return "Fail 16"
if (!isNotEqualSameNullable(null, A(0))) return "Fail 17"
if (!isNotEqualSameNullable(A(0), null)) return "Fail 18"
if (!isNotEqualSameNullable(A(0), A(1))) return "Fail 19"
if (isNotEqualAnyNullableLeft(null, null)) return "Fail 20"
if (isNotEqualAnyNullableLeft(A(0), A(0))) return "Fail 21"
if (!isNotEqualAnyNullableLeft(A(0), 0)) return "Fail 22"
if (!isNotEqualAnyNullableLeft(null, 0)) return "Fail 23"
if (!isNotEqualAnyNullableLeft(A(0), null)) return "Fail 24"
if (!isNotEqualAnyNullableLeft(A(0), A(1))) return "Fail 25"
if (isNotEqualAnyNullableRight(null, null)) return "Fail 26"
if (isNotEqualAnyNullableRight(A(0), A(0))) return "Fail 27"
if (!isNotEqualAnyNullableRight(0, A(0))) return "Fail 28"
if (!isNotEqualAnyNullableRight(0, null)) return "Fail 29"
if (!isNotEqualAnyNullableRight(null, A(0))) return "Fail 30"
if (!isNotEqualAnyNullableRight(A(0), A(1))) return "Fail 31"
return "OK"
}
@@ -0,0 +1,49 @@
// !LANGUAGE: +InlineClasses
inline class A(val x: String)
fun isNullVacuousLeft(s: A) = s == null
fun isNullVacuousRight(s: A) = null == s
fun isNullLeft(s: A?) = s == null
fun isNullRight(s: A?) = null == s
fun isEqualSame(s: A, t: A) = s == t
fun isEqualAnyLeft(s: A, t: Any?) = s == t
fun isEqualAnyRight(s: Any?, t: A) = s == t
fun isEqualSameNullable(s: A?, t: A?) = s == t
fun isEqualAnyNullableLeft(s: A?, t: Any?) = s == t
fun isEqualAnyNullableRight(s: Any?, t: A?) = s == t
fun box(): String {
if (isNullVacuousLeft(A(""))) return "Fail 1"
if (isNullVacuousRight(A(""))) return "Fail 2"
if (isNullLeft(A(""))) return "Fail 3"
if (isNullRight(A(""))) return "Fail 4"
if (!isNullLeft(null)) return "Fail 5"
if (!isNullRight(null)) return "Fail 6"
if (!isEqualSame(A(""), A(""))) return "Fail 7"
if (isEqualSame(A("a"), A("b"))) return "Fail 8"
if (isEqualAnyLeft(A(""), "")) return "Fail 9"
if (isEqualAnyLeft(A(""), null)) return "Fail 10"
if (!isEqualAnyLeft(A(""), A(""))) return "Fail 11"
if (isEqualAnyRight("", A(""))) return "Fail 12"
if (isEqualAnyRight(null, A(""))) return "Fail 13"
if (!isEqualAnyRight(A(""), A(""))) return "Fail 14"
if (!isEqualSameNullable(null, null)) return "Fail 15"
if (!isEqualSameNullable(A(""), A(""))) return "Fail 16"
if (isEqualSameNullable(null, A(""))) return "Fail 17"
if (isEqualSameNullable(A(""), null)) return "Fail 18"
if (isEqualSameNullable(A(""), A("a"))) return "Fail 19"
if (!isEqualAnyNullableLeft(null, null)) return "Fail 20"
if (!isEqualAnyNullableLeft(A(""), A(""))) return "Fail 21"
if (isEqualAnyNullableLeft(A(""), "")) return "Fail 22"
if (isEqualAnyNullableLeft(null, "")) return "Fail 23"
if (isEqualAnyNullableLeft(A(""), null)) return "Fail 24"
if (isEqualAnyNullableLeft(A(""), A("a"))) return "Fail 25"
if (!isEqualAnyNullableRight(null, null)) return "Fail 26"
if (!isEqualAnyNullableRight(A(""), A(""))) return "Fail 27"
if (isEqualAnyNullableRight("", A(""))) return "Fail 28"
if (isEqualAnyNullableRight("", null)) return "Fail 29"
if (isEqualAnyNullableRight(null, A(""))) return "Fail 30"
if (isEqualAnyNullableRight(A(""), A("a"))) return "Fail 31"
return "OK"
}
@@ -0,0 +1,61 @@
// !LANGUAGE: +InlineClasses
inline class A(val x: Any?)
fun isNullVacuousLeft(s: A) = s == null
fun isNullVacuousRight(s: A) = null == s
fun isNullLeft(s: A?) = s == null
fun isNullRight(s: A?) = null == s
fun isEqualSame(s: A, t: A) = s == t
fun isEqualAnyLeft(s: A, t: Any?) = s == t
fun isEqualAnyRight(s: Any?, t: A) = s == t
fun isEqualSameNullable(s: A?, t: A?) = s == t
fun isEqualAnyNullableLeft(s: A?, t: Any?) = s == t
fun isEqualAnyNullableRight(s: Any?, t: A?) = s == t
fun box(): String {
if (isNullVacuousLeft(A(0))) return "Fail 1"
if (isNullVacuousRight(A(0))) return "Fail 2"
if (isNullLeft(A(0))) return "Fail 3"
if (isNullRight(A(0))) return "Fail 4"
if (!isNullLeft(null)) return "Fail 5"
if (!isNullRight(null)) return "Fail 6"
if (!isEqualSame(A(0), A(0))) return "Fail 7"
if (isEqualSame(A(0), A(1))) return "Fail 8"
if (isEqualAnyLeft(A(0), 0)) return "Fail 9"
if (isEqualAnyLeft(A(0), null)) return "Fail 10"
if (!isEqualAnyLeft(A(0), A(0))) return "Fail 11"
if (isEqualAnyRight(0, A(0))) return "Fail 12"
if (isEqualAnyRight(null, A(0))) return "Fail 13"
if (!isEqualAnyRight(A(0), A(0))) return "Fail 14"
if (!isEqualSameNullable(null, null)) return "Fail 15"
if (!isEqualSameNullable(A(0), A(0))) return "Fail 16"
if (isEqualSameNullable(null, A(0))) return "Fail 17"
if (isEqualSameNullable(A(0), null)) return "Fail 18"
if (isEqualSameNullable(A(0), A(1))) return "Fail 19"
if (!isEqualAnyNullableLeft(null, null)) return "Fail 20"
if (!isEqualAnyNullableLeft(A(0), A(0))) return "Fail 21"
if (isEqualAnyNullableLeft(A(0), 0)) return "Fail 22"
if (isEqualAnyNullableLeft(null, 0)) return "Fail 23"
if (isEqualAnyNullableLeft(A(0), null)) return "Fail 24"
if (isEqualAnyNullableLeft(A(0), A(1))) return "Fail 25"
if (!isEqualAnyNullableRight(null, null)) return "Fail 26"
if (!isEqualAnyNullableRight(A(0), A(0))) return "Fail 27"
if (isEqualAnyNullableRight(0, A(0))) return "Fail 28"
if (isEqualAnyNullableRight(0, null)) return "Fail 29"
if (isEqualAnyNullableRight(null, A(0))) return "Fail 30"
if (isEqualAnyNullableRight(A(0), A(1))) return "Fail 31"
if (isNullVacuousLeft(A(null))) return "Fail 32"
if (isNullVacuousRight(A(null))) return "Fail 33"
if (isNullLeft(A(null))) return "Fail 34"
if (isNullRight(A(null))) return "Fail 35"
if (isEqualAnyLeft(A(null), null)) return "Fail 36"
if (isEqualAnyRight(null, A(null))) return "Fail 37"
if (isEqualAnyNullableLeft(A(null), null)) return "Fail 38"
if (isEqualAnyNullableRight(null, A(null))) return "Fail 39"
if (isEqualSameNullable(A(null), null)) return "Fail 42"
if (isEqualSameNullable(null, A(null))) return "Fail 43"
return "OK"
}
@@ -0,0 +1,49 @@
// !LANGUAGE: +InlineClasses
inline class A(val x: Int)
fun isNullVacuousLeft(s: A) = s == null
fun isNullVacuousRight(s: A) = null == s
fun isNullLeft(s: A?) = s == null
fun isNullRight(s: A?) = null == s
fun isEqualSame(s: A, t: A) = s == t
fun isEqualAnyLeft(s: A, t: Any?) = s == t
fun isEqualAnyRight(s: Any?, t: A) = s == t
fun isEqualSameNullable(s: A?, t: A?) = s == t
fun isEqualAnyNullableLeft(s: A?, t: Any?) = s == t
fun isEqualAnyNullableRight(s: Any?, t: A?) = s == t
fun box(): String {
if (isNullVacuousLeft(A(0))) return "Fail 1"
if (isNullVacuousRight(A(0))) return "Fail 2"
if (isNullLeft(A(0))) return "Fail 3"
if (isNullRight(A(0))) return "Fail 4"
if (!isNullLeft(null)) return "Fail 5"
if (!isNullRight(null)) return "Fail 6"
if (!isEqualSame(A(0), A(0))) return "Fail 7"
if (isEqualSame(A(0), A(1))) return "Fail 8"
if (isEqualAnyLeft(A(0), 0)) return "Fail 9"
if (isEqualAnyLeft(A(0), null)) return "Fail 10"
if (!isEqualAnyLeft(A(0), A(0))) return "Fail 11"
if (isEqualAnyRight(0, A(0))) return "Fail 12"
if (isEqualAnyRight(null, A(0))) return "Fail 13"
if (!isEqualAnyRight(A(0), A(0))) return "Fail 14"
if (!isEqualSameNullable(null, null)) return "Fail 15"
if (!isEqualSameNullable(A(0), A(0))) return "Fail 16"
if (isEqualSameNullable(null, A(0))) return "Fail 17"
if (isEqualSameNullable(A(0), null)) return "Fail 18"
if (isEqualSameNullable(A(0), A(1))) return "Fail 19"
if (!isEqualAnyNullableLeft(null, null)) return "Fail 20"
if (!isEqualAnyNullableLeft(A(0), A(0))) return "Fail 21"
if (isEqualAnyNullableLeft(A(0), 0)) return "Fail 22"
if (isEqualAnyNullableLeft(null, 0)) return "Fail 23"
if (isEqualAnyNullableLeft(A(0), null)) return "Fail 24"
if (isEqualAnyNullableLeft(A(0), A(1))) return "Fail 25"
if (!isEqualAnyNullableRight(null, null)) return "Fail 26"
if (!isEqualAnyNullableRight(A(0), A(0))) return "Fail 27"
if (isEqualAnyNullableRight(0, A(0))) return "Fail 28"
if (isEqualAnyNullableRight(0, null)) return "Fail 29"
if (isEqualAnyNullableRight(null, A(0))) return "Fail 30"
if (isEqualAnyNullableRight(A(0), A(1))) return "Fail 31"
return "OK"
}
@@ -0,0 +1,14 @@
// !LANGUAGE: +InlineClasses
inline class A(val x: String)
class B {
override fun equals(other: Any?) = true
}
fun box(): String {
val x: Any? = B()
val y: A = A("")
if (x != y) return "Fail"
return "OK"
}
@@ -0,0 +1,33 @@
// !LANGUAGE: +InlineClasses
inline class Inner(val x: Int)
inline class A(val x: Inner)
var i = 0
fun set1(): A {
i = 1
return A(Inner(0))
}
fun test1(n: Int): A {
if (i != 1)
throw IllegalStateException("Fail $n")
i = 0
return A(Inner(0))
}
fun set1Boxed(): Any? = set1()
fun test1Boxed(n: Int): Any? = test1(n)
fun box(): String {
try {
set1() == test1(1)
set1Boxed() == test1(2)
set1() == test1Boxed(3)
set1Boxed() == test1Boxed(4)
} catch (e: IllegalStateException) {
return e.message ?: "Fail no message"
}
return "OK"
}
@@ -0,0 +1,32 @@
// !LANGUAGE: +InlineClasses
inline class A(val x: String = "")
var i = 0
fun set1(): A {
i = 1
return A()
}
fun test1(n: Int): A {
if (i != 1)
throw IllegalStateException("Fail $n")
i = 0
return A()
}
fun set1Boxed(): Any? = set1()
fun test1Boxed(n: Int): Any? = test1(n)
fun box(): String {
try {
set1() == test1(1)
set1Boxed() == test1(2)
set1() == test1Boxed(3)
set1Boxed() == test1Boxed(4)
} catch (e: IllegalStateException) {
return e.message ?: "Fail no message"
}
return "OK"
}
@@ -0,0 +1,32 @@
// !LANGUAGE: +InlineClasses
inline class A(val x: Any? = null)
var i = 0
fun set1(): A {
i = 1
return A()
}
fun test1(n: Int): A {
if (i != 1)
throw IllegalStateException("Fail $n")
i = 0
return A()
}
fun set1Boxed(): Any? = set1()
fun test1Boxed(n: Int): Any? = test1(n)
fun box(): String {
try {
set1() == test1(1)
set1Boxed() == test1(2)
set1() == test1Boxed(3)
set1Boxed() == test1Boxed(4)
} catch (e: IllegalStateException) {
return e.message ?: "Fail no message"
}
return "OK"
}
@@ -0,0 +1,32 @@
// !LANGUAGE: +InlineClasses
inline class A(val x: Int = 0)
var i = 0
fun set1(): A {
i = 1
return A()
}
fun test1(n: Int): A {
if (i != 1)
throw IllegalStateException("Fail $n")
i = 0
return A()
}
fun set1Boxed(): Any? = set1()
fun test1Boxed(n: Int): Any? = test1(n)
fun box(): String {
try {
set1() == test1(1)
set1Boxed() == test1(2)
set1() == test1Boxed(3)
set1Boxed() == test1Boxed(4)
} catch (e: IllegalStateException) {
return e.message ?: "Fail no message"
}
return "OK"
}
@@ -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