#![cfg_attr(coverage_nightly, coverage(off))]
#[cfg(test)]
mod tests {
use super::super::calculator::PerfectionScoreCalculator;
use super::super::types::{
CategoryScore, CategoryWeights, PerfectionScoreResult, MAX_PERFECTION_SCORE,
};
use std::path::Path;
#[test]
fn test_category_weights_sum_to_200() {
let weights = CategoryWeights::default();
let sum = weights.tdg
+ weights.repo_score
+ weights.rust_score
+ weights.popper_score
+ weights.test_coverage
+ weights.mutation
+ weights.documentation
+ weights.performance;
assert_eq!(sum, MAX_PERFECTION_SCORE);
}
#[test]
fn test_category_score_calculation() {
let score = CategoryScore::new("Test", 80.0, 40);
assert_eq!(score.earned_points, 32.0);
assert_eq!(score.grade, "B-"); }
#[test]
fn test_overall_grade_thresholds() {
assert_eq!(PerfectionScoreResult::calculate_overall_grade(198.0), "A+"); assert_eq!(PerfectionScoreResult::calculate_overall_grade(190.0), "A+"); assert_eq!(PerfectionScoreResult::calculate_overall_grade(184.0), "A"); assert_eq!(PerfectionScoreResult::calculate_overall_grade(174.0), "A-"); assert_eq!(PerfectionScoreResult::calculate_overall_grade(164.0), "B+"); assert_eq!(PerfectionScoreResult::calculate_overall_grade(150.0), "B"); assert_eq!(PerfectionScoreResult::calculate_overall_grade(130.0), "C"); assert_eq!(PerfectionScoreResult::calculate_overall_grade(110.0), "D"); assert_eq!(PerfectionScoreResult::calculate_overall_grade(80.0), "F"); }
#[test]
fn test_perfection_score_result() {
let categories = vec![
CategoryScore::new("TDG", 80.0, 40), CategoryScore::new("Repo", 70.0, 30), CategoryScore::new("Rust", 75.0, 30), CategoryScore::new("Popper", 65.0, 25), CategoryScore::new("Coverage", 90.0, 25), CategoryScore::new("Mutation", 60.0, 20), CategoryScore::new("Docs", 70.0, 15), CategoryScore::new("Performance", 85.0, 15), ];
let result = PerfectionScoreResult::new(categories);
assert!((result.total_score - 149.5).abs() < 0.01);
assert_eq!(result.grade, "B"); }
#[tokio::test]
#[ignore] async fn test_calculator_fast_mode() {
let calc = PerfectionScoreCalculator::new().fast_mode(true);
let result = calc.calculate(Path::new(".")).await.unwrap();
assert_eq!(result.categories.len(), 8);
assert!(result.total_score >= 0.0 && result.total_score <= 200.0);
}
}