#![allow(clippy::arithmetic_side_effects, clippy::integer_arithmetic)]
#[allow(clippy::wildcard_imports)]
use ::alloc::vec::Vec;
use crate::{cache::Cached, Reiterate};
#[test]
fn simple_range_doesnt_panic() {
let mut cache = (0..=u16::MAX).cached();
for i in 0..=u16::MAX {
let lhs = cache.get(usize::from(i));
let rhs = Some(&i);
assert_eq!(lhs, rhs);
}
}
quickcheck::quickcheck! {
fn prop_cache_range(indices: ::alloc::vec::Vec<u8>) -> bool {
let mut cache = (0..=u8::MAX).cached();
indices.into_iter().all(|i| {
cache.get(usize::from(i)).is_some_and(|v| v == &i)
})
}
fn prop_always_some_in_bounds(v: Vec<bool>, indices: Vec<usize>) -> bool {
let size = v.len();
if size > 0 {
let mut iter = v.reiterate();
for i in indices {
assert!(iter.at(i % size).is_some());
}
}
true
}
fn prop_always_none_out_of_bounds(v: Vec<bool>, indices: Vec<usize>) -> bool {
let size = v.len();
let mut iter = v.reiterate();
for i in indices {
if i >= size {
assert!(iter.at(i).is_none());
}
}
true
}
fn prop_correct_range(size: u8, indices: Vec<u8>) -> bool {
if size > 0 {
let mut iter = (0..=size).reiterate();
for i in indices {
assert_eq!(iter.at(usize::from(i)), (i <= size).then_some(&i));
}
}
true
}
}