quantrs2_tytan/testing_framework/
results.rs

1//! Test results and metrics types.
2//!
3//! This module defines structures for test results, summaries,
4//! performance data, and quality metrics.
5
6use std::time::Duration;
7
8use super::types::{TestFailure, TestResult};
9
10/// Test results container
11#[derive(Debug, Clone)]
12pub struct TestResults {
13    /// Individual test results
14    pub test_results: Vec<TestResult>,
15    /// Summary statistics
16    pub summary: TestSummary,
17    /// Failures
18    pub failures: Vec<TestFailure>,
19    /// Performance data
20    pub performance: PerformanceData,
21}
22
23/// Test summary statistics
24#[derive(Debug, Clone)]
25pub struct TestSummary {
26    /// Total tests run
27    pub total_tests: usize,
28    /// Passed tests
29    pub passed: usize,
30    /// Failed tests
31    pub failed: usize,
32    /// Skipped tests
33    pub skipped: usize,
34    /// Average runtime
35    pub avg_runtime: Duration,
36    /// Success rate
37    pub success_rate: f64,
38    /// Quality metrics
39    pub quality_metrics: QualityMetrics,
40}
41
42/// Quality metrics for test results
43#[derive(Debug, Clone)]
44pub struct QualityMetrics {
45    /// Average solution quality
46    pub avg_quality: f64,
47    /// Best solution quality
48    pub best_quality: f64,
49    /// Worst solution quality
50    pub worst_quality: f64,
51    /// Standard deviation
52    pub std_dev: f64,
53    /// Constraint satisfaction rate
54    pub constraint_satisfaction_rate: f64,
55}
56
57/// Performance data container
58#[derive(Debug, Clone)]
59pub struct PerformanceData {
60    /// Runtime statistics
61    pub runtime_stats: RuntimeStats,
62    /// Memory statistics
63    pub memory_stats: MemoryStats,
64    /// Convergence data
65    pub convergence_data: ConvergenceData,
66}
67
68/// Runtime statistics
69#[derive(Debug, Clone)]
70pub struct RuntimeStats {
71    /// Total runtime
72    pub total_time: Duration,
73    /// QUBO generation time
74    pub qubo_generation_time: Duration,
75    /// Solving time
76    pub solving_time: Duration,
77    /// Validation time
78    pub validation_time: Duration,
79    /// Time per test
80    pub time_per_test: Vec<(String, Duration)>,
81}
82
83/// Memory usage statistics
84#[derive(Debug, Clone)]
85pub struct MemoryStats {
86    /// Peak memory usage
87    pub peak_memory: usize,
88    /// Average memory usage
89    pub avg_memory: usize,
90    /// Memory per test
91    pub memory_per_test: Vec<(String, usize)>,
92}
93
94/// Convergence tracking data
95#[derive(Debug, Clone)]
96pub struct ConvergenceData {
97    /// Convergence curves
98    pub curves: Vec<ConvergenceCurve>,
99    /// Average iterations to convergence
100    pub avg_iterations: f64,
101    /// Convergence rate
102    pub convergence_rate: f64,
103}
104
105/// Individual convergence curve
106#[derive(Debug, Clone)]
107pub struct ConvergenceCurve {
108    /// Test ID
109    pub test_id: String,
110    /// Iteration data
111    pub iterations: Vec<IterationData>,
112    /// Converged
113    pub converged: bool,
114}
115
116/// Iteration data point
117#[derive(Debug, Clone)]
118pub struct IterationData {
119    /// Iteration number
120    pub iteration: usize,
121    /// Best objective value
122    pub best_value: f64,
123    /// Current value
124    pub current_value: f64,
125    /// Temperature (if applicable)
126    pub temperature: Option<f64>,
127}
128
129impl Default for TestResults {
130    fn default() -> Self {
131        Self {
132            test_results: Vec::new(),
133            summary: TestSummary::default(),
134            failures: Vec::new(),
135            performance: PerformanceData::default(),
136        }
137    }
138}
139
140impl Default for TestSummary {
141    fn default() -> Self {
142        Self {
143            total_tests: 0,
144            passed: 0,
145            failed: 0,
146            skipped: 0,
147            avg_runtime: Duration::from_secs(0),
148            success_rate: 0.0,
149            quality_metrics: QualityMetrics::default(),
150        }
151    }
152}
153
154impl Default for QualityMetrics {
155    fn default() -> Self {
156        Self {
157            avg_quality: 0.0,
158            best_quality: f64::NEG_INFINITY,
159            worst_quality: f64::INFINITY,
160            std_dev: 0.0,
161            constraint_satisfaction_rate: 0.0,
162        }
163    }
164}
165
166impl Default for PerformanceData {
167    fn default() -> Self {
168        Self {
169            runtime_stats: RuntimeStats::default(),
170            memory_stats: MemoryStats::default(),
171            convergence_data: ConvergenceData::default(),
172        }
173    }
174}
175
176impl Default for RuntimeStats {
177    fn default() -> Self {
178        Self {
179            total_time: Duration::from_secs(0),
180            qubo_generation_time: Duration::from_secs(0),
181            solving_time: Duration::from_secs(0),
182            validation_time: Duration::from_secs(0),
183            time_per_test: Vec::new(),
184        }
185    }
186}
187
188impl Default for MemoryStats {
189    fn default() -> Self {
190        Self {
191            peak_memory: 0,
192            avg_memory: 0,
193            memory_per_test: Vec::new(),
194        }
195    }
196}
197
198impl Default for ConvergenceData {
199    fn default() -> Self {
200        Self {
201            curves: Vec::new(),
202            avg_iterations: 0.0,
203            convergence_rate: 0.0,
204        }
205    }
206}