summaryrefslogtreecommitdiff
path: root/tests/core.fnl
diff options
context:
space:
mode:
authorAndrey Orst <andreyorst@gmail.com>2020-11-13 18:57:32 +0300
committerAndrey Orst <andreyorst@gmail.com>2020-11-13 18:58:43 +0300
commit7556afb32edacd532758d25651dfea2a4f94655a (patch)
tree7e7e10c40faf296f1cbcb0629c3302b495714c77 /tests/core.fnl
parent368ecb9abf626de4dcad496db17b55b268997fc7 (diff)
fix(core): improved deep comparison
Diffstat (limited to 'tests/core.fnl')
-rw-r--r--tests/core.fnl39
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))