1pub mod sequence_extensions;
2
3#[cfg(test)]
4#[derive(Debug, Clone)]
5struct User {
6 id: i32,
7 name: String,
8}
9
10#[cfg(test)]
11fn sample_users() -> Vec<User> {
12 vec![
13 User {
14 id: 1,
15 name: "Alice".to_string(),
16 },
17 User {
18 id: 2,
19 name: "Bob".to_string(),
20 },
21 User {
22 id: 3,
23 name: "Bob".to_string(),
24 },
25 ]
26}
27
28#[cfg(test)]
29mod tests {
30 use super::sample_users;
31 use super::sequence_extensions::{
32 All, Any, ElementAtOrDefault, FirstOrDefault, GroupByOwned, LastOrDefault, RangeOwned,
33 ReverseOwned, SkipTakeOwned, TakeOwned, TakeRef,
34 };
35 use crate::sequence_extensions::RangeGenerator;
36
37 #[test]
38 fn sample_users_returns_expected_ids() {
39 let users = sample_users();
40
41 let ids = users.iter().map(|user| user.id).collect::<Vec<_>>();
42
43 assert_eq!(ids, vec![1, 2, 3]);
44 }
45
46 #[test]
47 fn all_returns_false_when_one_item_does_not_match() {
48 let values = vec![2, 4, 6, 7];
49
50 assert!(!values.all(|value| *value % 2 == 0));
51 }
52
53 #[test]
54 fn any_returns_true_when_one_item_matches() {
55 let values = vec![1, 3, 5, 8];
56
57 assert!(values.any(|value| *value > 7));
58 }
59
60 #[test]
61 fn elementat_or_default_returns_fourth_item() {
62 let values = vec![3, 5, 11, -3, 45];
63
64 let fourth_number = values.elementat_or_default(3);
65
66 assert_eq!(fourth_number, -3);
67 }
68
69 #[test]
70 fn first_or_default_returns_first_item() {
71 let values = vec![10, 20, 30];
72
73 assert_eq!(values.first_or_default(), 10);
74 }
75
76 #[test]
77 fn last_or_default_returns_last_item() {
78 let values = vec![10, 20, 30];
79
80 assert_eq!(values.last_or_default(), 30);
81 }
82
83 #[test]
84 fn skip_take_owned_returns_requested_range() {
85 let values = vec![1, 2, 3, 4, 5];
86
87 assert_eq!(values.skip_take_owned(1, 2), vec![2, 3]);
88 }
89
90 #[test]
91 fn take_ref_returns_borrowed_prefix() {
92 let values = vec![1, 2, 3, 4, 5];
93
94 assert_eq!(values.take_ref(3), &[1, 2, 3]);
95 }
96
97 #[test]
98 fn take_owned_returns_owned_prefix() {
99 let values = vec![1, 2, 3, 4, 5];
100
101 assert_eq!(values.take_owned(4), vec![1, 2, 3, 4]);
102 }
103
104 #[test]
105 fn reverse_returns_expected_reversal() {
106 let values = vec![1, 2, 3, 4];
107
108 assert_eq!(values.reverse_owned(), vec![4, 3, 2, 1]);
109 }
110
111 #[test]
112 fn groupby_returns_expected_count() {
113 let users = sample_users();
114 let grouped_users = users.group_by_owned(|user| user.name.clone());
115
116 assert_eq!(grouped_users.len(), 2);
117 assert_eq!(grouped_users.get("Alice").map(Vec::len), Some(1));
118 assert_eq!(grouped_users.get("Bob").map(Vec::len), Some(2));
119 }
120
121 #[test]
122 fn range_returns_expected_count() {
123 let range = RangeGenerator::range_owned(-5, 10);
124 let expected_nums = [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4];
125
126 assert_eq!(range, expected_nums);
127
128 for i in -5..4 {
130 println!("Number using default for range in Rust : {}", i);
131 }
132 }
133}