sine_cache 0.2.0

SineCache is a high-performance, in-memory caching library for Rust, designed to efficiently store and manage key-value pairs with support for various eviction policies.
Documentation
//! Unit tests regarding LFU

use crate::{eviction_policies::lfu::LFU};
use crate::eviction_policies::common::EvictionPolicy;

#[test]
fn test_new_lfu() {
    let mut lfu: LFU<i32> = LFU::new();
    assert!(lfu.evict().is_none());
}

#[test]
fn test_on_set_and_evict() {
    let mut lfu: LFU<i32> = LFU::new();
    let key1 = 1;
    let key2 = 2;

    lfu.on_set(key1.clone());
    lfu.on_set(key2.clone());

    assert_eq!(lfu.evict(), Some(key1.clone()));
    lfu.on_set(key1.clone());
    assert_eq!(lfu.evict(), Some(key2));
    assert_eq!(lfu.evict(), Some(key1.clone()));
    assert_eq!(lfu.evict(), None);
}

#[test]
fn test_on_get() {
    let mut lfu: LFU<i32> = LFU::new();
    let key1 = 1;
    let key2 = 2;
    let key3 = 3;

    lfu.on_set(key1.clone());
    lfu.on_set(key2.clone());

    lfu.on_get(&key1);
    lfu.on_set(key3.clone());
    assert_eq!(lfu.evict(), Some(key2));
    assert_eq!(lfu.evict(), Some(key3));
    assert_eq!(lfu.evict(), Some(key1));
    assert_eq!(lfu.evict(), None);
}

#[test]
fn test_remove_and_evict() {
    let mut lfu: LFU<i32> = LFU::new();
    let key1 = 1;
    let key2 = 2;

    lfu.on_set(key1.clone());
    lfu.on_set(key2.clone());
    lfu.remove(key1.clone());

    assert_eq!(lfu.evict(), Some(key2));
    assert_eq!(lfu.evict(), None);
}

#[test]
fn test_evict_with_multiple_keys() {
    let mut lfu: LFU<i32> = LFU::new();
    let key1 = 1;
    let key2 = 2;
    let key3 = 3;
    let key4 = 4;

    lfu.on_set(key1.clone());
    lfu.on_set(key2.clone());
    lfu.on_set(key3.clone());
    lfu.on_set(key4.clone());

    assert_eq!(lfu.evict(), Some(key1));
    assert_eq!(lfu.evict(), Some(key2));
    assert_eq!(lfu.evict(), Some(key3));
    assert_eq!(lfu.evict(), Some(key4));
    assert_eq!(lfu.evict(), None);
}