use std::time::Duration;
use mempill_types::Criticality;
#[derive(Debug, Clone)]
pub struct EngineConfig {
pub valid_time_confidence_threshold: f32,
pub corroboration_count_for_currency_boost: u32,
pub currency_decay_rate_per_day: f32,
pub criticality_overturn_floor: Criticality,
pub derivation_depth_cap_for_currency_boost: u32,
pub derivation_depth_cap_for_overturning: u32,
pub quarantine_burst_threshold: u32,
pub aging_unconfirmed_threshold_days: u32,
pub decayed_threshold_days: u32,
pub default_adjudication_ttl: Option<Duration>,
}
impl Default for EngineConfig {
fn default() -> Self {
Self {
valid_time_confidence_threshold: 0.7,
corroboration_count_for_currency_boost: 2,
currency_decay_rate_per_day: 0.05,
criticality_overturn_floor: Criticality::High,
derivation_depth_cap_for_currency_boost: 3,
derivation_depth_cap_for_overturning: 2,
quarantine_burst_threshold: 10,
aging_unconfirmed_threshold_days: 30,
decayed_threshold_days: 90,
default_adjudication_ttl: None,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn default_valid_time_confidence_threshold() {
assert_eq!(EngineConfig::default().valid_time_confidence_threshold, 0.7);
}
#[test]
fn default_corroboration_count_for_currency_boost() {
assert_eq!(EngineConfig::default().corroboration_count_for_currency_boost, 2);
}
#[test]
fn default_currency_decay_rate_per_day() {
let delta = (EngineConfig::default().currency_decay_rate_per_day - 0.05).abs();
assert!(delta < f32::EPSILON * 10.0, "expected 0.05, got {}", EngineConfig::default().currency_decay_rate_per_day);
}
#[test]
fn default_criticality_overturn_floor() {
assert_eq!(EngineConfig::default().criticality_overturn_floor, Criticality::High);
}
#[test]
fn default_derivation_depth_cap_for_currency_boost() {
assert_eq!(EngineConfig::default().derivation_depth_cap_for_currency_boost, 3);
}
#[test]
fn default_derivation_depth_cap_for_overturning() {
assert_eq!(EngineConfig::default().derivation_depth_cap_for_overturning, 2);
}
#[test]
fn default_quarantine_burst_threshold() {
assert_eq!(EngineConfig::default().quarantine_burst_threshold, 10);
}
#[test]
fn default_aging_unconfirmed_threshold_days() {
assert_eq!(EngineConfig::default().aging_unconfirmed_threshold_days, 30);
}
#[test]
fn default_decayed_threshold_days() {
assert_eq!(EngineConfig::default().decayed_threshold_days, 90);
}
#[test]
fn engine_config_is_clone() {
let cfg = EngineConfig::default();
let cloned = cfg.clone();
assert_eq!(cloned.quarantine_burst_threshold, 10);
}
#[test]
fn engine_config_debug_format_contains_field_names() {
let s = format!("{:?}", EngineConfig::default());
assert!(s.contains("valid_time_confidence_threshold"));
assert!(s.contains("quarantine_burst_threshold"));
}
}