/** * Copyright (C) 2010-14 diirt developers. See COPYRIGHT.TXT * All rights reserved. Use is subject to license terms. See LICENSE.TXT */ package org.diirt.datasource.formula; import org.diirt.vtype.ValueFactory; import org.diirt.vtype.VInt; import org.diirt.vtype.VDouble; import org.antlr.runtime.*; import org.diirt.datasource.ReadExpressionTester; import org.diirt.datasource.expression.DesiredRateExpression; import org.junit.Test; import static org.diirt.datasource.formula.FormulaAst.*; import org.diirt.vtype.VBoolean; import org.diirt.vtype.VString; import static org.junit.Assert.*; import static org.hamcrest.Matchers.*; /** * * @author carcassi */ public class FormulaParserTest { @Test public void channel1() throws RecognitionException { DesiredRateExpression<?> exp = createParser("'mychannel'").channel().toExpression(); assertThat(exp, not(nullValue())); assertThat(exp.getName(), equalTo("mychannel")); } @Test public void channel2() throws RecognitionException { DesiredRateExpression<?> exp = createParser("'mychannel'").channel().toExpression(); assertThat(exp, not(nullValue())); assertThat(exp.getName(), equalTo("mychannel")); } @Test public void channel3() throws RecognitionException { DesiredRateExpression<?> exp = createParser("'ca://mychannel'").channel().toExpression(); assertThat(exp, not(nullValue())); assertThat(exp.getName(), equalTo("ca://mychannel")); } @Test public void numericLiteral1() throws RecognitionException { DesiredRateExpression<?> exp = createParser("3").numericLiteral().toExpression(); assertThat(exp, not(nullValue())); VInt result = (VInt) exp.getFunction().readValue(); assertThat(result.getValue(), equalTo(3)); } @Test public void numericLiteral2() throws RecognitionException { DesiredRateExpression<?> exp = createParser("3.14").numericLiteral().toExpression(); assertThat(exp, not(nullValue())); VDouble result = (VDouble) exp.getFunction().readValue(); assertThat(result.getValue(), equalTo(3.14)); } @Test public void stringLiteral1() throws RecognitionException { DesiredRateExpression<?> exp = createParser("\"test\"").formula().toExpression(); assertThat(exp, not(nullValue())); VString result = (VString) exp.getFunction().readValue(); assertThat(result.getValue(), equalTo("test")); } @Test public void multiplicativeExpression1() throws RecognitionException { DesiredRateExpression<?> exp = createParser("2*3").multiplicativeExpression().toExpression(); assertThat(exp, not(nullValue())); assertThat(exp.getName(), equalTo("(2 * 3)")); VDouble result = (VDouble) exp.getFunction().readValue(); assertThat(result.getValue(), equalTo(6.0)); } @Test public void multiplicativeExpression2() throws RecognitionException { ReadExpressionTester exp = new ReadExpressionTester(createParser("2*'x'").multiplicativeExpression().toExpression()); assertThat(exp.getExpression().getName(), equalTo("(2 * x)")); exp.writeValue("x", ValueFactory.newVDouble(10.0)); VDouble result = (VDouble) exp.getFunction().readValue(); assertThat(result.getValue(), equalTo(20.0)); exp.writeValue("x", ValueFactory.newVDouble(5.0)); result = (VDouble) exp.getFunction().readValue(); assertThat(result.getValue(), equalTo(10.0)); } @Test public void multiplicativeExpression3() throws RecognitionException { DesiredRateExpression<?> exp = createParser("10/2").multiplicativeExpression().toExpression(); assertThat(exp, not(nullValue())); assertThat(exp.getName(), equalTo("(10 / 2)")); VDouble result = (VDouble) exp.getFunction().readValue(); assertThat(result.getValue(), equalTo(5.0)); } @Test public void multiplicativeExpression4() throws RecognitionException { ReadExpressionTester exp = new ReadExpressionTester(createParser("'x'/2").multiplicativeExpression().toExpression()); assertThat(exp.getExpression().getName(), equalTo("(x / 2)")); exp.writeValue("x", ValueFactory.newVDouble(10.0)); VDouble result = (VDouble) exp.getFunction().readValue(); assertThat(result.getValue(), equalTo(5.0)); exp.writeValue("x", ValueFactory.newVDouble(20.0)); result = (VDouble) exp.getFunction().readValue(); assertThat(result.getValue(), equalTo(10.0)); } @Test public void multiplicativeExpression5() throws RecognitionException { DesiredRateExpression<?> exp = createParser("9%2").multiplicativeExpression().toExpression(); assertThat(exp, not(nullValue())); VDouble result = (VDouble) exp.getFunction().readValue(); assertThat(result.getValue(), equalTo(1.0)); } @Test public void multiplicativeExpression6() throws RecognitionException { ReadExpressionTester exp = new ReadExpressionTester(createParser("'x'%4").multiplicativeExpression().toExpression()); exp.writeValue("x", ValueFactory.newVDouble(11.0)); VDouble result = (VDouble) exp.getFunction().readValue(); assertThat(result.getValue(), equalTo(3.0)); exp.writeValue("x", ValueFactory.newVDouble(21.0)); result = (VDouble) exp.getFunction().readValue(); assertThat(result.getValue(), equalTo(1.0)); } @Test public void additiveExpression1() throws RecognitionException { DesiredRateExpression<?> exp = createParser("2+3").additiveExpression().toExpression(); assertThat(exp, not(nullValue())); assertThat(exp.getName(), equalTo("(2 + 3)")); VDouble result = (VDouble) exp.getFunction().readValue(); assertThat(result.getValue(), equalTo(5.0)); } @Test public void additiveExpression2() throws RecognitionException { ReadExpressionTester exp = new ReadExpressionTester(createParser("2+'x'").additiveExpression().toExpression()); exp.writeValue("x", ValueFactory.newVDouble(10.0)); assertThat(exp.getExpression().getName(), equalTo("(2 + x)")); VDouble result = (VDouble) exp.getFunction().readValue(); assertThat(result.getValue(), equalTo(12.0)); exp.writeValue("x", ValueFactory.newVDouble(5.0)); result = (VDouble) exp.getFunction().readValue(); assertThat(result.getValue(), equalTo(7.0)); } @Test public void additiveExpression3() throws RecognitionException { DesiredRateExpression<?> exp = createParser("2-3").additiveExpression().toExpression(); assertThat(exp.getName(), equalTo("(2 - 3)")); assertThat(exp, not(nullValue())); VDouble result = (VDouble) exp.getFunction().readValue(); assertThat(result.getValue(), equalTo(-1.0)); } @Test public void additiveExpression4() throws RecognitionException { ReadExpressionTester exp = new ReadExpressionTester(createParser("2-'x'").additiveExpression().toExpression()); assertThat(exp.getExpression().getName(), equalTo("(2 - x)")); exp.writeValue("x", ValueFactory.newVDouble(10.0)); VDouble result = (VDouble) exp.getFunction().readValue(); assertThat(result.getValue(), equalTo(-8.0)); exp.writeValue("x", ValueFactory.newVDouble(5.0)); result = (VDouble) exp.getFunction().readValue(); assertThat(result.getValue(), equalTo(-3.0)); } @Test public void namedConstant1() throws RecognitionException { DesiredRateExpression<?> exp = createParser("PI").formula().toExpression(); assertThat(exp, not(nullValue())); VDouble result = (VDouble) exp.getFunction().readValue(); assertThat(result.getValue(), equalTo(Math.PI)); } @Test public void namedConstant2() throws RecognitionException { DesiredRateExpression<?> exp = createParser("TRUE").formula().toExpression(); assertThat(exp, not(nullValue())); VBoolean result = (VBoolean) exp.getFunction().readValue(); assertThat(result.getValue(), equalTo(true)); } }