summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorchaochaoc <[email protected]>2024-04-02 11:30:55 +0800
committerchaochaoc <[email protected]>2024-04-02 11:30:55 +0800
commitfd2bf1af7dfc965323281672e9ec88ce0019f571 (patch)
tree84de8b0a1230a0364a13a7775a1eff4390b5e305
parentbb3c6a6cb3181ad634f93b3fcc38c14e1f80bc53 (diff)
[CN-1617] test: 'EVAL' function bitwise operations
-rw-r--r--groot-core/src/test/java/com/geedgenetworks/core/udf/test/eval/EvalExpressionResolverTest.java12
-rw-r--r--groot-core/src/test/java/com/geedgenetworks/core/udf/test/eval/codegen/CalcCodeConvertorTest.java26
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"));