use super::Cache;
#[test]
fn len() {
let mut c = Cache::<bool, 1>::new();
assert_eq!(0, c.len());
c.push(false);
assert_eq!(1, c.len());
c.push(false);
assert_eq!(1, c.len());
}
#[test]
fn is_empty() {
let mut c = Cache::<bool, 1>::new();
assert!(c.is_empty());
c.push(false);
assert!(!c.is_empty());
}
#[expect(clippy::cognitive_complexity, reason = "a lot to test")]
#[test]
fn get() {
let mut c = Cache::<bool, 4>::new();
assert_eq!(c.get(0), None);
assert_eq!(c.get(1), None);
assert_eq!(c.get(2), None);
assert_eq!(c.get(3), None);
assert_eq!(c.get(4), None);
assert_eq!(c.get(5), None);
assert_eq!(c.get(usize::MAX), None);
c.push(true);
assert_eq!(c.get(0), Some(&true));
assert_eq!(c.get(1), None);
assert_eq!(c.get(2), None);
assert_eq!(c.get(3), None);
assert_eq!(c.get(4), None);
assert_eq!(c.get(5), None);
assert_eq!(c.get(usize::MAX), None);
c.push(false);
assert_eq!(c.get(0), Some(&false));
assert_eq!(c.get(1), Some(&true));
assert_eq!(c.get(2), None);
assert_eq!(c.get(3), None);
assert_eq!(c.get(4), None);
assert_eq!(c.get(5), None);
assert_eq!(c.get(usize::MAX), None);
c.push(false);
assert_eq!(c.get(0), Some(&false));
assert_eq!(c.get(1), Some(&false));
assert_eq!(c.get(2), Some(&true));
assert_eq!(c.get(3), None);
assert_eq!(c.get(4), None);
assert_eq!(c.get(5), None);
assert_eq!(c.get(usize::MAX), None);
c.push(true);
assert_eq!(c.get(0), Some(&true));
assert_eq!(c.get(1), Some(&false));
assert_eq!(c.get(2), Some(&false));
assert_eq!(c.get(3), Some(&true));
assert_eq!(c.get(4), None);
assert_eq!(c.get(5), None);
assert_eq!(c.get(usize::MAX), None);
c.push(true);
assert_eq!(c.get(0), Some(&true));
assert_eq!(c.get(1), Some(&true));
assert_eq!(c.get(2), Some(&false));
assert_eq!(c.get(3), Some(&false));
assert_eq!(c.get(4), None);
assert_eq!(c.get(5), None);
assert_eq!(c.get(usize::MAX), None);
}
#[test]
fn get_unsafe() {
let mut c = Cache::<bool, 4>::new();
assert!(!c.get_unchecked(0));
assert!(!c.get_unchecked(1));
assert!(!c.get_unchecked(2));
assert!(!c.get_unchecked(3));
assert!(!c.get_unchecked(4));
c.push(true);
assert!(c.get_unchecked(0));
assert!(!c.get_unchecked(1));
assert!(!c.get_unchecked(2));
assert!(!c.get_unchecked(3));
assert!(c.get_unchecked(4));
}
#[expect(clippy::indexing_slicing, reason = "comment justifies correctness")]
#[test]
fn index() {
let mut c = Cache::<bool, 4>::new();
c.push(true);
assert!(c[0]);
}
#[expect(clippy::indexing_slicing, reason = "comment justifies correctness")]
#[test]
#[should_panic(expected = "called `Option::unwrap()` on a `None` value")]
fn index_panic() {
let c = Cache::<bool, 4>::new();
assert!(c[0]);
}
#[expect(clippy::indexing_slicing, reason = "comments justify correctness")]
#[test]
fn push() {
let mut c = Cache::<bool, 4>::new();
c.push(true);
assert!(c[0]);
c.push(true);
assert!(c[0]);
c.push(false);
assert!(!c[0]);
c.push(true);
assert!(c[0]);
c.push(false);
assert!(!c[0]);
c.push(false);
assert!(!c[0]);
}
#[test]
fn new() {
_ = Cache::<bool, 0>::new();
_ = Cache::<bool, 32>::new();
_ = Cache::<bool, 31>::new();
}