use serde::{Deserialize, Serialize};
use std::collections::{HashMap, VecDeque};
use std::time::{Duration, SystemTime};
use super::analyzers::*;
use super::metrics::*;
pub struct BenchmarkEngine {
pub benchmark_suites: HashMap<String, BenchmarkSuite>,
pub benchmark_results: HashMap<String, BenchmarkResult>,
pub comparison_results: ComparisonResults,
pub config: BenchmarkConfig,
}
#[derive(Debug, Clone)]
pub struct BenchmarkSuite {
pub name: String,
pub tests: Vec<BenchmarkTest>,
pub config: BenchmarkSuiteConfig,
pub metadata: HashMap<String, String>,
}
#[derive(Debug, Clone)]
pub struct BenchmarkTest {
pub name: String,
pub test_type: BenchmarkTestType,
pub parameters: HashMap<String, f64>,
pub expected_range: (f64, f64),
}
#[derive(Debug, Clone)]
pub enum BenchmarkTestType {
Performance,
Stress,
Load,
Endurance,
Accuracy,
}
#[derive(Debug, Clone)]
pub struct BenchmarkSuiteConfig {
pub iterations: usize,
pub warmup_iterations: usize,
pub test_timeout: Duration,
pub confidence_level: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BenchmarkResult {
pub timestamp: SystemTime,
pub suite_name: String,
pub test_results: HashMap<String, TestResult>,
pub overall_score: f64,
pub execution_duration: Duration,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TestResult {
pub test_name: String,
pub score: f64,
pub execution_time: Duration,
pub passed: bool,
pub error_message: Option<String>,
pub metadata: HashMap<String, String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ComparisonResults {
pub baseline: String,
pub comparisons: HashMap<String, ComparisonSummary>,
pub significance_tests: HashMap<String, f64>,
pub regression_analysis: RegressionAnalysisResults,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ComparisonSummary {
pub improvement: f64,
pub significance: f64,
pub confidence_interval: (f64, f64),
pub effect_size: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RegressionAnalysisResults {
pub regressions: Vec<PerformanceRegression>,
pub severity_summary: HashMap<RegressionSeverity, usize>,
pub trend_analysis: TrendAnalysisResults,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PerformanceRegression {
pub test_name: String,
pub magnitude: f64,
pub severity: RegressionSeverity,
pub confidence: f64,
pub probable_cause: Option<String>,
}
#[derive(Debug, Clone, Hash, Eq, PartialEq, Serialize, Deserialize)]
pub enum RegressionSeverity {
Minor,
Moderate,
Major,
Critical,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TrendAnalysisResults {
pub trends: HashMap<String, TrendDirection>,
pub trend_strengths: HashMap<String, f64>,
pub forecast_confidence: HashMap<String, f64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BenchmarkConfig {
pub default_iterations: usize,
pub default_timeout: Duration,
pub enable_statistical_analysis: bool,
pub comparison_baseline: Option<String>,
pub auto_regression_detection: bool,
}
#[derive(Debug, Clone)]
pub struct RegressionDetector {
pub algorithms: HashMap<String, RegressionDetectionAlgorithm>,
pub detected_regressions: Vec<PerformanceRegression>,
pub config: RegressionDetectionConfig,
pub baseline_manager: BaselineManager,
}
#[derive(Debug, Clone)]
pub struct RegressionDetectionAlgorithm {
pub algorithm_type: RegressionAlgorithmType,
pub parameters: HashMap<String, f64>,
pub sensitivity: f64,
pub false_positive_rate: f64,
}
#[derive(Debug, Clone)]
pub enum RegressionAlgorithmType {
ChangePointDetection,
ControlChart,
TrendAnalysis,
MachineLearning,
Composite,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RegressionDetectionConfig {
pub enable_continuous_monitoring: bool,
pub detection_window: Duration,
pub min_regression_magnitude: f64,
pub confidence_threshold: f64,
}
#[derive(Debug, Clone)]
pub struct BaselineManager {
pub baselines: HashMap<String, PerformanceBaseline>,
pub update_policy: BaselineUpdatePolicy,
pub validation_results: BaselineValidationResults,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PerformanceBaseline {
pub name: String,
pub values: HashMap<String, f64>,
pub timestamp: SystemTime,
pub confidence: f64,
pub validity_period: Duration,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BaselineUpdatePolicy {
pub update_frequency: Duration,
pub min_data_points: usize,
pub update_threshold: f64,
pub auto_update: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BaselineValidationResults {
pub status: ValidationStatus,
pub score: f64,
pub timestamp: SystemTime,
pub errors: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum ValidationStatus {
Valid,
Invalid,
NeedsValidation,
Validating,
}