From 7556afb32edacd532758d25651dfea2a4f94655a Mon Sep 17 00:00:00 2001 From: Andrey Orst Date: Fri, 13 Nov 2020 18:57:32 +0300 Subject: fix(core): improved deep comparison --- tests/test.fnl | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) (limited to 'tests/test.fnl') diff --git a/tests/test.fnl b/tests/test.fnl index f678b6b..d98e1fa 100644 --- a/tests/test.fnl +++ b/tests/test.fnl @@ -3,16 +3,25 @@ (fn eq-fn [] `(fn eq# [a# b#] (if (and (= (type a#) :table) (= (type b#) :table)) - (do (var [res# count-a# count-b#] [true 0 0]) - (each [k# v# (pairs a#)] - (set res# (eq# v# (. b# k#))) - (set count-a# (+ count-a# 1)) - (when (not res#) (lua :break))) - (when res# - (each [_# _# (pairs b#)] - (set count-b# (+ count-b# 1))) - (set res# (= count-a# count-b#))) - res#) + (let [oldmeta# (getmetatable b#)] + (setmetatable b# {:__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 a#)] + (set res# (eq# v# (. b# k#))) + (set count-a# (+ count-a# 1)) + (when (not res#) (lua :break))) + (when res# + (each [_# _# (pairs b#)] + (set count-b# (+ count-b# 1))) + (set res# (= count-a# count-b#))) + (setmetatable b# oldmeta#) + res#) (= a# b#)))) (fn test.assert-eq -- cgit v1.2.3