Packages
kvs
7.1.3
13.5.22-aleph
13.4.16
13.4.15
13.4.14
13.4.13
13.3.1
13.2.28
11.9.1
10.8.3
10.8.2
10.3.0
9.9.2
9.9.1
9.9.0
9.8.0
9.7.0
9.4.8
9.4.7
9.4.6
9.4.5
9.4.4
9.4.3
9.4.2
9.4.1
9.4.0
8.12.0
8.11.2
8.11.1
8.10.4
8.10.3
8.10.2
8.10.1
8.10.0
8.5.2
8.5.1
8.5.0
8.4.1
8.4.0
8.3.1
8.3.0
7.11.5
7.9.1
7.7.0
7.1.3
7.1.2
7.1.1
6.12.11
6.12.10
6.12.9
6.12.8
6.12.7
6.12.6
6.12.5
6.12.4
6.12.3
6.12.2
6.12.1
6.12.0
6.11.2
6.11.1
6.11.0
6.10.2
6.10.1
6.10.0
6.9.2
6.9.1
6.9.0
6.7.7
6.7.6
6.7.5
6.7.4
6.7.3
6.7.2
6.7.1
6.7.0
6.6.0
2.1.0
0.12.1
retired
KVS Key-Value Store Abstraction Layer
Current section
Files
Jump to
Current section
Files
test/test_helper.exs
require KVS
:kvs.join()
ExUnit.start()
defmodule BPE.Test do
use ExUnit.Case, async: true
test "basic" do
id1 = {:basic, :kvs.seq([], [])}
id2 = {:basic, :kvs.seq([], [])}
x = 5
:kvs.save(:kvs.writer(id1))
:kvs.save(:kvs.writer(id2))
:lists.map(
fn _ ->
:kvs.save(:kvs.add(KVS.writer(:kvs.writer(id1), args: {:"$msg", [], [], [], [], []})))
end,
:lists.seq(1, x)
)
:lists.map(fn _ -> :kvs.append({:"$msg", [], [], [], [], []}, id2) end, :lists.seq(1, x))
r1 = :kvs.save(:kvs.reader(id1))
r2 = :kvs.save(:kvs.reader(id2))
x1 = :kvs.take(KVS.reader(:kvs.load_reader(KVS.reader(r1, :id)), args: 20))
x2 = :kvs.take(KVS.reader(:kvs.load_reader(KVS.reader(r2, :id)), args: 20))
b = :kvs.feed(id1)
case :application.get_env(:kvs, :dba_st, :kvs_st) do
:kvs_st ->
c = :kvs.all(id2)
assert :lists.reverse(c) == KVS.reader(x2, :args)
_ ->
# mnesia doesn't support `all` over feeds (only for tables)
[]
end
assert KVS.reader(x1, :args) == b
assert length(KVS.reader(x1, :args)) == length(KVS.reader(x2, :args))
assert x == length(b)
end
test "sym" do
id = {:sym, :kvs.seq([], [])}
:kvs.save(:kvs.writer(id))
x = 5
:lists.map(
fn
z ->
:kvs.remove(KVS.writer(z, :cache), id)
end, :lists.map(
fn _ ->
:kvs.save(:kvs.add(KVS.writer(:kvs.writer(id), args: {:"$msg", [], [], [], [], []})))
end,
:lists.seq(1, x)
)
)
{:ok, KVS.writer(count: 0)} = :kvs.get(:writer, id)
end
test "take" do
id = {:partial, :kvs.seq([], [])}
x = 5
:kvs.save(:kvs.writer(id))
:lists.map(fn _ -> :kvs.append({:"$msg", [], [], [], [], []}, id) end, :lists.seq(1, x))
KVS.reader(id: rid) = :kvs.save(:kvs.reader(id))
t = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: 20))
b = :kvs.feed(id)
# mnesia
assert KVS.reader(t, :args) == b
end
test "take back full" do
log(:st, "take back full")
id = {:partial, :kvs.seq([], [])}
x = 5
:kvs.save(:kvs.writer(id))
:lists.map(fn _ -> :kvs.append({:"$msg", [], [], [], [], []}, id) end, :lists.seq(1, x))
KVS.reader(id: rid) = :kvs.save(:kvs.reader(id))
t = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: 5))
:kvs.save(KVS.reader(t, dir: 1))
log("t:", t)
n = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: 5))
b = :kvs.feed(id)
log("n:", n)
assert KVS.reader(n, :args) == KVS.reader(t, :args)
assert KVS.reader(t, :args) == b
log(:end, "take back full")
end
test "partial take back" do
id = {:partial, :kvs.seq([], [])}
x = 3
p = 2
:kvs.save(:kvs.writer(id))
:lists.map(fn _ -> :kvs.append({:"$msg", [], [], [], [], []}, id) end, :lists.seq(1, x))
KVS.reader(id: rid) = :kvs.save(:kvs.reader(id))
t = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p))
:kvs.save(KVS.reader(t, dir: 1))
n = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p + 1))
assert KVS.reader(t, :args) == tl(KVS.reader(n, :args))
end
test "partial full bidirectional" do
log(:st, "partial full bidirectional")
id = {:partial, :kvs.seq([], [])}
x = 5
p =2
:kvs.save(:kvs.writer(id))
:lists.map(fn _ -> :kvs.append({:"$msg", :kvs.seq([],[]), [], [], [], []}, id) end, :lists.seq(1, x))
r = :kvs.save(:kvs.reader(id))
rid = KVS.reader(r, :id)
t1 = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p, dir: 0))
z1 = KVS.reader(t1, :args)
IO.inspect :kvs.all(id)
r = :kvs.save(t1)
log("next t1:", t1)
t2 = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p))
z2 = KVS.reader(t2, :args)
r = :kvs.save(t2)
log("next t2:", t2)
t3 = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p))
z3 = KVS.reader(t3, :args)
:kvs.save(KVS.reader(t3, dir: 1, pos: 0))
log("next t3:", t3)
n1 = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p))
nz1 = KVS.reader(n1, :args)
:kvs.save n1
log("prev n1:", n1)
n2 = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p))
nz2 = KVS.reader(n2, :args)
:kvs.save n2
log("prev n2:", n2)
n3 = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p))
nz3 = KVS.reader(n3, :args)
log("prev n3:", n3)
assert z3 ++ z2 ++ z1 == nz1 ++ nz2 ++ nz3
log(:end, "partial full bidirectional")
end
test "test bidirectional (new)" do
log(:st, "test bidirectional (new)")
id = {:partial, :kvs.seq([], [])}
x = 6
p = 3
:kvs.save(:kvs.writer(id))
:lists.map(fn _ -> :kvs.append({:"$msg", :kvs.seq([],[]), [], [], [], []}, id) end, :lists.seq(1, x))
r = :kvs.save(:kvs.reader(id))
rid = KVS.reader(r, :id)
IO.inspect :kvs.all(id)
t1 = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p, dir: 0))
z1 = KVS.reader(t1, :args)
r = :kvs.save(t1)
log("next t1:", t1)
t2 = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p))
z2 = KVS.reader(t2, :args)
r = :kvs.save(t2)
log("next t2:", t2)
t3 = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p))
z3 = KVS.reader(t3, :args)
:kvs.save(KVS.reader(t3, dir: 1, pos: 0))
log("next t3:", t3)
assert z3 == []
n1 = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p))
nz1 = KVS.reader(n1, :args)
:kvs.save n1
log("prev n1:", n1)
n2 = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p))
nz2 = KVS.reader(n2, :args)
:kvs.save n2
log("prev n2:", n2)
n3 = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p))
nz3 = KVS.reader(n3, :args)
:kvs.save(KVS.reader(n3, dir: 0))
log("prev n3:", n3)
assert nz3 == []
t4 = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p, dir: 0))
z4 = KVS.reader(t4, :args)
r = :kvs.save(t4)
log("next t4:", t4)
assert length(z4) == p
log(:end, "test bidirectional (new)")
end
test "partial take forward full" do
log(:st, "partial take forward full")
id = {:partial, :kvs.seq([], [])}
x = 7
:kvs.save(:kvs.writer(id))
:lists.map(fn _ -> :kvs.append({:"$msg", [], [], [], [], []}, id) end, :lists.seq(1, x))
KVS.reader(id: rid) = :kvs.save(:kvs.reader(id))
p = 3
IO.inspect :kvs.all id
t1 = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p))
z1 = KVS.reader(t1, :args)
:kvs.save(t1)
log("next t1:", t1)
t2 = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p))
z2 = KVS.reader(t2, :args)
:kvs.save(t2)
log("next t2:", t2)
t3 = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p))
z3 = KVS.reader(t3, :args)
:kvs.save(t3)
log("next t3:", t3)
assert length(z3) == 1
assert :lists.reverse(z1) ++ :lists.reverse(z2) ++ z3 == :kvs.all(id)
log(:end, "partial take forward full")
end
test "take with empy" do
log(:st, "take with empy")
id = {:partial, :kvs.seq([], [])}
x = 6
p = 3
:kvs.save(:kvs.writer(id))
:lists.map(fn _ -> :kvs.append({:"$msg", :kvs.seq([],[]), [], [], [], []}, id) end, :lists.seq(1, x))
r = :kvs.save(:kvs.reader(id))
IO.inspect :kvs.all(id)
rid = KVS.reader(r, :id)
t1 = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p, dir: 0))
z1 = KVS.reader(t1, :args)
r = :kvs.save(t1)
log("next t1:", t1)
t2 = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p))
z2 = KVS.reader(t2, :args)
r = :kvs.save(t2)
log("next t2:", t2)
t3 = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p))
z3 = KVS.reader(t3, :args)
r = :kvs.save(t3)
log("next t3:", t3)
assert z3 == []
KVS.reader(id: tid) = :kvs.save(KVS.reader(t3, dir: 1, pos: 0))
n1 = :kvs.take(KVS.reader(:kvs.load_reader(tid), args: p))
nz1 = KVS.reader(n1, :args)
:kvs.save n1
log("prev b1:", n1)
n2 = :kvs.take(KVS.reader(:kvs.load_reader(tid), args: p))
nz2 = KVS.reader(n2, :args)
:kvs.save n2
log("prev b2:", n2)
assert z2 ++ z1 == nz1 ++ nz2
log(:end, "take with empy")
end
test "test prev" do
log(:st, "test prev")
id = {:partial, :kvs.seq([], [])}
x = 6
p = 3
:kvs.save(:kvs.writer(id))
:lists.map(fn _ -> :kvs.append({:"$msg", :kvs.seq([],[]), [], [], [], []}, id) end, :lists.seq(1, x))
r = :kvs.save(:kvs.reader(id))
rid = KVS.reader(r, :id)
IO.inspect :kvs.all(id)
t1 = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p, dir: 0))
z1 = KVS.reader(t1, :args)
r = :kvs.save(t1)
log("next z1:", z1)
t2 = :kvs.take(KVS.reader(:kvs.load_reader(rid), args: p))
z2 = KVS.reader(t2, :args)
KVS.reader(id: tid) = :kvs.save(KVS.reader(t2, dir: 1, pos: 0))
log("next z2:", z2)
n1 = :kvs.take(KVS.reader(:kvs.load_reader(tid), args: p))
nz1 = tl(:lists.reverse(KVS.reader(n1, :args)))
:kvs.save(n1)
log("prev nz1:", nz1)
n2 = :kvs.take(KVS.reader(:kvs.load_reader(tid), args: p))
nz2 = KVS.reader(n2, :args)
:kvs.save n2
log("prev n2:", n2)
assert length(nz2) == p
assert nz2 == z1
n3 = :kvs.take(KVS.reader(:kvs.load_reader(tid), args: p))
nz3 = KVS.reader(n3, :args)
:kvs.save(KVS.reader(n3, dir: 0))
log("prev nz3:", nz3)
assert nz3 = []
log(:end, "test prev")
end
def log(x,cursor) do
IO.inspect {x,cursor}
end
end