use std::hash::Hash;
pub mod engine;
pub mod config;
pub mod result;
pub mod runtime_comparison;
pub mod workloads;
pub mod regression;
pub mod monitoring;
pub mod utils;
use config::{BenchmarkConfig, RuntimeComparison, TestSuite, WorkloadProfile};
use engine::{BenchmarkEngine, BenchmarkRun};
use monitoring::{MetricsCollector, PerformanceDashboard, RealTimeMonitor};
use regression::{PerformanceHistory, RegressionDetector, RegressionReport};
use result::{BenchmarkResult, PerformanceMetrics, Statistics};
use runtime_comparison::{ComparisonReport, ProcessLauncher, RuntimeDetector};
use std::collections::{BTreeMap, HashMap};
use workloads::{AIWorkload, ComputeWorkload, ConcurrentWorkload, IOWorkload, MemoryWorkload, WorkloadExecutor, WorkloadType};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum Runtime {
Amber,
NodeJs,
Bun,
Deno,
Custom(String),
}
impl std::fmt::Display for Runtime {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Runtime::Amber => write!(f, "amber"),
Runtime::NodeJs => write!(f, "node"),
Runtime::Bun => write!(f, "bun"),
Runtime::Deno => write!(f, "deno"),
Runtime::Custom(name) => write!(f, "{}", name),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum MetricType {
ExecutionTime,
MemoryUsage,
CpuUsage,
Throughput,
Latency,
}
impl std::fmt::Display for MetricType {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
MetricType::ExecutionTime => write!(f, "execution_time"),
MetricType::MemoryUsage => write!(f, "memory_usage"),
MetricType::CpuUsage => write!(f, "cpu_usage"),
MetricType::Throughput => write!(f, "throughput"),
MetricType::Latency => write!(f, "latency"),
}
}
}
#[derive(thiserror::Error, Debug)]
pub enum BenchmarkError {
#[error("Runtime not available: {0}")]
RuntimeNotAvailable(String),
#[error("Test execution failed: {0}")]
TestExecutionFailed(String),
#[error("Configuration error: {0}")]
ConfigError(String),
#[error("Statistics calculation error: {0}")]
StatisticsError(String),
#[error("IO error: {0}")]
IoError(#[from] std::io::Error),
#[error("JSON error: {0}")]
JsonError(#[from] serde_json::Error),
}
pub type BenchmarkResult<T = ()> = std::result::Result<T, BenchmarkError>;