use std::process::Command;
#[test]
fn benchmarks_compile() {
let output = Command::new("cargo")
.args(["build", "--benches"])
.output()
.expect("Failed to run cargo");
if !output.status.success() {
let stderr = String::from_utf8_lossy(&output.stderr);
eprintln!("Benchmark compilation failed:\n{stderr}");
assert!(output.status.success(), "Benchmarks failed to compile");
}
println!("All benchmarks compile successfully");
}
#[test]
#[ignore = "Run explicitly with --ignored (takes ~1 minute)"]
fn benchmark_quick_run() {
let output = Command::new("cargo")
.args(["bench", "--", "--test"])
.output()
.expect("Failed to run benchmarks");
let stdout = String::from_utf8_lossy(&output.stdout);
let stderr = String::from_utf8_lossy(&output.stderr);
let has_panic = stderr.contains("panicked") || stdout.contains("panicked");
let has_error = stderr.contains("error[E");
if has_panic {
eprintln!("Benchmark panic detected!\nstderr: {stderr}");
assert!(!has_panic, "Benchmarks should not panic");
}
if has_error {
eprintln!("Benchmark error detected!\nstderr: {stderr}");
assert!(!has_error, "Benchmarks should not have compilation errors");
}
let success_count = stdout.matches("Success").count();
println!("Benchmark quick run completed: {success_count} tests passed");
assert!(
success_count > 0,
"Expected at least one successful benchmark test"
);
}
#[test]
fn list_benchmarks() {
let output = Command::new("cargo")
.args(["bench", "--", "--list"])
.output()
.expect("Failed to list benchmarks");
let stdout = String::from_utf8_lossy(&output.stdout);
println!("Available benchmarks:\n{stdout}");
let expected_groups = [
"buffer",
"color",
"renderer",
"text",
"unicode",
"highlight",
"workloads",
"input",
];
for group in expected_groups {
println!(" - {group} benchmark group expected");
}
}