package ql.tests.evaluator;
import org.junit.Test;
import ql.semantics.ValueTable;
import ql.semantics.values.DecValue;
import ql.semantics.values.IntValue;
import ql.semantics.values.StrValue;
import ql.semantics.values.UndefValue;
import ql.tests.TestHelper;
import java.math.BigDecimal;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
/**
* Created by bore on 24/02/15.
*/
public class Arithmetic
{
@Test
public void addInt()
{
IntValue v = TestHelper.as(TestHelper.evaluate("1+2", null), IntValue.class);
assertNotNull(v);
assertEquals(((Integer)3), v.getValue());
}
@Test
public void addString()
{
StrValue v = TestHelper.as(TestHelper.evaluate("\"str\"+\"ing\"", null), StrValue.class);
assertNotNull(v);
assertEquals("string", v.getValue());
}
@Test
public void addDec()
{
DecValue v = TestHelper.as(TestHelper.evaluate("1.2+2.8", null), DecValue.class);
assertNotNull(v);
assertEquals(new BigDecimal("4.0"), v.getValue());
}
@Test
public void subInt()
{
IntValue v = TestHelper.as(TestHelper.evaluate("10-5", null), IntValue.class);
assertNotNull(v);
assertEquals(((Integer)5), v.getValue());
}
@Test
public void subDec()
{
DecValue v = TestHelper.as(TestHelper.evaluate("5.5 - 3.5", null), DecValue.class);
assertNotNull(v);
assertEquals(new BigDecimal("2.0"), v.getValue());
}
@Test
public void mulInt()
{
IntValue v = TestHelper.as(TestHelper.evaluate("10 * 5", null), IntValue.class);
assertNotNull(v);
assertEquals(((Integer)50), v.getValue());
}
@Test
public void mulDec()
{
DecValue v = TestHelper.as(TestHelper.evaluate("5.5 * 2.0", null), DecValue.class);
assertNotNull(v);
assertEquals(new BigDecimal("11.00"), v.getValue());
}
@Test
public void divInt()
{
IntValue v = TestHelper.as(TestHelper.evaluate("10 / 3", null), IntValue.class);
assertNotNull(v);
assertEquals(((Integer)3), v.getValue());
}
@Test
public void divDec()
{
DecValue v = TestHelper.as(TestHelper.evaluate("10.0 / 3.0", null), DecValue.class);
assertNotNull(v);
assertEquals(new BigDecimal("3.33333"), v.getValue());
}
@Test
public void negInt()
{
IntValue v = TestHelper.as(TestHelper.evaluate("-3", null), IntValue.class);
assertNotNull(v);
assertEquals(((Integer)(-3)), v.getValue());
}
@Test
public void negDec()
{
DecValue v = TestHelper.as(TestHelper.evaluate("-3.0", null), DecValue.class);
assertNotNull(v);
assertEquals(new BigDecimal("-3.0"), v.getValue());
}
@Test
public void posInt()
{
IntValue v = TestHelper.as(TestHelper.evaluate("+3", null), IntValue.class);
assertNotNull(v);
assertEquals(((Integer)3), v.getValue());
}
@Test
public void posDec()
{
DecValue v = TestHelper.as(TestHelper.evaluate("+3.0", null), DecValue.class);
assertNotNull(v);
assertEquals(new BigDecimal("3.0"), v.getValue());
}
@Test
public void undefinedAdd()
{
ValueTable table = new ValueTable();
table.storeValue("hasHouse", new UndefValue());
UndefValue v = TestHelper.as(TestHelper.evaluate("2+hasHouse+1", table), UndefValue.class);
assertNotNull(v);
}
@Test
public void undefinedSub()
{
ValueTable table = new ValueTable();
table.storeValue("hasHouse", new UndefValue());
UndefValue v = TestHelper.as(TestHelper.evaluate("2-hasHouse-1", table), UndefValue.class);
assertNotNull(v);
}
@Test
public void undefinedMul()
{
ValueTable table = new ValueTable();
table.storeValue("hasHouse", new UndefValue());
UndefValue v = TestHelper.as(TestHelper.evaluate("2*hasHouse*1", table), UndefValue.class);
assertNotNull(v);
}
@Test
public void undefinedDiv()
{
ValueTable table = new ValueTable();
table.storeValue("hasHouse", new UndefValue());
UndefValue v = TestHelper.as(TestHelper.evaluate("2/hasHouse/1", table), UndefValue.class);
assertNotNull(v);
}
@Test
public void undefinedPos()
{
ValueTable table = new ValueTable();
table.storeValue("hasHouse", new UndefValue());
UndefValue v = TestHelper.as(TestHelper.evaluate("+hasHouse", table), UndefValue.class);
assertNotNull(v);
}
@Test
public void undefinedNeg()
{
ValueTable table = new ValueTable();
table.storeValue("hasHouse", new UndefValue());
UndefValue v = TestHelper.as(TestHelper.evaluate("-hasHouse", table), UndefValue.class);
assertNotNull(v);
}
}