Persist: unbreak serialize for serpent

This commit is contained in:
NiLuJe
2022-10-06 05:56:12 +02:00
parent 39e0f84959
commit b1bcafa833
2 changed files with 23 additions and 20 deletions

View File

@@ -174,7 +174,7 @@ local codecs = {
writes_to_file = false,
serialize = function(t)
local ok, str = serpent.dump(t)
local ok, str = pcall(serpent.dump, t)
if not ok then
return nil, "cannot serialize " .. tostring(t) .. " (" .. str .. ")"
end

View File

@@ -2,7 +2,6 @@ describe("Persist module", function()
local Persist
local sample
local bitserInstance, luajitInstance, zstdInstance, dumpInstance, serpentInstance
local ser, deser, str, tab
local fail = { a = function() end, }
local function arrayOf(n)
@@ -80,23 +79,27 @@ describe("Persist module", function()
end)
it("should return standalone serializers/deserializers", function()
tab = sample
for _, codec in ipairs({"dump", "serpent", "bitser", "luajit", "zstd"}) do
local tab = sample
-- NOTE: zstd only deser from a *file*, not a string.
for _, codec in ipairs({"dump", "serpent", "bitser", "luajit"}) do
assert.is_true(Persist.getCodec(codec).id == codec)
ser = Persist.getCodec(codec).serialize
deser = Persist.getCodec(codec).deserialize
str = ser(tab)
assert.are.same(deser(str), tab)
str, ser, deser = nil, nil, nil
local ser = Persist.getCodec(codec).serialize
local deser = Persist.getCodec(codec).deserialize
local str = ser(tab)
local t, err = deser(str)
if not t then
print(codec, "deser failed:", err)
end
assert.are.same(t, tab)
end
end)
it("should work with huge tables", function()
for _, codec in ipairs({"bitser", "luajit", "zstd"}) do
tab = arrayOf(100000)
ser = Persist.getCodec(codec).serialize
deser = Persist.getCodec(codec).deserialize
str = ser(tab)
local tab = arrayOf(100000)
for _, codec in ipairs({"bitser", "luajit"}) do
local ser = Persist.getCodec(codec).serialize
local deser = Persist.getCodec(codec).deserialize
local str = ser(tab)
assert.are.same(deser(str), tab)
end
end)
@@ -104,9 +107,9 @@ describe("Persist module", function()
it("should fail to serialize functions", function()
for _, codec in ipairs({"dump", "bitser", "luajit", "zstd"}) do
assert.is_true(Persist.getCodec(codec).id == codec)
ser = Persist.getCodec(codec).serialize
deser = Persist.getCodec(codec).deserialize
str = ser(fail)
local ser = Persist.getCodec(codec).serialize
local deser = Persist.getCodec(codec).deserialize
local str = ser(fail)
assert.are_not.same(deser(str), fail)
end
end)
@@ -114,9 +117,9 @@ describe("Persist module", function()
it("should successfully serialize functions", function()
for _, codec in ipairs({"serpent"}) do
assert.is_true(Persist.getCodec(codec).id == codec)
ser = Persist.getCodec(codec).serialize
deser = Persist.getCodec(codec).deserialize
str = ser(fail)
local ser = Persist.getCodec(codec).serialize
local deser = Persist.getCodec(codec).deserialize
local str = ser(fail)
assert.are_not.same(deser(str), fail)
end
end)