lune/tests/serde/compression/roundtrip.luau
2023-06-12 08:51:14 +02:00

80 lines
2 KiB
Text

local fs = require("@lune/fs")
local process = require("@lune/process")
local serde = require("@lune/serde")
local stdio = require("@lune/stdio")
local FORMATS: { serde.CompressDecompressFormat } = { "brotli", "gzip", "lz4", "zlib" }
local FILES: { string } = {
"tests/serde/test-files/loremipsum.txt",
"tests/serde/test-files/uncompressed.csv",
"tests/serde/test-files/uncompressed.json",
"tests/serde/test-files/uncompressed.yaml",
}
local failed = false
for _, filePath in FILES do
local source = fs.readFile(filePath)
for _, format: serde.CompressDecompressFormat in FORMATS do
local compressed = serde.compress(format, source)
local decompressed = serde.decompress(format, compressed)
-- Compressing something should return something else
if #compressed <= 0 then
stdio.ewrite(
string.format(
"Compressing source using '%s' returned an empty string!\n",
tostring(format)
)
)
stdio.ewrite(string.format("Source (%d chars long):\n%s\n", #source, tostring(source)))
failed = true
continue
end
if compressed == source then
stdio.ewrite(
string.format(
"Compressing source using '%s' format did not change contents!\n",
tostring(format)
)
)
stdio.ewrite(
string.format(
"Source (%d chars long):\n%s\nCompressed (%d chars long):\n%s\n",
#source,
tostring(source),
#compressed,
tostring(compressed)
)
)
failed = true
continue
end
-- Decompressing that something else should return the original source
if decompressed ~= source then
stdio.ewrite(
string.format(
"Decompressing using '%s' format did not return the source!\n",
tostring(format)
)
)
stdio.ewrite(
string.format(
"Source (%d chars long):\n%s\nCompressed (%d chars long):\n%s\nDecompressed (%d chars long):\n%s\n",
#source,
tostring(source),
#compressed,
tostring(compressed),
#decompressed,
tostring(decompressed)
)
)
failed = true
continue
end
end
end
if failed then
process.exit(1)
end