1
0
mirror of https://github.com/minetest/minetest.git synced 2025-07-01 23:50:22 +02:00

Support packing arbitrary graphs (#12289)

This commit is contained in:
Jude Melton-Houghton
2022-05-10 16:37:33 -04:00
committed by GitHub
parent d17d7eba14
commit 7f58887ae3
3 changed files with 89 additions and 54 deletions

View File

@ -60,15 +60,34 @@ local function test_object_passing()
local tmp = core.serialize_roundtrip(test_object)
assert(deepequal(test_object, tmp))
-- Circular key, should error
tmp = {"foo", "bar"}
tmp[tmp] = true
assert(not pcall(core.serialize_roundtrip, tmp))
local circular_key = {"foo", "bar"}
circular_key[circular_key] = true
tmp = core.serialize_roundtrip(circular_key)
assert(tmp[1] == "foo")
assert(tmp[2] == "bar")
assert(tmp[tmp] == true)
-- Circular value, should error
tmp = {"foo"}
tmp[2] = tmp
assert(not pcall(core.serialize_roundtrip, tmp))
local circular_value = {"foo"}
circular_value[2] = circular_value
tmp = core.serialize_roundtrip(circular_value)
assert(tmp[1] == "foo")
assert(tmp[2] == tmp)
-- Two-segment cycle
local cycle_seg_1, cycle_seg_2 = {}, {}
cycle_seg_1[1] = cycle_seg_2
cycle_seg_2[1] = cycle_seg_1
tmp = core.serialize_roundtrip(cycle_seg_1)
assert(tmp[1][1] == tmp)
-- Duplicated value without a cycle
local acyclic_dup_holder = {}
tmp = ItemStack("")
acyclic_dup_holder[tmp] = tmp
tmp = core.serialize_roundtrip(acyclic_dup_holder)
for k, v in pairs(tmp) do
assert(rawequal(k, v))
end
end
unittests.register("test_object_passing", test_object_passing)