Add more VecDeque::rotate_{left|right} tests
This commit is contained in:
parent
0815531488
commit
cbe9abb78c
2 changed files with 136 additions and 1 deletions
|
@ -13,11 +13,12 @@
|
|||
#![feature(drain_filter)]
|
||||
#![feature(exact_size_is_empty)]
|
||||
#![feature(pattern)]
|
||||
#![feature(repeat_generic_slice)]
|
||||
#![feature(slice_sort_by_cached_key)]
|
||||
#![feature(str_escape)]
|
||||
#![feature(try_reserve)]
|
||||
#![feature(unboxed_closures)]
|
||||
#![feature(repeat_generic_slice)]
|
||||
#![feature(vecdeque_rotate)]
|
||||
|
||||
extern crate core;
|
||||
extern crate rand;
|
||||
|
|
|
@ -1309,3 +1309,137 @@ fn test_try_reserve_exact() {
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_rotate_nop() {
|
||||
let mut v: VecDeque<_> = (0..10).collect();
|
||||
assert_unchanged(&v);
|
||||
|
||||
v.rotate_left(0);
|
||||
assert_unchanged(&v);
|
||||
|
||||
v.rotate_left(10);
|
||||
assert_unchanged(&v);
|
||||
|
||||
v.rotate_right(0);
|
||||
assert_unchanged(&v);
|
||||
|
||||
v.rotate_right(10);
|
||||
assert_unchanged(&v);
|
||||
|
||||
v.rotate_left(3);
|
||||
v.rotate_right(3);
|
||||
assert_unchanged(&v);
|
||||
|
||||
v.rotate_right(3);
|
||||
v.rotate_left(3);
|
||||
assert_unchanged(&v);
|
||||
|
||||
v.rotate_left(6);
|
||||
v.rotate_right(6);
|
||||
assert_unchanged(&v);
|
||||
|
||||
v.rotate_right(6);
|
||||
v.rotate_left(6);
|
||||
assert_unchanged(&v);
|
||||
|
||||
v.rotate_left(3);
|
||||
v.rotate_left(7);
|
||||
assert_unchanged(&v);
|
||||
|
||||
v.rotate_right(4);
|
||||
v.rotate_right(6);
|
||||
assert_unchanged(&v);
|
||||
|
||||
v.rotate_left(1);
|
||||
v.rotate_left(2);
|
||||
v.rotate_left(3);
|
||||
v.rotate_left(4);
|
||||
assert_unchanged(&v);
|
||||
|
||||
v.rotate_right(1);
|
||||
v.rotate_right(2);
|
||||
v.rotate_right(3);
|
||||
v.rotate_right(4);
|
||||
assert_unchanged(&v);
|
||||
|
||||
fn assert_unchanged(v: &VecDeque<i32>) {
|
||||
assert_eq!(v, &[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_rotate_left_parts() {
|
||||
let mut v: VecDeque<_> = (1..=7).collect();
|
||||
v.rotate_left(2);
|
||||
assert_eq!(v.as_slices(), (&[3, 4, 5, 6, 7, 1][..], &[2][..]));
|
||||
v.rotate_left(2);
|
||||
assert_eq!(v.as_slices(), (&[5, 6, 7, 1][..], &[2, 3, 4][..]));
|
||||
v.rotate_left(2);
|
||||
assert_eq!(v.as_slices(), (&[7, 1][..], &[2, 3, 4, 5, 6][..]));
|
||||
v.rotate_left(2);
|
||||
assert_eq!(v.as_slices(), (&[2, 3, 4, 5, 6, 7, 1][..], &[][..]));
|
||||
v.rotate_left(2);
|
||||
assert_eq!(v.as_slices(), (&[4, 5, 6, 7, 1, 2][..], &[3][..]));
|
||||
v.rotate_left(2);
|
||||
assert_eq!(v.as_slices(), (&[6, 7, 1, 2][..], &[3, 4, 5][..]));
|
||||
v.rotate_left(2);
|
||||
assert_eq!(v.as_slices(), (&[1, 2][..], &[3, 4, 5, 6, 7][..]));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_rotate_right_parts() {
|
||||
let mut v: VecDeque<_> = (1..=7).collect();
|
||||
v.rotate_right(2);
|
||||
assert_eq!(v.as_slices(), (&[6, 7][..], &[1, 2, 3, 4, 5][..]));
|
||||
v.rotate_right(2);
|
||||
assert_eq!(v.as_slices(), (&[4, 5, 6, 7][..], &[1, 2, 3][..]));
|
||||
v.rotate_right(2);
|
||||
assert_eq!(v.as_slices(), (&[2, 3, 4, 5, 6, 7][..], &[1][..]));
|
||||
v.rotate_right(2);
|
||||
assert_eq!(v.as_slices(), (&[7, 1, 2, 3, 4, 5, 6][..], &[][..]));
|
||||
v.rotate_right(2);
|
||||
assert_eq!(v.as_slices(), (&[5, 6][..], &[7, 1, 2, 3, 4][..]));
|
||||
v.rotate_right(2);
|
||||
assert_eq!(v.as_slices(), (&[3, 4, 5, 6][..], &[7, 1, 2][..]));
|
||||
v.rotate_right(2);
|
||||
assert_eq!(v.as_slices(), (&[1, 2, 3, 4, 5, 6][..], &[7][..]));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_rotate_left_random() {
|
||||
let shifts = [
|
||||
6, 1, 0, 11, 12, 1, 11, 7, 9, 3, 6, 1,
|
||||
4, 0, 5, 1, 3, 1, 12, 8, 3, 1, 11, 11,
|
||||
9, 4, 12, 3, 12, 9, 11, 1, 7, 9, 7, 2,
|
||||
];
|
||||
let n = 12;
|
||||
let mut v: VecDeque<_> = (0..n).collect();
|
||||
let mut total_shift = 0;
|
||||
for shift in shifts.iter().cloned() {
|
||||
v.rotate_left(shift);
|
||||
total_shift += shift;
|
||||
for i in 0..n {
|
||||
assert_eq!(v[i], (i + total_shift) % n);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_rotate_right_random() {
|
||||
let shifts = [
|
||||
6, 1, 0, 11, 12, 1, 11, 7, 9, 3, 6, 1,
|
||||
4, 0, 5, 1, 3, 1, 12, 8, 3, 1, 11, 11,
|
||||
9, 4, 12, 3, 12, 9, 11, 1, 7, 9, 7, 2,
|
||||
];
|
||||
let n = 12;
|
||||
let mut v: VecDeque<_> = (0..n).collect();
|
||||
let mut total_shift = 0;
|
||||
for shift in shifts.iter().cloned() {
|
||||
v.rotate_right(shift);
|
||||
total_shift += shift;
|
||||
for i in 0..n {
|
||||
assert_eq!(v[(i + total_shift) % n], i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue