swarm-engine-eval 0.1.6

Evaluation framework for SwarmEngine
Documentation
//! EvalRun - Single evaluation run result

use serde::{Deserialize, Serialize};

use crate::metrics::RunMetrics;

/// Termination reason for an evaluation run
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum TerminationReason {
    /// Successfully completed (success condition met)
    Success,
    /// Failed (failure condition met)
    Failure,
    /// Timed out (max ticks reached)
    Timeout,
    /// Manually stopped
    Stopped,
}

impl std::fmt::Display for TerminationReason {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        match self {
            Self::Success => write!(f, "success"),
            Self::Failure => write!(f, "failure"),
            Self::Timeout => write!(f, "timeout"),
            Self::Stopped => write!(f, "stopped"),
        }
    }
}

/// Single evaluation run result
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EvalRun {
    /// Run index (0-based)
    pub index: usize,

    /// Seed used for this run
    pub seed: u64,

    /// Whether the run was successful
    pub success: bool,

    /// Termination reason
    pub termination_reason: TerminationReason,

    /// Run metrics
    pub metrics: RunMetrics,
}

impl EvalRun {
    /// Create new run result
    pub fn new(
        index: usize,
        seed: u64,
        success: bool,
        termination_reason: TerminationReason,
        metrics: RunMetrics,
    ) -> Self {
        Self {
            index,
            seed,
            success,
            termination_reason,
            metrics,
        }
    }
}