]>
git.proxmox.com Git - rustc.git/blob - vendor/slab/tests/slab.rs
6 fn insert_get_remove_one() {
7 let mut slab
= Slab
::new();
8 assert
!(slab
.is_empty());
10 let key
= slab
.insert(10);
12 assert_eq
!(slab
[key
], 10);
13 assert_eq
!(slab
.get(key
), Some(&10));
14 assert
!(!slab
.is_empty());
15 assert
!(slab
.contains(key
));
17 assert_eq
!(slab
.remove(key
), 10);
18 assert
!(!slab
.contains(key
));
19 assert
!(slab
.get(key
).is_none());
23 fn insert_get_many() {
24 let mut slab
= Slab
::with_capacity(10);
27 let key
= slab
.insert(i
+ 10);
28 assert_eq
!(slab
[key
], i
+ 10);
31 assert_eq
!(slab
.capacity(), 10);
33 // Storing another one grows the slab
34 let key
= slab
.insert(20);
35 assert_eq
!(slab
[key
], 20);
37 // Capacity grows by 2x
38 assert_eq
!(slab
.capacity(), 20);
42 fn insert_get_remove_many() {
43 let mut slab
= Slab
::with_capacity(10);
44 let mut keys
= vec
![];
48 let val
= (i
* 10) + j
;
50 let key
= slab
.insert(val
);
51 keys
.push((key
, val
));
52 assert_eq
!(slab
[key
], val
);
55 for (key
, val
) in keys
.drain(..) {
56 assert_eq
!(val
, slab
.remove(key
));
60 assert_eq
!(10, slab
.capacity());
64 fn insert_with_vacant_entry() {
65 let mut slab
= Slab
::with_capacity(1);
69 let entry
= slab
.vacant_entry();
74 assert_eq
!(123, slab
[key
]);
78 fn get_vacant_entry_without_using() {
79 let mut slab
= Slab
::<usize>::with_capacity(1);
80 let key
= slab
.vacant_entry().key();
81 assert_eq
!(key
, slab
.vacant_entry().key());
86 fn invalid_get_panics() {
87 let slab
= Slab
::<usize>::with_capacity(1);
93 fn double_remove_panics() {
94 let mut slab
= Slab
::<usize>::with_capacity(1);
95 let key
= slab
.insert(123);
102 fn invalid_remove_panics() {
103 let mut slab
= Slab
::<usize>::with_capacity(1);
109 let mut slab
= Slab
::new();
110 let key
= slab
.insert(1);
113 assert_eq
!(slab
[key
], 2);
115 *slab
.get_mut(key
).unwrap() = 3;
116 assert_eq
!(slab
[key
], 3);
120 fn reserve_does_not_allocate_if_available() {
121 let mut slab
= Slab
::with_capacity(10);
122 let mut keys
= vec
![];
125 keys
.push(slab
.insert(i
));
132 assert
!(slab
.capacity() - slab
.len() == 8);
135 assert_eq
!(10, slab
.capacity());
139 fn reserve_exact_does_not_allocate_if_available() {
140 let mut slab
= Slab
::with_capacity(10);
141 let mut keys
= vec
![];
144 keys
.push(slab
.insert(i
));
151 assert
!(slab
.capacity() - slab
.len() == 8);
154 assert_eq
!(10, slab
.capacity());
159 let mut slab
= Slab
::with_capacity(2);
161 let key1
= slab
.insert(0);
162 let key2
= slab
.insert(1);
164 slab
.retain(|key
, x
| {
169 assert_eq
!(slab
.len(), 1);
170 assert_eq
!(slab
[key1
], 0);
171 assert
!(!slab
.contains(key2
));
173 // Ensure consistency is retained
174 let key
= slab
.insert(123);
175 assert_eq
!(key
, key2
);
177 assert_eq
!(2, slab
.len());
178 assert_eq
!(2, slab
.capacity());
180 // Inserting another element grows
181 let key
= slab
.insert(345);
184 assert_eq
!(4, slab
.capacity());
189 let mut slab
= Slab
::new();
195 let vals
: Vec
<_
> = slab
198 .map(|(i
, (key
, val
))| {
203 assert_eq
!(vals
, vec
![0, 1, 2, 3]);
207 let vals
: Vec
<_
> = slab
.iter().map(|(_
, r
)| *r
).collect();
208 assert_eq
!(vals
, vec
![0, 2, 3]);
213 let mut slab
= Slab
::new();
219 for (i
, (key
, e
)) in slab
.iter_mut().enumerate() {
224 let vals
: Vec
<_
> = slab
.iter().map(|(_
, r
)| *r
).collect();
225 assert_eq
!(vals
, vec
![1, 2, 3, 4]);
229 for (_
, e
) in slab
.iter_mut() {
233 let vals
: Vec
<_
> = slab
.iter().map(|(_
, r
)| *r
).collect();
234 assert_eq
!(vals
, vec
![2, 3, 5]);
239 let mut slab
= Slab
::new();
248 let vals
: Vec
<_
> = slab
.iter().map(|(_
, r
)| *r
).collect();
249 assert
!(vals
.is_empty());
251 assert_eq
!(0, slab
.len());
252 assert_eq
!(4, slab
.capacity());
258 let vals
: Vec
<_
> = slab
.iter().map(|(_
, r
)| *r
).collect();
259 assert_eq
!(vals
, vec
![0, 1]);
264 let vals
: Vec
<_
> = slab
.iter().map(|(_
, r
)| *r
).collect();
265 assert
!(vals
.is_empty());
269 fn fully_consumed_drain() {
270 let mut slab
= Slab
::new();
277 let mut drain
= slab
.drain();
278 assert_eq
!(Some(0), drain
.next());
279 assert_eq
!(Some(1), drain
.next());
280 assert_eq
!(Some(2), drain
.next());
281 assert_eq
!(None
, drain
.next());
284 assert
!(slab
.is_empty());
288 fn partially_consumed_drain() {
289 let mut slab
= Slab
::new();
296 let mut drain
= slab
.drain();
297 assert_eq
!(Some(0), drain
.next());
300 assert
!(slab
.is_empty())