git.m455.casa

fa

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}