mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-28 08:54:53 +00:00
134 lines
6.0 KiB
Nim
134 lines
6.0 KiB
Nim
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)
|