ttablesref.nim 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. discard """
  2. output: '''true'''
  3. """
  4. import hashes, tables, sequtils
  5. const
  6. data = {
  7. "34": 123456, "12": 789,
  8. "90": 343, "0": 34404,
  9. "1": 344004, "2": 344774,
  10. "3": 342244, "4": 3412344,
  11. "5": 341232144, "6": 34214544,
  12. "7": 3434544, "8": 344544,
  13. "9": 34435644, "---00": 346677844,
  14. "10": 34484, "11": 34474, "19": 34464,
  15. "20": 34454, "30": 34141244, "40": 344114,
  16. "50": 344490, "60": 344491, "70": 344492,
  17. "80": 344497}
  18. sorteddata = {
  19. "---00": 346677844,
  20. "0": 34404,
  21. "1": 344004,
  22. "10": 34484,
  23. "11": 34474,
  24. "12": 789,
  25. "19": 34464,
  26. "2": 344774, "20": 34454,
  27. "3": 342244, "30": 34141244,
  28. "34": 123456,
  29. "4": 3412344, "40": 344114,
  30. "5": 341232144, "50": 344490,
  31. "6": 34214544, "60": 344491,
  32. "7": 3434544, "70": 344492,
  33. "8": 344544, "80": 344497,
  34. "9": 34435644,
  35. "90": 343}
  36. block tableTest1:
  37. var t = newTable[tuple[x, y: int], string]()
  38. t[(0,0)] = "00"
  39. t[(1,0)] = "10"
  40. t[(0,1)] = "01"
  41. t[(1,1)] = "11"
  42. for x in 0..1:
  43. for y in 0..1:
  44. assert t[(x,y)] == $x & $y
  45. assert($t ==
  46. "{(x: 0, y: 1): 01, (x: 0, y: 0): 00, (x: 1, y: 0): 10, (x: 1, y: 1): 11}")
  47. block tableTest2:
  48. var t = newTable[string, float]()
  49. t["test"] = 1.2345
  50. t["111"] = 1.000043
  51. t["123"] = 1.23
  52. t.del("111")
  53. t["012"] = 67.9
  54. t["123"] = 1.5 # test overwriting
  55. assert t["123"] == 1.5
  56. try:
  57. echo t["111"] # deleted
  58. except KeyError:
  59. discard
  60. assert(not hasKey(t, "111"))
  61. assert "111" notin t
  62. for key, val in items(data): t[key] = val.toFloat
  63. for key, val in items(data): assert t[key] == val.toFloat
  64. block orderedTableTest1:
  65. var t = newOrderedTable[string, int](2)
  66. for key, val in items(data): t[key] = val
  67. for key, val in items(data): assert t[key] == val
  68. var i = 0
  69. # `pairs` needs to yield in insertion order:
  70. for key, val in pairs(t):
  71. assert key == data[i][0]
  72. assert val == data[i][1]
  73. inc(i)
  74. for key, val in mpairs(t): val = 99
  75. for val in mvalues(t): assert val == 99
  76. block countTableTest1:
  77. var s = data.toTable
  78. var t = newCountTable[string]()
  79. for k in s.keys: t.inc(k)
  80. for k in t.keys: assert t[k] == 1
  81. t.inc("90", 3)
  82. t.inc("12", 2)
  83. t.inc("34", 1)
  84. assert t.largest()[0] == "90"
  85. t.sort()
  86. var i = 0
  87. for k, v in t.pairs:
  88. case i
  89. of 0: assert k == "90" and v == 4
  90. of 1: assert k == "12" and v == 3
  91. of 2: assert k == "34" and v == 2
  92. else: break
  93. inc i
  94. block SyntaxTest:
  95. var x = newTable[int, string]({:})
  96. discard x
  97. block nilTest:
  98. var i, j: TableRef[int, int] = nil
  99. assert i == j
  100. j = newTable[int, int]()
  101. assert i != j
  102. assert j != i
  103. i = newTable[int, int]()
  104. assert i == j
  105. proc orderedTableSortTest() =
  106. var t = newOrderedTable[string, int](2)
  107. for key, val in items(data): t[key] = val
  108. for key, val in items(data): assert t[key] == val
  109. t.sort(proc (x, y: tuple[key: string, val: int]): int = cmp(x.key, y.key))
  110. var i = 0
  111. # `pairs` needs to yield in sorted order:
  112. for key, val in pairs(t):
  113. doAssert key == sorteddata[i][0]
  114. doAssert val == sorteddata[i][1]
  115. inc(i)
  116. # check that lookup still works:
  117. for key, val in pairs(t):
  118. doAssert val == t[key]
  119. # check that insert still works:
  120. t["newKeyHere"] = 80
  121. block anonZipTest:
  122. let keys = @['a','b','c']
  123. let values = @[1, 2, 3]
  124. doAssert "{a: 1, b: 2, c: 3}" == $ toTable zip(keys, values)
  125. block clearTableTest:
  126. var t = newTable[string, float]()
  127. t["test"] = 1.2345
  128. t["111"] = 1.000043
  129. t["123"] = 1.23
  130. assert t.len() != 0
  131. t.clear()
  132. assert t.len() == 0
  133. block clearOrderedTableTest:
  134. var t = newOrderedTable[string, int](2)
  135. for key, val in items(data): t[key] = val
  136. assert t.len() != 0
  137. t.clear()
  138. assert t.len() == 0
  139. block clearCountTableTest:
  140. var t = newCountTable[string]()
  141. t.inc("90", 3)
  142. t.inc("12", 2)
  143. t.inc("34", 1)
  144. assert t.len() != 0
  145. t.clear()
  146. assert t.len() == 0
  147. orderedTableSortTest()
  148. echo "true"