mirror of
https://github.com/1bardesign/batteries.git
synced 2024-11-22 14:14:36 +00:00
d48d4b0e81
Allowing shallow_copy/deep_copy to accept any type makes it easier to write generic code where you just want to copy some input without knowing anything about it. Like an event system, save system, etc. Add corresponding test. Tests pass
127 lines
2.7 KiB
Lua
127 lines
2.7 KiB
Lua
-- Run this file with testy:
|
|
-- testy.lua tests.lua
|
|
-- testy sets `...` to "module.test", so ignore that and use module top-level paths.
|
|
package.path = package.path .. ";../?.lua"
|
|
|
|
local assert = require("batteries.assert")
|
|
local tablex = require("batteries.tablex")
|
|
|
|
|
|
-- tablex {{{
|
|
|
|
local function test_shallow_copy()
|
|
local x,r
|
|
x = { a = 1, b = 2, c = 3 }
|
|
r = tablex.shallow_copy(x)
|
|
assert:equal(r.a, 1)
|
|
assert:equal(r.b, 2)
|
|
assert:equal(r.c, 3)
|
|
|
|
x = { a = { b = { 2 }, c = { 3 }, } }
|
|
r = tablex.shallow_copy(x)
|
|
assert:equal(r.a, x.a)
|
|
|
|
x = 10
|
|
r = tablex.shallow_copy(x)
|
|
assert:equal(r, x)
|
|
end
|
|
|
|
local function test_deep_copy()
|
|
local x,r
|
|
x = { a = 1, b = 2, c = 3 }
|
|
r = tablex.deep_copy(x)
|
|
assert:equal(r.a, 1)
|
|
assert:equal(r.b, 2)
|
|
assert:equal(r.c, 3)
|
|
|
|
x = { a = { b = { 2 }, c = { 3 }, } }
|
|
r = tablex.deep_copy(x)
|
|
assert(r.a ~= x.a)
|
|
assert:equal(r.a.b[1], 2)
|
|
assert:equal(r.a.c[1], 3)
|
|
|
|
x = 10
|
|
r = tablex.deep_copy(x)
|
|
assert:equal(r, x)
|
|
end
|
|
|
|
|
|
local function test_shallow_overlay()
|
|
local x,y,r
|
|
x = { a = 1, b = 2, c = 3 }
|
|
y = { c = 8, d = 9 }
|
|
r = tablex.shallow_overlay(x, y)
|
|
assert(
|
|
tablex.deep_equal(
|
|
r,
|
|
{ a = 1, b = 2, c = 8, d = 9 }
|
|
)
|
|
)
|
|
|
|
x = { b = { 2 }, c = { 3 }, }
|
|
y = { c = { 8 }, d = { 9 }, }
|
|
r = tablex.shallow_overlay(x, y)
|
|
assert(r.b == x.b)
|
|
assert(r.c == y.c)
|
|
assert(r.d == y.d)
|
|
assert(
|
|
tablex.deep_equal(
|
|
r,
|
|
{ b = { 2 }, c = { 8 }, d = { 9 }, }))
|
|
end
|
|
|
|
local function test_deep_overlay()
|
|
local x,y,r
|
|
x = { a = 1, b = 2, c = 3 }
|
|
y = { c = 8, d = 9 }
|
|
r = tablex.deep_overlay(x, y)
|
|
assert(
|
|
tablex.deep_equal(
|
|
r,
|
|
{ a = 1, b = 2, c = 8, d = 9 }))
|
|
|
|
x = { a = { b = { 2 }, c = { 3 }, } }
|
|
y = { a = { c = { 8 }, d = { 9 }, } }
|
|
r = tablex.deep_overlay(x, y)
|
|
assert(
|
|
tablex.deep_equal(
|
|
r,
|
|
{ a = { b = { 2 }, c = { 8 }, d = { 9 }, } }))
|
|
end
|
|
|
|
|
|
local function test_shallow_equal()
|
|
local x,y
|
|
x = { a = { b = { 2 }, } }
|
|
y = { a = { b = { 2 }, } }
|
|
assert(not tablex.shallow_equal(x, y))
|
|
|
|
x = { 3, 4, "hello", [20] = "end", }
|
|
y = { 3, 4, "hello", [20] = "end", }
|
|
assert(tablex.shallow_equal(x, y))
|
|
|
|
local z = { 1, 2, }
|
|
x = { a = z, b = 10, c = true, }
|
|
y = { a = z, b = 10, c = true, }
|
|
assert(tablex.shallow_equal(x, y))
|
|
assert(tablex.shallow_equal(y, x))
|
|
end
|
|
|
|
local function test_deep_equal()
|
|
local x,y
|
|
x = { a = { b = { 2 }, c = { 3 }, } }
|
|
y = { a = { b = { 2 }, c = { 3 }, } }
|
|
assert(tablex.deep_equal(x, y))
|
|
|
|
x = { a = { b = { 1, 2 }, c = { 3 }, } }
|
|
y = { a = { c = { 3 }, b = { [2] = 2, [1] = 1 }, } }
|
|
assert(tablex.deep_equal(x, y))
|
|
assert(tablex.deep_equal(y, x))
|
|
|
|
x = { a = { b = { 2 }, c = { 3 }, 2 } }
|
|
y = { a = { b = { 2 }, c = { 3 }, } }
|
|
assert(not tablex.deep_equal(x, y))
|
|
assert(not tablex.deep_equal(y, x))
|
|
end
|
|
|