windjammer_runtime/
collections.rs1pub use std::collections::HashMap;
8pub use std::collections::HashSet;
9pub use std::collections::VecDeque;
10
11pub fn new_map<K, V>() -> HashMap<K, V>
13where
14 K: std::hash::Hash + Eq,
15{
16 HashMap::new()
17}
18
19pub fn new_set<T>() -> HashSet<T>
21where
22 T: std::hash::Hash + Eq,
23{
24 HashSet::new()
25}
26
27pub fn new_deque<T>() -> VecDeque<T> {
29 VecDeque::new()
30}
31
32pub fn contains<T: PartialEq>(slice: &[T], item: &T) -> bool {
34 slice.contains(item)
35}
36
37pub fn index_of<T: PartialEq>(slice: &[T], item: &T) -> Option<usize> {
39 slice.iter().position(|x| x == item)
40}
41
42pub fn reverse<T: Clone>(vec: &[T]) -> Vec<T> {
44 let mut result = vec.to_vec();
45 result.reverse();
46 result
47}
48
49pub fn sort<T: Clone + Ord>(vec: &[T]) -> Vec<T> {
51 let mut result = vec.to_vec();
52 result.sort();
53 result
54}
55
56pub fn unique<T: Clone + Eq + std::hash::Hash>(vec: &[T]) -> Vec<T> {
58 let set: HashSet<_> = vec.iter().cloned().collect();
59 set.into_iter().collect()
60}
61
62#[cfg(test)]
63mod tests {
64 use super::*;
65
66 #[test]
67 fn test_contains() {
68 let vec = vec![1, 2, 3, 4, 5];
69 assert!(contains(&vec, &3));
70 assert!(!contains(&vec, &10));
71 }
72
73 #[test]
74 fn test_index_of() {
75 let vec = vec!["a", "b", "c"];
76 assert_eq!(index_of(&vec, &"b"), Some(1));
77 assert_eq!(index_of(&vec, &"z"), None);
78 }
79
80 #[test]
81 fn test_reverse() {
82 let vec = vec![1, 2, 3];
83 assert_eq!(reverse(&vec), vec![3, 2, 1]);
84 }
85
86 #[test]
87 fn test_sort() {
88 let vec = vec![3, 1, 2];
89 assert_eq!(sort(&vec), vec![1, 2, 3]);
90 }
91
92 #[test]
93 fn test_unique() {
94 let vec = vec![1, 2, 2, 3, 3, 3];
95 let result = unique(&vec);
96 assert_eq!(result.len(), 3);
97 assert!(result.contains(&1));
98 assert!(result.contains(&2));
99 assert!(result.contains(&3));
100 }
101}