aboutsummaryrefslogtreecommitdiff
path: root/testsuite
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2026-07-24 21:28:33 +0200
committerEugen Wissner <belka@caraus.de>2026-07-25 02:22:34 +0200
commit1e0f89df48ba10cdde80bd623b84e20fb48b977d (patch)
tree58f550342ff7ef42e506131b5c04a35ffdeb4a00 /testsuite
parent6301c1f2f669b84a429e836888629873721e7219 (diff)
downloadelna-1e0f89df48ba10cdde80bd623b84e20fb48b977d.tar.gz
Accept any constant types in case labels
Diffstat (limited to 'testsuite')
-rw-r--r--testsuite/fail_compilation/case_non_constant.elna16
-rw-r--r--testsuite/fail_compilation/case_type_mismatch.elna9
-rw-r--r--testsuite/runnable/case_else.elna14
-rw-r--r--testsuite/runnable/case_int.elna12
-rw-r--r--testsuite/runnable/case_multilabel.elna11
-rw-r--r--testsuite/runnable/case_record.elna17
6 files changed, 79 insertions, 0 deletions
diff --git a/testsuite/fail_compilation/case_non_constant.elna b/testsuite/fail_compilation/case_non_constant.elna
new file mode 100644
index 0000000..2f19df8
--- /dev/null
+++ b/testsuite/fail_compilation/case_non_constant.elna
@@ -0,0 +1,16 @@
+type
+ R = record
+ a: Int;
+ b: Int
+ end
+
+var
+ r: R
+ x: R
+
+begin
+ x := r;
+ case x of
+ r: (* @Error Expected a constant expression *)
+ end
+end.
diff --git a/testsuite/fail_compilation/case_type_mismatch.elna b/testsuite/fail_compilation/case_type_mismatch.elna
new file mode 100644
index 0000000..9cdae38
--- /dev/null
+++ b/testsuite/fail_compilation/case_type_mismatch.elna
@@ -0,0 +1,9 @@
+var
+ x: Int
+
+begin
+ case x of
+ 1: (* ok *)
+ | true: (* @Error Invalid operands of type 'Int' and 'Bool' for operator = *)
+ end
+end.
diff --git a/testsuite/runnable/case_else.elna b/testsuite/runnable/case_else.elna
new file mode 100644
index 0000000..dbec6df
--- /dev/null
+++ b/testsuite/runnable/case_else.elna
@@ -0,0 +1,14 @@
+var
+ x: Int := 5
+ matched: Bool := false
+
+begin
+ case x of
+ 1: assert(false)
+ | 2: assert(false)
+ | 3: assert(false)
+ else
+ matched := true
+ end;
+ assert(matched)
+end.
diff --git a/testsuite/runnable/case_int.elna b/testsuite/runnable/case_int.elna
new file mode 100644
index 0000000..3b770a7
--- /dev/null
+++ b/testsuite/runnable/case_int.elna
@@ -0,0 +1,12 @@
+var
+ x: Int := 2
+
+begin
+ case x of
+ 1: assert(false)
+ | 2: assert(true)
+ | 3: assert(false)
+ else
+ assert(false)
+ end
+end.
diff --git a/testsuite/runnable/case_multilabel.elna b/testsuite/runnable/case_multilabel.elna
new file mode 100644
index 0000000..be647d4
--- /dev/null
+++ b/testsuite/runnable/case_multilabel.elna
@@ -0,0 +1,11 @@
+var
+ x: Int := 3
+
+begin
+ case x of
+ 1, 2, 3: assert(true)
+ | 4, 5: assert(false)
+ else
+ assert(false)
+ end
+end.
diff --git a/testsuite/runnable/case_record.elna b/testsuite/runnable/case_record.elna
new file mode 100644
index 0000000..4f65a5b
--- /dev/null
+++ b/testsuite/runnable/case_record.elna
@@ -0,0 +1,17 @@
+type
+ R = record
+ a: Int;
+ b: Int
+ end
+
+var
+ r: R := R{a: 1, b: 2}
+
+begin
+ case r of
+ R{a: 0, b: 0}: assert(false)
+ | R{a: 1, b: 2}: assert(true)
+ else
+ assert(false)
+ end
+end.