package it.enricod.joy;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import it.enricod.joy.operators.AddOp;
import it.enricod.joy.operators.OperatorException;
import org.apache.commons.math.FieldElement;
import org.apache.commons.math.util.BigReal;
import org.junit.Test;
public class JoyStackTests {
private JoyStack createStack(FieldElement<BigReal> v0, FieldElement<BigReal> v1) {
JoyStack stack = new JoyStack();
assertTrue(stack.isEmpty());
IStackNode n0 = JoyFactory.createNode(v0);
stack.push(n0);
IStackNode n1 = JoyFactory.createNode(v1);
stack.push(n1);
return stack;
}
@Test
public void push() {
FieldElement<BigReal> v0 = new BigReal(1);
FieldElement<BigReal> v1 = new BigReal(2);
JoyStack stack = createStack(v0, v1);
assertEquals(2, stack.getSize());
assertEquals(v1, stack.peek().getElement());
}
@Test
public void getAt() {
FieldElement<BigReal> v1 = new BigReal(1);
FieldElement<BigReal> v2 = new BigReal(2);
JoyStack stack = createStack(v1, v2);
assertEquals(2d, ((BigReal)stack.getElementAt(0).getElement()).doubleValue(), 0.01);
assertEquals(1d, ((BigReal)stack.getElementAt(1).getElement()).doubleValue(), 0.01);
}
@Test
public void execAdd() {
FieldElement<BigReal> v0 = new BigReal(1);
FieldElement<BigReal> v1 = new BigReal(2);
JoyStack stack = createStack(v0, v1);
AddOp add = new AddOp();
try {
IStack newStack = add.execute(stack);
assertEquals(1, newStack.getSize());
assertEquals(3d, ((BigReal)newStack.peek().getElement()).doubleValue(), 0.01);
} catch (OperatorException e) {
fail(e.getMessage());
}
}
}