use std::{iter::repeat_n, sync::Arc};
use aok::Result;
use tempfile::{TempDir, tempdir};
use wdev::SegmentedDevice;
use wkv::{StoreConfig, WedbStore};
pub struct TestEnv {
pub _dir: TempDir,
pub store: Arc<WedbStore<SegmentedDevice>>,
}
pub fn config(index_size: usize, page_size: usize, num_pages: usize) -> Result<StoreConfig> {
Ok(StoreConfig::new(index_size, page_size, num_pages, 0.5)?)
}
pub fn open_store(name: &str, config: StoreConfig) -> Result<TestEnv> {
let dir = tempdir()?;
let device = Arc::new(SegmentedDevice::single_file(dir.path().join(name))?);
let store = Arc::new(WedbStore::open(config, device)?);
Ok(TestEnv { _dir: dir, store })
}
pub fn pad(v: impl itoa::Integer, width: usize) -> String {
let mut buf = itoa::Buffer::new();
let digits = buf.format(v);
let mut s = String::with_capacity(width.max(digits.len()));
s.extend(repeat_n('0', width.saturating_sub(digits.len())));
s.push_str(digits);
s
}