55 lines
1.8 KiB
Lua
55 lines
1.8 KiB
Lua
|
local menv = metavar_env()
|
||
|
assert(is_metavar_env(menv))
|
||
|
local m1 = menv:mk_metavar()
|
||
|
local m2 = menv:mk_metavar()
|
||
|
print(m1, m2)
|
||
|
assert(m1 ~= m2)
|
||
|
assert(m1:is_metavar())
|
||
|
assert(m2:is_metavar())
|
||
|
assert(not menv:is_assigned(m1))
|
||
|
assert(not menv:is_assigned(m2))
|
||
|
local ctx = context():extend("x", Const("Int"))
|
||
|
local m3 = menv:mk_metavar(ctx)
|
||
|
local m4 = menv:mk_metavar(ctx, Const("Int"))
|
||
|
assert(not menv:is_assigned(m3))
|
||
|
assert(not menv:is_assigned(m4))
|
||
|
local ts1 = menv:get_timestamp()
|
||
|
local m5 = menv:mk_metavar()
|
||
|
local ts2 = menv:get_timestamp()
|
||
|
assert(ts2 > ts1)
|
||
|
print(menv:get_context(m3))
|
||
|
assert(menv:get_context(m3):size() == 1)
|
||
|
assert(menv:get_context(m1):size() == 0)
|
||
|
assert(menv:get_context{"M", 3}:size() == 1)
|
||
|
assert(not menv:has_type(m3))
|
||
|
assert(menv:has_type(m4))
|
||
|
assert(menv:has_type(m4:fields()))
|
||
|
assert(menv:get_type(m4) == Const("Int"))
|
||
|
assert(menv:get_type(m4:fields()) == Const("Int"))
|
||
|
local f, a, b = Consts("f, a, b")
|
||
|
menv:assign(m1, f(a, b))
|
||
|
assert(menv:is_assigned(m1))
|
||
|
assert(menv:is_assigned(m1:fields()))
|
||
|
local menv2 = menv:copy()
|
||
|
local as = mk_assumption_justification(1)
|
||
|
menv:assign(m2, f(a, a), as)
|
||
|
assert(menv:is_assigned(m2))
|
||
|
assert(menv:is_assigned(m2:fields()))
|
||
|
assert(not menv2:is_assigned(m2))
|
||
|
assert(not menv2:is_assigned(m2:fields()))
|
||
|
assert(menv:get_justification(m1):is_null())
|
||
|
assert(menv:get_justification(m1:fields()):is_null())
|
||
|
assert(not menv:get_justification(m2):is_null())
|
||
|
local s1, jst1 = menv:get_subst_jst(m1)
|
||
|
assert(s1 == f(a, b))
|
||
|
assert(jst1:is_null())
|
||
|
local s2, jst2 = menv:get_subst_jst(m2)
|
||
|
assert(s2 == f(a, a))
|
||
|
assert(jst2:depends_on(as))
|
||
|
assert(menv:get_subst(m1) == f(a, b))
|
||
|
assert(menv:get_subst(m2:fields()) == f(a, a))
|
||
|
local counter = 0
|
||
|
menv:for_each_subst(function (m, s) print(m, s); counter = counter + 1 end)
|
||
|
assert(counter == 2)
|
||
|
assert(instantiate_metavars(f(m1, m2), menv) == f(f(a, b), f(a, a)))
|