package se.cambio.cds.gdl.parser;
import org.openehr.rm.datatypes.quantity.DvQuantity;
import se.cambio.cds.gdl.model.expression.*;
public class ArithmeticExpressionTest extends ExpressionTestBase {
public void testAdditionTwoVars() throws Exception {
parseSingleExpression("$gt0010 + $gt0012");
Variable var1 = new Variable("gt0010");
Variable var2 = new Variable("gt0012");
expected = new BinaryExpression(var1, var2, OperatorKind.ADDITION);
check();
}
public void testSubstrationTwoVars() throws Exception {
parseSingleExpression("$gt0010 - $gt0012");
Variable var1 = new Variable("gt0010");
Variable var2 = new Variable("gt0012");
expected = new BinaryExpression(var1, var2, OperatorKind.SUBSTRATION);
check();
}
public void testMultiplicationTwoVars() throws Exception {
parseSingleExpression("$gt0010 * $gt0012");
Variable var1 = new Variable("gt0010");
Variable var2 = new Variable("gt0012");
expected = new BinaryExpression(var1, var2, OperatorKind.MULTIPLICATION);
check();
}
public void testDivisionTwoVars() throws Exception {
parseSingleExpression("$gt0010 / $gt0012");
Variable var1 = new Variable("gt0010");
Variable var2 = new Variable("gt0012");
expected = new BinaryExpression(var1, var2, OperatorKind.DIVISION);
check();
}
public void testExponentTwoVars() throws Exception {
parseSingleExpression("$gt0010 ^ $gt0012");
Variable var1 = new Variable("gt0010");
Variable var2 = new Variable("gt0012");
expected = new BinaryExpression(var1, var2, OperatorKind.EXPONENT);
check();
}
public void testAdditionConstVar() throws Exception {
parseSingleExpression("10 + $gt0012");
ConstantExpression var1 = new ConstantExpression("10");
Variable var2 = new Variable("gt0012");
expected = new BinaryExpression(var1, var2, OperatorKind.ADDITION);
check();
}
public void testSubstrationConstVar() throws Exception {
parseSingleExpression("10 - $gt0012");
ConstantExpression var1 = new ConstantExpression("10");
Variable var2 = new Variable("gt0012");
expected = new BinaryExpression(var1, var2, OperatorKind.SUBSTRATION);
check();
}
public void testMultiplicationConstVar() throws Exception {
parseSingleExpression("10 * $gt0012");
ConstantExpression var1 = new ConstantExpression("10");
Variable var2 = new Variable("gt0012");
expected = new BinaryExpression(var1, var2, OperatorKind.MULTIPLICATION);
check();
}
public void testDivisionConstVar() throws Exception {
parseSingleExpression("10 / $gt0012");
ConstantExpression var1 = new ConstantExpression("10");
Variable var2 = new Variable("gt0012");
expected = new BinaryExpression(var1, var2, OperatorKind.DIVISION);
check();
}
public void testExponentConstVar() throws Exception {
parseSingleExpression("10 ^ $gt0012");
ConstantExpression var1 = new ConstantExpression("10");
Variable var2 = new Variable("gt0012");
expected = new BinaryExpression(var1, var2, OperatorKind.EXPONENT);
check();
}
public void testExponentVarInteger() throws Exception {
parseSingleExpression("$gt0012 ^ 10");
ConstantExpression var1 = new ConstantExpression("10");
Variable var2 = new Variable("gt0012");
expected = new BinaryExpression(var2, var1, OperatorKind.EXPONENT);
check();
}
public void testExponentVarDouble() throws Exception {
parseSingleExpression("$gt0012 ^ 0.7");
ConstantExpression var1 = new ConstantExpression("0.7");
Variable var2 = new Variable("gt0012");
expected = new BinaryExpression(var2, var1, OperatorKind.EXPONENT);
check();
}
public void testAdditionVarConst() throws Exception {
parseSingleExpression("$gt0010 + 12");
Variable var1 = new Variable("gt0010");
ConstantExpression var2 = new ConstantExpression("12");
expected = new BinaryExpression(var1, var2, OperatorKind.ADDITION);
check();
}
public void testSubstrationVarConst() throws Exception {
parseSingleExpression("$gt0010 - 12");
Variable var1 = new Variable("gt0010");
ConstantExpression var2 = new ConstantExpression("12");
expected = new BinaryExpression(var1, var2, OperatorKind.SUBSTRATION);
check();
}
public void testMultiplicationVarConst() throws Exception {
parseSingleExpression("$gt0010 * 12");
Variable var1 = new Variable("gt0010");
ConstantExpression var2 = new ConstantExpression("12");
expected = new BinaryExpression(var1, var2, OperatorKind.MULTIPLICATION);
check();
}
public void testDivisionVarConst() throws Exception {
parseSingleExpression("$gt0010 / 12");
Variable var1 = new Variable("gt0010");
ConstantExpression var2 = new ConstantExpression("12");
expected = new BinaryExpression(var1, var2, OperatorKind.DIVISION);
check();
}
public void testExponentVarConst() throws Exception {
parseSingleExpression("$gt0010 ^ 12");
Variable var1 = new Variable("gt0010");
ConstantExpression var2 = new ConstantExpression("12");
expected = new BinaryExpression(var1, var2, OperatorKind.EXPONENT);
check();
}
public void testAdditionTwoVarsLabel() throws Exception {
parseSingleExpression("$gt0010|height| + $gt0012|weight|");
Variable var1 = new Variable("gt0010", "height");
Variable var2 = new Variable("gt0012", "weight");
expected = new BinaryExpression(var1, var2, OperatorKind.ADDITION);
check();
}
public void testSubstrationTwoVarsLabel() throws Exception {
parseSingleExpression("$gt0010|height| - $gt0012|weight|");
Variable var1 = new Variable("gt0010", "height");
Variable var2 = new Variable("gt0012", "weight");
expected = new BinaryExpression(var1, var2, OperatorKind.SUBSTRATION);
check();
}
public void testMultiplicationTwoVarsLabel() throws Exception {
parseSingleExpression("$gt0010|height| * $gt0012|weight|");
Variable var1 = new Variable("gt0010", "height");
Variable var2 = new Variable("gt0012", "weight");
expected = new BinaryExpression(var1, var2, OperatorKind.MULTIPLICATION);
check();
}
public void testDivisionTwoVarsLabel() throws Exception {
parseSingleExpression("$gt0010|height| / $gt0012|weight|");
Variable var1 = new Variable("gt0010", "height");
Variable var2 = new Variable("gt0012", "weight");
expected = new BinaryExpression(var1, var2, OperatorKind.DIVISION);
check();
}
public void testExponentTwoVarsLabel() throws Exception {
parseSingleExpression("$gt0010|height| ^ $gt0012|weight|");
Variable var1 = new Variable("gt0010", "height");
Variable var2 = new Variable("gt0012", "weight");
expected = new BinaryExpression(var1, var2, OperatorKind.EXPONENT);
check();
}
public void testParseSpecialUnits() throws Exception {
parseSingleExpression("$gt0010|Creatinine| > 62,µmol/l");
Variable var1 = new Variable("gt0010", "Creatinine");
QuantityConstant var2 = new QuantityConstant(new DvQuantity("µmol/l", 62.0, 0));
expected = new BinaryExpression(var1, var2, OperatorKind.GREATER_THAN);
check();
}
public void testParseNegativeNumber() throws Exception {
parseSingleExpression("$gt0010|Creatinine|^(-0.329)");
Variable var1 = new Variable("gt0010", "Creatinine");
ConstantExpression var2 = new ConstantExpression("(-0.329)");
expected = new BinaryExpression(var1, var2, OperatorKind.EXPONENT);
check();
}
public void testComplexOneWithMinusNumber() throws Exception {
parseSingleExpression(
"$gt0007.magnitude=((144*(((($gt0003.magnitude/0.7)*11312)/10000000)^(-0.329)))*(0.993^$gt0008.magnitude))");
}
public void testParseAssignementWithDecimal() throws Exception {
parseSingleExpression(
"$gt0013.magnitude=($gt0005*0.007184)");
}
public void testParseAssignementWithMinusDecimal() throws Exception {
parseSingleExpression(
"$gt0013.magnitude=($gt0005*(-0.007184))");
}
public void testParseEvaluationWithSubstraction() throws Exception {
parseSingleExpression(
"$gt0002.value>=($currentDateTime.value-4.5,h)");
}
public void testParseAssignementWithMinusInteger() throws Exception {
parseSingleExpression(
"$gt0013.magnitude=($gt0005*(-3))");
}
public void testParseSubstractionWithMinusInteger() throws Exception {
parseSingleExpression(
"$gt0013.magnitude=($gt0005-(-3))");
}
public void testParseAssignmentWithMinusIntegerWithUnits() throws Exception {
parseSingleExpression("$gt0013.magnitude=(-3),d");
}
public void testParseSubstractionWithMinusIntegerWithUnits() throws Exception {
parseSingleExpression(
"$gt0013.magnitude=($gt0005*(-3),d)");
}
public void testParseSubstractionWithMinusDecimalWithUnits() throws Exception {
parseSingleExpression(
"$gt0013.magnitude=($gt0005*(-3.0),d)");
}
}
/*
* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 2.0/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 2.0 (the 'License'); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an 'AS IS' basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
*
* The Initial Developers of the Original Code are Iago Corbal and Rong Chen.
* Portions created by the Initial Developer are Copyright (C) 2012-2013
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
*
* Software distributed under the License is distributed on an 'AS IS' basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* ***** END LICENSE BLOCK *****
*/