package edu.uva.softwarecons.test;
import edu.uva.softwarecons.evaluator.ExpressionEvaluator;
import edu.uva.softwarecons.model.expression.arithmetic.AddExpression;
import edu.uva.softwarecons.model.expression.arithmetic.DivExpression;
import edu.uva.softwarecons.model.expression.arithmetic.MulExpression;
import edu.uva.softwarecons.model.expression.arithmetic.SubExpression;
import edu.uva.softwarecons.model.expression.comparison.EqualExpression;
import edu.uva.softwarecons.model.expression.comparison.NotEqualExpression;
import edu.uva.softwarecons.model.expression.literal.BoolExpression;
import edu.uva.softwarecons.model.expression.literal.IntExpression;
import edu.uva.softwarecons.model.expression.logical.AndExpression;
import edu.uva.softwarecons.model.expression.logical.NotExpression;
import edu.uva.softwarecons.model.expression.logical.OrExpression;
import edu.uva.softwarecons.model.value.IntegerValue;
import edu.uva.softwarecons.model.value.Value;
import org.junit.Test;
import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertTrue;
/**
* Falconlabs
*
* @author Santiago Carrillo
* Date: 3/13/14
*/
public class ExpressionEvaluatorTest
{
final ExpressionEvaluator expressionEvaluator = new ExpressionEvaluator();
@Test
public void evaluateArithmeticAddExpressionTest()
{
AddExpression addExpression = new AddExpression( new IntExpression( 2 ), new IntExpression( 3 ) );
Value value = expressionEvaluator.visitAddExpression( addExpression );
assertTrue( ( (IntegerValue) value ).getValue() == 5 );
}
@Test
public void evaluateArithmeticSubExpressionTest()
{
SubExpression subExpression = new SubExpression( new IntExpression( 5 ), new IntExpression( 3 ) );
Value value = expressionEvaluator.visitSubExpression( subExpression );
assertTrue( ( (IntegerValue) value ).getValue() == 2 );
}
@Test
public void evaluateArithmeticMulExpressionTest()
{
MulExpression mulExpression = new MulExpression( new IntExpression( 5 ), new IntExpression( 3 ) );
Value value = expressionEvaluator.visitMulExpression( mulExpression );
assertTrue( ( (IntegerValue) value ).getValue() == 15 );
}
@Test
public void evaluateArithmeticDivExpressionTest()
{
DivExpression divExpression = new DivExpression( new IntExpression( 10 ), new IntExpression( 2 ) );
Value value = expressionEvaluator.visitDivExpression( divExpression );
assertTrue( ( (IntegerValue) value ).getValue() == 5 );
}
@Test
public void evaluateAndExpressionTest()
{
AndExpression andExpression = new AndExpression( new BoolExpression( true ), new BoolExpression( false ) );
assertFalse( (Boolean) expressionEvaluator.visitAndExpression( andExpression ).getValue() );
}
@Test
public void evaluateOrExpressionTest()
{
OrExpression orExpression = new OrExpression( new BoolExpression( true ), new BoolExpression( false ) );
assertTrue( (Boolean) expressionEvaluator.visitOrExpression( orExpression ).getValue() );
}
@Test
public void evaluateNotExpressionTest()
{
NotExpression notExpression = new NotExpression( new BoolExpression( true ) );
assertFalse( (Boolean) expressionEvaluator.visitNotExpression( notExpression ).getValue() );
}
@Test
public void evaluateNotEqualBooleanExpressionTest()
{
NotEqualExpression notEqualExpression =
new NotEqualExpression( new BoolExpression( false ), new BoolExpression( true ) );
assertTrue( (Boolean) expressionEvaluator.visitNotEqualExpression( notEqualExpression ).getValue() );
}
@Test
public void evaluateEqualBooleanExpressionTest()
{
EqualExpression equalExpression = new EqualExpression( new BoolExpression( true ), new BoolExpression( true ) );
assertTrue( (Boolean) expressionEvaluator.visitEqualExpression( equalExpression ).getValue() );
}
@Test
public void evaluateEqualNumericExpressionTest()
{
EqualExpression equalExpression = new EqualExpression( new IntExpression( 1 ), new IntExpression( 1 ) );
assertTrue( (Boolean) expressionEvaluator.visitEqualExpression( equalExpression ).getValue() );
}
@Test
public void evaluateNotEqualNumericExpressionTest()
{
NotEqualExpression notEqualExpression =
new NotEqualExpression( new IntExpression( 2 ), new IntExpression( 1 ) );
assertTrue( (Boolean) expressionEvaluator.visitNotEqualExpression( notEqualExpression ).getValue() );
}
@Test
public void evaluateEqualDateExpressionTest()
{
EqualExpression equalExpression = new EqualExpression( new IntExpression( 1 ), new IntExpression( 1 ) );
assertTrue( (Boolean) expressionEvaluator.visitEqualExpression( equalExpression ).getValue() );
}
@Test
public void evaluateNotEqualDateExpressionTest()
{
NotEqualExpression notEqualExpression =
new NotEqualExpression( new IntExpression( 2 ), new IntExpression( 1 ) );
assertTrue( (Boolean) expressionEvaluator.visitNotEqualExpression( notEqualExpression ).getValue() );
}
@Test
public void evaluateGreaterNumericExpressionTest()
{
NotEqualExpression notEqualExpression =
new NotEqualExpression( new IntExpression( 2 ), new IntExpression( 1 ) );
assertTrue( (Boolean) expressionEvaluator.visitNotEqualExpression( notEqualExpression ).getValue() );
}
}