use std::sync::Arc;
use super::metered_tracker::MeteredFrequencyTracker;
use crate::blocks::BlockMetadata;
use crate::manager::{BlockManager, BlockManagerConfigBuilder, FrequencyTrackingCapacity};
use crate::registry::BlockRegistry;
pub fn create_test_manager<T: BlockMetadata>(block_count: usize) -> BlockManager<T> {
let registry = BlockRegistry::builder()
.frequency_tracker(FrequencyTrackingCapacity::default().create_tracker())
.build();
BlockManager::<T>::builder()
.block_count(block_count)
.block_size(4) .registry(registry)
.with_lru_backend()
.build()
.expect("Should build manager")
}
pub fn create_test_manager_with_backend<T: BlockMetadata>(
block_count: usize,
configure: impl FnOnce(BlockManagerConfigBuilder<T>) -> BlockManagerConfigBuilder<T>,
) -> BlockManager<T> {
let registry = BlockRegistry::builder()
.frequency_tracker(FrequencyTrackingCapacity::default().create_tracker())
.build();
let builder = BlockManager::<T>::builder()
.block_count(block_count)
.block_size(4)
.registry(registry);
configure(builder).build().expect("Should build manager")
}
pub fn create_test_manager_with_default_reset_on_release<T: BlockMetadata>(
block_count: usize,
default_reset_on_release: bool,
) -> BlockManager<T> {
let registry = BlockRegistry::builder()
.frequency_tracker(FrequencyTrackingCapacity::default().create_tracker())
.build();
BlockManager::<T>::builder()
.block_count(block_count)
.block_size(4)
.registry(registry)
.with_lru_backend()
.with_default_reset_on_release(default_reset_on_release)
.build()
.expect("Should build manager")
}
pub fn create_test_manager_with_block_size<T: BlockMetadata>(
block_count: usize,
block_size: usize,
) -> BlockManager<T> {
let registry = BlockRegistry::builder()
.frequency_tracker(FrequencyTrackingCapacity::default().create_tracker())
.build();
BlockManager::<T>::builder()
.block_count(block_count)
.block_size(block_size)
.registry(registry)
.with_lru_backend()
.build()
.expect("Should build manager")
}
pub fn create_test_manager_metered<T: BlockMetadata>(
block_count: usize,
) -> (BlockManager<T>, Arc<MeteredFrequencyTracker>) {
let metered =
MeteredFrequencyTracker::with_tinylfu(FrequencyTrackingCapacity::default().size());
let registry = BlockRegistry::builder()
.frequency_tracker(metered.clone())
.build();
let manager = BlockManager::<T>::builder()
.block_count(block_count)
.block_size(4)
.registry(registry)
.with_lru_backend()
.build()
.expect("Should build manager");
(manager, metered)
}