use std::sync::Arc;
#[cfg(test)]
mod integration_tests {
#[cfg(feature = "concurrency")]
use cachekit::policy::lru::ConcurrentLruCache;
use cachekit::policy::lru::LruCore;
use cachekit::traits::{CoreCache, LruCacheTrait, MutableCache};
use super::*;
#[test]
fn test_zero_copy_lru_core() {
let mut cache = LruCore::new(3);
cache.insert(1, Arc::new("one"));
cache.insert(2, Arc::new("two"));
cache.insert(3, Arc::new("three"));
let value = cache.get(&1).unwrap();
assert_eq!(**value, "one");
let peeked = cache.peek(&2).unwrap();
assert_eq!(*peeked, "two");
cache.insert(4, Arc::new("four"));
assert!(cache.get(&2).is_none());
let removed = cache.remove(&3).unwrap();
assert_eq!(*removed, "three");
let (key, value) = cache.pop_lru().unwrap();
assert_eq!(key, 1); assert_eq!(*value, "one");
println!("✅ Zero-copy LRU core test passed!");
}
#[cfg(feature = "concurrency")]
#[test]
fn test_concurrent_lru_cache() {
let cache = ConcurrentLruCache::new(3);
cache.insert(1, "one");
cache.insert(2, "two");
cache.insert(3, "three");
let value1 = cache.peek(&1).unwrap();
let value2 = cache.peek(&1).unwrap(); assert!(Arc::ptr_eq(&value1, &value2));
let value = cache.get(&2).unwrap();
assert_eq!(*value, "two");
let arc_value = Arc::new("four");
let original_ptr = Arc::as_ptr(&arc_value);
cache.insert_arc(4, arc_value);
let retrieved = cache.peek(&4).unwrap();
assert_eq!(Arc::as_ptr(&retrieved), original_ptr);
assert_eq!(cache.capacity(), 3);
assert_eq!(cache.len(), 3);
assert!(!cache.contains(&1)); assert!(cache.contains(&2));
assert!(cache.contains(&3));
assert!(cache.contains(&4));
println!("✅ Concurrent LRU cache test passed!");
}
#[cfg(feature = "concurrency")]
#[test]
fn test_database_workload_simulation() {
type PageId = u32;
type Page = Vec<u8>;
let cache: ConcurrentLruCache<PageId, Page> = ConcurrentLruCache::new(100);
for page_id in 0..150u32 {
let page_data = vec![page_id as u8; 4096]; cache.insert(page_id, page_data);
}
let hot_pages = vec![100, 101, 102, 103, 104]; let mut shared_refs = Vec::new();
for &page_id in &hot_pages {
if let Some(page) = cache.peek(&page_id) {
shared_refs.push(page); }
}
assert_eq!(shared_refs.len(), 5);
for (i, page_ref) in shared_refs.iter().enumerate() {
assert_eq!(page_ref[0], (100 + i) as u8);
}
assert_eq!(cache.len(), 100); assert!(cache.contains(&140)); assert!(!cache.contains(&10));
println!("✅ Database workload simulation passed!");
println!(
" Cache handled {} page insertions with zero-copy semantics",
150
);
}
}