Avoid primitive boxing for 'boxed == primitive' if possible
This makes sense for non-floating-point primitive type (boolean, char, byte, short, int, long): floating-point types use specialized versions of 'areEqual'.
This commit is contained in:
compiler/testData/codegen/box/primitiveTypes/equalityWithNullable/boxedEqPrimitiveEvaluationOrder.kt
Vendored
+26
@@ -0,0 +1,26 @@
|
||||
var order: String = ""
|
||||
|
||||
fun a(i: Int): Int? {
|
||||
order += "a"
|
||||
return i
|
||||
}
|
||||
|
||||
fun b(i: Int): Int {
|
||||
order += "b"
|
||||
return i
|
||||
}
|
||||
|
||||
inline fun evaluateAndCheckOrder(marker: String, expectedValue: Boolean, expectedOrder: String, expr: () -> Boolean) {
|
||||
order = ""
|
||||
val actualValue = expr()
|
||||
if (actualValue != expectedValue) throw AssertionError("$marker: Expected: $expectedValue, actual: $actualValue")
|
||||
if (order != expectedOrder) throw AssertionError("$marker, order: Expected: '$expectedOrder', actual: '$order'")
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
evaluateAndCheckOrder("1", true, "ab") { a(1) == b(1) }
|
||||
evaluateAndCheckOrder("2", true, "ab") { a(1) != b(2) }
|
||||
evaluateAndCheckOrder("3", true, "ab") { !(a(1) == b(2)) }
|
||||
evaluateAndCheckOrder("4", true, "ab") { !(a(1) != b(1)) }
|
||||
return "OK"
|
||||
}
|
||||
+41
@@ -0,0 +1,41 @@
|
||||
// Auto-generated by GeneratePrimitiveEqualityWithNullableTestData. Do not edit!
|
||||
|
||||
val nx: Boolean? = true
|
||||
val nn: Boolean? = null
|
||||
val x: Boolean = true
|
||||
val y: Boolean = false
|
||||
|
||||
fun box(): String {
|
||||
val ax: Boolean? = true
|
||||
val an: Boolean? = null
|
||||
val bx: Boolean = true
|
||||
val by: Boolean = false
|
||||
|
||||
return when {
|
||||
nx != true -> "Fail 0"
|
||||
nx == false -> "Fail 1"
|
||||
!(nx == true) -> "Fail 2"
|
||||
!(nx != false) -> "Fail 3"
|
||||
nx != x -> "Fail 4"
|
||||
nx == y -> "Fail 5"
|
||||
!(nx == x) -> "Fail 6"
|
||||
!(nx != y) -> "Fail 7"
|
||||
nn == true -> "Fail 8"
|
||||
!(nn != true) -> "Fail 9"
|
||||
nn == x -> "Fail 10"
|
||||
!(nn != x) -> "Fail 11"
|
||||
ax != true -> "Fail 12"
|
||||
ax == false -> "Fail 13"
|
||||
!(ax == true) -> "Fail 14"
|
||||
!(ax != false) -> "Fail 15"
|
||||
ax != bx -> "Fail 16"
|
||||
ax == by -> "Fail 17"
|
||||
!(ax == bx) -> "Fail 18"
|
||||
!(ax != by) -> "Fail 19"
|
||||
an == true -> "Fail 20"
|
||||
!(an != true) -> "Fail 21"
|
||||
an == bx -> "Fail 22"
|
||||
!(an != bx) -> "Fail 23"
|
||||
else -> "OK"
|
||||
}
|
||||
}
|
||||
Vendored
+41
@@ -0,0 +1,41 @@
|
||||
// Auto-generated by GeneratePrimitiveEqualityWithNullableTestData. Do not edit!
|
||||
|
||||
val nx: Byte? = 0.toByte()
|
||||
val nn: Byte? = null
|
||||
val x: Byte = 0.toByte()
|
||||
val y: Byte = 1.toByte()
|
||||
|
||||
fun box(): String {
|
||||
val ax: Byte? = 0.toByte()
|
||||
val an: Byte? = null
|
||||
val bx: Byte = 0.toByte()
|
||||
val by: Byte = 1.toByte()
|
||||
|
||||
return when {
|
||||
nx != 0.toByte() -> "Fail 0"
|
||||
nx == 1.toByte() -> "Fail 1"
|
||||
!(nx == 0.toByte()) -> "Fail 2"
|
||||
!(nx != 1.toByte()) -> "Fail 3"
|
||||
nx != x -> "Fail 4"
|
||||
nx == y -> "Fail 5"
|
||||
!(nx == x) -> "Fail 6"
|
||||
!(nx != y) -> "Fail 7"
|
||||
nn == 0.toByte() -> "Fail 8"
|
||||
!(nn != 0.toByte()) -> "Fail 9"
|
||||
nn == x -> "Fail 10"
|
||||
!(nn != x) -> "Fail 11"
|
||||
ax != 0.toByte() -> "Fail 12"
|
||||
ax == 1.toByte() -> "Fail 13"
|
||||
!(ax == 0.toByte()) -> "Fail 14"
|
||||
!(ax != 1.toByte()) -> "Fail 15"
|
||||
ax != bx -> "Fail 16"
|
||||
ax == by -> "Fail 17"
|
||||
!(ax == bx) -> "Fail 18"
|
||||
!(ax != by) -> "Fail 19"
|
||||
an == 0.toByte() -> "Fail 20"
|
||||
!(an != 0.toByte()) -> "Fail 21"
|
||||
an == bx -> "Fail 22"
|
||||
!(an != bx) -> "Fail 23"
|
||||
else -> "OK"
|
||||
}
|
||||
}
|
||||
Vendored
+41
@@ -0,0 +1,41 @@
|
||||
// Auto-generated by GeneratePrimitiveEqualityWithNullableTestData. Do not edit!
|
||||
|
||||
val nx: Char? = '0'
|
||||
val nn: Char? = null
|
||||
val x: Char = '0'
|
||||
val y: Char = '1'
|
||||
|
||||
fun box(): String {
|
||||
val ax: Char? = '0'
|
||||
val an: Char? = null
|
||||
val bx: Char = '0'
|
||||
val by: Char = '1'
|
||||
|
||||
return when {
|
||||
nx != '0' -> "Fail 0"
|
||||
nx == '1' -> "Fail 1"
|
||||
!(nx == '0') -> "Fail 2"
|
||||
!(nx != '1') -> "Fail 3"
|
||||
nx != x -> "Fail 4"
|
||||
nx == y -> "Fail 5"
|
||||
!(nx == x) -> "Fail 6"
|
||||
!(nx != y) -> "Fail 7"
|
||||
nn == '0' -> "Fail 8"
|
||||
!(nn != '0') -> "Fail 9"
|
||||
nn == x -> "Fail 10"
|
||||
!(nn != x) -> "Fail 11"
|
||||
ax != '0' -> "Fail 12"
|
||||
ax == '1' -> "Fail 13"
|
||||
!(ax == '0') -> "Fail 14"
|
||||
!(ax != '1') -> "Fail 15"
|
||||
ax != bx -> "Fail 16"
|
||||
ax == by -> "Fail 17"
|
||||
!(ax == bx) -> "Fail 18"
|
||||
!(ax != by) -> "Fail 19"
|
||||
an == '0' -> "Fail 20"
|
||||
!(an != '0') -> "Fail 21"
|
||||
an == bx -> "Fail 22"
|
||||
!(an != bx) -> "Fail 23"
|
||||
else -> "OK"
|
||||
}
|
||||
}
|
||||
Vendored
+41
@@ -0,0 +1,41 @@
|
||||
// Auto-generated by GeneratePrimitiveEqualityWithNullableTestData. Do not edit!
|
||||
|
||||
val nx: Int? = 0
|
||||
val nn: Int? = null
|
||||
val x: Int = 0
|
||||
val y: Int = 1
|
||||
|
||||
fun box(): String {
|
||||
val ax: Int? = 0
|
||||
val an: Int? = null
|
||||
val bx: Int = 0
|
||||
val by: Int = 1
|
||||
|
||||
return when {
|
||||
nx != 0 -> "Fail 0"
|
||||
nx == 1 -> "Fail 1"
|
||||
!(nx == 0) -> "Fail 2"
|
||||
!(nx != 1) -> "Fail 3"
|
||||
nx != x -> "Fail 4"
|
||||
nx == y -> "Fail 5"
|
||||
!(nx == x) -> "Fail 6"
|
||||
!(nx != y) -> "Fail 7"
|
||||
nn == 0 -> "Fail 8"
|
||||
!(nn != 0) -> "Fail 9"
|
||||
nn == x -> "Fail 10"
|
||||
!(nn != x) -> "Fail 11"
|
||||
ax != 0 -> "Fail 12"
|
||||
ax == 1 -> "Fail 13"
|
||||
!(ax == 0) -> "Fail 14"
|
||||
!(ax != 1) -> "Fail 15"
|
||||
ax != bx -> "Fail 16"
|
||||
ax == by -> "Fail 17"
|
||||
!(ax == bx) -> "Fail 18"
|
||||
!(ax != by) -> "Fail 19"
|
||||
an == 0 -> "Fail 20"
|
||||
!(an != 0) -> "Fail 21"
|
||||
an == bx -> "Fail 22"
|
||||
!(an != bx) -> "Fail 23"
|
||||
else -> "OK"
|
||||
}
|
||||
}
|
||||
Vendored
+41
@@ -0,0 +1,41 @@
|
||||
// Auto-generated by GeneratePrimitiveEqualityWithNullableTestData. Do not edit!
|
||||
|
||||
val nx: Long? = 0L
|
||||
val nn: Long? = null
|
||||
val x: Long = 0L
|
||||
val y: Long = 1L
|
||||
|
||||
fun box(): String {
|
||||
val ax: Long? = 0L
|
||||
val an: Long? = null
|
||||
val bx: Long = 0L
|
||||
val by: Long = 1L
|
||||
|
||||
return when {
|
||||
nx != 0L -> "Fail 0"
|
||||
nx == 1L -> "Fail 1"
|
||||
!(nx == 0L) -> "Fail 2"
|
||||
!(nx != 1L) -> "Fail 3"
|
||||
nx != x -> "Fail 4"
|
||||
nx == y -> "Fail 5"
|
||||
!(nx == x) -> "Fail 6"
|
||||
!(nx != y) -> "Fail 7"
|
||||
nn == 0L -> "Fail 8"
|
||||
!(nn != 0L) -> "Fail 9"
|
||||
nn == x -> "Fail 10"
|
||||
!(nn != x) -> "Fail 11"
|
||||
ax != 0L -> "Fail 12"
|
||||
ax == 1L -> "Fail 13"
|
||||
!(ax == 0L) -> "Fail 14"
|
||||
!(ax != 1L) -> "Fail 15"
|
||||
ax != bx -> "Fail 16"
|
||||
ax == by -> "Fail 17"
|
||||
!(ax == bx) -> "Fail 18"
|
||||
!(ax != by) -> "Fail 19"
|
||||
an == 0L -> "Fail 20"
|
||||
!(an != 0L) -> "Fail 21"
|
||||
an == bx -> "Fail 22"
|
||||
!(an != bx) -> "Fail 23"
|
||||
else -> "OK"
|
||||
}
|
||||
}
|
||||
compiler/testData/codegen/box/primitiveTypes/equalityWithNullable/generated/boxedEqPrimitiveShort.kt
Vendored
+41
@@ -0,0 +1,41 @@
|
||||
// Auto-generated by GeneratePrimitiveEqualityWithNullableTestData. Do not edit!
|
||||
|
||||
val nx: Short? = 0.toShort()
|
||||
val nn: Short? = null
|
||||
val x: Short = 0.toShort()
|
||||
val y: Short = 1.toShort()
|
||||
|
||||
fun box(): String {
|
||||
val ax: Short? = 0.toShort()
|
||||
val an: Short? = null
|
||||
val bx: Short = 0.toShort()
|
||||
val by: Short = 1.toShort()
|
||||
|
||||
return when {
|
||||
nx != 0.toShort() -> "Fail 0"
|
||||
nx == 1.toShort() -> "Fail 1"
|
||||
!(nx == 0.toShort()) -> "Fail 2"
|
||||
!(nx != 1.toShort()) -> "Fail 3"
|
||||
nx != x -> "Fail 4"
|
||||
nx == y -> "Fail 5"
|
||||
!(nx == x) -> "Fail 6"
|
||||
!(nx != y) -> "Fail 7"
|
||||
nn == 0.toShort() -> "Fail 8"
|
||||
!(nn != 0.toShort()) -> "Fail 9"
|
||||
nn == x -> "Fail 10"
|
||||
!(nn != x) -> "Fail 11"
|
||||
ax != 0.toShort() -> "Fail 12"
|
||||
ax == 1.toShort() -> "Fail 13"
|
||||
!(ax == 0.toShort()) -> "Fail 14"
|
||||
!(ax != 1.toShort()) -> "Fail 15"
|
||||
ax != bx -> "Fail 16"
|
||||
ax == by -> "Fail 17"
|
||||
!(ax == bx) -> "Fail 18"
|
||||
!(ax != by) -> "Fail 19"
|
||||
an == 0.toShort() -> "Fail 20"
|
||||
!(an != 0.toShort()) -> "Fail 21"
|
||||
an == bx -> "Fail 22"
|
||||
!(an != bx) -> "Fail 23"
|
||||
else -> "OK"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
fun testBoolean1(a: Boolean?, b: Boolean) = a == b
|
||||
fun testBoolean2(a: Boolean?, b: Boolean) = a != b
|
||||
|
||||
fun testChar1(a: Char?, b: Char) = a == b
|
||||
fun testChar2(a: Char?, b: Char) = a != b
|
||||
|
||||
fun testByte1(a: Byte?, b: Byte) = a == b
|
||||
fun testByte2(a: Byte?, b: Byte) = a != b
|
||||
|
||||
fun testShort1(a: Short?, b: Short) = a == b
|
||||
fun testShort2(a: Short?, b: Short) = a != b
|
||||
|
||||
fun testInt1(a: Int?, b: Int) = a == b
|
||||
fun testInt2(a: Int?, b: Int) = a != b
|
||||
|
||||
fun testLong1(a: Long?, b: Long) = a == b
|
||||
fun testLong2(a: Long?, b: Long) = a != b
|
||||
|
||||
// 2 booleanValue
|
||||
// 2 charValue
|
||||
// 2 byteValue
|
||||
// 2 shortValue
|
||||
// 2 intValue
|
||||
// 2 longValue
|
||||
// 0 valueOf
|
||||
// 0 areEqual
|
||||
Reference in New Issue
Block a user