diff --git a/src/tests/util/lazy_list.cpp b/src/tests/util/lazy_list.cpp index 8ee1673022..2b1363f243 100644 --- a/src/tests/util/lazy_list.cpp +++ b/src/tests/util/lazy_list.cpp @@ -189,6 +189,13 @@ void tst5() { display(take(10, l)); } +void tst6() { + auto l = mk_gen(); + unsigned counter = 0; + for_each(filter(take(10, l), [](unsigned v) { return v % 2 == 0; }), [&](unsigned) { counter++; }); + lean_assert(counter == 5); +} + int main() { save_stack_info(); tst1(); @@ -196,5 +203,6 @@ int main() { tst3(); tst4(); tst5(); + tst6(); return has_violations() ? 1 : 0; } diff --git a/src/util/lazy_list_fn.h b/src/util/lazy_list_fn.h index a092886c82..2a5bba74ea 100644 --- a/src/util/lazy_list_fn.h +++ b/src/util/lazy_list_fn.h @@ -174,7 +174,7 @@ lazy_list filter(lazy_list const & l, P && pred, char const * cname = "laz if (!p) { return p; } else if (pred(p->first)) { - return p; + return some(mk_pair(p->first, filter(p->second, pred, cname))); } else { check_system(cname); return filter(p->second, pred, cname).pull();