use std::collections::HashMap;
#[derive(Debug, Clone, Default)]
pub struct Stats {
pub complexity: ComplexityStats,
pub runtime: RuntimeStats,
}
#[derive(Debug, Clone, Default)]
pub struct ComplexityStats {
pub created_types: usize,
pub finished_types: usize,
}
#[derive(Debug, Clone, Default)]
pub struct RuntimeStats {
pub total: u64,
pub loader: u64,
pub resolver: u64,
pub checker: u64,
pub validation: ValidationStats,
pub linter: LinterRunStats,
pub emit: EmitStats,
}
#[derive(Debug, Clone, Default)]
pub struct ValidationStats {
pub total: u64,
pub validators: HashMap<String, u64>,
}
#[derive(Debug, Clone, Default)]
pub struct LinterRunStats {
pub total: u64,
pub rules: HashMap<String, u64>,
}
#[derive(Debug, Clone, Default)]
pub struct EmitStats {
pub total: u64,
pub emitters: HashMap<String, EmitterRunStats>,
}
#[derive(Debug, Clone, Default)]
pub struct EmitterRunStats {
pub total: u64,
pub steps: HashMap<String, u64>,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_stats_default() {
let stats = Stats::default();
assert_eq!(stats.complexity.created_types, 0);
assert_eq!(stats.complexity.finished_types, 0);
assert_eq!(stats.runtime.total, 0);
}
#[test]
fn test_complexity_stats() {
let stats = ComplexityStats {
created_types: 10,
finished_types: 8,
};
assert_eq!(stats.created_types, 10);
assert_eq!(stats.finished_types, 8);
}
#[test]
fn test_runtime_stats_with_validation() {
let mut stats = RuntimeStats {
total: 1000,
checker: 500,
..Default::default()
};
stats.validation.total = 200;
stats
.validation
.validators
.insert("myValidator".to_string(), 200);
assert_eq!(stats.checker, 500);
assert_eq!(stats.validation.validators["myValidator"], 200);
}
#[test]
fn test_linter_run_stats() {
let mut stats = LinterRunStats {
total: 300,
..Default::default()
};
stats.rules.insert("unused-using".to_string(), 150);
stats
.rules
.insert("unused-template-parameter".to_string(), 150);
assert_eq!(stats.rules.len(), 2);
}
#[test]
fn test_emit_stats() {
let mut stats = EmitStats {
total: 400,
..Default::default()
};
let mut emitter = EmitterRunStats {
total: 400,
..Default::default()
};
emitter.steps.insert("emit-types".to_string(), 200);
emitter.steps.insert("emit-operations".to_string(), 200);
stats.emitters.insert("my-emitter".to_string(), emitter);
assert_eq!(stats.emitters["my-emitter"].steps.len(), 2);
}
}