1
2mod gen_range;
3
4mod combi;
5
6pub struct RangeIterator {
7 curr: i32,
8 stop: i32,
9 step: i32,
10}
11
12impl RangeIterator {
13 pub fn new(start: i32, stop: i32, step: i32) -> Self {
14 RangeIterator {
15 curr: start,
16 stop,
17 step,
18 }
19 }
20}
21
22impl Iterator for RangeIterator {
23 type Item = i32;
24
25 fn next(&mut self) -> Option<Self::Item> {
27 if self.curr >= self.stop {
28 return None;
29 }
30 let res = self.curr;
31
32 self.curr += self.step;
33 Some(res)
34 }
35
36
37}
38
39
40
41
42#[cfg(test)]
43mod tests {
44 use super::RangeIterator;
45
46 use itertools::Itertools;
47
48
49
50 #[test]
51 fn it_works() {
52 assert_eq!(2 + 2, 4);
53 }
54
55 #[test]
56 fn iter_test() {
57 let my_iter = RangeIterator::new(2, 12, 2);
58
59 let mut sum = 0;
60 for s in my_iter {
61 println!("s, sum = {}, {}", s, sum);
62 sum += s;
63 }
64 assert_eq!(sum, 30, "Test 1");
65
66 }
67
68 #[test]
69 fn tup_test() {
70 let mut v = Vec::new();
71 for (a, b) in (1..5).tuples() {
72 v.push((a, b));
73 }
74 assert_eq!(v, vec![(1, 2), (3, 4)]);
75
76
77let mut it = (1..7).tuples();
78assert_eq!(Some((1, 2, 3)), it.next());
79assert_eq!(Some((4, 5, 6)), it.next());
80assert_eq!(None, it.next());
81
82let it = (1..7).tuples::<(_, _, _)>();
84itertools::assert_equal(it, vec![(1, 2, 3), (4, 5, 6)]);
85
86use itertools::Tuples;
88use std::ops::Range;
89
90let it: Tuples<Range<u32>, (u32, u32, u32)> = (1..7).tuples();
91itertools::assert_equal(it, vec![(1, 2, 3), (4, 5, 6)]);
92 }
93}