strider::test_slice_ring!
[−]
[src]
macro_rules! test_slice_ring { ($new:expr) => {{ let mut testable = $new; // we use debug_assert_eq! here because it is omitted in // release mode which we want when benchmarking debug_assert_eq!(testable.len(), 0); // read nothing let mut output: Vec<i32> = std::iter::repeat(0).take(1000).collect(); debug_assert_eq!(testable.read_many_front(&mut output[..]), 0); debug_assert_eq!(output, std::iter::repeat(0).take(1000).collect::<Vec<i32>>()); // drop nothing debug_assert_eq!(testable.drop_many_front(505), 0); debug_assert_eq!(testable.len(), 0); // first push. forces cap increase // let capacity = testable.capacity(); let input = (0..3000).collect::<Vec<i32>>(); testable.push_many_back(&input[..]); debug_assert_eq!(testable.len(), 3000); // debug_assert!(capacity < testable.capacity()); let mut output: Vec<i32> = std::iter::repeat(0).take(1000).collect(); debug_assert_eq!(testable.read_many_front(&mut output[..]), 1000); debug_assert_eq!(output, (0..1000).collect::<Vec<i32>>()); // repeated read let mut output: Vec<i32> = std::iter::repeat(0).take(200).collect(); debug_assert_eq!(testable.read_many_front(&mut output[..]), 200); debug_assert_eq!(output, (0..200).collect::<Vec<i32>>()); debug_assert_eq!(testable.drop_many_front(100), 100); debug_assert_eq!(testable.len(), 2900); // test effect of drop let mut output: Vec<i32> = std::iter::repeat(0).take(1000).collect(); debug_assert_eq!(testable.read_many_front(&mut output[..]), 1000); debug_assert_eq!(output, (100..1100).collect::<Vec<i32>>()); debug_assert_eq!(testable.drop_many_front(505), 505); debug_assert_eq!(testable.len(), 2395); // test effect of drop. overread let mut output: Vec<i32> = std::iter::repeat(0).take(4000).collect(); debug_assert_eq!(testable.read_many_front(&mut output[..]), 2395); debug_assert_eq!( output, (605..3000).chain(std::iter::repeat(0).take(1605)).collect::<Vec<i32>>()); // push without cap increase let input = (3000..4000).collect::<Vec<i32>>(); testable.push_many_back(&input[..]); debug_assert_eq!(testable.len(), 3395); // debug_assert_eq!(testable.capacity(), 4095); // push that forces cap increase // let capacity = testable.capacity(); let input = (4000..6000).collect::<Vec<i32>>(); testable.push_many_back(&input[..]); debug_assert_eq!(testable.len(), 5395); // debug_assert!(capacity < testable.capacity()); // overread let mut output: Vec<i32> = std::iter::repeat(0).take(6000).collect(); debug_assert_eq!(testable.read_many_front(&mut output[..]), 5395); debug_assert_eq!( output, (605..6000).chain(std::iter::repeat(0).take(605)).collect::<Vec<i32>>()); debug_assert_eq!(testable.drop_many_front(395), 395); debug_assert_eq!(testable.len(), 5000); // test effect of drop let mut output: Vec<i32> = std::iter::repeat(0).take(5000).collect(); debug_assert_eq!(testable.read_many_front(&mut output[..]), 5000); debug_assert_eq!( output, (1000..6000).collect::<Vec<i32>>()); debug_assert_eq!(testable.drop_many_front(4000), 4000); debug_assert_eq!(testable.len(), 1000); // test effect of drop. overread let mut output: Vec<i32> = std::iter::repeat(0).take(2000).collect(); debug_assert_eq!(testable.read_many_front(&mut output[..]), 1000); debug_assert_eq!( output, (5000..6000).chain(std::iter::repeat(0).take(1000)).collect::<Vec<i32>>()); // drop more than contained debug_assert_eq!(testable.drop_many_front(1500), 1000); debug_assert_eq!(testable.len(), 0); // debug_assert_eq!(testable.capacity(), capacity); // read nothing let mut output: Vec<i32> = std::iter::repeat(0).take(2000).collect(); debug_assert_eq!(testable.read_many_front(&mut output[..]), 0); debug_assert_eq!( output, std::iter::repeat(0).take(2000).collect::<Vec<i32>>()); }}; }
macro containing a test run that is used to test and benchmark
different implementations of the SliceRing
trait