Skip to content

Commit 50687b8

Browse files
committed
---
yaml --- r: 3599 b: refs/heads/master c: 1bba585 h: refs/heads/master i: 3597: e56ccfa 3595: 9d79458 3591: db4e84d 3583: c282e5e v: v3
1 parent 19a0b56 commit 50687b8

File tree

3 files changed

+24
-1
lines changed

3 files changed

+24
-1
lines changed

[refs]

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: 2cb129355b93b8f5d932120a2f002fb59d1344fd
2+
refs/heads/master: 1bba58504414c845bd6b24b31c3be2d3f982c511

trunk/src/lib/ivec.rs

+8
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,14 @@ fn filter_map[T,U](fn(&T)->option::t[U] f, &T[mutable?] v) -> U[] {
183183
ret result;
184184
}
185185

186+
fn foldl[T,U](fn(&U,&T)->U p, &U z, &T[mutable?] v) -> U {
187+
auto sz = len(v);
188+
if (sz == 0u) { ret z; }
189+
auto first = v.(0);
190+
auto rest = slice(v, 1u, sz);
191+
ret p(foldl[T,U](p, z, rest), first);
192+
}
193+
186194
fn any[T](fn(&T)->bool f, &T[] v) -> bool {
187195
for (T elem in v) { if (f(elem)) { ret true; } }
188196
ret false;

trunk/src/test/run-pass/lib-ivec.rs

+15
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ fn square_if_odd(&uint n) -> option::t[uint] {
1616
ret if (n % 2u == 1u) { some(n * n) } else { none };
1717
}
1818

19+
fn add(&uint x, &uint y) -> uint { ret x + y; }
20+
1921
fn test_reserve_and_on_heap() {
2022
let int[] v = ~[ 1, 2 ];
2123
assert (!ivec::on_heap(v));
@@ -210,6 +212,18 @@ fn test_filter_map() {
210212
assert (w.(2) == 25u);
211213
}
212214

215+
fn test_foldl() {
216+
// Test on-stack fold.
217+
auto v = ~[ 1u, 2u, 3u ];
218+
auto sum = ivec::foldl(add, 0u, v);
219+
assert (sum == 6u);
220+
221+
// Test on-heap fold.
222+
v = ~[ 1u, 2u, 3u, 4u, 5u ];
223+
sum = ivec::foldl(add, 0u, v);
224+
assert (sum == 15u);
225+
}
226+
213227
fn test_any_and_all() {
214228
assert (ivec::any(is_three, ~[ 1u, 2u, 3u ]));
215229
assert (!ivec::any(is_three, ~[ 0u, 1u, 2u ]));
@@ -243,6 +257,7 @@ fn main() {
243257
// Functional utilities
244258
test_map();
245259
test_filter_map();
260+
test_foldl();
246261
test_any_and_all();
247262
}
248263

0 commit comments

Comments
 (0)