use super::history::RegressionResult;
use console::style;
pub fn print_regression(result: &RegressionResult) {
if result.is_regression {
println!("\n{} Size Regression Detected!", style("⚠️").red());
println!(
" Previous: {:.2} KB",
result.previous_size as f64 / 1024.0
);
println!(
" Current: {:.2} KB ({})",
result.current_size as f64 / 1024.0,
style(format!("+{:.1}%", result.percent_change)).red()
);
println!(" Increase: {:.2} KB", result.size_diff as f64 / 1024.0);
} else if result.percent_change < -1.0 {
println!("\n{} Size Improvement!", style("✨").green());
println!(
" Previous: {:.2} KB",
result.previous_size as f64 / 1024.0
);
println!(
" Current: {:.2} KB ({})",
result.current_size as f64 / 1024.0,
style(format!("{:.1}%", result.percent_change)).green()
);
println!(" Reduction: {:.2} KB", -result.size_diff as f64 / 1024.0);
} else {
println!(
"\n{} Size stable ({})",
style("✓").dim(),
style(format!("{:+.1}%", result.percent_change)).dim()
);
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_print_regression_with_size_increase() {
let result = RegressionResult {
is_regression: true,
previous_size: 100_000,
current_size: 110_000,
size_diff: 10_000,
percent_change: 10.0,
};
print_regression(&result);
}
#[test]
fn test_print_regression_with_size_decrease() {
let result = RegressionResult {
is_regression: false,
previous_size: 100_000,
current_size: 90_000,
size_diff: -10_000,
percent_change: -10.0,
};
print_regression(&result);
}
#[test]
fn test_print_regression_with_stable_size() {
let result = RegressionResult {
is_regression: false,
previous_size: 100_000,
current_size: 100_500,
size_diff: 500,
percent_change: 0.5,
};
print_regression(&result);
}
#[test]
fn test_print_regression_boundary_small_reduction() {
let result = RegressionResult {
is_regression: false,
previous_size: 100_000,
current_size: 99_000,
size_diff: -1_000,
percent_change: -1.0,
};
print_regression(&result);
}
#[test]
fn test_print_regression_boundary_significant_reduction() {
let result = RegressionResult {
is_regression: false,
previous_size: 100_000,
current_size: 98_900,
size_diff: -1_100,
percent_change: -1.1,
};
print_regression(&result);
}
#[test]
fn test_print_regression_zero_change() {
let result = RegressionResult {
is_regression: false,
previous_size: 100_000,
current_size: 100_000,
size_diff: 0,
percent_change: 0.0,
};
print_regression(&result);
}
#[test]
fn test_print_regression_large_numbers() {
let result = RegressionResult {
is_regression: true,
previous_size: 10_000_000,
current_size: 11_000_000,
size_diff: 1_000_000,
percent_change: 10.0,
};
print_regression(&result);
}
#[test]
fn test_print_regression_small_numbers() {
let result = RegressionResult {
is_regression: false,
previous_size: 1_000,
current_size: 900,
size_diff: -100,
percent_change: -10.0,
};
print_regression(&result);
}
}