use typescript::memory::{GlobalMemoryManager, MemoryPool, ObjectPool};
#[test]
fn test_memory_pool_allocate_deallocate() {
let mut pool = MemoryPool::new();
let ptr = pool.allocate(64).unwrap();
assert!(!ptr.as_ptr().is_null());
pool.deallocate(ptr, 64);
let stats = pool.stats();
assert_eq!(stats.total_used, 0);
}
#[test]
fn test_object_pool() {
let mut pool = ObjectPool::new(10, || Vec::<i32>::with_capacity(100), |v| v.clear());
let mut obj = pool.acquire();
obj.push(1);
obj.push(2);
pool.release(obj);
assert_eq!(pool.free_count(), 1);
let obj2 = pool.acquire();
assert!(obj2.is_empty());
}
#[test]
fn test_memory_stats() {
let mut pool = MemoryPool::new();
let ptr1 = pool.allocate(64).unwrap();
let ptr2 = pool.allocate(128).unwrap();
let stats = pool.stats();
assert!(stats.total_used > 0);
assert!(stats.usage_percentage() > 0.0);
pool.deallocate(ptr1, 64);
pool.deallocate(ptr2, 128);
let stats = pool.stats();
assert_eq!(stats.total_used, 0);
}
#[test]
fn test_global_memory_manager() {
let mut manager = GlobalMemoryManager::new(100);
let ptr1 = manager.allocate(8).unwrap();
let ptr2 = manager.allocate(16).unwrap();
manager.deallocate(ptr1, 8);
manager.deallocate(ptr2, 16);
let ptr3 = manager.allocate(8).unwrap();
assert_ne!(ptr1, ptr3);
}