1struct Counter {
2 count: u32,
3}
4
5impl Counter {
6 fn new() -> Counter {
7 Counter { count: 0 }
8 }
9}
10
11impl Iterator for Counter {
12 type Item = u32;
13
14 fn next(&mut self) -> Option<Self::Item> {
15 self.count += 1;
16 if self.count < 6 {
17 Some(self.count)
18 } else {
19 None
20 }
21 }
22}
23
24#[no_mangle]
34pub extern "C" fn add_one(a: u32) -> u32 {
35 a + 1
36}
37
38#[no_mangle]
46pub extern "C" fn iterators() -> u32 {
47 Counter::new()
48 .zip(vec![1, 2, 3, 4, 5].iter().skip(1))
49 .map(|(a, b)| a * b)
50 .filter(|x| x % 3 == 0)
51 .sum()
52}
53
54#[cfg(test)]
55mod tests {
56 use super::*;
57
58 #[test]
59 fn add_one_test() {
60 assert_eq!(add_one(3), 4);
61 }
62
63 #[test]
64 fn iterators_test() {
65 assert_eq!(iterators(), 18);
66 }
67}