Skip to content

Commit 5367734

Browse files
committed
---
yaml --- r: 14257 b: refs/heads/try c: 8309d50 h: refs/heads/master i: 14255: 5ee4033 v: v3
1 parent 2345412 commit 5367734

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22
refs/heads/master: 61b1875c16de39c166b0f4d54bba19f9c6777d1a
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
44
refs/heads/snap-stage3: 4a81779abd786ff22d71434c6d9a5917ea4cdfff
5-
refs/heads/try: e360ddbd65e2501028f80e17a1ec7ad92904f39c
5+
refs/heads/try: 8309d50ff4ead4dd58b8f3c8388d5668e2e0d152
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105

branches/try/src/libcore/iter.rs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,16 @@ fn filter<A,IA:iterable<A>>(self: IA, prd: fn@(A) -> bool, blk: fn(A)) {
5757
}
5858
}
5959

60+
fn filter_map<A,B,IA:iterable<A>>(self: IA, cnv: fn@(A) -> option<B>,
61+
blk: fn(B)) {
62+
self.iter {|a|
63+
alt cnv(a) {
64+
some(b) { blk(b) }
65+
none { }
66+
}
67+
}
68+
}
69+
6070
fn map<A,B,IA:iterable<A>>(self: IA, cnv: fn@(A) -> B, blk: fn(B)) {
6171
self.iter {|a|
6272
let b = cnv(a);
@@ -188,6 +198,21 @@ fn test_filter_on_uint_range() {
188198
assert l == [0u, 2u, 4u, 6u, 8u];
189199
}
190200

201+
#[test]
202+
fn test_filter_map() {
203+
fn negativate_the_evens(&&i: int) -> option<int> {
204+
if i % 2 == 0 {
205+
some(-i)
206+
} else {
207+
none
208+
}
209+
}
210+
211+
let l = to_list(bind filter_map(
212+
bind int::range(0, 5, _), negativate_the_evens, _));
213+
assert l == [0, -2, -4];
214+
}
215+
191216
#[test]
192217
fn test_flat_map_with_option() {
193218
fn if_even(&&i: int) -> option<int> {

0 commit comments

Comments
 (0)