use crate::ln::Ln;
pub const UNCACHED_FLAG: u32 = 0x20000000;
pub fn make_uncached_ln(data: Option<Vec<u8>>) -> Ln {
let mut ln = Ln::new(data);
ln.set_fetched_cold();
ln
}
pub fn make_uncached_ln_from_bytes(data: &[u8]) -> Ln {
make_uncached_ln(Some(data.to_vec()))
}
#[cfg(test)]
mod tests {
use super::*;
use noxu_util::Vlsn;
#[test]
fn test_make_uncached_ln() {
let data = b"uncached data".to_vec();
let ln = make_uncached_ln(Some(data.clone()));
assert_eq!(ln.get_data(), Some(data.as_slice()));
assert!(!ln.is_deleted());
assert!(ln.is_dirty());
assert!(ln.is_fetched_cold());
}
#[test]
fn test_make_uncached_ln_deleted() {
let ln = make_uncached_ln(None);
assert!(ln.is_deleted());
assert!(ln.is_fetched_cold());
}
#[test]
fn test_make_uncached_ln_from_bytes() {
let data = b"test data";
let ln = make_uncached_ln_from_bytes(data);
assert_eq!(ln.get_data(), Some(data.as_slice()));
assert!(ln.is_fetched_cold());
}
#[test]
fn test_uncached_ln_serialization() {
let data = b"serialize me".to_vec();
let mut ln = make_uncached_ln(Some(data.clone()));
ln.set_vlsn(Vlsn::new(42));
let mut buf = Vec::new();
ln.write_to_log(&mut buf);
let ln2 = Ln::read_from_log(&buf).unwrap();
assert_eq!(ln2.get_data(), Some(data.as_slice()));
assert_eq!(ln2.get_vlsn().sequence(), 42);
assert!(!ln2.is_fetched_cold());
}
#[test]
fn test_uncached_ln_eviction_hint() {
let regular_ln = Ln::new(Some(b"regular".to_vec()));
let uncached_ln = make_uncached_ln(Some(b"uncached".to_vec()));
assert!(!regular_ln.is_fetched_cold());
assert!(uncached_ln.is_fetched_cold());
}
#[test]
fn test_uncached_ln_memory_tracking() {
let data = vec![0u8; 1000];
let ln = make_uncached_ln(Some(data));
assert!(ln.get_memory_size() > 1000);
assert_eq!(
ln.get_memory_size(),
ln.get_memory_size_included_by_parent()
);
}
}