summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/control_flow/test_match.zc52
1 files changed, 52 insertions, 0 deletions
diff --git a/tests/control_flow/test_match.zc b/tests/control_flow/test_match.zc
index 7646256..bf757b1 100644
--- a/tests/control_flow/test_match.zc
+++ b/tests/control_flow/test_match.zc
@@ -20,6 +20,16 @@ fn get_sign(n: int) -> string {
}
}
+fn classify_extended(n: int) -> int {
+ match n {
+ 1 || 2 => { return 100; }, // OR pattern with ||
+ 3 or 4 => { return 200; }, // OR pattern with 'or'
+ 5..8 => { return 300; }, // Range exclusive (5, 6, 7)
+ 10..=15 => { return 400; }, // Range inclusive (10-15)
+ _ => { return -1; }
+ }
+}
+
test "test_match" {
println "Testing match expressions...";
@@ -86,6 +96,48 @@ test "test_match" {
exit(1);
}
+ // OR pattern with ||
+ var or1 = classify_extended(1);
+ var or2 = classify_extended(2);
+ if (or1 == 100 && or2 == 100) {
+ println " -> match OR (||): Passed";
+ } else {
+ println " -> match OR (||): Failed";
+ exit(1);
+ }
+
+ // OR pattern with 'or'
+ var or3 = classify_extended(3);
+ var or4 = classify_extended(4);
+ if (or3 == 200 && or4 == 200) {
+ println " -> match OR (or): Passed";
+ } else {
+ println " -> match OR (or): Failed";
+ exit(1);
+ }
+
+ // Range exclusive (5..8 matches 5, 6, 7)
+ var r5 = classify_extended(5);
+ var r7 = classify_extended(7);
+ var r8 = classify_extended(8); // Should NOT match
+ if (r5 == 300 && r7 == 300 && r8 == -1) {
+ println " -> match range exclusive: Passed";
+ } else {
+ println " -> match range exclusive: Failed";
+ exit(1);
+ }
+
+ // Range inclusive (10..=15 matches 10-15)
+ var r10 = classify_extended(10);
+ var r15 = classify_extended(15);
+ var r16 = classify_extended(16); // Should NOT match
+ if (r10 == 400 && r15 == 400 && r16 == -1) {
+ println " -> match range inclusive: Passed";
+ } else {
+ println " -> match range inclusive: Failed";
+ exit(1);
+ }
+
println "All match tests passed!";
}