]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - games/devtest/mods/unittests/async_env.lua
Support packing arbitrary graphs (#12289)
[dragonfireclient.git] / games / devtest / mods / unittests / async_env.lua
index aff1fc4d9271431c2c61202ad378119f15d67f62..3a21bd9e2b2d9d5d5ccc5cad0e95c717ed097811 100644 (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))
-
-       -- Circular value, should error
-       tmp = {"foo"}
-       tmp[2] = tmp
-       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)
+
+       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)