nv_card/collection/
vector_collection.rs1use collection::{Collection, MutableCollection, Sliceable};
2
3impl<T> Collection for Vec<T>
4{
5 type Item=T;
6 fn size(&self) -> usize
7 {
8 self.len()
9 }
10}
11
12impl<T> MutableCollection for Vec<T>
13{
14 fn push(&mut self, item: Self::Item) -> ()
15 {
16 self.push(item)
17 }
18
19 fn pop(&mut self) -> Option<Self::Item>
20 {
21 self.pop()
22 }
23
24 fn insert_at(&mut self, index: usize, item: Self::Item) -> ()
25 {
26 self.insert(index, item)
27 }
28
29 fn remove_at(&mut self, index:usize) -> Option<Self::Item>
30 {
31 match index >= self.size()
32 {
33 true => {None},
34 false => {Some(self.remove(index))}
35 }
36 }
37}
38
39impl<T> Sliceable for Vec<T>
40{
41 type Item = T;
42 fn as_mut_slice(&mut self) -> &mut [T]
43 {
44 self.as_mut_slice()
45 }
46}
47
48#[cfg(test)]
49mod vector_collection_tests
50{
51 use collection::{Collection, MutableCollection};
52
53 #[test]
54 fn size_test() -> ()
55 {
56 let v = vec![1];
57 assert_eq!(v.size(), 1);
58 }
59
60 #[test]
61 fn is_empty_test() -> ()
62 {
63 let mut v = vec![1];
64 assert_eq!(v.is_empty(), false);
65 let _ = v.pop();
66 assert_eq!(v.is_empty(), true);
67 }
68
69 #[test]
70 fn push_test() -> ()
71 {
72 let mut v = Vec::new();
73 let _ = v.push(1);
74 assert_eq!(v.size(), 1);
75 }
76
77 #[test]
78 fn pop_with_items_test() -> ()
79 {
80 let mut v = vec![1];
81 assert_eq!(v.pop(), Some(1));
82 }
83
84 #[test]
85 fn empty_pop_test() -> ()
86 {
87 let mut v = Vec::<usize>::new();
88 assert_eq!(v.pop(), None);
89 }
90
91 #[test]
92 fn insert_at_test() -> ()
93 {
94 let mut v = vec![1];
95 v.insert_at(0, 2);
96 assert_eq!(v[0], 2);
97 }
98
99 #[test]
100 fn remove_at_valid_index_test() -> ()
101 {
102 let mut v = vec![1];
103 assert_eq!(v.remove_at(0), Some(1));
104 }
105
106 #[test]
107 fn remove_at_invalid_index_test() -> ()
108 {
109 let mut v = vec![1];
110 assert_eq!(v.remove_at(1), None);
111 assert_eq!(v.remove_at(2), None);
112 }
113
114 #[test]
115 fn slice_test() -> ()
116 {
117 let mut v = vec![1];
118 assert_eq!(v.as_mut_slice(), [1]);
119 }
120}