clone url: git://git.m455.casa/fa
esperbuild/espersrc/fennel-0.7.0/test/fennelview.fnl
1 | (local l (require :test.luaunit)) |
2 | (local fennel (require :fennel)) |
3 | (local view (require :fennelview)) |
4 | (local generate (fennel.dofile "test/generate.fnl")) |
5 |
|
6 | (fn count [t] |
7 | (var c 0) |
8 | (each [_ (pairs t)] (set c (+ c 1))) |
9 | c) |
10 |
|
11 | (fn table= [a b deep=] |
12 | (let [miss-a [] |
13 | miss-b []] |
14 | (each [k (pairs a)] |
15 | (when (deep= (. a k) (. b k)) |
16 | (tset a k nil) |
17 | (tset b k nil))) |
18 | (each [k v (pairs a)] |
19 | (when (not= (type k) :table) |
20 | (tset miss-a (view k) v))) |
21 | (each [k v (pairs b)] |
22 | (when (not= (type k) :table) |
23 | (tset miss-b (view k) v))) |
24 | (or (= (count a) (count b)) |
25 | (deep= miss-a miss-b)))) |
26 |
|
27 | (fn deep= [a b] |
28 | (if (or (not= a a) (not= b b)) true |
29 | (= (type a) (type b) :table) (table= a b deep=) |
30 | (= (tostring a) (tostring b)))) |
31 |
|
32 | (fn test-fennelview [] |
33 | (for [_ 1 16] |
34 | (let [item (generate) |
35 | viewed (view item) |
36 | round-tripped (fennel.eval viewed)] |
37 | ;; you would think assertEquals would work here but it doesn't! |
38 | ;; it is easy to confuse it with randomly generated tables. |
39 | (l.assertTrue (deep= item round-tripped) viewed)))) |
40 |
|
41 | {: test-fennelview} |