old_test.exs 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324
  1. ExUnit.start()
  2. defmodule OLD.Test do
  3. use ExUnit.Case, async: true
  4. require KVS
  5. test "basic" do
  6. id1 = {:basic, :kvs.seq([], [])}
  7. id2 = {:basic, :kvs.seq([], [])}
  8. x = 5
  9. :kvs.save(:kvs.writer(id1))
  10. :kvs.save(:kvs.writer(id2))
  11. :lists.map(
  12. fn _ ->
  13. :kvs.save(:kvs.add(KVS.writer(:kvs.writer(id1), args: {:"$msg", [], [], [], [], []})))
  14. end,
  15. :lists.seq(1, x)
  16. )
  17. :lists.map(fn _ -> :kvs.append({:"$msg", [], [], [], [], []}, id2) end, :lists.seq(1, x))
  18. r1 = :kvs.save(:kvs.reader(id1))
  19. r2 = :kvs.save(:kvs.reader(id2))
  20. x1 = :kvs.take(KVS.reader(:kvs.load_reader(KVS.reader(r1, :id)), args: 20))
  21. x2 = :kvs.take(KVS.reader(:kvs.load_reader(KVS.reader(r2, :id)), args: 20))
  22. b = :kvs.feed(id1)
  23. case :application.get_env(:kvs, :dba_st, :kvs_st) do
  24. :kvs_st ->
  25. c = :kvs.all(id2)
  26. assert :lists.reverse(c) == KVS.reader(x2, :args)
  27. _ ->
  28. # mnesia doesn't support `all` over feeds (only for tables)
  29. []
  30. end
  31. assert KVS.reader(x1, :args) == b
  32. assert length(KVS.reader(x1, :args)) == length(KVS.reader(x2, :args))
  33. assert x == length(b)
  34. end
  35. test "sym" do
  36. id = {:sym, :kvs.seq([], [])}
  37. :kvs.save(:kvs.writer(id))
  38. x = 5
  39. :lists.map(
  40. fn
  41. z ->
  42. :kvs.remove(KVS.writer(z, :cache), id)
  43. end, :lists.map(
  44. fn _ ->
  45. :kvs.save(:kvs.add(KVS.writer(:kvs.writer(id), args: {:"$msg", [], [], [], [], []})))
  46. end,
  47. :lists.seq(1, x)
  48. )
  49. )
  50. {:ok, KVS.writer(count: 0)} = :kvs.get(:writer, id)
  51. end
  52. test "take" do
  53. id = {:partial, :kvs.seq([], [])}
  54. x = 5
  55. :kvs.save(:kvs.writer(id))
  56. :lists.map(fn _ -> :kvs.append({:"$msg", [], [], [], [], []}, id) end, :lists.seq(1, x))
  57. KVS.reader(id: rid) = :kvs.save(:kvs.reader(id))
  58. t = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: 20))
  59. b = :kvs.feed(id)
  60. # mnesia
  61. assert KVS.reader(t, :args) == b
  62. end
  63. test "take back full" do
  64. log(:st, "take back full")
  65. id = {:partial, :kvs.seq([], [])}
  66. x = 5
  67. :kvs.save(:kvs.writer(id))
  68. :lists.map(fn _ -> :kvs.append({:"$msg", [], [], [], [], []}, id) end, :lists.seq(1, x))
  69. KVS.reader(id: rid) = :kvs.save(:kvs.reader(id))
  70. t = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: 5))
  71. :kvs.save(KVS.reader(t, dir: 1))
  72. log("t:", t)
  73. n = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: 5))
  74. b = :kvs.feed(id)
  75. log("n:", n)
  76. assert KVS.reader(n, :args) == KVS.reader(t, :args)
  77. assert KVS.reader(t, :args) == b
  78. log(:end, "take back full")
  79. end
  80. test "partial take back" do
  81. id = {:partial, :kvs.seq([], [])}
  82. x = 3
  83. p = 2
  84. :kvs.save(:kvs.writer(id))
  85. :lists.map(fn _ -> :kvs.append({:"$msg", [], [], [], [], []}, id) end, :lists.seq(1, x))
  86. KVS.reader(id: rid) = :kvs.save(:kvs.reader(id))
  87. t = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p))
  88. :kvs.save(KVS.reader(t, dir: 1))
  89. n = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p + 1))
  90. assert KVS.reader(t, :args) == tl(KVS.reader(n, :args))
  91. end
  92. test "partial full bidirectional" do
  93. log(:st, "partial full bidirectional")
  94. id = {:partial, :kvs.seq([], [])}
  95. x = 5
  96. p =2
  97. :kvs.save(:kvs.writer(id))
  98. :lists.map(fn _ -> :kvs.append({:"$msg", :kvs.seq([],[]), [], [], [], []}, id) end, :lists.seq(1, x))
  99. r = :kvs.save(:kvs.reader(id))
  100. rid = KVS.reader(r, :id)
  101. t1 = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p, dir: 0))
  102. z1 = KVS.reader(t1, :args)
  103. IO.inspect :kvs.all(id)
  104. r = :kvs.save(t1)
  105. log("next t1:", t1)
  106. t2 = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p))
  107. z2 = KVS.reader(t2, :args)
  108. r = :kvs.save(t2)
  109. log("next t2:", t2)
  110. t3 = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p))
  111. z3 = KVS.reader(t3, :args)
  112. :kvs.save(KVS.reader(t3, dir: 1, pos: 0))
  113. log("next t3:", t3)
  114. n1 = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p))
  115. nz1 = KVS.reader(n1, :args)
  116. :kvs.save n1
  117. log("prev n1:", n1)
  118. n2 = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p))
  119. nz2 = KVS.reader(n2, :args)
  120. :kvs.save n2
  121. log("prev n2:", n2)
  122. n3 = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p))
  123. nz3 = KVS.reader(n3, :args)
  124. log("prev n3:", n3)
  125. assert z3 ++ z2 ++ z1 == nz1 ++ nz2 ++ nz3
  126. log(:end, "partial full bidirectional")
  127. end
  128. test "test bidirectional (new)" do
  129. log(:st, "test bidirectional (new)")
  130. id = {:partial, :kvs.seq([], [])}
  131. x = 6
  132. p = 3
  133. :kvs.save(:kvs.writer(id))
  134. :lists.map(fn _ -> :kvs.append({:"$msg", :kvs.seq([],[]), [], [], [], []}, id) end, :lists.seq(1, x))
  135. r = :kvs.save(:kvs.reader(id))
  136. rid = KVS.reader(r, :id)
  137. IO.inspect :kvs.all(id)
  138. t1 = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p, dir: 0))
  139. z1 = KVS.reader(t1, :args)
  140. r = :kvs.save(t1)
  141. log("next t1:", t1)
  142. t2 = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p))
  143. z2 = KVS.reader(t2, :args)
  144. r = :kvs.save(t2)
  145. log("next t2:", t2)
  146. t3 = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p))
  147. z3 = KVS.reader(t3, :args)
  148. :kvs.save(KVS.reader(t3, dir: 1, pos: 0))
  149. log("next t3:", t3)
  150. assert z3 == []
  151. n1 = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p))
  152. nz1 = KVS.reader(n1, :args)
  153. :kvs.save n1
  154. log("prev n1:", n1)
  155. n2 = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p))
  156. nz2 = KVS.reader(n2, :args)
  157. :kvs.save n2
  158. log("prev n2:", n2)
  159. n3 = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p))
  160. nz3 = KVS.reader(n3, :args)
  161. :kvs.save(KVS.reader(n3, dir: 0))
  162. log("prev n3:", n3)
  163. assert nz3 == []
  164. t4 = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p, dir: 0))
  165. z4 = KVS.reader(t4, :args)
  166. r = :kvs.save(t4)
  167. log("next t4:", t4)
  168. assert length(z4) == p
  169. log(:end, "test bidirectional (new)")
  170. end
  171. test "partial take forward full" do
  172. log(:st, "partial take forward full")
  173. id = {:partial, :kvs.seq([], [])}
  174. x = 7
  175. :kvs.save(:kvs.writer(id))
  176. :lists.map(fn _ -> :kvs.append({:"$msg", [], [], [], [], []}, id) end, :lists.seq(1, x))
  177. KVS.reader(id: rid) = :kvs.save(:kvs.reader(id))
  178. p = 3
  179. IO.inspect :kvs.all id
  180. t1 = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p))
  181. z1 = KVS.reader(t1, :args)
  182. :kvs.save(t1)
  183. log("next t1:", t1)
  184. t2 = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p))
  185. z2 = KVS.reader(t2, :args)
  186. :kvs.save(t2)
  187. log("next t2:", t2)
  188. t3 = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p))
  189. z3 = KVS.reader(t3, :args)
  190. :kvs.save(t3)
  191. log("next t3:", t3)
  192. assert length(z3) == 1
  193. assert :lists.reverse(z1) ++ :lists.reverse(z2) ++ z3 == :kvs.all(id)
  194. log(:end, "partial take forward full")
  195. end
  196. test "take with empy" do
  197. log(:st, "take with empy")
  198. id = {:partial, :kvs.seq([], [])}
  199. x = 6
  200. p = 3
  201. :kvs.save(:kvs.writer(id))
  202. :lists.map(fn _ -> :kvs.append({:"$msg", :kvs.seq([],[]), [], [], [], []}, id) end, :lists.seq(1, x))
  203. r = :kvs.save(:kvs.reader(id))
  204. IO.inspect :kvs.all(id)
  205. rid = KVS.reader(r, :id)
  206. t1 = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p, dir: 0))
  207. z1 = KVS.reader(t1, :args)
  208. r = :kvs.save(t1)
  209. log("next t1:", t1)
  210. t2 = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p))
  211. z2 = KVS.reader(t2, :args)
  212. r = :kvs.save(t2)
  213. log("next t2:", t2)
  214. t3 = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p))
  215. z3 = KVS.reader(t3, :args)
  216. r = :kvs.save(t3)
  217. log("next t3:", t3)
  218. assert z3 == []
  219. KVS.reader(id: tid) = :kvs.save(KVS.reader(t3, dir: 1, pos: 0))
  220. n1 = :kvs.take(KVS.reader(:kvs.load_reader(tid), args: p))
  221. nz1 = KVS.reader(n1, :args)
  222. :kvs.save n1
  223. log("prev b1:", n1)
  224. n2 = :kvs.take(KVS.reader(:kvs.load_reader(tid), args: p))
  225. nz2 = KVS.reader(n2, :args)
  226. :kvs.save n2
  227. log("prev b2:", n2)
  228. assert z2 ++ z1 == nz1 ++ nz2
  229. log(:end, "take with empy")
  230. end
  231. test "test prev" do
  232. log(:st, "test prev")
  233. id = {:partial, :kvs.seq([], [])}
  234. x = 6
  235. p = 3
  236. :kvs.save(:kvs.writer(id))
  237. :lists.map(fn _ -> :kvs.append({:"$msg", :kvs.seq([],[]), [], [], [], []}, id) end, :lists.seq(1, x))
  238. r = :kvs.save(:kvs.reader(id))
  239. rid = KVS.reader(r, :id)
  240. IO.inspect :kvs.all(id)
  241. t1 = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p, dir: 0))
  242. z1 = KVS.reader(t1, :args)
  243. r = :kvs.save(t1)
  244. log("next z1:", z1)
  245. t2 = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p))
  246. z2 = KVS.reader(t2, :args)
  247. KVS.reader(id: tid) = :kvs.save(KVS.reader(t2, dir: 1, pos: 0))
  248. log("next z2:", z2)
  249. n1 = :kvs.take(KVS.reader(:kvs.load_reader(tid), args: p))
  250. nz1 = tl(:lists.reverse(KVS.reader(n1, :args)))
  251. :kvs.save(n1)
  252. log("prev nz1:", nz1)
  253. n2 = :kvs.take(KVS.reader(:kvs.load_reader(tid), args: p))
  254. nz2 = KVS.reader(n2, :args)
  255. :kvs.save n2
  256. log("prev n2:", n2)
  257. assert length(nz2) == p
  258. assert nz2 == z1
  259. n3 = :kvs.take(KVS.reader(:kvs.load_reader(tid), args: p))
  260. nz3 = KVS.reader(n3, :args)
  261. :kvs.save(KVS.reader(n3, dir: 0))
  262. log("prev nz3:", nz3)
  263. assert nz3 = []
  264. log(:end, "test prev")
  265. end
  266. def log(x,cursor) do
  267. IO.inspect {x,cursor}
  268. end
  269. end