]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Filter: Add tests for 'case' expressions
authorJana Babovakova <babovakova.jana@gmail.com>
Tue, 25 Mar 2025 16:52:26 +0000 (17:52 +0100)
committerOndrej Zajicek <santiago@crfreenet.org>
Wed, 26 Mar 2025 02:11:40 +0000 (03:11 +0100)
filter/test.conf

index 4d4e93077a45ca2a4d262bceb2c1058276bf1520..3df9b6975262d2ed905f5f5de6204f00f9d21fb6 100644 (file)
@@ -134,13 +134,19 @@ function t_int()
 
        case i {
                4200000000: bt_assert(true);
+               (2+2): bt_assert(false);
                else: bt_assert(false);
        }
-
        case four {
+               4200000000: bt_assert(false);
                (2+2): bt_assert(true);
                else: bt_assert(false);
        }
+       case 5 {
+               4200000000: bt_assert(false);
+               (2+2): bt_assert(false);
+               else: bt_assert(true);
+       }
 
        aux_t_int(1, 2);
        aux_t_int(1, 3);
@@ -211,6 +217,22 @@ function t_int_set()
 
        bt_assert(format([ 1, 2, 1, 1, 1, 3, 4, 1, 1, 1, 5 ]) = "[1, 1, 1, 1, 1, 1, 1, 2, 3, 4, 5]");
        bt_assert(format([]) = "[]");
+
+       case 3 {
+               (one), (2+1), (6-one), (17+2), 8, 11, 15, 17: bt_assert(true);
+               1, 4..10, 20: bt_assert(false);
+               else: bt_assert(false);
+       }
+       case 7 {
+               (one), (2+1), (6-one), (17+2), 8, 11, 15, 17: bt_assert(false);
+               1, 4..10, 20: bt_assert(true);
+               else: bt_assert(false);
+       }
+       case 12 {
+               (one), (2+1), (6-one), (17+2), 8, 11, 15, 17: bt_assert(false);
+               1, 4..10, 20: bt_assert(false);
+               else: bt_assert(true);
+       }
 }
 
 bt_test_suite(t_int_set, "Testing sets of integers");
@@ -338,6 +360,22 @@ function t_pair_set()
        bt_assert((50150,50050) !~ ps);
        bt_assert((10,9) !~ ps);
        bt_assert((65535,11) !~ ps);
+
+       case (6,4) {
+               (1,(one+one)), (3,4)..(4,8), (5,*), (6,3..6): bt_assert(true);
+               (20..150, 200..300), (50100..50200, 1000..50000), (*, 5+5): bt_assert(false);
+               else: bt_assert(false);
+       }
+       case (4,10) {
+               (1,(one+one)), (3,4)..(4,8), (5,*), (6,3..6): bt_assert(false);
+               (20..150, 200..300), (50100..50200, 1000..50000), (*, 5+5): bt_assert(true);
+               else: bt_assert(false);
+       }
+       case (1,5) {
+               (1,(one+one)), (3,4)..(4,8), (5,*), (6,3..6): bt_assert(false);
+               (20..150, 200..300), (50100..50200, 1000..50000), (*, 5+5): bt_assert(false);
+               else: bt_assert(true);
+       }
 }
 
 bt_test_suite(t_pair_set, "Testing sets of pairs");
@@ -376,6 +414,22 @@ quad qq;
        bt_assert(qq ~ [1.2.3.4, 5.6.7.8]);
        bt_assert(qq !~ [1.2.1.1, 1.2.3.5]);
        bt_assert(qq !~ []);
+
+       case qq {
+               1.2.3.4, 5.6.7.8: bt_assert(true);
+               1.2.1.1, 1.2.3.5: bt_assert(false);
+               else: bt_assert(false);
+       }
+       case 1.2.1.1 {
+               1.2.3.4, 5.6.7.8: bt_assert(false);
+               1.2.1.1, 1.2.3.5: bt_assert(true);
+               else: bt_assert(false);
+       }
+       case 1.1.2.1 {
+               1.2.3.4, 5.6.7.8: bt_assert(false);
+               1.2.1.1, 1.2.3.5: bt_assert(false);
+               else: bt_assert(true);
+       }
 }
 
 bt_test_suite(t_quad_set, "Testing sets of quads");
@@ -457,6 +511,39 @@ ip set ips;
        bt_assert(1.2.3.4 !~ [ 1.2.3.3, 1.2.3.5 ]);
        bt_assert(1.2.3.4 ~ [ 1.2.3.3..1.2.3.5 ]);
        bt_assert(1.2.3.4 !~ []);
+
+       case 1.1.1.64 {
+               1.1.1.0 .. 1.1.1.255 : bt_assert(true);
+               (ip1222): bt_assert(false);
+               else: bt_assert(false);
+       }
+       case 1.2.2.2 {
+               1.1.1.0 .. 1.1.1.255 : bt_assert(false);
+               (ip1222): bt_assert(true);
+               else: bt_assert(false);
+       }
+       case onetwo {
+               1.1.1.0 .. 1.1.1.255 : bt_assert(false);
+               (ip1222): bt_assert(false);
+               else: bt_assert(true);
+       }
+
+       case 1234:5678:: {
+               ::fffe:6:c0c:936d:88c7:35d3, 1234:5678:: : bt_assert(true);
+               1:2:3:4:5:6:7:8, 10:20:30:40:50:60:70:80, 1090:20a0:30b0:40c0:50d0:60e0:70f0:8000 : bt_assert(false);
+               else: bt_assert(false);
+       }
+       case 10:20:30:40:50:60:70:80 {
+               ::fffe:6:c0c:936d:88c7:35d3, 1234:5678:: : bt_assert(false);
+               1:2:3:4:5:6:7:8, 10:20:30:40:50:60:70:80, 1090:20a0:30b0:40c0:50d0:60e0:70f0:8000 : bt_assert(true);
+               else: bt_assert(false);
+       }
+       case 1:2:3:4:5:6:7:9 {
+               ::fffe:6:c0c:936d:88c7:35d3, 1234:5678:: : bt_assert(false);
+               1:2:3:4:5:6:7:8, 10:20:30:40:50:60:70:80, 1090:20a0:30b0:40c0:50d0:60e0:70f0:8000 : bt_assert(false);
+               else: bt_assert(true);
+       }
+
 }
 
 bt_test_suite(t_ip_set, "Testing sets of ip address");
@@ -496,6 +583,22 @@ function t_enum()
        bt_assert(RTS_BGP !~ [RTS_STATIC, RTS_DEVICE]);
        bt_assert(NET_IP6  ~ es);
        bt_assert(NET_IP4 !~ es);
+
+       case NET_IP6 {
+               NET_IP6: bt_assert(true);
+               NET_VPN6: bt_assert(false);
+               else: bt_assert(false);
+       }
+       case RTS_DEVICE {
+               RTS_STATIC: bt_assert(false);
+               RTS_DEVICE: bt_assert(true);
+               else: bt_assert(false);
+       }
+       case NET_IP4 {
+               NET_IP6: bt_assert(false);
+               NET_VPN6: bt_assert(false);
+               else: bt_assert(true);
+       }
 }
 
 bt_test_suite(t_enum, "Testing enums");
@@ -1429,6 +1532,22 @@ ec set ecs;
        bt_assert((ro, 12345, 10) !~ ecs);
        bt_assert((rt, 12346, 0) !~ ecs);
        bt_assert((ro, 0.1.134.160, 150) !~ ecs);
+
+       case (rt, 12345, 0) {
+               (rt, 123456, 20000), (rt, 12345, *): bt_assert(true);
+               (rt, ten, (one+onef(0))*10), (ro, 100000, 100..200): bt_assert(false);
+               else: bt_assert(false);
+       }
+       case (rt, 10, 20) {
+               (rt, 123456, 20000), (rt, 12345, *): bt_assert(false);
+               (rt, ten, (one+onef(0))*10), (ro, 100000, 100..200): bt_assert(true);
+               else: bt_assert(false);
+       }
+       case (rt, 123456, 100) {
+               (rt, 123456, 20000), (rt, 12345, *): bt_assert(false);
+               (rt, ten, (one+onef(0))*10), (ro, 100000, 100..200): bt_assert(false);
+               else: bt_assert(true);
+       }
 }
 
 bt_test_suite(t_ec_set, "Testing sets of extended communities");
@@ -1652,6 +1771,22 @@ lc set lls;
        bt_assert((50,  0,  0)  ~ lls);
        bt_assert((60, 60, 60)  ~ lls);
        bt_assert((70, 60, 60) !~ lls);
+
+       case (40, 40, 40) {
+               (10, 10, 10), (20, 20, 15..25), (30, 30, *), (40, 35..45, *), (50, *, *), (55..65, *, *): bt_assert(true);
+               (5, 10, 15), (10, 20, 30), (10, 15..25, *), (ten, *, *), (11, *, *): bt_assert(false);
+               else: bt_assert(false);
+       }
+       case (10, 20, 40) {
+               (10, 10, 10), (20, 20, 15..25), (30, 30, *), (40, 35..45, *), (50, *, *), (55..65, *, *): bt_assert(false);
+               (5, 10, 15), (10, 20, 30), (10, 15..25, *), (ten, *, *), (11, *, *): bt_assert(true);
+               else: bt_assert(false);
+       }
+       case (12, 50, 40) {
+               (10, 10, 10), (20, 20, 15..25), (30, 30, *), (40, 35..45, *), (50, *, *), (55..65, *, *): bt_assert(false);
+               (5, 10, 15), (10, 20, 30), (10, 15..25, *), (ten, *, *), (11, *, *): bt_assert(false);
+               else: bt_assert(true);
+       }
 }
 
 bt_test_suite(t_lclist_set, "Testing sets of large communities");
@@ -1711,6 +1846,22 @@ rd set rds;
        bt_assert(100000:200 ~ rds);
        bt_assert(100010:150 !~ rds);
        bt_assert(100010:150 !~ []);
+
+       case 100000:130 {
+               10:20, 100000:100..100000:200: bt_assert(true);
+               10:21, 100000:90, 100010:150: bt_assert(false);
+               else: bt_assert(false);
+       }
+       case 100000:90 {
+               10:20, 100000:100..100000:200: bt_assert(false);
+               10:21, 100000:90, 100010:150: bt_assert(true);
+               else: bt_assert(false);
+       }
+       case 100000:230 {
+               10:20, 100000:100..100000:200: bt_assert(false);
+               10:21, 100000:90, 100010:150: bt_assert(false);
+               else: bt_assert(true);
+       }
 }
 
 bt_test_suite(t_rd_set, "Testing sets of route distinguishers");