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"
|
||||
}
|
||||
@@ -35,8 +35,14 @@ fun box(): String {
|
||||
|
||||
if (jClass.minus0() != jClass.plus0()) return "fail 5"
|
||||
|
||||
//TODO: KT-14989
|
||||
//if (jClass.null0() != jClass.plus0()) return "fail 6"
|
||||
var value = jClass.minus0() == jClass.plus0()
|
||||
if (!value) return "fail 6"
|
||||
|
||||
if (jClass.null0() == jClass.plus0()) return "fail 7"
|
||||
if (jClass.plus0() == jClass.null0()) return "fail 8"
|
||||
|
||||
value = jClass.null0() == jClass.null0()
|
||||
if (!value) return "fail 9"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
|
||||
@@ -38,8 +38,14 @@ fun box(): String {
|
||||
|
||||
if (jClass.minus0() != jClass.plus0()) return "fail 5"
|
||||
|
||||
//TODO: KT-14989
|
||||
//if (jClass.null0() != jClass.plus0()) return "fail 6"
|
||||
var value = jClass.minus0() == jClass.plus0()
|
||||
if (!value) return "fail 6"
|
||||
|
||||
if (jClass.null0() == jClass.plus0()) return "fail 7"
|
||||
if (jClass.plus0() == jClass.null0()) return "fail 8"
|
||||
|
||||
value = jClass.null0() == jClass.null0()
|
||||
if (!value) return "fail 9"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
@kotlin.Metadata
|
||||
public final class EqualsNullableFloatKt {
|
||||
public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String
|
||||
public final static method equals1(p0: float, @org.jetbrains.annotations.Nullable p1: java.lang.Float): boolean
|
||||
public final static method equals2(@org.jetbrains.annotations.Nullable p0: java.lang.Float, @org.jetbrains.annotations.Nullable p1: java.lang.Float): boolean
|
||||
public final static method equals3(@org.jetbrains.annotations.Nullable p0: java.lang.Float, @org.jetbrains.annotations.Nullable p1: java.lang.Float): boolean
|
||||
public final static method equals4(@org.jetbrains.annotations.Nullable p0: java.lang.Float, @org.jetbrains.annotations.Nullable p1: java.lang.Float): boolean
|
||||
public final static method equals5(@org.jetbrains.annotations.Nullable p0: java.lang.Object, @org.jetbrains.annotations.Nullable p1: java.lang.Object): boolean
|
||||
public final static method equals6(@org.jetbrains.annotations.Nullable p0: java.lang.Object, @org.jetbrains.annotations.Nullable p1: java.lang.Object): boolean
|
||||
public final static method equals7(@org.jetbrains.annotations.Nullable p0: java.lang.Float, @org.jetbrains.annotations.Nullable p1: java.lang.Float): boolean
|
||||
public final static method equals8(@org.jetbrains.annotations.Nullable p0: java.lang.Object, @org.jetbrains.annotations.Nullable p1: java.lang.Object): boolean
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
@kotlin.Metadata
|
||||
public final class NullableDoubleEqualsKt {
|
||||
public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String
|
||||
public final static method myNotEquals(@org.jetbrains.annotations.Nullable p0: java.lang.Double, @org.jetbrains.annotations.Nullable p1: java.lang.Double): boolean
|
||||
public final static method myNotEquals0(p0: double, p1: double): boolean
|
||||
public final static method myNotEquals1(@org.jetbrains.annotations.Nullable p0: java.lang.Double, p1: double): boolean
|
||||
public final static method myNotEquals2(p0: double, @org.jetbrains.annotations.Nullable p1: java.lang.Double): boolean
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
@kotlin.Metadata
|
||||
public final class NullableDoubleNotEqualsKt {
|
||||
public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String
|
||||
public final static method myEquals(@org.jetbrains.annotations.Nullable p0: java.lang.Double, @org.jetbrains.annotations.Nullable p1: java.lang.Double): boolean
|
||||
public final static method myEquals0(p0: double, p1: double): boolean
|
||||
public final static method myEquals1(@org.jetbrains.annotations.Nullable p0: java.lang.Double, p1: double): boolean
|
||||
public final static method myEquals2(p0: double, @org.jetbrains.annotations.Nullable p1: java.lang.Double): boolean
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
@kotlin.Metadata
|
||||
public final class NullableFloatEqualsKt {
|
||||
public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String
|
||||
public final static method myEquals(@org.jetbrains.annotations.Nullable p0: java.lang.Float, @org.jetbrains.annotations.Nullable p1: java.lang.Float): boolean
|
||||
public final static method myEquals0(p0: float, p1: float): boolean
|
||||
public final static method myEquals1(@org.jetbrains.annotations.Nullable p0: java.lang.Float, p1: float): boolean
|
||||
public final static method myEquals2(p0: float, @org.jetbrains.annotations.Nullable p1: java.lang.Float): boolean
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
@kotlin.Metadata
|
||||
public final class NullableFloatNotEqualsKt {
|
||||
public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String
|
||||
public final static method myNotEquals(@org.jetbrains.annotations.Nullable p0: java.lang.Float, @org.jetbrains.annotations.Nullable p1: java.lang.Float): boolean
|
||||
public final static method myNotEquals0(p0: float, p1: float): boolean
|
||||
public final static method myNotEquals1(@org.jetbrains.annotations.Nullable p0: java.lang.Float, p1: float): boolean
|
||||
public final static method myNotEquals2(p0: float, @org.jetbrains.annotations.Nullable p1: java.lang.Float): boolean
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
@kotlin.Metadata
|
||||
public final class NullableIntEqualsKt {
|
||||
public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String
|
||||
public final static method myEquals(@org.jetbrains.annotations.Nullable p0: java.lang.Integer, @org.jetbrains.annotations.Nullable p1: java.lang.Integer): boolean
|
||||
public final static method myEquals0(p0: int, p1: int): boolean
|
||||
public final static method myEquals1(@org.jetbrains.annotations.Nullable p0: java.lang.Integer, p1: int): boolean
|
||||
public final static method myEquals2(p0: int, @org.jetbrains.annotations.Nullable p1: java.lang.Integer): boolean
|
||||
}
|
||||
Reference in New Issue
Block a user