test(lua): add import 'diamond' tst
Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
This commit is contained in:
parent
f8255ddac6
commit
69e5156034
1 changed files with 56 additions and 0 deletions
56
tests/lua/mod5.lua
Normal file
56
tests/lua/mod5.lua
Normal file
|
@ -0,0 +1,56 @@
|
|||
local NumThreads=4
|
||||
|
||||
function mod_name(midx)
|
||||
return tostring("mod5_mod" .. tostring(midx))
|
||||
end
|
||||
|
||||
function const_name(midx)
|
||||
return "mod" .. tostring(midx) .. "C"
|
||||
end
|
||||
|
||||
function mk_module(midx, imports)
|
||||
local imp_names = {}
|
||||
for i = 1, #imports do
|
||||
imp_names[#imp_names + 1] = mod_name(imports[i])
|
||||
end
|
||||
local env = import_modules(imp_names, NumThreads)
|
||||
if #imports == 0 then
|
||||
env = add_decl(env, mk_var_decl(const_name(midx), Bool))
|
||||
env = add_decl(env, mk_var_decl("and", mk_arrow(Bool, Bool, Bool)))
|
||||
elseif #imports == 1 then
|
||||
env = add_decl(env, mk_definition(const_name(midx), Bool, Const(const_name(imports[1]))))
|
||||
else
|
||||
local And = Const("and")
|
||||
env = add_decl(env, mk_definition(const_name(midx), Bool, And(Const(const_name(imports[1])), Const(const_name(imports[2])))))
|
||||
end
|
||||
env:export(tostring(mod_name(midx)) .. ".olean")
|
||||
end
|
||||
|
||||
local NumMods = 100
|
||||
|
||||
function mk_modules()
|
||||
mk_module(0, {})
|
||||
local i = 1
|
||||
local j = 1
|
||||
while i <= NumMods do
|
||||
if j % 2 == 0 then
|
||||
mk_module(i, {i-1, i-2})
|
||||
i = i + 1
|
||||
else
|
||||
mk_module(i, {i-1})
|
||||
mk_module(i+1, {i-i})
|
||||
i = i + 2
|
||||
end
|
||||
j = j + 1
|
||||
end
|
||||
end
|
||||
|
||||
mk_modules()
|
||||
local env = import_modules(mod_name(NumMods))
|
||||
env:for_each(function(d)
|
||||
print(d:name())
|
||||
end
|
||||
)
|
||||
for i = 1, NumMods do
|
||||
assert(env:get(const_name(i)):is_definition())
|
||||
end
|
Loading…
Reference in a new issue