use bytes::Bytes;
use seerdb::buffer::{BufferPool, BufferPoolOptions};
use seerdb::sstable::{SSTable, SSTableBuilder};
use tempfile::tempdir;
#[test]
fn test_buffer_pool_integration() {
let dir = tempdir().unwrap();
let path = dir.path().join("test.sst");
let mut builder = SSTableBuilder::create(&path).unwrap();
builder
.add(Bytes::from("key1"), Bytes::from("value1"))
.unwrap();
builder
.add(Bytes::from("key2"), Bytes::from("value2"))
.unwrap();
builder
.add(Bytes::from("key3"), Bytes::from("value3"))
.unwrap();
builder.finish().unwrap();
let pool_options = BufferPoolOptions {
capacity_bytes: 1024 * 1024, frame_size: 4096, num_shards: 4, };
let buffer_pool = BufferPool::new(pool_options);
let mut sst = SSTable::open_with_buffer_pool(&path, Some(buffer_pool.clone())).unwrap();
assert_eq!(sst.get(b"key1").unwrap().unwrap(), Bytes::from("value1"));
assert_eq!(sst.get(b"key2").unwrap().unwrap(), Bytes::from("value2"));
assert_eq!(sst.get(b"key3").unwrap().unwrap(), Bytes::from("value3"));
}
#[test]
fn test_buffer_pool_large_values() {
let dir = tempdir().unwrap();
let path = dir.path().join("large.sst");
let mut builder = SSTableBuilder::create(&path).unwrap();
let large_val = vec![b'x'; 10000]; builder
.add(Bytes::from("large"), Bytes::from(large_val.clone()))
.unwrap();
builder.finish().unwrap();
let pool_options = BufferPoolOptions {
capacity_bytes: 1024 * 1024,
frame_size: 4096, num_shards: 4, };
let buffer_pool = BufferPool::new(pool_options);
let mut sst = SSTable::open_with_buffer_pool(&path, Some(buffer_pool)).unwrap();
let val = sst.get(b"large").unwrap().unwrap();
assert_eq!(val.len(), 10000);
assert_eq!(val.as_ref(), &large_val);
}