123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- 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)
|