use crate::memory_optimization::*;
#[test]
fn test_memory_optimized_cache_basic_functionality() {
let mut cache = MemoryOptimizedCache::new(3);
cache.insert("key1", 1.0);
cache.insert("key2", 2.0);
cache.insert("key3", 3.0);
assert_eq!(cache.len(), 3);
assert!(!cache.is_empty());
assert_eq!(cache.get(&"key1"), Some(&1.0));
assert_eq!(cache.get(&"key2"), Some(&2.0));
assert_eq!(cache.get(&"key3"), Some(&3.0));
cache.insert("key4", 4.0);
assert_eq!(cache.len(), 3);
cache.clear();
assert_eq!(cache.len(), 0);
assert!(cache.is_empty());
}
#[test]
fn test_memory_optimized_cache_lru_eviction() {
let mut cache = MemoryOptimizedCache::new(2);
cache.insert("key1", 1.0);
cache.insert("key2", 2.0);
cache.get(&"key1");
cache.insert("key3", 3.0);
assert_eq!(cache.len(), 2);
assert_eq!(cache.get(&"key1"), Some(&1.0)); assert_eq!(cache.get(&"key2"), None); assert_eq!(cache.get(&"key3"), Some(&3.0)); }
#[test]
fn test_memory_optimized_cache_empty() {
let mut cache: MemoryOptimizedCache<&str, f64> = MemoryOptimizedCache::new(5);
assert_eq!(cache.len(), 0);
assert!(cache.is_empty());
assert_eq!(cache.get(&"nonexistent"), None);
}
#[test]
fn test_memory_optimized_cache_zero_size() {
let mut cache: MemoryOptimizedCache<&str, f64> = MemoryOptimizedCache::new(0);
cache.insert("key1", 1.0);
assert_eq!(cache.len(), 0);
assert!(cache.is_empty());
}
#[test]
fn test_memory_optimized_cache_large_size() {
let mut cache = MemoryOptimizedCache::new(1000);
for i in 0..1000 {
cache.insert(format!("key_{}", i), i as f64);
}
assert_eq!(cache.len(), 1000);
assert!(!cache.is_empty());
assert_eq!(cache.get(&"key_0".to_string()), Some(&0.0));
assert_eq!(cache.get(&"key_999".to_string()), Some(&999.0));
assert_eq!(cache.get(&"key_1000".to_string()), None); }
#[test]
fn test_memory_optimized_cache_string_keys() {
let mut cache = MemoryOptimizedCache::new(3);
cache.insert("hello".to_string(), "world".to_string());
cache.insert("foo".to_string(), "bar".to_string());
cache.insert("test".to_string(), "value".to_string());
assert_eq!(cache.get(&"hello".to_string()), Some(&"world".to_string()));
assert_eq!(cache.get(&"foo".to_string()), Some(&"bar".to_string()));
assert_eq!(cache.get(&"test".to_string()), Some(&"value".to_string()));
}
#[test]
fn test_memory_optimized_cache_numeric_keys() {
let mut cache = MemoryOptimizedCache::new(3);
cache.insert(1, "one");
cache.insert(2, "two");
cache.insert(3, "three");
assert_eq!(cache.get(&1), Some(&"one"));
assert_eq!(cache.get(&2), Some(&"two"));
assert_eq!(cache.get(&3), Some(&"three"));
assert_eq!(cache.get(&4), None);
}
#[test]
fn test_memory_optimized_cache_complex_values() {
let mut cache = MemoryOptimizedCache::new(2);
let vec1 = vec![1, 2, 3];
let vec2 = vec![4, 5, 6];
cache.insert("vec1", vec1.clone());
cache.insert("vec2", vec2.clone());
assert_eq!(cache.get(&"vec1"), Some(&vec1));
assert_eq!(cache.get(&"vec2"), Some(&vec2));
}
#[test]
fn test_memory_optimized_cache_access_patterns() {
let mut cache = MemoryOptimizedCache::new(5);
for i in 0..5 {
cache.insert(i, i * 2);
}
cache.get(&0); cache.get(&4); cache.get(&2);
cache.insert(5, 10);
assert_eq!(cache.len(), 5);
assert_eq!(cache.get(&0), Some(&0)); assert_eq!(cache.get(&4), Some(&8)); assert_eq!(cache.get(&2), Some(&4)); assert_eq!(cache.get(&5), Some(&10)); }