You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
38 lines
809 B
Lua
38 lines
809 B
Lua
--- Helper module for checking if 2 values are equal by value.
|
|
-- @module lqc.helpers.deep_equals
|
|
-- @alias deep_equals
|
|
local pairs = pairs
|
|
local type = type
|
|
|
|
--- Checks 1 value is equal to another. Also works for nested structures.
|
|
-- @param a value a
|
|
-- @param b value b
|
|
-- @return true if objects are equal; otherwise false
|
|
local function deep_equals(a, b)
|
|
local type_a = type(a)
|
|
if type_a ~= type(b) then
|
|
return false
|
|
end
|
|
if type_a ~= 'table' then
|
|
return a == b
|
|
end
|
|
|
|
if #a ~= #b then
|
|
return false
|
|
end
|
|
for k, v1 in pairs(a) do
|
|
local v2 = b[k]
|
|
if type(v1) == 'table' then
|
|
return deep_equals(v1, v2)
|
|
end
|
|
if v1 ~= v2 then
|
|
return false
|
|
end
|
|
end
|
|
|
|
return true
|
|
end
|
|
|
|
return deep_equals
|
|
|