more aesthetic changes.

In particular, using a concrete enum instead of a string to avoid an
  unnecessary incomplete pattern-match, and remove superfluous comments.

Signed-off-by: KtorZ <5680256+KtorZ@users.noreply.github.com>
This commit is contained in:
KtorZ 2025-02-08 16:58:57 +01:00
parent 37f721ff06
commit a7f4ecef9d
No known key found for this signature in database
GPG Key ID: 33173CB6F77F4277
4 changed files with 29 additions and 20 deletions

View File

@ -83,6 +83,12 @@ enum AddModuleBy {
Path(PathBuf), Path(PathBuf),
} }
#[derive(Debug, Clone, Copy)]
enum Runnable {
Test,
Bench,
}
pub struct Project<T> pub struct Project<T>
where where
T: EventListener, T: EventListener,
@ -471,28 +477,30 @@ where
seed, seed,
times_to_run, times_to_run,
} => { } => {
let verbose = false;
let tests = let tests =
self.collect_benchmarks(false, match_tests, exact_match, options.tracing)?; self.collect_benchmarks(verbose, match_tests, exact_match, options.tracing)?;
if !tests.is_empty() { if !tests.is_empty() {
self.event_listener.handle_event(Event::RunningBenchmarks); self.event_listener.handle_event(Event::RunningBenchmarks);
} }
let tests = self.run_benchmarks(tests, seed, times_to_run); let benchmarks = self.run_benchmarks(tests, seed, times_to_run);
let errors: Vec<Error> = tests let errors: Vec<Error> = benchmarks
.iter() .iter()
.filter_map(|e| { .filter_map(|e| {
if e.is_success() { if e.is_success() {
None None
} else { } else {
Some(Error::from_test_result(e, false)) Some(Error::from_test_result(e, verbose))
} }
}) })
.collect(); .collect();
self.event_listener self.event_listener
.handle_event(Event::FinishedBenchmarks { seed, tests }); .handle_event(Event::FinishedBenchmarks { seed, benchmarks });
if !errors.is_empty() { if !errors.is_empty() {
Err(errors) Err(errors)
@ -954,7 +962,7 @@ where
fn collect_test_items( fn collect_test_items(
&mut self, &mut self,
kind: &str, // "test" or "bench" kind: Runnable,
verbose: bool, verbose: bool,
match_tests: Option<Vec<String>>, match_tests: Option<Vec<String>>,
exact_match: bool, exact_match: bool,
@ -993,8 +1001,8 @@ where
for def in checked_module.ast.definitions() { for def in checked_module.ast.definitions() {
let func = match (kind, def) { let func = match (kind, def) {
("test", Definition::Test(func)) => Some(func), (Runnable::Test, Definition::Test(func)) => Some(func),
("bench", Definition::Benchmark(func)) => Some(func), (Runnable::Bench, Definition::Benchmark(func)) => Some(func),
_ => None, _ => None,
}; };
@ -1049,19 +1057,18 @@ where
} }
tests.push(match kind { tests.push(match kind {
"test" => Test::from_function_definition( Runnable::Test => Test::from_function_definition(
&mut generator, &mut generator,
test.to_owned(), test.to_owned(),
module_name, module_name,
input_path, input_path,
), ),
"bench" => Test::from_benchmark_definition( Runnable::Bench => Test::from_benchmark_definition(
&mut generator, &mut generator,
test.to_owned(), test.to_owned(),
module_name, module_name,
input_path, input_path,
), ),
_ => unreachable!("Invalid test kind"),
}); });
} }
@ -1075,7 +1082,7 @@ where
exact_match: bool, exact_match: bool,
tracing: Tracing, tracing: Tracing,
) -> Result<Vec<Test>, Error> { ) -> Result<Vec<Test>, Error> {
self.collect_test_items("test", verbose, match_tests, exact_match, tracing) self.collect_test_items(Runnable::Test, verbose, match_tests, exact_match, tracing)
} }
fn collect_benchmarks( fn collect_benchmarks(
@ -1085,7 +1092,7 @@ where
exact_match: bool, exact_match: bool,
tracing: Tracing, tracing: Tracing,
) -> Result<Vec<Test>, Error> { ) -> Result<Vec<Test>, Error> {
self.collect_test_items("bench", verbose, match_tests, exact_match, tracing) self.collect_test_items(Runnable::Bench, verbose, match_tests, exact_match, tracing)
} }
fn run_tests( fn run_tests(
@ -1107,7 +1114,9 @@ where
Test::PropertyTest(property_test) => { Test::PropertyTest(property_test) => {
property_test.run(seed, property_max_success, plutus_version) property_test.run(seed, property_max_success, plutus_version)
} }
Test::Benchmark(_) => unreachable!("Benchmarks cannot be run in PBT."), Test::Benchmark(_) => {
unreachable!("found unexpected benchmark amongst collected tests.")
}
}) })
.collect::<Vec<TestResult<(Constant, Rc<Type>), PlutusData>>>() .collect::<Vec<TestResult<(Constant, Rc<Type>), PlutusData>>>()
.into_iter() .into_iter()

View File

@ -50,7 +50,7 @@ pub enum Event {
}, },
FinishedBenchmarks { FinishedBenchmarks {
seed: u32, seed: u32,
tests: Vec<TestResult<UntypedExpr, UntypedExpr>>, benchmarks: Vec<TestResult<UntypedExpr, UntypedExpr>>,
}, },
WaitingForBuildDirLock, WaitingForBuildDirLock,
ResolvingPackages { ResolvingPackages {

View File

@ -39,8 +39,8 @@ impl EventListener for Json {
}); });
println!("{}", serde_json::to_string_pretty(&json_output).unwrap()); println!("{}", serde_json::to_string_pretty(&json_output).unwrap());
} }
Event::FinishedBenchmarks { tests, seed } => { Event::FinishedBenchmarks { benchmarks, seed } => {
let benchmark_results: Vec<_> = tests let benchmark_results: Vec<_> = benchmarks
.into_iter() .into_iter()
.filter_map(|test| { .filter_map(|test| {
if let TestResult::BenchmarkResult(result) = test { if let TestResult::BenchmarkResult(result) = test {

View File

@ -224,9 +224,9 @@ impl EventListener for Terminal {
"...".if_supports_color(Stderr, |s| s.bold()) "...".if_supports_color(Stderr, |s| s.bold())
); );
} }
Event::FinishedBenchmarks { tests, .. } => { Event::FinishedBenchmarks { benchmarks, .. } => {
for test in tests { for bench in benchmarks {
if let TestResult::BenchmarkResult(result) = test { if let TestResult::BenchmarkResult(result) = bench {
println!("{} {} ", result.bench.name.bold(), "BENCH".blue(),); println!("{} {} ", result.bench.name.bold(), "BENCH".blue(),);
println!(" Memory: {} bytes", result.cost.mem); println!(" Memory: {} bytes", result.cost.mem);
println!(" CPU: {} units", result.cost.cpu); println!(" CPU: {} units", result.cost.cpu);