cranpose-render-common 0.1.174

Common rendering contracts for Cranpose
Documentation
use super::*;

#[test]
fn an_inserted_entry_is_found_by_its_key_only() {
    let mut cache = DirectMappedCache::with_slots_log2(4);
    assert_eq!(cache.get(&7u64), None);
    cache.insert(7u64, 1.5f32);
    assert_eq!(cache.get(&7), Some(1.5));
    assert_eq!(cache.get(&8), None, "another key misses, whatever its slot");
    cache.insert(7, 2.5);
    assert_eq!(
        cache.get(&7),
        Some(2.5),
        "a key's newer value replaces its older"
    );
}

#[test]
fn a_colliding_key_takes_the_slot() {
    let mut cache = DirectMappedCache::with_slots_log2(0);
    cache.insert(1u32, 'a');
    cache.insert(2u32, 'b');
    assert_eq!(cache.get(&2), Some('b'));
    assert_eq!(
        cache.get(&1),
        None,
        "with one slot the second key evicted the first"
    );
}

#[test]
fn every_key_of_a_full_cache_is_found_while_their_slots_differ() {
    let mut cache = DirectMappedCache::with_slots_log2(10);
    for key in 0..64u64 {
        cache.insert(key, key * 3);
    }
    let found = (0..64u64)
        .filter(|key| cache.get(key) == Some(key * 3))
        .count();
    assert!(
        found >= 60,
        "64 keys in 1024 slots almost never collide, found {found}"
    );
}