Skip to main content

asserting/
collection.rs

1//! Implementation of assertions for collections and iterators.
2
3use crate::properties::{DefinedOrderProperty, IsEmptyProperty, LengthProperty};
4use crate::std::collections::{
5    btree_map, btree_set, linked_list, vec_deque, BTreeMap, BTreeSet, BinaryHeap, LinkedList,
6    VecDeque,
7};
8use crate::std::{array, slice};
9use crate::std::{vec, vec::Vec};
10
11impl<T> DefinedOrderProperty for [T] {}
12impl<T, const N: usize> DefinedOrderProperty for [T; N] {}
13impl<T, const N: usize> DefinedOrderProperty for array::IntoIter<T, N> {}
14impl<T> DefinedOrderProperty for slice::Iter<'_, T> {}
15impl<T> DefinedOrderProperty for slice::IterMut<'_, T> {}
16impl<T> DefinedOrderProperty for Vec<T> {}
17impl<T> DefinedOrderProperty for vec::IntoIter<T> {}
18impl<T> DefinedOrderProperty for BTreeSet<T> {}
19impl<T> DefinedOrderProperty for btree_set::IntoIter<T> {}
20impl<T> DefinedOrderProperty for btree_set::Iter<'_, T> {}
21impl<K, V> DefinedOrderProperty for btree_map::IntoIter<K, V> {}
22impl<K, V> DefinedOrderProperty for btree_map::Iter<'_, K, V> {}
23impl<T> DefinedOrderProperty for LinkedList<T> {}
24impl<T> DefinedOrderProperty for linked_list::IntoIter<T> {}
25impl<T> DefinedOrderProperty for linked_list::Iter<'_, T> {}
26impl<T> DefinedOrderProperty for linked_list::IterMut<'_, T> {}
27impl<T> DefinedOrderProperty for VecDeque<T> {}
28impl<T> DefinedOrderProperty for vec_deque::IntoIter<T> {}
29impl<T> DefinedOrderProperty for vec_deque::Iter<'_, T> {}
30impl<T> DefinedOrderProperty for vec_deque::IterMut<'_, T> {}
31
32impl<T> IsEmptyProperty for BinaryHeap<T> {
33    fn is_empty_property(&self) -> bool {
34        self.is_empty()
35    }
36}
37
38impl<K, V> IsEmptyProperty for BTreeMap<K, V> {
39    fn is_empty_property(&self) -> bool {
40        self.is_empty()
41    }
42}
43
44impl<T> IsEmptyProperty for BTreeSet<T> {
45    fn is_empty_property(&self) -> bool {
46        self.is_empty()
47    }
48}
49
50impl<T> IsEmptyProperty for LinkedList<T> {
51    fn is_empty_property(&self) -> bool {
52        self.is_empty()
53    }
54}
55
56impl<T> IsEmptyProperty for VecDeque<T> {
57    fn is_empty_property(&self) -> bool {
58        self.is_empty()
59    }
60}
61
62impl<T> LengthProperty for BinaryHeap<T> {
63    fn length_property(&self) -> usize {
64        self.len()
65    }
66}
67
68impl<K, V> LengthProperty for BTreeMap<K, V> {
69    fn length_property(&self) -> usize {
70        self.len()
71    }
72}
73
74impl<T> LengthProperty for BTreeSet<T> {
75    fn length_property(&self) -> usize {
76        self.len()
77    }
78}
79
80impl<T> LengthProperty for LinkedList<T> {
81    fn length_property(&self) -> usize {
82        self.len()
83    }
84}
85
86impl<T> LengthProperty for VecDeque<T> {
87    fn length_property(&self) -> usize {
88        self.len()
89    }
90}
91
92impl<T, const N: usize> IsEmptyProperty for [T; N] {
93    fn is_empty_property(&self) -> bool {
94        self.is_empty()
95    }
96}
97
98#[cfg(feature = "std")]
99mod std {
100    use crate::properties::{IsEmptyProperty, LengthProperty};
101    use std::collections::{HashMap, HashSet};
102
103    impl<K, V, S> IsEmptyProperty for HashMap<K, V, S> {
104        fn is_empty_property(&self) -> bool {
105            self.is_empty()
106        }
107    }
108
109    impl<T, S> IsEmptyProperty for HashSet<T, S> {
110        fn is_empty_property(&self) -> bool {
111            self.is_empty()
112        }
113    }
114
115    impl<K, V, S> LengthProperty for HashMap<K, V, S> {
116        fn length_property(&self) -> usize {
117            self.len()
118        }
119    }
120
121    impl<T, S> LengthProperty for HashSet<T, S> {
122        fn length_property(&self) -> usize {
123            self.len()
124        }
125    }
126}
127
128mod hashbrown {
129    use crate::properties::{IsEmptyProperty, LengthProperty};
130    use hashbrown::{HashMap, HashSet};
131
132    impl<K, V, S> IsEmptyProperty for HashMap<K, V, S> {
133        fn is_empty_property(&self) -> bool {
134            self.is_empty()
135        }
136    }
137
138    impl<T, S> IsEmptyProperty for HashSet<T, S> {
139        fn is_empty_property(&self) -> bool {
140            self.is_empty()
141        }
142    }
143
144    impl<T, const N: usize> LengthProperty for [T; N] {
145        fn length_property(&self) -> usize {
146            self.len()
147        }
148    }
149
150    impl<K, V, S> LengthProperty for HashMap<K, V, S> {
151        fn length_property(&self) -> usize {
152            self.len()
153        }
154    }
155
156    impl<T, S> LengthProperty for HashSet<T, S> {
157        fn length_property(&self) -> usize {
158            self.len()
159        }
160    }
161}