erlang: ETS-lite (+13 tests)
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Has been cancelled
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Has been cancelled
This commit is contained in:
@@ -994,6 +994,55 @@
|
||||
(er-eval-test "build with size var"
|
||||
(ev "X = 7, byte_size(<<X:16>>)") 2)
|
||||
|
||||
;; ── ETS-lite ──────────────────────────────────────────────────
|
||||
(er-eval-test "ets:new returns name"
|
||||
(nm (ev "ets:new(t1, [set])")) "t1")
|
||||
(er-eval-test "ets:insert returns true"
|
||||
(nm (ev "T = ets:new(t2, [set]), ets:insert(T, {foo, 1})")) "true")
|
||||
(er-eval-test "ets:lookup hit"
|
||||
(ev "T = ets:new(t3, [set]), ets:insert(T, {foo, 42}), [{foo, V}] = ets:lookup(T, foo), V")
|
||||
42)
|
||||
(er-eval-test "ets:lookup miss returns []"
|
||||
(get (ev "T = ets:new(t4, [set]), ets:lookup(T, no_such)") :tag) "nil")
|
||||
(er-eval-test "ets:insert replaces (set semantics)"
|
||||
(ev "T = ets:new(t5, [set]), ets:insert(T, {x, 1}), ets:insert(T, {x, 2}), ets:insert(T, {x, 3}), [{x, V}] = ets:lookup(T, x), V")
|
||||
3)
|
||||
(er-eval-test "ets:info size grows"
|
||||
(ev "T = ets:new(t6, [set]), ets:insert(T, {a, 1}), ets:insert(T, {b, 2}), ets:insert(T, {c, 3}), ets:info(T, size)")
|
||||
3)
|
||||
(er-eval-test "ets:info size after delete"
|
||||
(ev "T = ets:new(t7, [set]), ets:insert(T, {a, 1}), ets:insert(T, {b, 2}), ets:delete(T, a), ets:info(T, size)")
|
||||
1)
|
||||
(er-eval-test "ets:tab2list length"
|
||||
(ev "T = ets:new(t8, [set]), ets:insert(T, {a, 1}), ets:insert(T, {b, 2}), ets:insert(T, {c, 3}), length(ets:tab2list(T))")
|
||||
3)
|
||||
(er-eval-test "ets:delete table returns true"
|
||||
(nm (ev "T = ets:new(t9, [set]), ets:delete(T)")) "true")
|
||||
(er-eval-test "ets:lookup after table delete"
|
||||
(do
|
||||
(ev "P = spawn(fun () -> T = ets:new(t10, [set]), ets:delete(T), ets:lookup(T, x) end), receive after 0 -> ok end")
|
||||
(let ((reason (er-proc-field (er-mk-pid 1) :exit-reason)))
|
||||
(cond
|
||||
(er-atom? reason) (get reason :name)
|
||||
:else (nm reason))))
|
||||
"badarg")
|
||||
|
||||
;; Sum a column via lookup chain.
|
||||
(er-eval-test "ets aggregate"
|
||||
(ev "T = ets:new(t11, [set]), ets:insert(T, {a, 10}), ets:insert(T, {b, 20}), ets:insert(T, {c, 30}), [{a, A}] = ets:lookup(T, a), [{b, B}] = ets:lookup(T, b), [{c, C}] = ets:lookup(T, c), A + B + C")
|
||||
60)
|
||||
|
||||
;; Tuple key (non-atom).
|
||||
(er-eval-test "ets tuple key"
|
||||
(nm
|
||||
(ev "T = ets:new(t12, [set]), ets:insert(T, {{x, 1}, hello}), [{{x, 1}, V}] = ets:lookup(T, {x, 1}), V"))
|
||||
"hello")
|
||||
|
||||
;; Tables are independent.
|
||||
(er-eval-test "ets two tables independent"
|
||||
(ev "T1 = ets:new(t13, [set]), T2 = ets:new(t14, [set]), ets:insert(T1, {x, 1}), ets:insert(T2, {x, 99}), [{x, A}] = ets:lookup(T1, x), [{x, B}] = ets:lookup(T2, x), A + B")
|
||||
100)
|
||||
|
||||
(define
|
||||
er-eval-test-summary
|
||||
(str "eval " er-eval-test-pass "/" er-eval-test-count))
|
||||
|
||||
Reference in New Issue
Block a user