Mercurial > pub > dyncall > dyncall
diff test/suite_aggrs/rand-sig.lua @ 432:167faab0c0be
first usable version of test suite for aggregates, handling only non-nested struct params, at the moment;
still missing:
- unions
- arrays
- aggregates as return values
author | Tassilo Philipp |
---|---|
date | Fri, 21 Jan 2022 15:42:29 +0100 |
parents | |
children | 3d2c5d156d78 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/suite_aggrs/rand-sig.lua Fri Jan 21 15:42:29 2022 +0100 @@ -0,0 +1,54 @@ +require"config" + +-- assure aggr chars are present in pairs (can be weighted, though), to avoid +-- inf loops +if string.match(types,'{') and not string.match(types,'}') then types = types..'}' end + +rtypes = "v"..types + + +function mkstruct(n_nest) + local s = "{" + + repeat + local id = math.random(#types) + local t = types:sub(id,id) + s = s..mktype(t, n_nest) + until t == '}' + + return s +end + +function mktype(t, n_nest) + -- ignore new structs if above depth limit + if t == '{' then + if n_nest < maxaggrdepth then + return mkstruct(n_nest + 1) + else + return '' + end + end + + -- if '}', without any open, use empty struct + if n_nest == 0 and t == '}' then + return "{}" + end + + return t +end + + +math.randomseed(seed) +local id +for i = 1, ncases do + id = math.random(#rtypes) + local nargs = math.random(minargs,maxargs) + local sig = { mktype(rtypes:sub(id,id), 0) } + for j = 1, nargs do + id = math.random(#types) + sig[#sig+1] = mktype(types:sub(id,id), 0) + end + io.write(table.concat(sig)) + io.write("\n") +end +