tsharedtable.nim 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. discard """
  2. output: '''
  3. '''
  4. """
  5. import sharedtables
  6. block:
  7. var table: SharedTable[int, int]
  8. init(table)
  9. table[1] = 10
  10. assert table.mget(1) == 10
  11. assert table.mgetOrPut(3, 7) == 7
  12. assert table.mgetOrPut(3, 99) == 7
  13. deinitSharedTable(table)
  14. import sequtils, algorithm
  15. proc sortedPairs[T](t: T): auto = toSeq(t.pairs).sorted
  16. template sortedItems(t: untyped): untyped = sorted(toSeq(t))
  17. import tables # refs issue #13504
  18. block: # we use Table as groundtruth, it's well tested elsewhere
  19. template testDel(t, t0) =
  20. template put2(i) =
  21. t[i] = i
  22. t0[i] = i
  23. template add2(i, val) =
  24. t.add(i, val)
  25. t0.add(i, val)
  26. template del2(i) =
  27. t.del(i)
  28. t0.del(i)
  29. template checkEquals() =
  30. doAssert t.len == t0.len
  31. for k,v in t0:
  32. doAssert t.mgetOrPut(k, -1) == v # sanity check
  33. doAssert t.mget(k) == v
  34. let n = 100
  35. let n2 = n*2
  36. let n3 = n*3
  37. let n4 = n*4
  38. let n5 = n*5
  39. for i in 0..<n:
  40. put2(i)
  41. for i in 0..<n:
  42. if i mod 3 == 0:
  43. del2(i)
  44. for i in n..<n2:
  45. put2(i)
  46. for i in 0..<n2:
  47. if i mod 7 == 0:
  48. del2(i)
  49. checkEquals()
  50. for i in n2..<n3:
  51. t0[i] = -2
  52. doAssert t.mgetOrPut(i, -2) == -2
  53. doAssert t.mget(i) == -2
  54. for i in 0..<n4:
  55. let ok = i in t0
  56. if not ok: t0[i] = -i
  57. doAssert t.hasKeyOrPut(i, -i) == ok
  58. checkEquals()
  59. for i in n4..<n5:
  60. add2(i, i*10)
  61. add2(i, i*11)
  62. add2(i, i*12)
  63. del2(i)
  64. del2(i)
  65. checkEquals()
  66. var t: SharedTable[int, int]
  67. init(t) # ideally should be auto-init
  68. var t0: Table[int, int]
  69. testDel(t, t0)
  70. deinitSharedTable(t)