diff options
| author | Andrey Orst <andreyorst@gmail.com> | 2020-11-13 18:57:32 +0300 |
|---|---|---|
| committer | Andrey Orst <andreyorst@gmail.com> | 2020-11-13 18:58:43 +0300 |
| commit | 7556afb32edacd532758d25651dfea2a4f94655a (patch) | |
| tree | 7e7e10c40faf296f1cbcb0629c3302b495714c77 /tests/core.fnl | |
| parent | 368ecb9abf626de4dcad496db17b55b268997fc7 (diff) | |
fix(core): improved deep comparison
Diffstat (limited to 'tests/core.fnl')
| -rw-r--r-- | tests/core.fnl | 39 |
1 files changed, 38 insertions, 1 deletions
diff --git a/tests/core.fnl b/tests/core.fnl index 1df3921..5fef66d 100644 --- a/tests/core.fnl +++ b/tests/core.fnl @@ -80,6 +80,16 @@ (assert-eq [] []) (assert-eq [] {}) (assert-eq [1 2] [1 2]) + (assert-eq [[1 [2 [3]] {[5] {:a [1 [1 [1 [1]]]]}}]] + [[1 [2 [3]] {[5] {:a [1 [1 [1 [1]]]]}}]]) + (assert* (eq [[1 [2 [3]] {[5] {:a [1 [1 [1 [1]]]]}}]] + [[1 [2 [3]] {[5] {:a [1 [1 [1 [1]]]]}}]])) + (assert* (eq [[1 [2 [3]] {[5] {:a [1 [1 [1 [1]]]]}}]] + [[1 [2 [3]] {[5] {:a [1 [1 [1 [1]]]]}}]] + [[1 [2 [3]] {[5] {:a [1 [1 [1 [1]]]]}}]])) + (assert-not (eq [[1 [2 [3]] {[5] {:a [1 [1 [1 [1]]]]}}]] + [[1 [2 [3]] {[5] {:a [1 [1 [1 [1]]]]}}]] + [[1 [2 [3]] {[6] {:a [1 [1 [1 [1]]]]}}]])) (assert-ne [1] [1 2]) (assert-ne [1 2] [1]) (assert* (eq [1 [2]] [1 [2]] [1 [2]])) @@ -103,7 +113,34 @@ ;; nil 1])' both yield `{4 1}'. From Lua's point this is not the ;; same thing, for example because the sizes of these tables are ;; different. - (assert-eq {4 1} [nil nil nil 1]))) + (assert-eq {4 1} [nil nil nil 1])) + + (testing "eq metadata preservation" + (let [a (setmetatable + {[1] [1 1 1] + [2 3] [[2 3] [2 3] [2 3] [2 3]]} + {:__index (fn [tbl key] (. tbl key)) + :meta :data}) + b (setmetatable + {[1] [1 1 1] + [2 3] [[2 3] [2 3] [2 3] [2 3] [2 3]]} + {:__index (fn [tbl key] (. tbl key)) + :extra :metadata + :meta {:table :data}}) + meta-a (getmetatable a) + meta-b (getmetatable b) + index-a (. meta-a :__index) + index-b (. meta-b :__index)] + (eq a b) + (assert-eq meta-a (getmetatable a)) + (assert-eq meta-b (getmetatable b)) + (assert-eq index-a (. (getmetatable a) :__index)) + (assert-eq index-b (. (getmetatable b) :__index)) + (eq b a) + (assert-eq meta-a (getmetatable a)) + (assert-eq meta-b (getmetatable b)) + (assert-eq index-a (. (getmetatable a) :__index)) + (assert-eq index-b (. (getmetatable b) :__index))))) (testing "range" (assert-not (pcall range)) |