fix(kernel/max_sharing): add example exposing bug in max_sharing_fn, and fix it

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
This commit is contained in:
Leonardo de Moura 2014-04-24 15:55:48 -07:00
parent 1c8e78e3ae
commit 508bccb0c5
2 changed files with 19 additions and 1 deletions

View file

@ -45,7 +45,7 @@ struct max_sharing_fn::imp {
res = update_mlocal(a, apply(mlocal_type(a))); res = update_mlocal(a, apply(mlocal_type(a)));
break; break;
} }
m_cache.insert(a); m_cache.insert(res);
return res; return res;
} }

View file

@ -45,9 +45,27 @@ static void tst2() {
lean_assert(is_eqp(arg1, arg2)); lean_assert(is_eqp(arg1, arg2));
} }
static void tst3() {
max_sharing_fn max_fn;
expr a1 = Const("a");
expr a2 = Const("a");
expr a3 = Const("a");
expr g = Const("g");
expr f = Const("f");
expr new_a1 = max_fn(a1);
lean_assert(is_eqp(new_a1, a1));
expr t1 = max_fn(f(a2));
lean_assert(is_eqp(app_arg(t1), a1));
expr t2 = max_fn(f(a2));
lean_assert(is_eqp(t1, t2));
expr t3 = max_fn(f(a3));
lean_assert(is_eqp(t1, t3));
}
int main() { int main() {
save_stack_info(); save_stack_info();
tst1(); tst1();
tst2(); tst2();
tst3();
return has_violations() ? 1 : 0; return has_violations() ? 1 : 0;
} }