package com.spotify.heroic.grammar; import org.junit.Test; import java.util.concurrent.TimeUnit; import java.util.function.BiFunction; import static com.spotify.heroic.grammar.ExpressionTests.biFuncTest; import static com.spotify.heroic.grammar.ExpressionTests.uniFuncTest; import static org.junit.Assert.assertEquals; public class IntegerExpressionTest extends AbstractExpressionTest<IntegerExpression> { @Override protected IntegerExpression build(final Context ctx) { return new IntegerExpression(ctx, 42); } @Override protected BiFunction<Expression.Visitor<Void>, IntegerExpression, Void> visitorMethod() { return Expression.Visitor::visitInteger; } @Test public void testAccessors() { assertEquals(42, build().getValue()); } @Test public void castTest() { final IntegerExpression integer = build(); assertEquals(new DurationExpression(ctx, TimeUnit.MILLISECONDS, integer.getValue()), integer.cast(DurationExpression.class)); assertEquals(new DoubleExpression(ctx, 42D), integer.cast(DoubleExpression.class)); } @Test public void operationsTest() { biFuncTest(a -> new IntegerExpression(a, 21), b -> new IntegerExpression(b, 21), r -> new IntegerExpression(r, 42), IntegerExpression::add); biFuncTest(a -> new IntegerExpression(a, 21), b -> new IntegerExpression(b, 21), r -> new IntegerExpression(r, 0), IntegerExpression::sub); biFuncTest(a -> new IntegerExpression(a, 20), b -> new IntegerExpression(b, 2), r -> new IntegerExpression(r, 10), IntegerExpression::divide); biFuncTest(a -> new IntegerExpression(a, 10), b -> new IntegerExpression(b, 20), r -> new IntegerExpression(r, 200), IntegerExpression::multiply); uniFuncTest(a -> new IntegerExpression(a, 10), b -> new IntegerExpression(b, -10), IntegerExpression::negate); } }