From: Jana Babovakova Date: Tue, 25 Mar 2025 16:52:26 +0000 (+0100) Subject: Filter: Add tests for 'case' expressions X-Git-Tag: v2.17~23 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7167dbd4d09137474398fbc02e7c05a9f4969fe3;p=thirdparty%2Fbird.git Filter: Add tests for 'case' expressions --- diff --git a/filter/test.conf b/filter/test.conf index 4d4e93077..3df9b6975 100644 --- a/filter/test.conf +++ b/filter/test.conf @@ -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");