behaviorsim-rs 0.7.0

Domain-agnostic specification for modeling individual psychology and social dynamics
Documentation
//! Action stakes for trust decision risk scaling.

use serde::{Deserialize, Serialize};

/// Stakes level for an action that influences perceived risk.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum ActionStakes {
    /// Low stakes decisions (minor consequences).
    Low,
    /// Medium stakes decisions (typical consequences).
    Medium,
    /// High stakes decisions (serious consequences).
    High,
}

impl ActionStakes {
    /// Returns the perceived risk multiplier for this stakes level.
    #[must_use]
    pub const fn risk_multiplier(self) -> f32 {
        match self {
            ActionStakes::Low => 0.5,
            ActionStakes::Medium => 1.0,
            ActionStakes::High => 2.0,
        }
    }
}

impl Default for ActionStakes {
    fn default() -> Self {
        ActionStakes::Medium
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn action_stakes_risk_multipliers() {
        assert!((ActionStakes::Low.risk_multiplier() - 0.5).abs() < f32::EPSILON);
        assert!((ActionStakes::Medium.risk_multiplier() - 1.0).abs() < f32::EPSILON);
        assert!((ActionStakes::High.risk_multiplier() - 2.0).abs() < f32::EPSILON);
    }
}