Skip to content

Commit a40cd2a

Browse files
test: add test cases for VecDeque
1 parent 3f391b8 commit a40cd2a

File tree

1 file changed

+294
-0
lines changed
  • library/alloc/src/collections/vec_deque

1 file changed

+294
-0
lines changed

library/alloc/src/collections/vec_deque/tests.rs

+294
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,300 @@ fn test_insert() {
162162
}
163163
}
164164

165+
#[test]
166+
fn test_get() {
167+
let mut tester = VecDeque::new();
168+
tester.push_back(1);
169+
tester.push_back(2);
170+
tester.push_back(3);
171+
172+
assert_eq!(tester.len(), 3);
173+
174+
assert_eq!(tester.get(1), Some(&2));
175+
assert_eq!(tester.get(2), Some(&3));
176+
assert_eq!(tester.get(0), Some(&1));
177+
assert_eq!(tester.get(3), None);
178+
179+
tester.remove(0);
180+
181+
assert_eq!(tester.len(), 2);
182+
assert_eq!(tester.get(0), Some(&2));
183+
assert_eq!(tester.get(1), Some(&3));
184+
assert_eq!(tester.get(2), None);
185+
}
186+
187+
#[test]
188+
fn test_get_mut() {
189+
let mut tester = VecDeque::new();
190+
tester.push_back(1);
191+
tester.push_back(2);
192+
tester.push_back(3);
193+
194+
assert_eq!(tester.len(), 3);
195+
196+
if let Some(elem) = tester.get_mut(0) {
197+
assert_eq!(*elem, 1);
198+
*elem = 10;
199+
}
200+
201+
if let Some(elem) = tester.get_mut(2) {
202+
assert_eq!(*elem, 3);
203+
*elem = 30;
204+
}
205+
206+
assert_eq!(tester.get(0), Some(&10));
207+
assert_eq!(tester.get(2), Some(&30));
208+
assert_eq!(tester.get_mut(3), None);
209+
210+
tester.remove(2);
211+
212+
assert_eq!(tester.len(), 2);
213+
assert_eq!(tester.get(0), Some(&10));
214+
assert_eq!(tester.get(1), Some(&2));
215+
assert_eq!(tester.get(2), None);
216+
}
217+
218+
#[test]
219+
fn test_swap() {
220+
let mut tester = VecDeque::new();
221+
tester.push_back(1);
222+
tester.push_back(2);
223+
tester.push_back(3);
224+
225+
assert_eq!(tester, [1, 2, 3]);
226+
227+
tester.swap(0, 0);
228+
assert_eq!(tester, [1, 2, 3]);
229+
tester.swap(0, 1);
230+
assert_eq!(tester, [2, 1, 3]);
231+
tester.swap(2, 1);
232+
assert_eq!(tester, [2, 3, 1]);
233+
tester.swap(1, 2);
234+
assert_eq!(tester, [2, 1, 3]);
235+
tester.swap(0, 2);
236+
assert_eq!(tester, [3, 1, 2]);
237+
tester.swap(2, 2);
238+
assert_eq!(tester, [3, 1, 2]);
239+
}
240+
241+
#[test]
242+
#[should_panic = "assertion failed: j < self.len()"]
243+
fn test_swap_panic() {
244+
let mut tester = VecDeque::new();
245+
tester.push_back(1);
246+
tester.push_back(2);
247+
tester.push_back(3);
248+
tester.swap(2, 3);
249+
}
250+
251+
#[test]
252+
fn test_reserve_exact() {
253+
let mut tester: VecDeque<i32> = VecDeque::with_capacity(1);
254+
assert!(tester.capacity() == 1);
255+
tester.reserve_exact(50);
256+
assert!(tester.capacity() >= 51);
257+
tester.reserve_exact(40);
258+
assert!(tester.capacity() >= 51);
259+
tester.reserve_exact(200);
260+
assert!(tester.capacity() >= 200);
261+
}
262+
263+
#[test]
264+
#[should_panic = "capacity overflow"]
265+
fn test_reserve_exact_panic() {
266+
let mut tester: VecDeque<i32> = VecDeque::new();
267+
tester.reserve_exact(usize::MAX);
268+
}
269+
270+
#[test]
271+
fn test_try_reserve_exact() {
272+
let mut tester: VecDeque<i32> = VecDeque::with_capacity(1);
273+
assert!(tester.capacity() == 1);
274+
assert_eq!(tester.try_reserve_exact(100), Ok(()));
275+
assert!(tester.capacity() >= 100);
276+
assert_eq!(tester.try_reserve_exact(50), Ok(()));
277+
assert!(tester.capacity() >= 100);
278+
assert_eq!(tester.try_reserve_exact(200), Ok(()));
279+
assert!(tester.capacity() >= 200);
280+
assert_eq!(tester.try_reserve_exact(0), Ok(()));
281+
assert!(tester.capacity() >= 200);
282+
assert!(tester.try_reserve_exact(usize::MAX).is_err());
283+
}
284+
285+
#[test]
286+
fn test_try_reserve() {
287+
let mut tester: VecDeque<i32> = VecDeque::with_capacity(1);
288+
assert!(tester.capacity() == 1);
289+
assert_eq!(tester.try_reserve(100), Ok(()));
290+
assert!(tester.capacity() >= 100);
291+
assert_eq!(tester.try_reserve(50), Ok(()));
292+
assert!(tester.capacity() >= 100);
293+
assert_eq!(tester.try_reserve(200), Ok(()));
294+
assert!(tester.capacity() >= 200);
295+
assert_eq!(tester.try_reserve(0), Ok(()));
296+
assert!(tester.capacity() >= 200);
297+
assert!(tester.try_reserve(usize::MAX).is_err());
298+
}
299+
300+
#[test]
301+
fn test_contains() {
302+
let mut tester = VecDeque::new();
303+
tester.push_back(1);
304+
tester.push_back(2);
305+
tester.push_back(3);
306+
307+
assert!(tester.contains(&1));
308+
assert!(tester.contains(&3));
309+
assert!(!tester.contains(&0));
310+
assert!(!tester.contains(&4));
311+
tester.remove(0);
312+
assert!(!tester.contains(&1));
313+
assert!(tester.contains(&2));
314+
assert!(tester.contains(&3));
315+
}
316+
317+
#[test]
318+
fn test_rotate_left_right() {
319+
let mut tester: VecDeque<_> = (1..=10).collect();
320+
321+
assert_eq!(tester.len(), 10);
322+
323+
tester.rotate_left(0);
324+
assert_eq!(tester, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
325+
326+
tester.rotate_right(0);
327+
assert_eq!(tester, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
328+
329+
tester.rotate_left(3);
330+
assert_eq!(tester, [4, 5, 6, 7, 8, 9, 10, 1, 2, 3]);
331+
332+
tester.rotate_right(5);
333+
assert_eq!(tester, [9, 10, 1, 2, 3, 4, 5, 6, 7, 8]);
334+
335+
tester.rotate_left(tester.len());
336+
assert_eq!(tester, [9, 10, 1, 2, 3, 4, 5, 6, 7, 8]);
337+
338+
tester.rotate_right(tester.len());
339+
assert_eq!(tester, [9, 10, 1, 2, 3, 4, 5, 6, 7, 8]);
340+
341+
tester.rotate_left(1);
342+
assert_eq!(tester, [10, 1, 2, 3, 4, 5, 6, 7, 8, 9]);
343+
}
344+
345+
#[test]
346+
#[should_panic = "assertion failed: mid <= self.len()"]
347+
fn test_rotate_left_panic() {
348+
let mut tester: VecDeque<_> = (1..=10).collect();
349+
tester.rotate_left(tester.len() + 1);
350+
}
351+
352+
#[test]
353+
#[should_panic = "assertion failed: k <= self.len()"]
354+
fn test_rotate_right_panic() {
355+
let mut tester: VecDeque<_> = (1..=10).collect();
356+
tester.rotate_right(tester.len() + 1);
357+
}
358+
359+
#[test]
360+
fn test_binary_search() {
361+
// If the givin VecDeque is not sorted, the returned result is unspecified and meaningless,
362+
// as this method performs a binary search.
363+
364+
let tester: VecDeque<_> = [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55].into();
365+
366+
assert_eq!(tester.binary_search(&0), Ok(0));
367+
assert_eq!(tester.binary_search(&5), Ok(5));
368+
assert_eq!(tester.binary_search(&55), Ok(10));
369+
assert_eq!(tester.binary_search(&4), Err(5));
370+
assert_eq!(tester.binary_search(&-1), Err(0));
371+
assert!(matches!(tester.binary_search(&1), Ok(1..=2)));
372+
373+
let tester: VecDeque<_> = [1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3].into();
374+
assert_eq!(tester.binary_search(&1), Ok(0));
375+
assert!(matches!(tester.binary_search(&2), Ok(1..=4)));
376+
assert!(matches!(tester.binary_search(&3), Ok(5..=13)));
377+
assert_eq!(tester.binary_search(&-2), Err(0));
378+
assert_eq!(tester.binary_search(&0), Err(0));
379+
assert_eq!(tester.binary_search(&4), Err(14));
380+
assert_eq!(tester.binary_search(&5), Err(14));
381+
}
382+
383+
#[test]
384+
fn test_binary_search_by() {
385+
// If the givin VecDeque is not sorted, the returned result is unspecified and meaningless,
386+
// as this method performs a binary search.
387+
388+
let tester: VecDeque<_> = [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55].into();
389+
390+
assert_eq!(tester.binary_search_by(|x| x.cmp(&0)), Ok(0));
391+
assert_eq!(tester.binary_search_by(|x| x.cmp(&5)), Ok(5));
392+
assert_eq!(tester.binary_search_by(|x| x.cmp(&55)), Ok(10));
393+
assert_eq!(tester.binary_search_by(|x| x.cmp(&4)), Err(5));
394+
assert_eq!(tester.binary_search_by(|x| x.cmp(&-1)), Err(0));
395+
assert!(matches!(tester.binary_search_by(|x| x.cmp(&1)), Ok(1..=2)));
396+
}
397+
398+
#[test]
399+
fn test_binary_search_key() {
400+
// If the givin VecDeque is not sorted, the returned result is unspecified and meaningless,
401+
// as this method performs a binary search.
402+
403+
let tester: VecDeque<_> = [
404+
(-1, 0),
405+
(2, 10),
406+
(6, 5),
407+
(7, 1),
408+
(8, 10),
409+
(10, 2),
410+
(20, 3),
411+
(24, 5),
412+
(25, 18),
413+
(28, 13),
414+
(31, 21),
415+
(32, 4),
416+
(54, 25),
417+
]
418+
.into();
419+
420+
assert_eq!(tester.binary_search_by_key(&-1, |&(a, _b)| a), Ok(0));
421+
assert_eq!(tester.binary_search_by_key(&8, |&(a, _b)| a), Ok(4));
422+
assert_eq!(tester.binary_search_by_key(&25, |&(a, _b)| a), Ok(8));
423+
assert_eq!(tester.binary_search_by_key(&54, |&(a, _b)| a), Ok(12));
424+
assert_eq!(tester.binary_search_by_key(&-2, |&(a, _b)| a), Err(0));
425+
assert_eq!(tester.binary_search_by_key(&1, |&(a, _b)| a), Err(1));
426+
assert_eq!(tester.binary_search_by_key(&4, |&(a, _b)| a), Err(2));
427+
assert_eq!(tester.binary_search_by_key(&13, |&(a, _b)| a), Err(6));
428+
assert_eq!(tester.binary_search_by_key(&55, |&(a, _b)| a), Err(13));
429+
assert_eq!(tester.binary_search_by_key(&100, |&(a, _b)| a), Err(13));
430+
431+
let tester: VecDeque<_> = [
432+
(0, 0),
433+
(2, 1),
434+
(6, 1),
435+
(5, 1),
436+
(3, 1),
437+
(1, 2),
438+
(2, 3),
439+
(4, 5),
440+
(5, 8),
441+
(8, 13),
442+
(1, 21),
443+
(2, 34),
444+
(4, 55),
445+
]
446+
.into();
447+
448+
assert_eq!(tester.binary_search_by_key(&0, |&(_a, b)| b), Ok(0));
449+
assert!(matches!(tester.binary_search_by_key(&1, |&(_a, b)| b), Ok(1..=4)));
450+
assert_eq!(tester.binary_search_by_key(&8, |&(_a, b)| b), Ok(8));
451+
assert_eq!(tester.binary_search_by_key(&13, |&(_a, b)| b), Ok(9));
452+
assert_eq!(tester.binary_search_by_key(&55, |&(_a, b)| b), Ok(12));
453+
assert_eq!(tester.binary_search_by_key(&-1, |&(_a, b)| b), Err(0));
454+
assert_eq!(tester.binary_search_by_key(&4, |&(_a, b)| b), Err(7));
455+
assert_eq!(tester.binary_search_by_key(&56, |&(_a, b)| b), Err(13));
456+
assert_eq!(tester.binary_search_by_key(&100, |&(_a, b)| b), Err(13));
457+
}
458+
165459
#[test]
166460
fn make_contiguous_big_tail() {
167461
let mut tester = VecDeque::with_capacity(15);

0 commit comments

Comments
 (0)