use aok::{OK, Void};
use wkv::{
DEFAULT_GC_COMPACTION_INTERVAL_MS, DEFAULT_GC_MAX_BATCH_DELETES, DEFAULT_GC_MAX_SEGMENTS,
DEFAULT_GC_NUM_SEGMENTS, DEFAULT_GC_SCAN_INTERVAL_MS, GcConfig, StoreConfig,
};
#[test]
fn store_config_compaction_defaults() -> Void {
let d = GcConfig::default();
assert!(!d.enabled);
assert_eq!(d.scan_interval_ms, 0);
assert_eq!(d.compaction_interval_ms, 0);
assert_eq!(d.compaction_max_segments, DEFAULT_GC_MAX_SEGMENTS);
assert_eq!(d.compaction_num_segments, DEFAULT_GC_NUM_SEGMENTS);
assert_eq!(d.max_batch_deletes, DEFAULT_GC_MAX_BATCH_DELETES);
assert_eq!(StoreConfig::auto().gc, GcConfig::default());
assert_eq!(
StoreConfig::auto_with_budget(1 << 30).gc,
GcConfig::default()
);
let minimal = StoreConfig::minimal();
assert_eq!(minimal, StoreConfig::default());
assert_eq!(minimal.gc, GcConfig::default());
let custom = StoreConfig::new(1024, 64 * 1024, 16, 0.5)?;
assert_eq!(custom.gc, GcConfig::default());
let tuned = GcConfig {
enabled: true,
scan_interval_ms: DEFAULT_GC_SCAN_INTERVAL_MS,
compaction_interval_ms: DEFAULT_GC_COMPACTION_INTERVAL_MS,
..GcConfig::default()
};
assert!(tuned.enabled);
assert_eq!(tuned.scan_interval_ms, DEFAULT_GC_SCAN_INTERVAL_MS);
assert_eq!(
tuned.compaction_interval_ms,
DEFAULT_GC_COMPACTION_INTERVAL_MS
);
let mut with_gc = StoreConfig::minimal();
with_gc.gc = tuned.clone();
assert_eq!(with_gc.gc, tuned);
OK
}