Aegisub/vendor/luabins/etc/dataset.lua
2022-09-27 16:54:15 +02:00

90 lines
1.8 KiB
Lua

-- Random Luabins dataset generator
package.cpath = "./lib/?.so;"..package.cpath
local luabins = require("luabins")
local luabins_save, luabins_load = luabins.save, luabins.load
math.randomseed(123456)
-- TODO: Generalize. Copy-paste from test.lua
local function gen_random_dataset(num, nesting)
num = num or math.random(0, 128)
nesting = nesting or 1
local gen_str = function()
local t = {}
local n = math.random(0, 1024)
for i = 1, n do
t[i] = string.char(math.random(0, 255))
end
return table.concat(t)
end
local gen_bool = function() return math.random() >= 0.5 end
local gen_nil = function() return nil end
local generators =
{
gen_nil;
gen_nil;
gen_nil;
gen_bool;
gen_bool;
gen_bool;
function() return math.random() end;
function() return math.random(-10000, 10000) end;
function() return math.random() * math.random(-10000, 10000) end;
gen_str;
gen_str;
gen_str;
function()
if nesting >= 24 then
return nil
end
local t = {}
local n = math.random(0, 24 - nesting)
for i = 1, n do
local k = gen_random_dataset(1, nesting + 1)
if k == nil then
k = "(nil)"
end
t[ k ] = gen_random_dataset(
1,
nesting + 1
)
end
return t
end;
}
local t = {}
for i = 1, num do
local n = math.random(1, #generators)
t[i] = generators[n]()
end
return unpack(t, 0, num)
end
local saved = assert(luabins_save(gen_random_dataset()))
local filename = select(1, ...)
assert(filename, "Usage: lua dataset.lua <out_filename>")
local file
if filename == "-" then
file = io.stdout
else
file = assert(io.open(filename, "w"))
end
file:write(saved)
if file ~= io.stdout then
file:close()
end
file = nil