use std::time::Duration;
use super::types::{TestFailure, TestResult};
#[derive(Debug, Clone)]
pub struct TestResults {
pub test_results: Vec<TestResult>,
pub summary: TestSummary,
pub failures: Vec<TestFailure>,
pub performance: PerformanceData,
}
#[derive(Debug, Clone)]
pub struct TestSummary {
pub total_tests: usize,
pub passed: usize,
pub failed: usize,
pub skipped: usize,
pub avg_runtime: Duration,
pub success_rate: f64,
pub quality_metrics: QualityMetrics,
}
#[derive(Debug, Clone)]
pub struct QualityMetrics {
pub avg_quality: f64,
pub best_quality: f64,
pub worst_quality: f64,
pub std_dev: f64,
pub constraint_satisfaction_rate: f64,
}
#[derive(Debug, Clone)]
pub struct PerformanceData {
pub runtime_stats: RuntimeStats,
pub memory_stats: MemoryStats,
pub convergence_data: ConvergenceData,
}
#[derive(Debug, Clone)]
pub struct RuntimeStats {
pub total_time: Duration,
pub qubo_generation_time: Duration,
pub solving_time: Duration,
pub validation_time: Duration,
pub time_per_test: Vec<(String, Duration)>,
}
#[derive(Debug, Clone)]
pub struct MemoryStats {
pub peak_memory: usize,
pub avg_memory: usize,
pub memory_per_test: Vec<(String, usize)>,
}
#[derive(Debug, Clone)]
pub struct ConvergenceData {
pub curves: Vec<ConvergenceCurve>,
pub avg_iterations: f64,
pub convergence_rate: f64,
}
#[derive(Debug, Clone)]
pub struct ConvergenceCurve {
pub test_id: String,
pub iterations: Vec<IterationData>,
pub converged: bool,
}
#[derive(Debug, Clone)]
pub struct IterationData {
pub iteration: usize,
pub best_value: f64,
pub current_value: f64,
pub temperature: Option<f64>,
}
impl Default for TestResults {
fn default() -> Self {
Self {
test_results: Vec::new(),
summary: TestSummary::default(),
failures: Vec::new(),
performance: PerformanceData::default(),
}
}
}
impl Default for TestSummary {
fn default() -> Self {
Self {
total_tests: 0,
passed: 0,
failed: 0,
skipped: 0,
avg_runtime: Duration::from_secs(0),
success_rate: 0.0,
quality_metrics: QualityMetrics::default(),
}
}
}
impl Default for QualityMetrics {
fn default() -> Self {
Self {
avg_quality: 0.0,
best_quality: f64::NEG_INFINITY,
worst_quality: f64::INFINITY,
std_dev: 0.0,
constraint_satisfaction_rate: 0.0,
}
}
}
impl Default for PerformanceData {
fn default() -> Self {
Self {
runtime_stats: RuntimeStats::default(),
memory_stats: MemoryStats::default(),
convergence_data: ConvergenceData::default(),
}
}
}
impl Default for RuntimeStats {
fn default() -> Self {
Self {
total_time: Duration::from_secs(0),
qubo_generation_time: Duration::from_secs(0),
solving_time: Duration::from_secs(0),
validation_time: Duration::from_secs(0),
time_per_test: Vec::new(),
}
}
}
impl Default for MemoryStats {
fn default() -> Self {
Self {
peak_memory: 0,
avg_memory: 0,
memory_per_test: Vec::new(),
}
}
}
impl Default for ConvergenceData {
fn default() -> Self {
Self {
curves: Vec::new(),
avg_iterations: 0.0,
convergence_rate: 0.0,
}
}
}