package de.gaalop.testbenchVisualizer;
import de.gaalop.AlgebraStrategy;
import de.gaalop.CodeParser;
import de.gaalop.CodeParserException;
import de.gaalop.InputFile;
import de.gaalop.OptimizationException;
import de.gaalop.algebra.AlStrategy;
import de.gaalop.api.cfg.AssignmentNodeCollector;
import de.gaalop.cfg.AssignmentNode;
import de.gaalop.cfg.ControlFlowGraph;
import de.gaalop.clucalc.input.CluCalcCodeParser;
import de.gaalop.dfg.Addition;
import de.gaalop.dfg.Exponentiation;
import de.gaalop.dfg.Expression;
import de.gaalop.dfg.FloatConstant;
import de.gaalop.dfg.Multiplication;
import de.gaalop.dfg.MultivectorComponent;
import de.gaalop.dfg.Variable;
import de.gaalop.visitors.CFGReplaceVisitor;
import de.gaalop.visitors.ReplaceVisitor;
import de.gaalop.visualizer.CFGDifferentiater;
import de.gaalop.visualizer.DFGDifferentiater;
import de.gaalop.visualizer.zerofinding.Evaluater;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.junit.Test;
import static org.junit.Assert.*;
/**
*
* @author Christian
*/
public class TestDifferentiater {
public static ControlFlowGraph parseGraph(String cluscript) throws CodeParserException {
CodeParser cp = new de.gaalop.clucalc.input.Plugin().createCodeParser();
ControlFlowGraph graph = cp.parseFile(new InputFile("test", cluscript));
graph.algebraName = "5d";
graph.asRessource = true;
graph.algebraBaseDirectory = "";
AlgebraStrategy algStr = new de.gaalop.algebra.Plugin().createAlgebraStrategy();
try {
algStr.transform(graph);
} catch (OptimizationException ex) {
fail("OptimizationException");
Logger.getLogger(TestDifferentiater.class.getName()).log(Level.SEVERE, null, ex);
}
CFGReplaceVisitor rep = new CFGReplaceVisitor(new ReplaceVisitor() {
@Override
public void visit(Variable node) {
if (node.getName().contains("_")) {
String[] parts = node.getName().split("_");
result = new MultivectorComponent(parts[0], Integer.parseInt(parts[1]));
}
super.visit(node);
}
});
graph.accept(rep);
return graph;
}
private LinkedList<AssignmentNode> diffCluScript(String cluscript, String mv) throws CodeParserException {
String[] parts = mv.split("_");
AssignmentNodeCollector col = new AssignmentNodeCollector();
parseGraph(cluscript).accept(col);
return new CFGDifferentiater().differentiate(col.getAssignmentNodes(), new MultivectorComponent(parts[0], Integer.parseInt(parts[1])));
}
@Test
public void additionRConst() throws CodeParserException {
HashMap<MultivectorComponent, Double> values = new HashMap<MultivectorComponent, Double>();
// Begin Inputs
LinkedList<AssignmentNode> e = diffCluScript("?out_0 = x_0*2+y_0;", "x_0");
values.put(new MultivectorComponent("x", 0), 2d);
values.put(new MultivectorComponent("y", 0), 3d);
// End Inputs
Evaluater evaluater = new Evaluater(values);
evaluater.evaluate(e);
// Begin Tests
assertEquals(2, values.get(new MultivectorComponent("out", 0)),10E-3);
// End Tests
}
@Test
public void additionLConst() throws CodeParserException {
HashMap<MultivectorComponent, Double> values = new HashMap<MultivectorComponent, Double>();
// Begin Inputs
LinkedList<AssignmentNode> e = diffCluScript("?out_0 = y_0+x_0*2;", "x_0");
values.put(new MultivectorComponent("x", 0), 2d);
values.put(new MultivectorComponent("y", 0), 3d);
// End Inputs
Evaluater evaluater = new Evaluater(values);
evaluater.evaluate(e);
// Begin Tests
assertEquals(2, values.get(new MultivectorComponent("out", 0)),10E-3);
// End Tests
}
@Test
public void additionBConst() throws CodeParserException {
HashMap<MultivectorComponent, Double> values = new HashMap<MultivectorComponent, Double>();
// Begin Inputs
LinkedList<AssignmentNode> e = diffCluScript("?out_0 = y_0+z_0*2;", "x_0");
values.put(new MultivectorComponent("z", 0), 2d);
values.put(new MultivectorComponent("y", 0), 3d);
// End Inputs
Evaluater evaluater = new Evaluater(values);
evaluater.evaluate(e);
// Begin Tests
assertEquals(0, values.get(new MultivectorComponent("out", 0)),10E-3);
// End Tests
}
@Test
public void additionNoConst() throws CodeParserException {
HashMap<MultivectorComponent, Double> values = new HashMap<MultivectorComponent, Double>();
// Begin Inputs
LinkedList<AssignmentNode> e = diffCluScript("?out_0 = x_0+x_0*2;", "x_0");
values.put(new MultivectorComponent("x", 0), 2d);
values.put(new MultivectorComponent("y", 0), 3d);
// End Inputs
Evaluater evaluater = new Evaluater(values);
evaluater.evaluate(e);
// Begin Tests
assertEquals(3, values.get(new MultivectorComponent("out", 0)),10E-3);
// End Tests
}
@Test
public void subtractionRConst() throws CodeParserException {
HashMap<MultivectorComponent, Double> values = new HashMap<MultivectorComponent, Double>();
// Begin Inputs
LinkedList<AssignmentNode> e = diffCluScript("?out_0 = x_0*2-y_0;", "x_0");
values.put(new MultivectorComponent("x", 0), 2d);
values.put(new MultivectorComponent("y", 0), 3d);
// End Inputs
Evaluater evaluater = new Evaluater(values);
evaluater.evaluate(e);
// Begin Tests
assertEquals(2, values.get(new MultivectorComponent("out", 0)),10E-3);
// End Tests
}
@Test
public void subtractionLConst() throws CodeParserException {
HashMap<MultivectorComponent, Double> values = new HashMap<MultivectorComponent, Double>();
// Begin Inputs
LinkedList<AssignmentNode> e = diffCluScript("?out_0 = y_0-x_0*2;", "x_0");
values.put(new MultivectorComponent("x", 0), 2d);
values.put(new MultivectorComponent("y", 0), 3d);
// End Inputs
Evaluater evaluater = new Evaluater(values);
evaluater.evaluate(e);
// Begin Tests
assertEquals(-2, values.get(new MultivectorComponent("out", 0)),10E-3);
// End Tests
}
@Test
public void subtractionBConst() throws CodeParserException {
HashMap<MultivectorComponent, Double> values = new HashMap<MultivectorComponent, Double>();
// Begin Inputs
LinkedList<AssignmentNode> e = diffCluScript("?out_0 = y_0-z_0*2;", "x_0");
values.put(new MultivectorComponent("z", 0), 2d);
values.put(new MultivectorComponent("y", 0), 3d);
// End Inputs
Evaluater evaluater = new Evaluater(values);
evaluater.evaluate(e);
// Begin Tests
assertEquals(0, values.get(new MultivectorComponent("out", 0)),10E-3);
// End Tests
}
@Test
public void subtractionNoConst() throws CodeParserException {
HashMap<MultivectorComponent, Double> values = new HashMap<MultivectorComponent, Double>();
// Begin Inputs
LinkedList<AssignmentNode> e = diffCluScript("?out_0 = x_0-x_0*2;", "x_0");
values.put(new MultivectorComponent("x", 0), 2d);
values.put(new MultivectorComponent("y", 0), 3d);
// End Inputs
Evaluater evaluater = new Evaluater(values);
evaluater.evaluate(e);
// Begin Tests
assertEquals(-1, values.get(new MultivectorComponent("out", 0)),10E-3);
// End Tests
}
@Test
public void multiplicationRConst() throws CodeParserException {
HashMap<MultivectorComponent, Double> values = new HashMap<MultivectorComponent, Double>();
// Begin Inputs
LinkedList<AssignmentNode> e = diffCluScript("?out_0 = (2*x_0+1)*y_0;", "x_0");
values.put(new MultivectorComponent("x", 0), 2d);
values.put(new MultivectorComponent("y", 0), 3d);
// End Inputs
Evaluater evaluater = new Evaluater(values);
evaluater.evaluate(e);
// Begin Tests
assertEquals(6, values.get(new MultivectorComponent("out", 0)),10E-3);
// End Tests
}
@Test
public void multiplicationLConst() throws CodeParserException {
HashMap<MultivectorComponent, Double> values = new HashMap<MultivectorComponent, Double>();
// Begin Inputs
LinkedList<AssignmentNode> e = diffCluScript("?out_0 = y_0*(2*x_0+1);", "x_0");
values.put(new MultivectorComponent("x", 0), 2d);
values.put(new MultivectorComponent("y", 0), 3d);
// End Inputs
Evaluater evaluater = new Evaluater(values);
evaluater.evaluate(e);
// Begin Tests
assertEquals(6, values.get(new MultivectorComponent("out", 0)),10E-3);
// End Tests
}
@Test
public void multiplicationBConst() throws CodeParserException {
HashMap<MultivectorComponent, Double> values = new HashMap<MultivectorComponent, Double>();
// Begin Inputs
LinkedList<AssignmentNode> e = diffCluScript("?out_0 = y_0*z_0;", "x_0");
values.put(new MultivectorComponent("z", 0), 2d);
values.put(new MultivectorComponent("y", 0), 3d);
// End Inputs
Evaluater evaluater = new Evaluater(values);
evaluater.evaluate(e);
// Begin Tests
assertEquals(0, values.get(new MultivectorComponent("out", 0)),10E-3);
// End Tests
}
@Test
public void multiplicationNoConst() throws CodeParserException {
HashMap<MultivectorComponent, Double> values = new HashMap<MultivectorComponent, Double>();
// Begin Inputs
LinkedList<AssignmentNode> e = diffCluScript("?out_0 = (2*x_0+1)*(2*x_0+1);", "x_0");
values.put(new MultivectorComponent("x", 0), 2d);
values.put(new MultivectorComponent("y", 0), 3d);
// End Inputs
Evaluater evaluater = new Evaluater(values);
evaluater.evaluate(e);
// Begin Tests
assertEquals(20, values.get(new MultivectorComponent("out", 0)),10E-3);
// End Tests
}
@Test
public void divisionRConst() throws CodeParserException {
HashMap<MultivectorComponent, Double> values = new HashMap<MultivectorComponent, Double>();
// Begin Inputs
LinkedList<AssignmentNode> e = diffCluScript("?out_0 = (2*x_0+1)/y_0;", "x_0");
values.put(new MultivectorComponent("x", 0), 2d);
values.put(new MultivectorComponent("y", 0), 3d);
// End Inputs
Evaluater evaluater = new Evaluater(values);
evaluater.evaluate(e);
// Begin Tests
assertEquals(2.0/3, values.get(new MultivectorComponent("out", 0)),10E-3);
// End Tests
}
@Test
public void divisionLConst() throws CodeParserException {
HashMap<MultivectorComponent, Double> values = new HashMap<MultivectorComponent, Double>();
// Begin Inputs
LinkedList<AssignmentNode> e = diffCluScript("?out_0 = y_0/(2*x_0+1);", "x_0");
values.put(new MultivectorComponent("x", 0), 2d);
values.put(new MultivectorComponent("y", 0), 3d);
// End Inputs
Evaluater evaluater = new Evaluater(values);
evaluater.evaluate(e);
// Begin Tests
assertEquals(-6.0/25, values.get(new MultivectorComponent("out", 0)),10E-3);
// End Tests
}
@Test
public void divisionBConst() throws CodeParserException {
HashMap<MultivectorComponent, Double> values = new HashMap<MultivectorComponent, Double>();
// Begin Inputs
LinkedList<AssignmentNode> e = diffCluScript("?out_0 = y_0/z_0;", "x_0");
values.put(new MultivectorComponent("z", 0), 2d);
values.put(new MultivectorComponent("y", 0), 3d);
// End Inputs
Evaluater evaluater = new Evaluater(values);
evaluater.evaluate(e);
// Begin Tests
assertEquals(0, values.get(new MultivectorComponent("out", 0)),10E-3);
// End Tests
}
@Test
public void divisionNoConst() throws CodeParserException {
HashMap<MultivectorComponent, Double> values = new HashMap<MultivectorComponent, Double>();
// Begin Inputs
LinkedList<AssignmentNode> e = diffCluScript("?out_0 = (2*x_0+1)/(4*x_0+1);", "x_0");
values.put(new MultivectorComponent("x", 0), 2d);
values.put(new MultivectorComponent("y", 0), 3d);
// End Inputs
Evaluater evaluater = new Evaluater(values);
evaluater.evaluate(e);
// Begin Tests
assertEquals(-2.0/81, values.get(new MultivectorComponent("out", 0)),10E-3);
// End Tests
}
@Test
public void exponentiationRConst() throws CodeParserException {
HashMap<MultivectorComponent, Double> values = new HashMap<MultivectorComponent, Double>();
// Begin Inputs
AssignmentNodeCollector col = new AssignmentNodeCollector();
Expression v = new Exponentiation(
new Addition(new Multiplication(new FloatConstant(2), new MultivectorComponent("x", 0)), new FloatConstant(1)),
new FloatConstant(8)
);
col.getAssignmentNodes().add(new AssignmentNode(null, new MultivectorComponent("out", 0), v));
LinkedList<AssignmentNode> e = new CFGDifferentiater().differentiate(col.getAssignmentNodes(), new MultivectorComponent("x",0));
values.put(new MultivectorComponent("x", 0), 2d);
values.put(new MultivectorComponent("y", 0), 3d);
// End Inputs
Evaluater evaluater = new Evaluater(values);
evaluater.evaluate(e);
// Begin Tests
assertEquals(1250000, values.get(new MultivectorComponent("out", 0)),10E-3);
// End Tests
}
@Test
public void exponentiationLConst() throws CodeParserException {
HashMap<MultivectorComponent, Double> values = new HashMap<MultivectorComponent, Double>();
// Begin Inputs
AssignmentNodeCollector col = new AssignmentNodeCollector();
Expression v = new Exponentiation(
new FloatConstant(2),
new Addition(new Multiplication(new FloatConstant(2), new MultivectorComponent("x", 0)), new FloatConstant(1))
);
col.getAssignmentNodes().add(new AssignmentNode(null, new MultivectorComponent("out", 0), v));
LinkedList<AssignmentNode> e = new CFGDifferentiater().differentiate(col.getAssignmentNodes(), new MultivectorComponent("x",0));
values.put(new MultivectorComponent("x", 0), 2d);
values.put(new MultivectorComponent("y", 0), 3d);
// End Inputs
Evaluater evaluater = new Evaluater(values);
evaluater.evaluate(e);
// Begin Tests
assertEquals(64*Math.log(2), values.get(new MultivectorComponent("out", 0)),10E-3);
// End Tests
}
@Test
public void exponentiationBConst() throws CodeParserException {
HashMap<MultivectorComponent, Double> values = new HashMap<MultivectorComponent, Double>();
// Begin Inputs
AssignmentNodeCollector col = new AssignmentNodeCollector();
Expression v = new Exponentiation(new FloatConstant(6),new FloatConstant(7));
col.getAssignmentNodes().add(new AssignmentNode(null, new MultivectorComponent("out", 0), v));
LinkedList<AssignmentNode> e = new CFGDifferentiater().differentiate(col.getAssignmentNodes(), new MultivectorComponent("x",0));
values.put(new MultivectorComponent("z", 0), 2d);
values.put(new MultivectorComponent("y", 0), 3d);
// End Inputs
Evaluater evaluater = new Evaluater(values);
evaluater.evaluate(e);
// Begin Tests
assertEquals(0, values.get(new MultivectorComponent("out", 0)),10E-3);
// End Tests
}
@Test
public void exponentiationNoConst() throws CodeParserException {
HashMap<MultivectorComponent, Double> values = new HashMap<MultivectorComponent, Double>();
// Begin Inputs
AssignmentNodeCollector col = new AssignmentNodeCollector();
Expression v = new Exponentiation(
new Addition(new Multiplication(new FloatConstant(2), new MultivectorComponent("x", 0)), new FloatConstant(1)),
new Addition(new Multiplication(new FloatConstant(2), new MultivectorComponent("x", 0)), new FloatConstant(1))
);
col.getAssignmentNodes().add(new AssignmentNode(null, new MultivectorComponent("out", 0), v));
LinkedList<AssignmentNode> e = new CFGDifferentiater().differentiate(col.getAssignmentNodes(), new MultivectorComponent("x",0));
values.put(new MultivectorComponent("x", 0), 2d);
values.put(new MultivectorComponent("y", 0), 3d);
// End Inputs
Evaluater evaluater = new Evaluater(values);
evaluater.evaluate(e);
// Begin Tests
assertEquals(3125*(2*Math.log(5)+2), values.get(new MultivectorComponent("out", 0)),10E-3);
// End Tests
}
@Test
public void mathFunctionACOSConst() throws CodeParserException {
HashMap<MultivectorComponent, Double> values = new HashMap<MultivectorComponent, Double>();
// Begin Inputs
LinkedList<AssignmentNode> e = diffCluScript("?out_0 = ACOS(12);", "x_0");
values.put(new MultivectorComponent("x", 0), 2d);
// End Inputs
Evaluater evaluater = new Evaluater(values);
evaluater.evaluate(e);
// Begin Tests
assertEquals(0, values.get(new MultivectorComponent("out", 0)),10E-3);
// End Tests
}
@Test
public void mathFunctionACOS() throws CodeParserException {
HashMap<MultivectorComponent, Double> values = new HashMap<MultivectorComponent, Double>();
// Begin Inputs
LinkedList<AssignmentNode> e = diffCluScript("?out_0 = ACOS(x_0);", "x_0");
values.put(new MultivectorComponent("x", 0), 0.1d);
// End Inputs
Evaluater evaluater = new Evaluater(values);
evaluater.evaluate(e);
// Begin Tests
assertEquals(-1.00503, values.get(new MultivectorComponent("out", 0)),10E-3);
// End Tests
}
@Test
public void mathFunctionASINConst() throws CodeParserException {
HashMap<MultivectorComponent, Double> values = new HashMap<MultivectorComponent, Double>();
// Begin Inputs
LinkedList<AssignmentNode> e = diffCluScript("?out_0 = ASIN(12);", "x_0");
values.put(new MultivectorComponent("x", 0), 2d);
// End Inputs
Evaluater evaluater = new Evaluater(values);
evaluater.evaluate(e);
// Begin Tests
assertEquals(0, values.get(new MultivectorComponent("out", 0)),10E-3);
// End Tests
}
@Test
public void mathFunctionASIN() throws CodeParserException {
HashMap<MultivectorComponent, Double> values = new HashMap<MultivectorComponent, Double>();
// Begin Inputs
LinkedList<AssignmentNode> e = diffCluScript("?out_0 = ASIN(x_0);", "x_0");
values.put(new MultivectorComponent("x", 0), 0.1d);
// End Inputs
Evaluater evaluater = new Evaluater(values);
evaluater.evaluate(e);
// Begin Tests
assertEquals(1.00503, values.get(new MultivectorComponent("out", 0)),10E-3);
// End Tests
}
@Test
public void mathFunctionATANConst() throws CodeParserException {
HashMap<MultivectorComponent, Double> values = new HashMap<MultivectorComponent, Double>();
// Begin Inputs
LinkedList<AssignmentNode> e = diffCluScript("?out_0 = ATAN(12);", "x_0");
values.put(new MultivectorComponent("x", 0), 2d);
// End Inputs
Evaluater evaluater = new Evaluater(values);
evaluater.evaluate(e);
// Begin Tests
assertEquals(0, values.get(new MultivectorComponent("out", 0)),10E-3);
// End Tests
}
@Test
public void mathFunctionATAN() throws CodeParserException {
HashMap<MultivectorComponent, Double> values = new HashMap<MultivectorComponent, Double>();
// Begin Inputs
LinkedList<AssignmentNode> e = diffCluScript("?out_0 = ATAN(x_0);", "x_0");
values.put(new MultivectorComponent("x", 0), 0.1d);
// End Inputs
Evaluater evaluater = new Evaluater(values);
evaluater.evaluate(e);
// Begin Tests
assertEquals(0.99009, values.get(new MultivectorComponent("out", 0)),10E-3);
// End Tests
}
@Test
public void mathFunctionCOSConst() throws CodeParserException {
HashMap<MultivectorComponent, Double> values = new HashMap<MultivectorComponent, Double>();
// Begin Inputs
LinkedList<AssignmentNode> e = diffCluScript("?out_0 = COS(12);", "x_0");
values.put(new MultivectorComponent("x", 0), 2d);
// End Inputs
Evaluater evaluater = new Evaluater(values);
evaluater.evaluate(e);
// Begin Tests
assertEquals(0, values.get(new MultivectorComponent("out", 0)),10E-3);
// End Tests
}
@Test
public void mathFunctionCOS() throws CodeParserException {
HashMap<MultivectorComponent, Double> values = new HashMap<MultivectorComponent, Double>();
// Begin Inputs
LinkedList<AssignmentNode> e = diffCluScript("?out_0 = COS(x_0);", "x_0");
values.put(new MultivectorComponent("x", 0), 0.1d);
// End Inputs
Evaluater evaluater = new Evaluater(values);
evaluater.evaluate(e);
// Begin Tests
assertEquals(-0.09983, values.get(new MultivectorComponent("out", 0)),10E-3);
// End Tests
}
@Test
public void mathFunctionEXPConst() throws CodeParserException {
HashMap<MultivectorComponent, Double> values = new HashMap<MultivectorComponent, Double>();
// Begin Inputs
LinkedList<AssignmentNode> e = diffCluScript("?out_0 = exp(5);", "x_0");
values.put(new MultivectorComponent("x", 0), 2d);
// End Inputs
Evaluater evaluater = new Evaluater(values);
evaluater.evaluate(e);
// Begin Tests
assertEquals(0, values.get(new MultivectorComponent("out", 0)),10E-3);
// End Tests
}
@Test
public void mathFunctionEXP() throws CodeParserException {
HashMap<MultivectorComponent, Double> values = new HashMap<MultivectorComponent, Double>();
// Begin Inputs
LinkedList<AssignmentNode> e = diffCluScript("?out_0 = exp(5*x_0);", "x_0");
values.put(new MultivectorComponent("x", 0), 2d);
// End Inputs
Evaluater evaluater = new Evaluater(values);
evaluater.evaluate(e);
// Begin Tests
assertEquals(110132.328974, values.get(new MultivectorComponent("out", 0)),10E-3);
// End Tests
}
@Test
public void mathFunctionLOGConst() throws CodeParserException {
HashMap<MultivectorComponent, Double> values = new HashMap<MultivectorComponent, Double>();
// Begin Inputs
LinkedList<AssignmentNode> e = diffCluScript("?out_0 = LOG(12);", "x_0");
values.put(new MultivectorComponent("x", 0), 2d);
// End Inputs
Evaluater evaluater = new Evaluater(values);
evaluater.evaluate(e);
// Begin Tests
assertEquals(0, values.get(new MultivectorComponent("out", 0)),10E-3);
// End Tests
}
@Test
public void mathFunctionLOG() throws CodeParserException {
HashMap<MultivectorComponent, Double> values = new HashMap<MultivectorComponent, Double>();
// Begin Inputs
LinkedList<AssignmentNode> e = diffCluScript("?out_0 = LOG(x_0);", "x_0");
values.put(new MultivectorComponent("x", 0), 2d);
// End Inputs
Evaluater evaluater = new Evaluater(values);
evaluater.evaluate(e);
// Begin Tests
assertEquals(0.5, values.get(new MultivectorComponent("out", 0)),10E-3);
// End Tests
}
@Test
public void mathFunctionSINConst() throws CodeParserException {
HashMap<MultivectorComponent, Double> values = new HashMap<MultivectorComponent, Double>();
// Begin Inputs
LinkedList<AssignmentNode> e = diffCluScript("?out_0 = SIN(5);", "x_0");
values.put(new MultivectorComponent("x", 0), 2d);
// End Inputs
Evaluater evaluater = new Evaluater(values);
evaluater.evaluate(e);
// Begin Tests
assertEquals(0, values.get(new MultivectorComponent("out", 0)),10E-3);
// End Tests
}
@Test
public void mathFunctionSIN() throws CodeParserException {
HashMap<MultivectorComponent, Double> values = new HashMap<MultivectorComponent, Double>();
// Begin Inputs
LinkedList<AssignmentNode> e = diffCluScript("?out_0 = SIN(2*x_0);", "x_0");
values.put(new MultivectorComponent("x", 0), 2d);
// End Inputs
Evaluater evaluater = new Evaluater(values);
evaluater.evaluate(e);
// Begin Tests
assertEquals(-1.3072, values.get(new MultivectorComponent("out", 0)),10E-3);
// End Tests
}
@Test
public void mathFunctionSQRTConst() throws CodeParserException {
HashMap<MultivectorComponent, Double> values = new HashMap<MultivectorComponent, Double>();
// Begin Inputs
LinkedList<AssignmentNode> e = diffCluScript("?out_0 = sqrt(12);", "x_0");
values.put(new MultivectorComponent("x", 0), 2d);
// End Inputs
Evaluater evaluater = new Evaluater(values);
evaluater.evaluate(e);
// Begin Tests
assertEquals(0, values.get(new MultivectorComponent("out", 0)),10E-3);
// End Tests
}
@Test
public void mathFunctionSQRT() throws CodeParserException {
HashMap<MultivectorComponent, Double> values = new HashMap<MultivectorComponent, Double>();
// Begin Inputs
LinkedList<AssignmentNode> e = diffCluScript("?out_0 = sqrt(x_0);", "x_0");
values.put(new MultivectorComponent("x", 0), 2d);
// End Inputs
Evaluater evaluater = new Evaluater(values);
evaluater.evaluate(e);
// Begin Tests
assertEquals(0.3535, values.get(new MultivectorComponent("out", 0)),10E-3);
// End Tests
}
@Test
public void mathFunctionTANConst() throws CodeParserException {
HashMap<MultivectorComponent, Double> values = new HashMap<MultivectorComponent, Double>();
// Begin Inputs
LinkedList<AssignmentNode> e = diffCluScript("?out_0 = TAN(12);", "x_0");
values.put(new MultivectorComponent("x", 0), 2d);
// End Inputs
Evaluater evaluater = new Evaluater(values);
evaluater.evaluate(e);
// Begin Tests
assertEquals(0, values.get(new MultivectorComponent("out", 0)),10E-3);
// End Tests
}
@Test
public void mathFunctionTAN() throws CodeParserException {
HashMap<MultivectorComponent, Double> values = new HashMap<MultivectorComponent, Double>();
// Begin Inputs
LinkedList<AssignmentNode> e = diffCluScript("?out_0 = TAN(5*x_0);", "x_0");
values.put(new MultivectorComponent("x", 0), 2d);
// End Inputs
Evaluater evaluater = new Evaluater(values);
evaluater.evaluate(e);
// Begin Tests
assertEquals(7.10185, values.get(new MultivectorComponent("out", 0)),10E-3);
// End Tests
}
@Test
public void variable() throws CodeParserException {
HashMap<MultivectorComponent, Double> values = new HashMap<MultivectorComponent, Double>();
// Begin Inputs
LinkedList<AssignmentNode> e = diffCluScript("?out_0 = a;", "x_0");
values.put(new MultivectorComponent("x", 0), 2d);
// End Inputs
Evaluater evaluater = new Evaluater(values);
evaluater.evaluate(e);
// Begin Tests
assertEquals(0, values.get(new MultivectorComponent("out", 0)),10E-3);
// End Tests
}
@Test
public void floatConstant() throws CodeParserException {
HashMap<MultivectorComponent, Double> values = new HashMap<MultivectorComponent, Double>();
// Begin Inputs
LinkedList<AssignmentNode> e = diffCluScript("?out_0 = 5;", "x_0");
values.put(new MultivectorComponent("x", 0), 2d);
// End Inputs
Evaluater evaluater = new Evaluater(values);
evaluater.evaluate(e);
// Begin Tests
assertEquals(0, values.get(new MultivectorComponent("out", 0)),10E-3);
// End Tests
}
@Test
public void negationConstant() throws CodeParserException {
HashMap<MultivectorComponent, Double> values = new HashMap<MultivectorComponent, Double>();
// Begin Inputs
LinkedList<AssignmentNode> e = diffCluScript("?out_0 = -(5+7);", "x_0");
values.put(new MultivectorComponent("x", 0), 2d);
// End Inputs
Evaluater evaluater = new Evaluater(values);
evaluater.evaluate(e);
// Begin Tests
assertEquals(0, values.get(new MultivectorComponent("out", 0)),10E-3);
// End Tests
}
@Test
public void negationVariable() throws CodeParserException {
HashMap<MultivectorComponent, Double> values = new HashMap<MultivectorComponent, Double>();
// Begin Inputs
LinkedList<AssignmentNode> e = diffCluScript("?out_0 = -(5*x_0);", "x_0");
values.put(new MultivectorComponent("x", 0), 2d);
// End Inputs
Evaluater evaluater = new Evaluater(values);
evaluater.evaluate(e);
// Begin Tests
assertEquals(-5, values.get(new MultivectorComponent("out", 0)),10E-3);
// End Tests
}
/* //Template
@Test
public void simple() throws CodeParserException {
HashMap<MultivectorComponent, Double> values = new HashMap<MultivectorComponent, Double>();
// Begin Inputs
LinkedList<AssignmentNode> e = diffCluScript("?out_0 = ;", "x_0");
values.put(new MultivectorComponent("x", 0), );
// End Inputs
Evaluater evaluater = new Evaluater(values);
evaluater.evaluate(e);
// Begin Tests
assertEquals(, values.get(new MultivectorComponent("out", 0)),10E-3);
// End Tests
}
*/
}