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,27 @@
// FILE: JavaClass.java
public class JavaClass {
public Object minus0()
{
return -0.0;
}
public Object plus0()
{
return 0.0;
}
}
// FILE: b.kt
fun box(): String {
val jClass = JavaClass()
if ((jClass.minus0() as Double) < (jClass.plus0() as Double)) return "fail 1"
if ((jClass.minus0() as Double) != (jClass.plus0() as Double)) return "fail 2"
return "OK"
}
@@ -0,0 +1,26 @@
// FILE: JavaClass.java
public class JavaClass {
public Double minus0()
{
return -0.0;
}
public Double plus0()
{
return 0.0;
}
}
// FILE: b.kt
fun box(): String {
val jClass = JavaClass()
if ((jClass.minus0() as Comparable<Double>) >= jClass.plus0()) return "fail 1"
if ((jClass.minus0() as Comparable<Double>) == jClass.plus0()) return "fail 2"
if (jClass.minus0() == (jClass.plus0() as Comparable<Double>)) return "fail 3"
return "OK"
}
@@ -0,0 +1,43 @@
// FILE: JavaClass.java
public class JavaClass {
public Double minus0(){
return -0.0;
}
public Double plus0(){
return 0.0;
}
public Double null0(){
return null;
}
}
// FILE: b.kt
fun box(): String {
val jClass = JavaClass()
if (jClass.minus0() < jClass.plus0()) return "fail 1"
//TODO: KT-14989
//if (jClass.null0() < jClass.plus0()) return "fail 2"
if (jClass.plus0() > jClass.minus0()) return "fail 3"
//TODO: KT-14989
//if (jClass.null0() < jClass.plus0()) return "fail 4"
if (jClass.minus0() != jClass.plus0()) return "fail 5"
//TODO: KT-14989
//if (jClass.null0() != jClass.plus0()) return "fail 6"
return "OK"
}
@@ -0,0 +1,38 @@
// FILE: JavaClass.java
public class JavaClass {
public Double minus0(){
return -0.0;
}
public Double plus0(){
return 0.0;
}
public Double null0(){
return null;
}
}
// FILE: b.kt
fun box(): String {
val jClass = JavaClass()
if (jClass.minus0().compareTo(jClass.plus0()) != -1) return "fail 1"
//TODO: KT-14989
//if (jClass.null0().compareTo(jClass.plus0())) return "fail 2"
try {
if (jClass.minus0().compareTo(jClass.null0()) != -2) return "fail 3"
return "fail: exception expected";
} catch (e: IllegalStateException) {
}
return "OK"
}
@@ -0,0 +1,31 @@
// FILE: JavaClass.java
public class JavaClass {
public Double minus0(){
return -0.0;
}
public Double plus0(){
return 0.0;
}
public Double null0(){
return null;
}
}
// FILE: b.kt
fun box(): String {
val jClass = JavaClass()
if (jClass.minus0().equals(jClass.plus0())) return "fail 5"
if (jClass.null0().equals(jClass.plus0())) return "fail 6"
if (jClass.minus0().equals(jClass.null0())) return "fail 7"
return "OK"
}
@@ -0,0 +1,46 @@
// FILE: JavaClass.java
public class JavaClass {
public Float minus0()
{
return -0.0F;
}
public Float plus0()
{
return 0.0F;
}
public Float null0()
{
return null;
}
}
// FILE: b.kt
fun box(): String {
val jClass = JavaClass()
if (jClass.minus0() < jClass.plus0()) return "fail 1"
//TODO: KT-14989
//if (jClass.null0() < jClass.plus0()) return "fail 2"
if (jClass.plus0() > jClass.minus0()) return "fail 3"
//TODO: KT-14989
//if (jClass.null0() < jClass.plus0()) return "fail 4"
if (jClass.minus0() != jClass.plus0()) return "fail 5"
//TODO: KT-14989
//if (jClass.null0() != jClass.plus0()) return "fail 6"
return "OK"
}
@@ -0,0 +1,36 @@
// FILE: JavaClass.java
public class JavaClass<T> {
private T minus0;
private T plus0;
JavaClass(T minus0, T plus0)
{
this.minus0 = minus0;
this.plus0 = plus0;
}
public T minus0()
{
return minus0;
}
public T plus0()
{
return plus0;
}
}
// FILE: b.kt
fun box(): String {
val jClass = JavaClass<Double>(-0.0, 0.0)
if (jClass.minus0() < jClass.plus0()) return "fail 2"
if (jClass.minus0() != jClass.plus0()) return "fail 5"
return "OK"
}
@@ -0,0 +1,26 @@
// FILE: JavaClass.java
public class JavaClass {
public Object minus0()
{
return -0.0;
}
public Object plus0()
{
return 0.0;
}
}
// FILE: b.kt
fun box(): String {
val jClass = JavaClass()
if ((jClass.minus0() as Double) < (jClass.plus0() as Double)) return "fail 2"
if ((jClass.minus0() as Double) != (jClass.plus0() as Double)) return "fail 5"
return "OK"
}