package org.trifort.rootbeer.testcases.rootbeertest.kerneltemplate;
import org.trifort.rootbeer.runtime.Kernel;
import org.trifort.rootbeer.runtime.RootbeerGpu;
public class DoubleToStringKernelTemplateBuilderRunOnGpu implements Kernel {
private String[] m_toString;
private double[] m_value;
public DoubleToStringKernelTemplateBuilderRunOnGpu(double value, int kernel_count){
m_toString = new String[kernel_count];
for (int i = 0; i < m_toString.length; i++) {
m_toString[i] = "";
}
m_value = new double[kernel_count];
for(int i = 0; i < kernel_count; ++i){
m_value[i] = value;
}
}
public void gpuMethod() {
int thread_id = RootbeerGpu.getThreadId();
double value = m_value[thread_id];
StringBuilder builder = new StringBuilder();
builder.append(value * value);
m_toString[thread_id] = builder.toString();
}
public boolean compare(DoubleToStringKernelTemplateBuilderRunOnGpu rhs) {
for (int i = 0; i < m_toString.length; i++) {
if(rhs.m_toString[i] == null){
System.out.println("rhs.m_toString["+i+"] == null");
return false;
}
String lhs_str = m_toString[i];
String rhs_str = trimZeros(rhs.m_toString[i]);
//System.out.println("lhs_str: '"+lhs_str+"' == '"+rhs_str+"' rhs_str");
if(rhs_str.equals(lhs_str) == false){
System.out.println("m_toString["+i+"]");
System.out.println(" lhs: "+lhs_str);
System.out.println(" rhs: "+rhs_str);
return false;
}
}
return true;
}
private String trimZeros(String string) {
while(string.endsWith("0") || string.endsWith(".")){
string = string.substring(0, string.length()-1);
}
return string;
}
}