use super::{Cache, Cacheable};
struct Types;
impl Cacheable for Types {
type UpperKey = u8;
type LowerKey = u8;
type Payload = bool;
}
#[test]
fn has_empty() {
let mut cache = Cache::<Types>::new(10, 10);
assert!(cache.has(0).is_none());
}
#[test]
fn get_empty() {
let mut cache = Cache::<Types>::new(10, 10);
assert!(cache.get(0, 0).is_none());
}
#[test]
fn set_one() {
let mut cache = Cache::<Types>::new(10, 10);
assert!(!cache.set(0, 0, true));
}
#[test]
fn set_again() {
let mut cache = Cache::<Types>::new(10, 10);
assert!(!cache.set(0, 0, true));
assert!(!cache.set(0, 1, true));
assert!(cache.set(0, 0, true));
}
#[test]
fn has_one() {
let mut cache = Cache::<Types>::new(10, 10);
assert!(!cache.set(0, 0, true));
assert!(cache.has(0).unwrap() == 1);
}
#[test]
fn get_one() {
let mut cache = Cache::<Types>::new(10, 10);
assert!(!cache.set(0, 0, true));
assert!(cache.get(0, 0).unwrap());
}
#[test]
fn integration() {
let mut cache = Cache::<Types>::new(3, 3);
assert!(!cache.set(0, 0, true));
assert!(!cache.set(0, 1, true));
assert!(!cache.set(0, 2, true));
assert!(!cache.set(0, 3, true));
assert!(!cache.set(1, 0, true));
assert!(!cache.set(1, 1, true));
assert!(!cache.set(1, 2, true));
assert!(!cache.set(2, 0, true));
assert!(!cache.set(2, 1, true));
assert!(!cache.set(2, 2, true));
assert!(!cache.set(2, 3, true));
assert!(!cache.set(3, 0, true));
assert!(cache.has(0).is_none());
assert!(cache.has(1).unwrap() == 3);
assert!(cache.has(2).unwrap() == 3);
assert!(cache.has(3).unwrap() == 1);
assert!(cache.get(0, 0).is_none());
assert!(cache.get(0, 1).is_none());
assert!(cache.get(0, 2).is_none());
assert!(cache.get(0, 3).is_none());
assert!(cache.get(1, 0).unwrap());
assert!(cache.get(1, 1).unwrap());
assert!(cache.get(1, 2).unwrap());
assert!(cache.get(2, 0).is_none());
assert!(cache.get(2, 1).unwrap());
assert!(cache.get(2, 2).unwrap());
assert!(cache.get(2, 3).unwrap());
assert!(cache.get(3, 0).unwrap());
assert!(cache.get(3, 1).is_none());
assert!(cache.get(3, 2).is_none());
assert!(cache.get(3, 3).is_none());
}