test_helper.exs 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. require KVS
  2. :kvs.join()
  3. ExUnit.start()
  4. defmodule BPE.Test do
  5. use ExUnit.Case, async: true
  6. test "basic" do
  7. id1 = {:basic, :kvs.seq([], [])}
  8. id2 = {:basic, :kvs.seq([], [])}
  9. x = 5
  10. :kvs.save(:kvs.writer(id1))
  11. :kvs.save(:kvs.writer(id2))
  12. :lists.map(
  13. fn _ ->
  14. :kvs.save(:kvs.add(KVS.writer(:kvs.writer(id1), args: {:"$msg", [], [], [], [], []})))
  15. end,
  16. :lists.seq(1, x)
  17. )
  18. :lists.map(fn _ -> :kvs.append({:"$msg", [], [], [], [], []}, id2) end, :lists.seq(1, x))
  19. r1 = :kvs.save(:kvs.reader(id1))
  20. r2 = :kvs.save(:kvs.reader(id2))
  21. x1 = :kvs.take(KVS.reader(:kvs.load_reader(KVS.reader(r1, :id)), args: 20))
  22. x2 = :kvs.take(KVS.reader(:kvs.load_reader(KVS.reader(r2, :id)), args: 20))
  23. b = :kvs.feed(id1)
  24. case :application.get_env(:kvs, :dba_st, :kvs_st) do
  25. :kvs_st ->
  26. c = :kvs.all(id2)
  27. assert :lists.reverse(c) == KVS.reader(x2, :args)
  28. _ ->
  29. # mnesia doesn't support `all` over feeds (only for tables)
  30. []
  31. end
  32. assert KVS.reader(x1, :args) == b
  33. assert length(KVS.reader(x1, :args)) == length(KVS.reader(x2, :args))
  34. assert x == length(b)
  35. end
  36. test "sym" do
  37. id = {:sym, :kvs.seq([], [])}
  38. :kvs.save(:kvs.writer(id))
  39. x = 5
  40. :lists.map(
  41. fn
  42. z ->
  43. :kvs.remove(KVS.writer(z, :cache), id)
  44. end, :lists.map(
  45. fn _ ->
  46. :kvs.save(:kvs.add(KVS.writer(:kvs.writer(id), args: {:"$msg", [], [], [], [], []})))
  47. end,
  48. :lists.seq(1, x)
  49. )
  50. )
  51. {:ok, KVS.writer(count: 0)} = :kvs.get(:writer, id)
  52. end
  53. test "take" do
  54. id = {:partial, :kvs.seq([], [])}
  55. x = 5
  56. :kvs.save(:kvs.writer(id))
  57. :lists.map(fn _ -> :kvs.append({:"$msg", [], [], [], [], []}, id) end, :lists.seq(1, x))
  58. r = :kvs.save(:kvs.reader(id))
  59. t = :kvs.take(KVS.reader(:kvs.load_reader(KVS.reader(r, :id)), args: 20))
  60. b = :kvs.feed(id)
  61. # mnesia
  62. assert KVS.reader(t, :args) == b
  63. end
  64. test "take back" do
  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. r = :kvs.save(:kvs.reader(id))
  70. t = :kvs.take(KVS.reader(:kvs.load_reader(KVS.reader(r, :id)), args: 5))
  71. KVS.reader(id: tid) = :kvs.save(KVS.reader(t, dir: 1))
  72. n = :kvs.take(KVS.reader(:kvs.load_reader(tid), args: 5, dir: 1))
  73. b = :kvs.feed(id)
  74. assert KVS.reader(t, :args) == b
  75. assert KVS.reader(n, :args) == b
  76. end
  77. test "take back2" do
  78. id = {:partial, :kvs.seq([], [])}
  79. x = 3
  80. p = 2
  81. :kvs.save(:kvs.writer(id))
  82. :lists.map(fn _ -> :kvs.append({:"$msg", [], [], [], [], []}, id) end, :lists.seq(1, x))
  83. r = :kvs.save(:kvs.reader(id))
  84. t = :kvs.take(KVS.reader(:kvs.load_reader(KVS.reader(r, :id)), args: p))
  85. KVS.reader(id: tid) = :kvs.save(KVS.reader(t, dir: 1))
  86. n = :kvs.take(KVS.reader(:kvs.load_reader(tid), args: p, dir: 1))
  87. assert KVS.reader(t, :args) == KVS.reader(n, :args)
  88. end
  89. test "take back3" do
  90. id = {:partial, :kvs.seq([], [])}
  91. x = 5
  92. p =2
  93. :kvs.save(:kvs.writer(id))
  94. :lists.map(fn _ -> :kvs.append({:"$msg", [], [], [], [], []}, id) end, :lists.seq(1, x))
  95. r = :kvs.save(:kvs.reader(id))
  96. rid = KVS.reader(r, :id)
  97. t1 = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p, dir: 0))
  98. z1 = :lists.reverse(KVS.reader(t1, :args))
  99. r = :kvs.save(t1)
  100. IO.inspect "------ START"
  101. IO.inspect z1
  102. IO.inspect "------ z1"
  103. t2 = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p, dir: 0))
  104. z2 = :lists.reverse(KVS.reader(t2, :args))
  105. r = :kvs.save(t2)
  106. IO.inspect z2
  107. IO.inspect "------ z2"
  108. t3 = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p, dir: 0))
  109. z3 = :lists.reverse(KVS.reader(t3, :args))
  110. IO.inspect "------ z3 --"
  111. IO.inspect z3
  112. IO.inspect "------ z3 --"
  113. KVS.reader(id: tid) = :kvs.save(KVS.reader(t3, dir: 1))
  114. n1 = :kvs.take(KVS.reader(:kvs.load_reader(tid), args: p, dir: 1))
  115. nz1 = :lists.reverse(KVS.reader(n1, :args))
  116. KVS.reader(id: tid) = :kvs.save(KVS.reader(n1, dir: 1))
  117. IO.inspect nz1
  118. IO.inspect "------ nz2"
  119. n2 = :kvs.take(KVS.reader(:kvs.load_reader(tid), args: p, dir: 1))
  120. nz2 = :lists.reverse(KVS.reader(n2, :args))
  121. r = :kvs.save(KVS.reader(n2, dir: 1))
  122. IO.inspect nz2
  123. IO.inspect "---------- nz3"
  124. b = :kvs.feed(id)
  125. IO.inspect b
  126. IO.inspect "------ feed"
  127. # assert :lists.reverse(z1 ++ z2 ++ z3) == :lists.reverse(nz2 ++ nz1 ++ z3)
  128. end
  129. test "partial take" do
  130. id = {:partial, :kvs.seq([], [])}
  131. x = 5
  132. :kvs.save(:kvs.writer(id))
  133. :lists.map(fn _ -> :kvs.append({:"$msg", [], [], [], [], []}, id) end, :lists.seq(1, x))
  134. r = :kvs.save(:kvs.reader(id))
  135. rid = KVS.reader(r, :id)
  136. p = 2
  137. cache = KVS.reader(r, :cache)
  138. t = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p))
  139. a = :lists.reverse(KVS.reader(t, :args))
  140. z1 = a
  141. r = :kvs.save(t)
  142. IO.inspect({cache, r, a})
  143. assert {:erlang.element(1, hd(a)), :erlang.element(2, hd(a))} == cache
  144. assert length(a) == p
  145. cache = KVS.reader(r, :cache)
  146. t = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p))
  147. a = :lists.reverse(KVS.reader(t, :args))
  148. r = :kvs.save(t)
  149. z2 = a
  150. IO.inspect({cache, r, a})
  151. assert {:erlang.element(1, hd(a)), :erlang.element(2, hd(a))} == cache
  152. assert length(a) == p
  153. cache = KVS.reader(r, :cache)
  154. t = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p))
  155. a = :lists.reverse(KVS.reader(t, :args))
  156. r = :kvs.save(t)
  157. z3 = a
  158. assert {:erlang.element(1, hd(a)), :erlang.element(2, hd(a))} == cache
  159. IO.inspect({cache, t, a})
  160. assert length(a) == 1
  161. assert :lists.reverse(z1 ++ z2 ++ z3) == :kvs.feed(id)
  162. end
  163. end