#![allow(clippy::unwrap_used, clippy::expect_used, clippy::panic)]
use mimir_core::decay::{effective_confidence, DecayConfig, DecayFlags, HalfLife, DAY_MS};
use mimir_core::{Confidence, MemoryKindTag, SourceKind};
#[test]
fn toml_reload_accelerates_decay_without_restart() {
let mut cfg = DecayConfig::librarian_defaults();
let stored = Confidence::try_from_f32(1.0).expect("in range");
let elapsed = 30 * DAY_MS;
let before = effective_confidence(
stored,
elapsed,
MemoryKindTag::Semantic,
SourceKind::Observation,
DecayFlags::default(),
&cfg,
);
let toml_override = r"
[decay.semantic]
observation = 1
";
cfg.apply_toml(toml_override).expect("apply_toml");
let after = effective_confidence(
stored,
elapsed,
MemoryKindTag::Semantic,
SourceKind::Observation,
DecayFlags::default(),
&cfg,
);
assert!(
after < before,
"reload failed to accelerate decay: before={before:?} after={after:?}"
);
let wider = r"
[decay.semantic]
observation = 3650
";
cfg.apply_toml(wider).expect("apply_toml wider");
let after_wider = effective_confidence(
stored,
elapsed,
MemoryKindTag::Semantic,
SourceKind::Observation,
DecayFlags::default(),
&cfg,
);
assert!(
after_wider > after,
"second reload failed to slow decay: after={after:?} after_wider={after_wider:?}"
);
}
#[test]
fn toml_partial_override_preserves_other_defaults() {
let mut cfg = DecayConfig::librarian_defaults();
let profile_default = cfg.sem_profile;
let document_default = cfg.sem_document;
cfg.apply_toml("[decay.semantic]\nobservation = 7")
.expect("apply");
assert_eq!(cfg.sem_observation, HalfLife::from_days(7));
assert_eq!(cfg.sem_profile, profile_default);
assert_eq!(cfg.sem_document, document_default);
}