nv_card/collection/
vector_collection.rs

1use 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}