diff options
| author | chaochaoc <[email protected]> | 2024-04-02 11:30:55 +0800 |
|---|---|---|
| committer | chaochaoc <[email protected]> | 2024-04-02 11:30:55 +0800 |
| commit | fd2bf1af7dfc965323281672e9ec88ce0019f571 (patch) | |
| tree | 84de8b0a1230a0364a13a7775a1eff4390b5e305 | |
| parent | bb3c6a6cb3181ad634f93b3fcc38c14e1f80bc53 (diff) | |
[CN-1617] test: 'EVAL' function bitwise operations
2 files changed, 35 insertions, 3 deletions
diff --git a/groot-core/src/test/java/com/geedgenetworks/core/udf/test/eval/EvalExpressionResolverTest.java b/groot-core/src/test/java/com/geedgenetworks/core/udf/test/eval/EvalExpressionResolverTest.java index 54d67e9..ccfa03e 100644 --- a/groot-core/src/test/java/com/geedgenetworks/core/udf/test/eval/EvalExpressionResolverTest.java +++ b/groot-core/src/test/java/com/geedgenetworks/core/udf/test/eval/EvalExpressionResolverTest.java @@ -60,10 +60,10 @@ class EvalExpressionResolverTest { new ValueExpression.ArithmeticExpression(ArithmeticOperator.PLUS, new ValueExpression.StringConstantExpression("S2C:"), new ValueExpression.FieldRefExpression("common_s2c_pkt_num"))) - ); + ); assertEquals( resolver.resolve("common_c2s_pkt_num > common_s2c_pkt_num " + - "& common_c2s_byte_num > common_s2c_byte_num ? common_client_port : common_server_port"), + "&& common_c2s_byte_num > common_s2c_byte_num ? common_client_port : common_server_port"), new ValueExpression.TernaryExpression( new BooleanExpression.PredicateExpression(PredicateOperator.AND, new BooleanExpression.ComparisonExpression(ComparisonOperator.GT, @@ -75,6 +75,14 @@ class EvalExpressionResolverTest { new ValueExpression.FieldRefExpression("common_client_port"), new ValueExpression.FieldRefExpression("common_server_port")) ); + assertEquals( + resolver.resolve("common_c2s_pkt_num & 2"), + new ValueExpression.ArithmeticExpression( + ArithmeticOperator.BITWISE_AND, + new ValueExpression.FieldRefExpression("common_c2s_pkt_num"), + new ValueExpression.NumberConstantExpression(2) + ) + ); } diff --git a/groot-core/src/test/java/com/geedgenetworks/core/udf/test/eval/codegen/CalcCodeConvertorTest.java b/groot-core/src/test/java/com/geedgenetworks/core/udf/test/eval/codegen/CalcCodeConvertorTest.java index ded872e..4826ca0 100644 --- a/groot-core/src/test/java/com/geedgenetworks/core/udf/test/eval/codegen/CalcCodeConvertorTest.java +++ b/groot-core/src/test/java/com/geedgenetworks/core/udf/test/eval/codegen/CalcCodeConvertorTest.java @@ -8,6 +8,7 @@ import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import java.math.BigDecimal; +import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -76,13 +77,36 @@ class CalcCodeConvertorTest { commonClientPort > commonServerPort ? "C2S:" + commonC2sPktNum : "S2C:" + commonS2cPktNum); assertEquals( CalcCodeConvertor.convert("common_c2s_pkt_num > common_s2c_pkt_num " + - "& common_c2s_byte_num > common_s2c_byte_num ? common_client_port : common_server_port").eval(origin), + "&& common_c2s_byte_num > common_s2c_byte_num ? common_client_port : common_server_port").eval(origin), commonC2sPktNum > commonS2cPktNum && commonC2sByteNum > commonS2cByteNum ? commonClientPort : commonServerPort ); } @Test + public void testArithmeticExpression() throws Exception { + final Map<String, Object> map = Collections.emptyMap(); + assertEquals( + 1, CalcCodeConvertor.convert("5 & 3").eval(map)); + assertEquals( + 7, CalcCodeConvertor.convert("5 | 3").eval(map)); + assertEquals( + 20, CalcCodeConvertor.convert("5 << 2").eval(map)); + assertEquals( + 1, CalcCodeConvertor.convert("5 >> 2").eval(map)); + assertEquals( + 8, CalcCodeConvertor.convert("5 + 3").eval(map)); + assertEquals( + 2, CalcCodeConvertor.convert("5 - 3").eval(map)); + assertEquals( + 15, CalcCodeConvertor.convert("5 * 3").eval(map)); + assertEquals( + 2, CalcCodeConvertor.convert("5 / 2").eval(map)); + assertEquals( + 2, CalcCodeConvertor.convert("5 % 3").eval(map)); + } + + @Test public void testError() { assertThrows(SyntaxErrorException.class, () -> CalcCodeConvertor.convert("common_c2s_pkt_num > common_s2c_pkt_num")); |
