package org.openlca.expressions;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
public class FunctionTest {
private FormulaInterpreter interpreter = new FormulaInterpreter();
@Test
public void testSample1() throws Exception {
interpreter.getGlobalScope().bind("g2", "1");
interpreter.bind("g3", "2");
interpreter.bind("g4", "3");
interpreter.bind("g5", "g3^4");
interpreter.bind("g6", "g4-g2");
interpreter.bind("g7", "g4/g3");
assertEquals(1, interpreter.eval("g2"), 1e-20);
assertEquals(2, interpreter.eval("g3"), 1e-20);
assertEquals(3, interpreter.eval("g4"), 1e-20);
assertEquals(16, interpreter.eval("g5"), 1e-20);
assertEquals(2, interpreter.eval("g6"), 1e-20);
assertEquals(1.5, interpreter.eval("g7"), 1e-20);
}
@Test
public void testSample2() throws Exception {
interpreter.bind("g2", "1");
interpreter.bind("g3", "2");
interpreter.bind("g4", "3");
interpreter.bind("g8", "g4 div g3");
interpreter.bind("g9", "(g2+g3+6) mod 2 ");
interpreter.bind("g10", "abs(-g4) ");
interpreter.bind("g11", "acos(-g2)");
assertEquals(1, interpreter.eval("g2"), 1e-20);
assertEquals(2, interpreter.eval("g3"), 1e-20);
assertEquals(3, interpreter.eval("g4"), 1e-20);
assertEquals(1, interpreter.eval("g8"), 1e-20);
assertEquals(1, interpreter.eval("g9"), 1e-20);
assertEquals(3, interpreter.eval("g10"), 1e-20);
assertEquals(3.14159265, interpreter.eval("g11"), 1e-4);
}
@Test
public void testSample3() throws Exception {
interpreter.bind("g5", "16");
interpreter.bind("g6", "g5-2");
interpreter.bind("g7", "g5/g5");
interpreter.bind("g11", "acos(-1)");
interpreter.bind("g50", "ln((0.2+5*10^-3)/(0.1-5*10^-3))");
interpreter.bind("g51", "9.25+ln((0.2+5*10^-3)/(0.1-5*10^-3))");
assertEquals(16, interpreter.eval("g5"), 1e-20);
assertEquals(14, interpreter.eval("g6"), 1e-20);
assertEquals(1, interpreter.eval("g7"), 1e-20);
assertEquals(3.14159265, interpreter.eval("g11"), 1e-4);
assertEquals(0.769133087537867, interpreter.eval("g50"), 1e-10);
assertEquals(10.0191330875379, interpreter.eval("g51"), 1e-10);
}
@Test
public void testSample4() throws Exception {
interpreter.bind("g12", "20.64159265");
interpreter.bind("g13", "exp(g12)");
interpreter.bind("g14", "log(g12)");
assertEquals(20.64159265, interpreter.eval("g12"), 1e-20);
assertEquals(921573091.602758, interpreter.eval("g13"), 1e-5);
assertEquals(1.31474320324693, interpreter.eval("g14"), 1e-5);
}
@Test
public void testSample5() throws Exception {
interpreter.bind("g5", "16");
interpreter.bind("g21", "sin(g5)");
interpreter.bind("g22", "sqr(g5)");
interpreter.bind("g23", "sqrt(256)");
interpreter.bind("g28", "if(g5>10;g5;0)");
assertEquals(16, interpreter.eval("g5"), 1e-20);
assertEquals(-0.287903317, interpreter.eval("g21"), 1e-5);
assertEquals(256, interpreter.eval("g22"), 1e-20);
assertEquals(16, interpreter.eval("g23"), 1e-20);
assertEquals(16, interpreter.eval("g28"), 1e-20);
}
}