summaryrefslogtreecommitdiff
path: root/tests/test.fnl
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test.fnl')
-rw-r--r--tests/test.fnl55
1 files changed, 26 insertions, 29 deletions
diff --git a/tests/test.fnl b/tests/test.fnl
index 2d9293a..7941f2c 100644
--- a/tests/test.fnl
+++ b/tests/test.fnl
@@ -1,36 +1,33 @@
(local test {})
(fn eq-fn []
- "Returns recursive equality function.
-
-This function is able to compare tables of any depth, even if one of
-the tables uses tables as keys."
- `(fn eq# [left# right#]
- (if (= left# right#)
+ ;; Returns recursive equality function.
+ ;;
+ ;; This function is able to compare tables of any depth, even if one of
+ ;; the tables uses tables as keys.
+ `(fn eq# [x# y#]
+ (if (= x# y#)
true
- (and (= (type left#) :table) (= (type right#) :table))
- (let [oldmeta# (getmetatable right#)]
- ;; In case if we'll get something like
- ;; (eq {[1 2 3] {:a [1 2 3]}} {[1 2 3] {:a [1 2 3]}})
- ;; we have to do even deeper search
- (setmetatable right# {:__index (fn [tbl# key#]
- (var res# nil)
- (each [k# v# (pairs tbl#)]
- (when (eq# k# key#)
- (set res# v#)
- (lua :break)))
- res#)})
- (var [res# count-a# count-b#] [true 0 0])
- (each [k# v# (pairs left#)]
- (set res# (eq# v# (. right# k#)))
- (set count-a# (+ count-a# 1))
- (when (not res#) (lua :break)))
- (when res#
- (each [_# _# (pairs right#)]
- (set count-b# (+ count-b# 1)))
- (set res# (= count-a# count-b#)))
- (setmetatable right# oldmeta#)
- res#)
+ (and (= (type x#) :table) (= (type y#) :table))
+ (do (var [res# count-x# count-y#] [true 0 0])
+ (each [k# v# (pairs x#)]
+ (set res# (eq# v# ((fn deep-index# [tbl# key#]
+ (var res# nil)
+ (each [k# v# (pairs tbl#)]
+ (when (eq# k# key#)
+ (set res# v#)
+ (lua :break)))
+ res#)
+ y# k#)))
+ (set count-x# (+ count-x# 1))
+ (when (not res#)
+ (lua :break)))
+ (when res#
+ (each [_# _# (pairs y#)]
+ (set count-y# (+ count-y# 1)))
+ (set res# (= count-x# count-y#)))
+ res#)
+ :else
false)))
(fn test.assert-eq