ublx 0.1.4

TUI to index once, enrich with metadata, and browse a flat snapshot in a 3-pane layout with multiple modes.
Documentation
//! Engine index types and render-side LRU cache.

use ublx::engine::cache::LruCache;
use ublx::engine::db_ops::{DELTA_CATEGORY_COUNT, DeltaType};

#[test]
fn delta_type_as_index() {
    assert_eq!(DeltaType::Added.as_index(), 0);
    assert_eq!(DeltaType::Mod.as_index(), 1);
    assert_eq!(DeltaType::Removed.as_index(), 2);
}

#[test]
fn delta_type_from_index() {
    assert_eq!(DeltaType::from_index(0), DeltaType::Added);
    assert_eq!(DeltaType::from_index(1), DeltaType::Mod);
    assert_eq!(DeltaType::from_index(2), DeltaType::Removed);
    assert_eq!(DeltaType::from_index(3), DeltaType::Removed);
    assert_eq!(DeltaType::from_index(100), DeltaType::Removed);
}

#[test]
fn delta_type_roundtrip() {
    for (i, t) in DeltaType::iter().enumerate() {
        assert_eq!(t.as_index(), i);
        assert_eq!(DeltaType::from_index(i), t);
    }
}

#[test]
fn delta_category_count() {
    assert_eq!(DELTA_CATEGORY_COUNT, 3);
    assert_eq!(DeltaType::iter().count(), DELTA_CATEGORY_COUNT);
}

#[test]
fn lru_promotes_on_get() {
    let mut c: LruCache<u32, &str> = LruCache::with_capacity(3);
    c.insert(1, "a");
    c.insert(2, "b");
    c.insert(3, "c");
    assert_eq!(c.get(&2), Some(&"b"));
    assert_eq!(c.entries[0].0, 2);
    assert_eq!(c.entries[1].0, 3);
    assert_eq!(c.entries[2].0, 1);
}

#[test]
fn lru_evicts_lru_at_cap() {
    let mut c: LruCache<u32, &str> = LruCache::with_capacity(3);
    c.insert(1, "a");
    c.insert(2, "b");
    c.insert(3, "c");
    c.insert(4, "d");
    assert_eq!(c.entries.len(), 3);
    assert!(c.get(&1).is_none());
    assert_eq!(c.get(&4), Some(&"d"));
}

#[test]
fn lru_insert_replaces_same_key() {
    let mut c: LruCache<u32, &str> = LruCache::with_capacity(3);
    c.insert(1, "a");
    c.insert(1, "b");
    assert_eq!(c.entries.len(), 1);
    assert_eq!(c.get(&1), Some(&"b"));
}