New ieee754 arithmetic, Fix for KT-14651: Floating point comparisons shall operate according to IEEE754

This commit is contained in:
Mikhael Bogdanov
2016-11-22 16:27:35 +01:00
parent f9b40585cd
commit 627dd66ed5
62 changed files with 1632 additions and 22 deletions
@@ -0,0 +1,16 @@
fun equals3(a: Byte?, b: Byte?) = a != null && b != null && a == b
fun equals4(a: Byte?, b: Byte?) = if (a is Byte && b is Byte) a == b else null!!
fun equals5(a: Any?, b: Any?) = if (a is Byte && b is Byte) a == b else null!!
fun less3(a: Byte?, b: Byte?) = a != null && b != null && a < b
fun less4(a: Byte?, b: Byte?) = if (a is Byte && b is Byte) a < b else true
fun less5(a: Any?, b: Any?) = if (a is Byte && b is Byte) a < b else true
// 3 Intrinsics\.areEqual
// 3 Intrinsics\.compare
// for compare:
// 3 IF_ICMPGE
@@ -0,0 +1,16 @@
fun equals3(a: Char?, b: Char?) = a != null && b != null && a == b
fun equals4(a: Char?, b: Char?) = if (a is Char && b is Char) a == b else null!!
fun equals5(a: Any?, b: Any?) = if (a is Char && b is Char) a == b else null!!
fun less3(a: Char?, b: Char?) = a != null && b != null && a < b
fun less4(a: Char?, b: Char?) = if (a is Char && b is Char) a < b else true
fun less5(a: Any?, b: Any?) = if (a is Char && b is Char) a < b else true
// 3 Intrinsics\.areEqual
// 3 Intrinsics\.compare
// for compare:
// 3 IF_ICMPGE
@@ -0,0 +1,16 @@
fun box(): String {
val zero: Any = 0.0
val floatZero: Any = -0.0F
if (zero is Double && floatZero is Float) {
if (zero == floatZero) return "fail 1"
if (zero <= floatZero) return "fail 2"
return "OK"
}
return "fail"
}
// 1 Intrinsics\.areEqual
// 1 Double\.compare
@@ -0,0 +1,16 @@
fun equals3(a: Int?, b: Int?) = a != null && b != null && a == b
fun equals4(a: Int?, b: Int?) = if (a is Int && b is Int) a == b else null!!
fun equals5(a: Any?, b: Any?) = if (a is Int && b is Int) a == b else null!!
fun less3(a: Int?, b: Int?) = a != null && b != null && a < b
fun less4(a: Int?, b: Int?) = if (a is Int && b is Int) a < b else true
fun less5(a: Any?, b: Any?) = if (a is Int && b is Int) a < b else true
// 3 Intrinsics\.areEqual
// 3 Intrinsics\.compare
// for compare:
// 3 IF_ICMPGE
@@ -0,0 +1,16 @@
fun equals3(a: Long?, b: Long?) = a != null && b != null && a == b
fun equals4(a: Long?, b: Long?) = if (a is Long && b is Long) a == b else null!!
fun equals5(a: Any?, b: Any?) = if (a is Long && b is Long) a == b else null!!
fun less3(a: Long?, b: Long?) = a != null && b != null && a < b
fun less4(a: Long?, b: Long?) = if (a is Long && b is Long) a < b else true
fun less5(a: Any?, b: Any?) = if (a is Long && b is Long) a < b else true
// 3 Intrinsics\.areEqual
// 3 Intrinsics\.compare
// for compare:
// 3 IF_ICMPGE
@@ -0,0 +1,16 @@
fun equals3(a: Short?, b: Short?) = a != null && b != null && a == b
fun equals4(a: Short?, b: Short?) = if (a is Short && b is Short) a == b else null!!
fun equals5(a: Any?, b: Any?) = if (a is Short && b is Short) a == b else null!!
fun less3(a: Short?, b: Short?) = a != null && b != null && a < b
fun less4(a: Short?, b: Short?) = if (a is Short && b is Short) a < b else true
fun less5(a: Any?, b: Any?) = if (a is Short && b is Short) a < b else true
// 3 Intrinsics\.areEqual
// 3 Intrinsics\.compare
// for compare:
// 3 IF_ICMPGE