diff options
Diffstat (limited to 'tests/sets')
-rw-r--r-- | tests/sets/m17385.nim | 11 | ||||
-rw-r--r-- | tests/sets/t13764.nim | 6 | ||||
-rw-r--r-- | tests/sets/t15435.nim | 29 | ||||
-rw-r--r-- | tests/sets/t17385.nim | 4 | ||||
-rw-r--r-- | tests/sets/t20997.nim | 18 | ||||
-rw-r--r-- | tests/sets/t2669.nim | 6 | ||||
-rw-r--r-- | tests/sets/t5792.nim | 17 | ||||
-rw-r--r-- | tests/sets/thugeset.nim | 10 | ||||
-rw-r--r-- | tests/sets/tnewsets.nim | 6 | ||||
-rw-r--r-- | tests/sets/trangeincompatible.nim | 32 | ||||
-rw-r--r-- | tests/sets/tsets.nim | 133 | ||||
-rw-r--r-- | tests/sets/tsets_various.nim | 286 | ||||
-rw-r--r-- | tests/sets/twrongenumrange.nim | 50 |
13 files changed, 608 insertions, 0 deletions
diff --git a/tests/sets/m17385.nim b/tests/sets/m17385.nim new file mode 100644 index 000000000..3919e067a --- /dev/null +++ b/tests/sets/m17385.nim @@ -0,0 +1,11 @@ +import std/sets + +type + Diff*[T] = object + data: T + +proc test*[T](diff: Diff[T]) = + var bPopular = initHashSet[T]() + for element in bPopular.items(): + echo element + diff --git a/tests/sets/t13764.nim b/tests/sets/t13764.nim new file mode 100644 index 000000000..1634f113d --- /dev/null +++ b/tests/sets/t13764.nim @@ -0,0 +1,6 @@ +discard """ +errormsg: "conversion from int literal(1000000) to range 0..255(int) is invalid" +line: 6 +""" + +let a = {1_000_000} # Compiles diff --git a/tests/sets/t15435.nim b/tests/sets/t15435.nim new file mode 100644 index 000000000..5ead7e641 --- /dev/null +++ b/tests/sets/t15435.nim @@ -0,0 +1,29 @@ +# bug #15435 +discard """ +errormsg: "type mismatch: got <set[uint8], set[range 1..5(uint8)]>" +nimout: '''t15435.nim(28, 13) Error: type mismatch: got <set[uint8], set[range 1..5(uint8)]> +but expected one of: +proc `<`[T](x, y: set[T]): bool + first type mismatch at position: 2 + required type for y: set[T] + but expression 'x' is of type: set[range 1..5(uint8)] +20 other mismatching symbols have been suppressed; compile with --showAllMismatches:on to see them + +expression: {1'u8, 5} < x''' +""" + + + + + + +## line 20 +var + x: set[range[1u8..5u8]] + +x.incl(1) +x.incl(3) +x.incl(5) + +if {1u8, 5} < x: + echo "successful" diff --git a/tests/sets/t17385.nim b/tests/sets/t17385.nim new file mode 100644 index 000000000..cc08b4882 --- /dev/null +++ b/tests/sets/t17385.nim @@ -0,0 +1,4 @@ +import m17385 + +let a = Diff[int]() +a.test() diff --git a/tests/sets/t20997.nim b/tests/sets/t20997.nim new file mode 100644 index 000000000..b320eee1a --- /dev/null +++ b/tests/sets/t20997.nim @@ -0,0 +1,18 @@ +discard """ + joinable: false +""" + +{.passC: "-flto".} +{.passL: "-flto".} + +template f(n: int) = discard card(default(set[range[0 .. (1 shl n) - 1]])) +f( 7) +f( 8) +f( 9) +f(10) +f(11) +f(12) +f(13) +f(14) +f(15) +f(16) diff --git a/tests/sets/t2669.nim b/tests/sets/t2669.nim new file mode 100644 index 000000000..0a92818fa --- /dev/null +++ b/tests/sets/t2669.nim @@ -0,0 +1,6 @@ +discard """ +errormsg: "cannot convert 6 to range 1..5(int8)" +line: 6 +""" + +var c: set[range[1i8..5i8]] = {1i8, 2i8, 6i8} diff --git a/tests/sets/t5792.nim b/tests/sets/t5792.nim new file mode 100644 index 000000000..297a1fc15 --- /dev/null +++ b/tests/sets/t5792.nim @@ -0,0 +1,17 @@ +discard """ + matrix: "--gc:refc; --gc:arc" +""" + +type + T = enum + a + b + c + U = object + case k: T + of a: + x: int + of {b, c} - {a}: + y: int + +doAssert U(k: b, y: 1).y == 1 diff --git a/tests/sets/thugeset.nim b/tests/sets/thugeset.nim new file mode 100644 index 000000000..1d82ebede --- /dev/null +++ b/tests/sets/thugeset.nim @@ -0,0 +1,10 @@ +let x = 20_000 +let s = {x, 123} #[tt.Warning + ^ type 'int' is too big to be a `set` element, assuming a range of 0..65535, explicitly write this range to get rid of warning [AboveMaxSizeSet]]# +doAssert x in s +doAssert 20_000 in s +{.push warningAsError[AboveMaxSizeSet]: on.} +let s2 = {range[0..65535](x), 123} +doAssert x in s +doAssert 20_000 in s +{.pop.} diff --git a/tests/sets/tnewsets.nim b/tests/sets/tnewsets.nim new file mode 100644 index 000000000..f239d4aa2 --- /dev/null +++ b/tests/sets/tnewsets.nim @@ -0,0 +1,6 @@ +# new test for sets: + +const elem = ' ' + +var s: set[char] = {elem} +assert(elem in s and 'a' not_in s and 'c' not_in s ) diff --git a/tests/sets/trangeincompatible.nim b/tests/sets/trangeincompatible.nim new file mode 100644 index 000000000..554a50235 --- /dev/null +++ b/tests/sets/trangeincompatible.nim @@ -0,0 +1,32 @@ +block: # issue #20142 + let + s1: set['a' .. 'g'] = {'a', 'e'} + s2: set['a' .. 'g'] = {'b', 'c', 'd', 'f'} # this works fine + s3 = {'b', 'c', 'd', 'f'} + + doAssert s1 != s2 + doAssert s1 == {range['a'..'g'] 'a', 'e'} + doAssert s2 == {range['a'..'g'] 'b', 'c', 'd', 'f'} + # literal conversion: + doAssert s1 == {'a', 'e'} + doAssert s2 == {'b', 'c', 'd', 'f'} + doAssert s3 == {'b', 'c', 'd', 'f'} + doAssert not compiles(s1 == s3) + doAssert not compiles(s2 == s3) + # can't convert literal 'z', overload match fails + doAssert not compiles(s1 == {'a', 'z'}) + +block: # issue #18396 + var s1: set[char] = {'a', 'b'} + var s2: set['a'..'z'] = {'a', 'b'} + doAssert s1 == {'a', 'b'} + doAssert s2 == {range['a'..'z'] 'a', 'b'} + doAssert s2 == {'a', 'b'} + doAssert not compiles(s1 == s2) + +block: # issue #16270 + var s1: set[char] = {'a', 'b'} + var s2: set['a'..'z'] = {'a', 'c'} + doAssert not (compiles do: s2 = s2 + s1) + s2 = s2 + {'a', 'b'} + doAssert s2 == {'a', 'b', 'c'} diff --git a/tests/sets/tsets.nim b/tests/sets/tsets.nim new file mode 100644 index 000000000..6125a3715 --- /dev/null +++ b/tests/sets/tsets.nim @@ -0,0 +1,133 @@ +discard """ + targets: "c cpp" +""" + +# Test builtin sets + +# xxx these tests are not very good, this should be revisited. + +when defined nimTestsTsetsGenerate: + # to generate enums for this test + var ret: string + for i in 0..<276: + ret.add "k" & $i & ", " + echo ret + +proc testSets(s: var set[char]) = + s = {'A', 'B', 'C', 'E'..'G'} + {'Z'} + s + +# test sets if the first element is different from 0: +block: + type + TAZ = range['a'..'z'] + TAZset = set[TAZ] + FakeTokType = 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, k80, k81, k82, k83, k84, k85, k86, k87, k88, k89, k90, k91, k92, k93, k94, k95, k96, k97, k98, k99, k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k113, k114, k115, k116, k117, k118, k119, k120, k121, k122, k123, k124, k125, k126, k127, k128, k129, k130, k131, k132, k133, k134, k135, k136, k137, k138, k139, k140, k141, k142, k143, k144, k145, k146, k147, k148, k149, k150, k151, k152, k153, k154, k155, k156, k157, k158, k159, k160, k161, k162, k163, k164, k165, k166, k167, k168, k169, k170, k171, k172, k173, k174, k175, k176, k177, k178, k179, k180, k181, k182, k183, k184, k185, k186, k187, k188, k189, k190, k191, k192, k193, k194, k195, k196, k197, k198, k199, k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k212, k213, k214, k215, k216, k217, k218, k219, k220, k221, k222, k223, k224, k225, k226, k227, k228, k229, k230, k231, k232, k233, k234, k235, k236, k237, k238, k239, k240, k241, k242, k243, k244, k245, k246, k247, k248, k249 + FakeTokTypeRange = range[k2..k101] + FakeTokTypes = set[FakeTokTypeRange] + Foo = object + field: set[Bar] #Bug: 6259 + Bar = enum + bar1, bar2, bar3 + + const toktypes: FakeTokTypes = {FakeTokTypeRange(k2)..pred(k64), k72..k74} + + var + s: set[char] + a: TAZset + s = {'0'..'9'} + testSets(s) + doAssert 'F' in s + a = {} #{'a'..'z'} + for x in low(TAZ) .. high(TAZ): + incl(a, x) + doAssert x in a + + for x in low(FakeTokTypeRange) .. high(FakeTokTypeRange): + if x in tokTypes: + discard + +type + FakeMsgKind* = 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, k80, k81, k82, k83, k84, k85, k86, k87, k88, k89, k90, k91, k92, k93, k94, k95, k96, k97, k98, k99, k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k113, k114, k115, k116, k117, k118, k119, k120, k121, k122, k123, k124, k125, k126, k127, k128, k129, k130, k131, k132, k133, k134, k135, k136, k137, k138, k139, k140, k141, k142, k143, k144, k145, k146, k147, k148, k149, k150, k151, k152, k153, k154, k155, k156, k157, k158, k159, k160, k161, k162, k163, k164, k165, k166, k167, k168, k169, k170, k171, k172, k173, k174, k175, k176, k177, k178, k179, k180, k181, k182, k183, k184, k185, k186, k187, k188, k189, k190, k191, k192, k193, k194, k195, k196, k197, k198, k199, k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k212, k213, k214, k215, k216, k217, k218, k219, k220, k221, k222, k223, k224, k225, k226, k227, k228, k229, k230, k231, k232, k233, k234, k235, k236, k237, k238, k239, k240, k241, k242, k243, k244, k245, k246, k247, k248, k249, k250, k251, k252, k253, k254, k255, k256, k257, k258, k259, k260, k261, k262, k263, k264, k265, k266, k267, k268, k269, k270, k271, k272, k273, k274, k275, + +doAssert pred(k260) == k259 + +type + FakeMsgKind2 = range[k230..high(FakeMsgKind)] + FakeMsgKind3 = set[FakeMsgKind2] + +var gNotes: FakeMsgKind3 = {low(FakeMsgKind2)..high(FakeMsgKind2)} - {k233, k235} + +doAssert k233 notin gNotes + +# 7555 +doAssert {-1.int8, -2, -2}.card == 2 +doAssert {1, 2, 2, 3..5, 4..6}.card == 6 + +# merely test the alias +doAssert {-1.int8, -2, -2}.len == 2 +doAssert {1, 2, 2, 3..5, 4..6}.len == 6 + +type Foo = enum + Foo1 = 0 + Foo2 = 1 + Foo3 = 3 + +let x = { Foo1, Foo2 } +# bug #8425 + +block: + # bug #2880 + type + FakeMsgKind = 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, k80, k81, k82, k83, k84, k85, k86, k87, k88, k89, k90, k91, k92, k93, k94, k95, k96, k97, k98, k99, k100 + + type + FakeMsgKind2 = range[FakeMsgKind.k50..high(FakeMsgKind)] + FakeMsgKind2s = set[FakeMsgKind2] + + const + a1: array[0..0, FakeMsgKind2s] = [{low(FakeMsgKind2)..high(FakeMsgKind2)} - {FakeMsgKind.k99}] + a2 = a1[0] + + var + s1: FakeMsgKind2s = a1[0] + s2: FakeMsgKind2s = a2 + + doAssert k99 notin s1 + doAssert k99 notin s2 + +block: # bug #23422 + block: + var a: set[uint8] = {1'u8} + + proc printLen(x: set[uint8]): int = + doAssert x.len == card(x) + result = card(x) + + proc printLenVar(x: var set[uint8]): int = + doAssert x.len == card(x) + result = card(x) + + doAssert a.len == 1 + doAssert printLen(a) == 1 + doAssert printLenVar(a) == card(a) + + block: + type Fruit = enum + Apple, Banana, Melon + + var a: set[Fruit] = {Apple} + + proc printLen(x: set[Fruit]): int = + doAssert x.len == card(x) + result = card(x) + + proc printLenVar(x: var set[Fruit]): int = + doAssert x.len == card(x) + result = card(x) + + doAssert a.len == 1 + doAssert printLen(a) == 1 + doAssert printLenVar(a) == card(a) diff --git a/tests/sets/tsets_various.nim b/tests/sets/tsets_various.nim new file mode 100644 index 000000000..419bcfdcc --- /dev/null +++ b/tests/sets/tsets_various.nim @@ -0,0 +1,286 @@ +discard """ + targets: "c cpp js" +""" + +import std/[sets, hashes] + +from std/sequtils import toSeq +from std/algorithm import sorted +from stdtest/testutils import whenVMorJs + +proc sortedPairs[T](t: T): auto = toSeq(t.pairs).sorted +template sortedItems(t: untyped): untyped = sorted(toSeq(t)) + +block tsetpop: + var a = initHashSet[int]() + for i in 1..1000: + a.incl(i) + doAssert len(a) == 1000 + for i in 1..1000: + discard a.pop() + doAssert len(a) == 0 + + var msg = "" + try: + echo a.pop() + except KeyError as e: + msg = e.msg + doAssert msg == "set is empty" + + + +block tsets_lt: + var s, s1: set[char] + s = {'a'..'d'} + s1 = {'a'..'c'} + doAssert s1 < s + doAssert s1 * s == {'a'..'c'} + doAssert s1 <= s + + + +block tsets2: + const + data = [ + "34", "12", + "90", "0", + "1", "2", + "3", "4", + "5", "6", + "7", "8", + "9", "---00", + "10", "11", "19", + "20", "30", "40", + "50", "60", "70", + "80"] + + block tableTest1: + var t = initHashSet[tuple[x, y: int]]() + t.incl((0,0)) + t.incl((1,0)) + doAssert(not t.containsOrIncl((0,1))) + t.incl((1,1)) + + for x in 0..1: + for y in 0..1: + doAssert((x,y) in t) + #doAssert($t == + # "{(x: 0, y: 0), (x: 0, y: 1), (x: 1, y: 0), (x: 1, y: 1)}") + + block setTest2: + var t = initHashSet[string]() + t.incl("test") + t.incl("111") + t.incl("123") + t.excl("111") + t.incl("012") + t.incl("123") # test duplicates + + doAssert "123" in t + doAssert "111" notin t # deleted + + doAssert t.missingOrExcl("000") + doAssert "000" notin t + doAssert t.missingOrExcl("012") == false + doAssert "012" notin t + + doAssert t.containsOrIncl("012") == false + doAssert t.containsOrIncl("012") + doAssert "012" in t # added back + + for key in items(data): t.incl(key) + for key in items(data): doAssert key in t + + for key in items(data): t.excl(key) + for key in items(data): doAssert key notin t + + block orderedSetTest1: + var t = data.toOrderedSet + for key in items(data): doAssert key in t + var i = 0 + # `items` needs to yield in insertion order: + for key in items(t): + doAssert key == data[i] + inc(i) + + + +block tsets3: + let + s1: HashSet[int] = toHashSet([1, 2, 4, 8, 16]) + s2: HashSet[int] = toHashSet([1, 2, 3, 5, 8]) + s3: HashSet[int] = toHashSet([3, 5, 7]) + + block union: + let + s1_s2 = union(s1, s2) + s1_s3 = s1 + s3 + s2_s3 = s2 + s3 + + doAssert s1_s2.len == 7 + doAssert s1_s3.len == 8 + doAssert s2_s3.len == 6 + + for i in s1: + doAssert i in s1_s2 + doAssert i in s1_s3 + for i in s2: + doAssert i in s1_s2 + doAssert i in s2_s3 + for i in s3: + doAssert i in s1_s3 + doAssert i in s2_s3 + + doAssert((s1 + s1) == s1) + doAssert((s2 + s1) == s1_s2) + + block intersection: + let + s1_s2 = intersection(s1, s2) + s1_s3 = intersection(s1, s3) + s2_s3 = s2 * s3 + + doAssert s1_s2.len == 3 + doAssert s1_s3.len == 0 + doAssert s2_s3.len == 2 + + for i in s1_s2: + doAssert i in s1 + doAssert i in s2 + for i in s1_s3: + doAssert i in s1 + doAssert i in s3 + for i in s2_s3: + doAssert i in s2 + doAssert i in s3 + + doAssert((s2 * s2) == s2) + doAssert((s3 * s2) == s2_s3) + + block symmetricDifference: + let + s1_s2 = symmetricDifference(s1, s2) + s1_s3 = s1 -+- s3 + s2_s3 = s2 -+- s3 + + doAssert s1_s2.len == 4 + doAssert s1_s3.len == 8 + doAssert s2_s3.len == 4 + + for i in s1: + doAssert i in s1_s2 xor i in s2 + doAssert i in s1_s3 xor i in s3 + for i in s2: + doAssert i in s1_s2 xor i in s1 + doAssert i in s2_s3 xor i in s3 + for i in s3: + doAssert i in s1_s3 xor i in s1 + doAssert i in s2_s3 xor i in s2 + + doAssert((s3 -+- s3) == initHashSet[int]()) + doAssert((s3 -+- s1) == s1_s3) + + block difference: + let + s1_s2 = difference(s1, s2) + s1_s3 = difference(s1, s3) + s2_s3 = s2 - s3 + + doAssert s1_s2.len == 2 + doAssert s1_s3.len == 5 + doAssert s2_s3.len == 3 + + for i in s1: + doAssert i in s1_s2 xor i in s2 + doAssert i in s1_s3 xor i in s3 + for i in s2: + doAssert i in s2_s3 xor i in s3 + + doAssert((s2 - s2) == initHashSet[int]()) + + block disjoint: + doAssert(not disjoint(s1, s2)) + doAssert disjoint(s1, s3) + doAssert(not disjoint(s2, s3)) + doAssert(not disjoint(s2, s2)) + +block: # https://github.com/nim-lang/Nim/issues/13496 + template testDel(body) = + block: + body + t.incl(15) + t.incl(19) + t.incl(17) + t.incl(150) + t.excl(150) + doAssert t.len == 3 + doAssert sortedItems(t) == @[15, 17, 19] + var s = newSeq[int]() + for v in t: s.add(v) + doAssert s.len == 3 + doAssert sortedItems(s) == @[15, 17, 19] + when t is OrderedSet: + doAssert sortedPairs(t) == @[(a: 0, b: 15), (a: 1, b: 19), (a: 2, b: 17)] + doAssert toSeq(t) == @[15, 19, 17] + + testDel(): (var t: HashSet[int]) + testDel(): (var t: OrderedSet[int]) + +block: # test correctness after a number of inserts/deletes + template testDel(body) = + block: + body + var expected: seq[int] + let n = 100 + let n2 = n*2 + for i in 0..<n: + t.incl(i) + for i in 0..<n: + if i mod 3 == 0: + t.excl(i) + for i in n..<n2: + t.incl(i) + for i in 0..<n2: + if i mod 7 == 0: + t.excl(i) + + for i in 0..<n2: + if (i>=n or i mod 3 != 0) and i mod 7 != 0: + expected.add i + + for i in expected: doAssert i in t + doAssert t.len == expected.len + doAssert sortedItems(t) == expected + + testDel(): (var t: HashSet[int]) + testDel(): (var t: OrderedSet[int]) + + +template main() = + # xxx move all tests inside this + block: + let a = {true, false} + doAssert $a == "{false, true}" + doAssert a.len == 2 + + block: + let a = {false .. true} + doAssert $a == "{false, true}" + doAssert a.len == 2 + + block: + let a = {false .. false} + doAssert $a == "{false}" + doAssert a.len == 1 + + block: # bug #16123 + whenVMorJs: discard + do: + type CallType = proc() {.closure.} + var setA = initHashSet[CallType]() + let foo = proc() = discard + setA.incl(foo) + doAssert setA.contains(foo) + +static: main() +main() diff --git a/tests/sets/twrongenumrange.nim b/tests/sets/twrongenumrange.nim new file mode 100644 index 000000000..a8d64ac44 --- /dev/null +++ b/tests/sets/twrongenumrange.nim @@ -0,0 +1,50 @@ +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 + ^ type mismatch: got <set[TMsgKind]> but expected 'set[TNoteKind]']# + notes = {k0..k3} #[tt.Error + ^ type mismatch: got <set[TMsgKind]> but expected 'set[TNoteKind]']# |