tsets3.nim 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. include sets
  2. let
  3. s1: TSet[int] = toSet([1, 2, 4, 8, 16])
  4. s2: TSet[int] = toSet([1, 2, 3, 5, 8])
  5. s3: TSet[int] = toSet([3, 5, 7])
  6. block union:
  7. let
  8. s1_s2 = union(s1, s2)
  9. s1_s3 = s1 + s3
  10. s2_s3 = s2 + s3
  11. assert s1_s2.len == 7
  12. assert s1_s3.len == 8
  13. assert s2_s3.len == 6
  14. for i in s1:
  15. assert i in s1_s2
  16. assert i in s1_s3
  17. for i in s2:
  18. assert i in s1_s2
  19. assert i in s2_s3
  20. for i in s3:
  21. assert i in s1_s3
  22. assert i in s2_s3
  23. assert((s1 + s1) == s1)
  24. assert((s2 + s1) == s1_s2)
  25. block intersection:
  26. let
  27. s1_s2 = intersection(s1, s2)
  28. s1_s3 = intersection(s1, s3)
  29. s2_s3 = s2 * s3
  30. assert s1_s2.len == 3
  31. assert s1_s3.len == 0
  32. assert s2_s3.len == 2
  33. for i in s1_s2:
  34. assert i in s1
  35. assert i in s2
  36. for i in s1_s3:
  37. assert i in s1
  38. assert i in s3
  39. for i in s2_s3:
  40. assert i in s2
  41. assert i in s3
  42. assert((s2 * s2) == s2)
  43. assert((s3 * s2) == s2_s3)
  44. block symmetricDifference:
  45. let
  46. s1_s2 = symmetricDifference(s1, s2)
  47. s1_s3 = s1 -+- s3
  48. s2_s3 = s2 -+- s3
  49. assert s1_s2.len == 4
  50. assert s1_s3.len == 8
  51. assert s2_s3.len == 4
  52. for i in s1:
  53. assert i in s1_s2 xor i in s2
  54. assert i in s1_s3 xor i in s3
  55. for i in s2:
  56. assert i in s1_s2 xor i in s1
  57. assert i in s2_s3 xor i in s3
  58. for i in s3:
  59. assert i in s1_s3 xor i in s1
  60. assert i in s2_s3 xor i in s2
  61. assert((s3 -+- s3) == initSet[int]())
  62. assert((s3 -+- s1) == s1_s3)
  63. block difference:
  64. let
  65. s1_s2 = difference(s1, s2)
  66. s1_s3 = difference(s1, s3)
  67. s2_s3 = s2 - s3
  68. assert s1_s2.len == 2
  69. assert s1_s3.len == 5
  70. assert s2_s3.len == 3
  71. for i in s1:
  72. assert i in s1_s2 xor i in s2
  73. assert i in s1_s3 xor i in s3
  74. for i in s2:
  75. assert i in s2_s3 xor i in s3
  76. assert((s2 - s2) == initSet[int]())
  77. assert((s1 - s3 - s1) == s1 -+- s3)
  78. block disjoint:
  79. assert(not disjoint(s1, s2))
  80. assert disjoint(s1, s3)
  81. assert(not disjoint(s2, s3))
  82. assert(not disjoint(s2, s2))