From 1e0f89df48ba10cdde80bd623b84e20fb48b977d Mon Sep 17 00:00:00 2001 From: Eugen Wissner Date: Fri, 24 Jul 2026 21:28:33 +0200 Subject: Accept any constant types in case labels --- testsuite/fail_compilation/case_non_constant.elna | 16 ++++++++++++++++ testsuite/fail_compilation/case_type_mismatch.elna | 9 +++++++++ testsuite/runnable/case_else.elna | 14 ++++++++++++++ testsuite/runnable/case_int.elna | 12 ++++++++++++ testsuite/runnable/case_multilabel.elna | 11 +++++++++++ testsuite/runnable/case_record.elna | 17 +++++++++++++++++ 6 files changed, 79 insertions(+) create mode 100644 testsuite/fail_compilation/case_non_constant.elna create mode 100644 testsuite/fail_compilation/case_type_mismatch.elna create mode 100644 testsuite/runnable/case_else.elna create mode 100644 testsuite/runnable/case_int.elna create mode 100644 testsuite/runnable/case_multilabel.elna create mode 100644 testsuite/runnable/case_record.elna (limited to 'testsuite') 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. -- cgit v1.2.3