tsets.nim 5.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. # Test builtin sets
  2. # xxx these tests are not very good, this should be revisited.
  3. when defined nimTestsTsetsGenerate:
  4. # to generate enums for this test
  5. var ret: string
  6. for i in 0..<276:
  7. ret.add "k" & $i & ", "
  8. echo ret
  9. proc testSets(s: var set[char]) =
  10. s = {'A', 'B', 'C', 'E'..'G'} + {'Z'} + s
  11. # test sets if the first element is different from 0:
  12. block:
  13. type
  14. TAZ = range['a'..'z']
  15. TAZset = set[TAZ]
  16. FakeTokType = enum
  17. 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
  18. FakeTokTypeRange = range[k2..k101]
  19. FakeTokTypes = set[FakeTokTypeRange]
  20. const toktypes: FakeTokTypes = {FakeTokTypeRange(k2)..pred(k64), k72..k74}
  21. var
  22. s: set[char]
  23. a: TAZset
  24. s = {'0'..'9'}
  25. testSets(s)
  26. doAssert 'F' in s
  27. a = {} #{'a'..'z'}
  28. for x in low(TAZ) .. high(TAZ):
  29. incl(a, x)
  30. doAssert x in a
  31. for x in low(FakeTokTypeRange) .. high(FakeTokTypeRange):
  32. if x in tokTypes:
  33. discard
  34. type
  35. FakeMsgKind* = enum
  36. 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,
  37. doAssert pred(k260) == k259
  38. type
  39. FakeMsgKind2 = range[k230..high(FakeMsgKind)]
  40. FakeMsgKind3 = set[FakeMsgKind2]
  41. var gNotes: FakeMsgKind3 = {low(FakeMsgKind2)..high(FakeMsgKind2)} - {k233, k235}
  42. doAssert k233 notin gNotes
  43. # 7555
  44. doAssert {-1.int8, -2, -2}.card == 2
  45. doAssert {1, 2, 2, 3..5, 4..6}.card == 6
  46. # merely test the alias
  47. doAssert {-1.int8, -2, -2}.len == 2
  48. doAssert {1, 2, 2, 3..5, 4..6}.len == 6
  49. type Foo = enum
  50. Foo1 = 0
  51. Foo2 = 1
  52. Foo3 = 3
  53. let x = { Foo1, Foo2 }
  54. # bug #8425
  55. block:
  56. # bug #2880
  57. type
  58. FakeMsgKind = enum
  59. 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
  60. type
  61. FakeMsgKind2 = range[FakeMsgKind.k50..high(FakeMsgKind)]
  62. FakeMsgKind2s = set[FakeMsgKind2]
  63. const
  64. a1: array[0..0, FakeMsgKind2s] = [{low(FakeMsgKind2)..high(FakeMsgKind2)} - {FakeMsgKind.k99}]
  65. a2 = a1[0]
  66. var
  67. s1: FakeMsgKind2s = a1[0]
  68. s2: FakeMsgKind2s = a2
  69. doAssert k99 notin s1
  70. doAssert k99 notin s2