feat: start adding padding to test output

This commit is contained in:
rvcas 2022-12-08 11:59:34 -05:00
parent 5770ea2456
commit 2ba712eef6
No known key found for this signature in database
GPG Key ID: C09B64E263F7D68C
2 changed files with 61 additions and 19 deletions

View File

@ -492,14 +492,45 @@ impl Project {
}; };
if !tests.is_empty() { if !tests.is_empty() {
println!( println!("\n{}\n", "Running tests...".bold().underline().purple());
"\n{}\n",
"Running tests...".bold().underline().purple().to_string()
);
} }
let fmt_tests = |is_passing: bool, test: Script, remaining_budget: ExBudget| -> String { let mut results = Vec::new();
let ExBudget { mem, cpu } = initial_budget - remaining_budget;
for test in tests {
match test.program.eval(initial_budget) {
(Ok(..), remaining_budget, _) => {
results.push((true, test, initial_budget - remaining_budget));
// println!("{}", fmt_tests);
}
(Err(_), remaining_budget, _) => {
results.push((false, test, initial_budget - remaining_budget));
// println!("{}", fmt_tests());
}
}
}
let (max_mem, max_cpu) =
results
.iter()
.fold((0, 0), |(max_mem, max_cpu), (_, _, budget)| {
if budget.mem >= max_mem && budget.cpu >= max_cpu {
(budget.mem, budget.cpu)
} else if budget.mem > max_mem {
(budget.mem, max_cpu)
} else if budget.cpu > max_cpu {
(max_mem, budget.cpu)
} else {
(max_mem, max_cpu)
}
});
let max_mem = max_mem.to_string().len() as i32;
let max_cpu = max_cpu.to_string().len() as i32;
let fmt_tests = |is_passing: bool, test: Script, spent_budget: ExBudget| -> String {
let ExBudget { mem, cpu } = spent_budget;
format!( format!(
" [{}] [mem: {}, cpu: {}] {}::{}", " [{}] [mem: {}, cpu: {}] {}::{}",
if is_passing { if is_passing {
@ -507,22 +538,15 @@ impl Project {
} else { } else {
"FAIL".bold().red().to_string() "FAIL".bold().red().to_string()
}, },
mem, padding_right(mem.to_string(), max_mem, " "),
cpu, padding_right(cpu.to_string(), max_cpu, " "),
test.module, test.module.blue(),
test.name test.name.bright_blue()
) )
}; };
for test in tests { for (is_passing, test, spent_budget) in results {
match test.program.eval(initial_budget) { println!("{}", fmt_tests(is_passing, test, spent_budget))
(Ok(..), remaining_budget, _) => {
println!("{}", fmt_tests(true, test, remaining_budget));
}
(Err(_), remaining_budget, _) => {
println!("{}", fmt_tests(false, test, remaining_budget));
}
}
} }
} }
@ -682,3 +706,16 @@ fn is_aiken_path(path: &Path, dir: impl AsRef<Path>) -> bool {
.expect("is_aiken_path(): to_str"), .expect("is_aiken_path(): to_str"),
) )
} }
fn padding_right(text: String, n: i32, delimiter: &str) -> String {
let mut text = text.clone();
let diff = n - text.len() as i32;
if diff.is_positive() {
for _ in 0..diff {
text.push_str(delimiter);
}
}
text
}

View File

@ -0,0 +1,5 @@
use aiken/builtin
test bar() {
builtin.length_of_bytearray(#[2, 2, 3]) == 3
}