diff --git a/src/lib/vec.rs b/src/lib/vec.rs index e4f8c1a01bb..b7f441c321f 100644 --- a/src/lib/vec.rs +++ b/src/lib/vec.rs @@ -655,12 +655,23 @@ fn eachi(f: block(T, uint) -> (), v: [mutable? T]) { } } +/* +Function: iter + +Iterates over a vector + +Iterates over vector `v` and, for each element, calls function `f` +*/ +fn iter(v: [mutable? T], it: block(T)) { + iter2(v) { |_i, v| it(v) } +} + /* Function: iter2 FIXME: This is exactly the same as eachi */ -fn iter2(v: [T], it: block(uint, T)) { +fn iter2(v: [mutable? T], it: block(uint, T)) { let i = 0u; for x in v { it(i, x); i += 1u; } } diff --git a/src/test/stdtest/vec.rs b/src/test/stdtest/vec.rs index 608d9c05dd1..4015899acec 100644 --- a/src/test/stdtest/vec.rs +++ b/src/test/stdtest/vec.rs @@ -292,6 +292,20 @@ fn test_foldl() { assert (sum == 15u); } +#[test] +fn iter_empty() { + let i = 0; + vec::iter::([], { |_v| i += 1 }); + assert i == 0; +} + +#[test] +fn iter_nonempty() { + let i = 0; + vec::iter([1, 2, 3], { |v| i += v }); + assert i == 6; +} + #[test] fn test_any_and_all() { assert (vec::any(is_three, [1u, 2u, 3u]));