use std::collections::HashMap;
use std::time::Duration;
use serde::{Deserialize, Serialize};
use super::benchmark_config::{TestCase, ParameterValue};
use super::system_metadata::{TestFailure, ResourceStats};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ImplementationResult {
pub config: super::benchmark_config::ImplementationConfig,
pub category_results: HashMap<String, CategoryResult>,
pub overall_score: f64,
pub ranking: u32,
pub failures: Vec<Box<TestFailure>>,
pub resource_stats: ResourceStats,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CategoryResult {
pub category: String,
pub test_results: Vec<TestResult>,
pub score: f64,
pub statistics: CategoryStatistics,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TestResult {
pub test_case: TestCase,
pub parameters: HashMap<String, ParameterValue>,
pub timing: TimingMeasurements,
pub memory: MemoryMeasurements,
pub validation: ValidationResult,
pub success: bool,
pub error: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TimingMeasurements {
pub iteration_times: Vec<Duration>,
pub mean: Duration,
pub median: Duration,
pub std_dev: Duration,
pub min: Duration,
pub max: Duration,
pub percentiles: HashMap<u8, Duration>, pub confidence_interval: ConfidenceInterval,
pub ops_per_second: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MemoryMeasurements {
pub peak_usage: u64,
pub usage_timeline: Vec<(Duration, u64)>,
pub allocation_rate: f64,
pub efficiency: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ConfidenceInterval {
pub lower: Duration,
pub upper: Duration,
pub confidence_level: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ValidationResult {
pub type_correct: bool,
pub value_correct: Option<bool>,
pub actual_result: String,
pub expected_result: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CategoryStatistics {
pub successful_tests: u32,
pub total_tests: u32,
pub success_rate: f64,
pub avg_performance: f64,
pub performance_variance: f64,
pub category_ranking: u32,
}