Files
JIMRI/java/test/jmri/jmrit/logixng/util/parser/ExpressionNodeTernaryOperatorTest.java
T
2026-06-17 14:00:51 +02:00

110 lines
4.5 KiB
Java

package jmri.jmrit.logixng.util.parser;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.fail;
import jmri.JmriException;
import jmri.jmrit.logixng.SymbolTable;
import jmri.jmrit.logixng.implementation.DefaultConditionalNG;
import jmri.jmrit.logixng.implementation.DefaultSymbolTable;
import jmri.jmrit.logixng.util.LogixNG_Thread;
import jmri.util.JUnitUtil;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
/**
* Test ExpressionNodeTernaryOperator
*
* @author Daniel Bergqvist 2020
*/
public class ExpressionNodeTernaryOperatorTest {
@Test
public void testCtor() throws ParserException {
Token token = new Token(TokenType.NONE, "1", 0);
ExpressionNodeFloatingNumber expressionNumber = new ExpressionNodeFloatingNumber(token);
ExpressionNodeTernaryOperator t = new ExpressionNodeTernaryOperator(expressionNumber, null, null);
assertNotNull( t, "exists");
t = new ExpressionNodeTernaryOperator(expressionNumber, null, expressionNumber);
assertNotNull( t, "exists");
t = new ExpressionNodeTernaryOperator(expressionNumber, expressionNumber, null);
assertNotNull( t, "exists");
t = new ExpressionNodeTernaryOperator(expressionNumber, expressionNumber, expressionNumber);
assertNotNull( t, "exists");
// Left side must not be null
IllegalArgumentException e = assertThrows( IllegalArgumentException.class, () -> {
var ento = new ExpressionNodeTernaryOperator(null, null, null);
fail("should have thrown, created " + ento);
}, "exception is thrown");
assertNotNull(e);
// Left side must not be null
e = assertThrows( IllegalArgumentException.class, () -> {
var ento = new ExpressionNodeTernaryOperator(null, expressionNumber, null);
fail("should have thrown, created " + ento);
}, "exception is thrown");
assertNotNull(e);
// Left side must not be null
e = assertThrows( IllegalArgumentException.class, () -> {
var ento = new ExpressionNodeTernaryOperator(null, null, expressionNumber);
fail("should have thrown, created " + ento);
}, "exception is thrown");
assertNotNull(e);
// Left side must not be null
e = assertThrows( IllegalArgumentException.class, () -> {
var ento = new ExpressionNodeTernaryOperator(null, expressionNumber, expressionNumber);
fail("should have thrown, created " + ento);
}, "exception is thrown");
assertNotNull(e);
}
@Test
public void testCalculate() throws JmriException {
ExpressionNode exprTrue = new ExpressionNodeTrue();
ExpressionNode exprFalse = new ExpressionNodeFalse();
ExpressionNode expr0 = new ExpressionNodeIntegerNumber(new Token(TokenType.NONE, "0", 0));
ExpressionNode expr1 = new ExpressionNodeIntegerNumber(new Token(TokenType.NONE, "1", 0));
ExpressionNode expr12_34 = new ExpressionNodeFloatingNumber(new Token(TokenType.NONE, "12.34", 0));
ExpressionNode expr25_46 = new ExpressionNodeFloatingNumber(new Token(TokenType.NONE, "25.46", 0));
SymbolTable symbolTable = new DefaultSymbolTable(new DefaultConditionalNG("IQC1", null));
assertEquals( 12.34,
(double)new ExpressionNodeTernaryOperator(expr1, expr12_34, expr25_46).calculate(symbolTable),
0.00000001, "calculate() gives the correct value");
assertEquals( 25.46,
(double)new ExpressionNodeTernaryOperator(expr0, expr12_34, expr25_46).calculate(symbolTable),
0.00000001, "calculate() gives the correct value");
assertEquals( 12.34,
(double)new ExpressionNodeTernaryOperator(exprTrue, expr12_34, expr25_46).calculate(symbolTable),
0.00000001, "calculate() gives the correct value");
assertEquals( 25.46,
(double)new ExpressionNodeTernaryOperator(exprFalse, expr12_34, expr25_46).calculate(symbolTable),
0.00000001, "calculate() gives the correct value");
}
@BeforeEach
public void setUp() {
JUnitUtil.setUp();
}
@AfterEach
public void tearDown() {
LogixNG_Thread.stopAllLogixNGThreads();
JUnitUtil.tearDown();
}
}