mirror of
https://github.com/erg-lang/erg.git
synced 2025-09-28 20:14:45 +00:00
fix: iterator bugs
This commit is contained in:
parent
ed245f6c08
commit
efcf23b04d
4 changed files with 18 additions and 2 deletions
|
@ -1761,7 +1761,10 @@ impl Context {
|
||||||
let mut enumerate = Self::builtin_poly_class(ENUMERATE, vec![PS::t_nd(TY_T)], 2);
|
let mut enumerate = Self::builtin_poly_class(ENUMERATE, vec![PS::t_nd(TY_T)], 2);
|
||||||
enumerate.register_superclass(Obj, &obj);
|
enumerate.register_superclass(Obj, &obj);
|
||||||
enumerate
|
enumerate
|
||||||
.register_marker_trait(self, poly(ITERABLE, vec![ty_tp(T.clone())]))
|
.register_marker_trait(
|
||||||
|
self,
|
||||||
|
poly(ITERABLE, vec![ty_tp(tuple_t(vec![Nat, T.clone()]))]),
|
||||||
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
enumerate
|
enumerate
|
||||||
.register_marker_trait(self, poly(OUTPUT, vec![ty_tp(T.clone())]))
|
.register_marker_trait(self, poly(OUTPUT, vec![ty_tp(T.clone())]))
|
||||||
|
|
|
@ -77,7 +77,7 @@ impl Context {
|
||||||
.quantify();
|
.quantify();
|
||||||
let t_filter = nd_func(
|
let t_filter = nd_func(
|
||||||
vec![
|
vec![
|
||||||
kw(KW_FUNC, nd_func(vec![anon(T.clone())], None, T.clone())),
|
kw(KW_FUNC, nd_func(vec![anon(T.clone())], None, Bool)),
|
||||||
kw(KW_ITERABLE, poly(ITERABLE, vec![ty_tp(T.clone())])),
|
kw(KW_ITERABLE, poly(ITERABLE, vec![ty_tp(T.clone())])),
|
||||||
],
|
],
|
||||||
None,
|
None,
|
||||||
|
|
8
tests/should_ok/iterator.er
Normal file
8
tests/should_ok/iterator.er
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
for! enumerate(0..3), ((i, j),) =>
|
||||||
|
assert i == j
|
||||||
|
for! zip(0..3, 0..3), ((i, j),) =>
|
||||||
|
assert i == j
|
||||||
|
for! filter(x -> x > 1, 0..3), i =>
|
||||||
|
assert i > 1
|
||||||
|
for! map(x -> "\{x}", [1, 2, 3]), s =>
|
||||||
|
assert str(s) == s
|
|
@ -394,6 +394,11 @@ fn exec_invalid_param() -> Result<(), ()> {
|
||||||
expect_failure("tests/should_err/invalid_param.er", 0, 3)
|
expect_failure("tests/should_err/invalid_param.er", 0, 3)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn exec_iterator() -> Result<(), ()> {
|
||||||
|
expect_success("tests/should_ok/iterator.er", 0)
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn exec_move_check() -> Result<(), ()> {
|
fn exec_move_check() -> Result<(), ()> {
|
||||||
expect_failure("examples/move_check.er", 1, 1)
|
expect_failure("examples/move_check.er", 1, 1)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue