use super::*;
#[test]
fn test_memory_pool() {
let pool = MemoryPool::<i32>::new(10);
let item1 = pool.allocate();
let item2 = pool.allocate();
assert_eq!(pool.size(), 0);
pool.deallocate(item1);
pool.deallocate(item2);
assert_eq!(pool.size(), 2);
let _item3 = pool.allocate();
assert_eq!(pool.size(), 1);
}
#[test]
fn test_memory_pool_real_reuse() {
let pool = MemoryPool::<Vec<u8>>::new(4);
let mut v = vec![0u8; 64];
let ptr1 = v.as_ptr();
v.clear();
pool.deallocate(v);
let reused = pool.allocate();
assert_eq!(reused.as_ptr(), ptr1);
assert_eq!(pool.size(), 0);
}
#[test]
fn test_memory_pool_retention_cap() {
let pool = MemoryPool::<i32>::new(2);
pool.deallocate(1);
pool.deallocate(2);
pool.deallocate(3); assert_eq!(pool.size(), 2);
assert_eq!(pool.allocate(), 2);
assert_eq!(pool.allocate(), 1);
assert_eq!(pool.allocate(), 0); }
#[test]
fn test_unified_ring_buffer() {
let buffer = UnifiedRingBuffer::<i32>::new(8).unwrap();
assert!(buffer.is_empty());
assert_eq!(buffer.len(), 0);
assert!(buffer.try_push(1).is_ok());
assert!(buffer.try_push(2).is_ok());
assert_eq!(buffer.len(), 2);
assert_eq!(buffer.try_pop(), Some(1));
assert_eq!(buffer.try_pop(), Some(2));
assert!(buffer.is_empty());
}