/*
* Copyright 2012 Phil Pratt-Szeliga and other contributors
* http://chirrup.org/
*
* See the file LICENSE for copying permission.
*/
package org.trifort.rootbeer.testcases.rootbeertest.serialization;
import org.trifort.rootbeer.runtime.Kernel;
public class NativeStrictMathRunOnGpu implements Kernel {
private int i;
private double exp;
private double log;
private double log10;
private double sqrt;
private double cbrt;
private double IEEEremainder;
private double ceil;
private double floor;
private double sin;
private double cos;
private double tan;
private double asin;
private double acos;
private double atan;
private double atan2;
private double pow;
private double sinh;
private double cosh;
private double tanh;
public NativeStrictMathRunOnGpu(int i){
this.i = i;
}
@Override
public void gpuMethod() {
exp = java.lang.StrictMath.exp(i);
log = java.lang.StrictMath.log(i);
log10 = java.lang.StrictMath.log10(i);
sqrt = java.lang.StrictMath.sqrt(i);
cbrt = java.lang.StrictMath.cbrt(i);
IEEEremainder = java.lang.StrictMath.IEEEremainder(i, i+1);
ceil = java.lang.StrictMath.ceil(i);
floor = java.lang.StrictMath.floor(i);
sin = java.lang.StrictMath.sin(i);
tan = java.lang.StrictMath.tan(i);
asin = java.lang.StrictMath.asin(i);
acos = java.lang.StrictMath.acos(i);
atan = java.lang.StrictMath.atan(i);
atan2 = java.lang.StrictMath.atan2(i, i+1);
pow = java.lang.StrictMath.pow(i, i+1);
sinh = java.lang.StrictMath.sinh(i);
cosh = java.lang.StrictMath.cosh(i);
tanh = java.lang.StrictMath.tanh(i);
}
private boolean NaN(double value){
if(value < 0)
return false;
if(value > 0)
return false;
if(value == 0)
return false;
return true;
}
private boolean eq(double lhs, double rhs){
if(NaN(lhs) && NaN(rhs))
return true;
if(lhs == Double.NEGATIVE_INFINITY && rhs == Double.NEGATIVE_INFINITY)
return true;
if(lhs == Double.POSITIVE_INFINITY && rhs == Double.POSITIVE_INFINITY)
return true;
double diff = Math.abs(lhs - rhs);
if(diff < 0.0000000000001)
return true;
return false;
}
boolean compare(NativeStrictMathRunOnGpu grhs) {
if(grhs == null){
System.out.println("grhs == null");
return false;
}
if(!eq(exp, grhs.exp)){
System.out.println("exp");
return false;
}
if(!eq(log, grhs.log)){
System.out.println("log");
System.out.println("lhs: "+log);
System.out.println("rhs: "+grhs.log);
return false;
}
if(!eq(log10, grhs.log10)){
System.out.println("log10");
return false;
}
if(!eq(sqrt, grhs.sqrt)){
System.out.println("sqrt");
return false;
}
if(!eq(cbrt, grhs.cbrt)){
System.out.println("cbrt");
System.out.println("lhs: "+cbrt);
System.out.println("rhs: "+grhs.cbrt);
return false;
}
if(!eq(IEEEremainder, grhs.IEEEremainder)){
System.out.println("IEEEremainder");
System.out.println("lhs: "+IEEEremainder);
System.out.println("rhs: "+grhs.IEEEremainder);
//return false;
}
if(!eq(ceil, grhs.ceil)){
System.out.println("ceil");
return false;
}
if(!eq(floor, grhs.floor)){
System.out.println("floor");
return false;
}
if(!eq(sin, grhs.sin)){
System.out.println("sin");
return false;
}
if(!eq(cos, grhs.cos)){
System.out.println("cos");
return false;
}
if(!eq(tan, grhs.tan)){
System.out.println("tan");
return false;
}
if(!eq(asin, grhs.asin)){
System.out.println("asin");
System.out.println("lhs: "+asin);
System.out.println("rhs: "+grhs.asin);
return false;
}
if(!eq(atan2, grhs.atan2)){
System.out.println("atan2");
return false;
}
if(!eq(pow, grhs.pow)){
System.out.println("pow");
System.out.println("lhs: "+pow);
System.out.println("rhs: "+grhs.pow);
return false;
}
if(!eq(sinh, grhs.sinh)){
System.out.println("sinh");
return false;
}
if(!eq(cosh, grhs.cosh)){
System.out.println("cosh");
return false;
}
if(!eq(tanh, grhs.tanh)){
System.out.println("tanh");
return false;
}
if(!eq(acos, grhs.acos)){
System.out.println("acos");
System.out.println("lhs: "+acos);
System.out.println("rhs: "+grhs.acos);
return false;
}
if(!eq(atan, grhs.atan)){
System.out.println("atan");
return false;
}
return true;
}
}