Fix for KT-15868: NPE when comparing nullable doubles
#KT-15868 Fixed
This commit is contained in:
@@ -23,7 +23,11 @@ fun box(): String {
|
||||
if (!equals5(-0.0, 0.0)) return "fail 5"
|
||||
if (!equals6(-0.0, 0.0)) return "fail 6"
|
||||
if (!equals7(-0.0, 0.0)) return "fail 7"
|
||||
|
||||
if (!equals8(-0.0, 0.0)) return "fail 8"
|
||||
if (!equals8(null, null)) return "fail 9"
|
||||
if (equals8(null, 0.0)) return "fail 10"
|
||||
if (equals8(0.0, null)) return "fail 11"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
fun equals1(a: Float, b: Float?) = a == b
|
||||
|
||||
fun equals2(a: Float?, b: Float?) = a!! == b!!
|
||||
|
||||
fun equals3(a: Float?, b: Float?) = a != null && a == b
|
||||
|
||||
fun equals4(a: Float?, b: Float?) = if (a is Float) a == b else null!!
|
||||
|
||||
fun equals5(a: Any?, b: Any?) = if (a is Float && b is Float?) a == b else null!!
|
||||
|
||||
fun equals6(a: Any?, b: Any?) = if (a is Float? && b is Float) a == b else null!!
|
||||
|
||||
fun equals7(a: Float?, b: Float?) = a == b
|
||||
|
||||
fun equals8(a: Any?, b: Any?) = if (a is Float? && b is Float?) a == b else null!!
|
||||
|
||||
|
||||
fun box(): String {
|
||||
if (!equals1(-0.0F, 0.0F)) return "fail 1"
|
||||
if (!equals2(-0.0F, 0.0F)) return "fail 2"
|
||||
if (!equals3(-0.0F, 0.0F)) return "fail 3"
|
||||
if (!equals4(-0.0F, 0.0F)) return "fail 4"
|
||||
if (!equals5(-0.0F, 0.0F)) return "fail 5"
|
||||
if (!equals6(-0.0F, 0.0F)) return "fail 6"
|
||||
if (!equals7(-0.0F, 0.0F)) return "fail 7"
|
||||
|
||||
if (!equals8(-0.0F, 0.0F)) return "fail 8"
|
||||
if (!equals8(null, null)) return "fail 9"
|
||||
if (equals8(null, 0.0F)) return "fail 10"
|
||||
if (equals8(0.0F, null)) return "fail 11"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
fun myEquals(a: Double?, b: Double?) = a == b
|
||||
|
||||
fun myEquals1(a: Double?, b: Double) = a == b
|
||||
|
||||
fun myEquals2(a: Double, b: Double?) = a == b
|
||||
|
||||
fun myEquals0(a: Double, b: Double) = a == b
|
||||
|
||||
|
||||
fun box(): String {
|
||||
if (!myEquals(null, null)) return "fail 1"
|
||||
if (myEquals(null, 0.0)) return "fail 2"
|
||||
if (myEquals(0.0, null)) return "fail 3"
|
||||
if (!myEquals(0.0, 0.0)) return "fail 4"
|
||||
|
||||
if (myEquals1(null, 0.0)) return "fail 5"
|
||||
if (!myEquals1(0.0, 0.0)) return "fail 6"
|
||||
|
||||
if (myEquals2(0.0, null)) return "fail 7"
|
||||
if (!myEquals2(0.0, 0.0)) return "fail 8"
|
||||
|
||||
if (!myEquals0(0.0, 0.0)) return "fail 9"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
fun myNotEquals(a: Double?, b: Double?) = a != b
|
||||
|
||||
fun myNotEquals1(a: Double?, b: Double) = a != b
|
||||
|
||||
fun myNotEquals2(a: Double, b: Double?) = a != b
|
||||
|
||||
fun myNotEquals0(a: Double, b: Double) = a != b
|
||||
|
||||
|
||||
fun box(): String {
|
||||
if (myNotEquals(null, null)) return "fail 1"
|
||||
if (!myNotEquals(null, 0.0)) return "fail 2"
|
||||
if (!myNotEquals(0.0, null)) return "fail 3"
|
||||
if (myNotEquals(0.0, 0.0)) return "fail 4"
|
||||
|
||||
if (!myNotEquals1(null, 0.0)) return "fail 5"
|
||||
if (myNotEquals1(0.0, 0.0)) return "fail 6"
|
||||
|
||||
if (!myNotEquals2(0.0, null)) return "fail 7"
|
||||
if (myNotEquals2(0.0, 0.0)) return "fail 8"
|
||||
|
||||
if (myNotEquals0(0.0, 0.0)) return "fail 9"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
fun myEquals(a: Float?, b: Float?) = a == b
|
||||
|
||||
fun myEquals1(a: Float?, b: Float) = a == b
|
||||
|
||||
fun myEquals2(a: Float, b: Float?) = a == b
|
||||
|
||||
fun myEquals0(a: Float, b: Float) = a == b
|
||||
|
||||
|
||||
fun box(): String {
|
||||
if (!myEquals(null, null)) return "fail 1"
|
||||
if (myEquals(null, 0.0F)) return "fail 2"
|
||||
if (myEquals(0.0F, null)) return "fail 3"
|
||||
if (!myEquals(0.0F, 0.0F)) return "fail 4"
|
||||
|
||||
if (myEquals1(null, 0.0F)) return "fail 5"
|
||||
if (!myEquals1(0.0F, 0.0F)) return "fail 6"
|
||||
|
||||
if (myEquals2(0.0F, null)) return "fail 7"
|
||||
if (!myEquals2(0.0F, 0.0F)) return "fail 8"
|
||||
|
||||
if (!myEquals0(0.0F, 0.0F)) return "fail 9"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
fun myNotEquals(a: Float?, b: Float?) = a != b
|
||||
|
||||
fun myNotEquals1(a: Float?, b: Float) = a != b
|
||||
|
||||
fun myNotEquals2(a: Float, b: Float?) = a != b
|
||||
|
||||
fun myNotEquals0(a: Float, b: Float) = a != b
|
||||
|
||||
|
||||
fun box(): String {
|
||||
if (myNotEquals(null, null)) return "fail 1"
|
||||
if (!myNotEquals(null, 0.0F)) return "fail 2"
|
||||
if (!myNotEquals(0.0F, null)) return "fail 3"
|
||||
if (myNotEquals(0.0F, 0.0F)) return "fail 4"
|
||||
|
||||
if (!myNotEquals1(null, 0.0F)) return "fail 5"
|
||||
if (myNotEquals1(0.0F, 0.0F)) return "fail 6"
|
||||
|
||||
if (!myNotEquals2(0.0F, null)) return "fail 7"
|
||||
if (myNotEquals2(0.0F, 0.0F)) return "fail 8"
|
||||
|
||||
if (myNotEquals0(0.0F, 0.0F)) return "fail 9"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
//NB: special ieee754 arithmetic logic is not applied to Int comparison
|
||||
fun myEquals(a: Int?, b: Int?) = a == b
|
||||
|
||||
fun myEquals1(a: Int?, b: Int) = a == b
|
||||
|
||||
fun myEquals2(a: Int, b: Int?) = a == b
|
||||
|
||||
fun myEquals0(a: Int, b: Int) = a == b
|
||||
|
||||
|
||||
fun box(): String {
|
||||
if (!myEquals(null, null)) return "fail 1"
|
||||
if (myEquals(null, 0)) return "fail 2"
|
||||
if (myEquals(0, null)) return "fail 3"
|
||||
if (!myEquals(0, 0)) return "fail 4"
|
||||
|
||||
if (myEquals1(null, 0)) return "fail 5"
|
||||
if (!myEquals1(0, 0)) return "fail 6"
|
||||
|
||||
if (myEquals2(0, null)) return "fail 7"
|
||||
if (!myEquals2(0, 0)) return "fail 8"
|
||||
|
||||
if (!myEquals0(0, 0)) return "fail 9"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
Reference in New Issue
Block a user