diff options
author | metagn <metagngn@gmail.com> | 2024-08-29 17:13:06 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-08-29 16:13:06 +0200 |
commit | b7b1313d21deb687adab2b4a162e716ba561a26b (patch) | |
tree | b04d1718fa65cc6d03f1385cf9a2ec672cfccf6d /tests | |
parent | d7e77b330f3f84a9cebcca057c0697687ebe8ec3 (diff) | |
download | Nim-b7b1313d21deb687adab2b4a162e716ba561a26b.tar.gz |
proper error message for out-of-range enum sets (#24027)
fixes #17848
Diffstat (limited to 'tests')
-rw-r--r-- | tests/sets/twrongenumrange.nim | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/tests/sets/twrongenumrange.nim b/tests/sets/twrongenumrange.nim new file mode 100644 index 000000000..fc90c142f --- /dev/null +++ b/tests/sets/twrongenumrange.nim @@ -0,0 +1,51 @@ +discard """ + cmd: "nim check --hints:off $file" +""" + +# issue #17848 + +block: + # generate with: + # var a = "" + # for i in 0..<80: a.add "k" & $i & ", " + # echo a + type + TMsgKind = enum + k0, k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k50, k51, k52, k53, k54, k55, k56, k57, k58, k59, k60, k61, k62, k63, k64, k65, k66, k67, k68, k69, k70, k71, k72, k73, k74, k75, k76, k77, k78, k79 + type + TNoteKind = range[k10..k79] + Conf = ref object + notes: set[TNoteKind] + proc bad(conf: Conf, noteSet: set[TMsgKind]) = + conf.notes = noteSet #[tt.Error + ^ type mismatch: got <set[TMsgKind]> but expected 'set[TNoteKind]']# + var conf = Conf() + bad(conf, {k10..k60}) + +block: + type + TMsgKind = enum k0, k1, k2, k3 + TNoteKind = range[k1..k2] + TNoteKinds = set[TNoteKind] + type Conf = ref object + notes: TNoteKinds + proc fn(conf: Conf, b: set[TMsgKind]) = + conf.notes = b #[tt.Error + ^ type mismatch: got <set[TMsgKind]> but expected 'TNoteKinds = set[TNoteKind]']# + var conf = Conf() + conf.fn({k0..k3}) # BUG: this should give error + echo conf.notes # {k1, k2} + +block: + #[ + compiler/bitsets.nim(43, 9) `elem >= 0` [AssertionDefect] + ]# + type + TMsgKind = enum k0, k1, k2, k3 + TNoteKind = range[k1..k2] + var notes: set[TNoteKind] + notes = {k0} #[tt.Error + ^ cannot convert 'k0' to 'TNoteKind = range 1..2(TMsgKind)]# + notes = {k0..k3} #[tt.Error + ^ cannot convert 'k0' to 'TNoteKind = range 1..2(TMsgKind)'; tt.Error + ^ cannot convert 'k3' to 'TNoteKind = range 1..2(TMsgKind)']# |