From e944f1037283cd215d8152ff29a4cfee4852de72 Mon Sep 17 00:00:00 2001 From: Pi Lanningham Date: Fri, 8 Mar 2024 17:36:32 -0500 Subject: [PATCH 1/3] Add an optional check count; when we run a command that runs tests, we can set this to Some(x) and it'll print in the summary --- crates/aiken-project/src/watch.rs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/crates/aiken-project/src/watch.rs b/crates/aiken-project/src/watch.rs index 591ec8e3..2ae04ffc 100644 --- a/crates/aiken-project/src/watch.rs +++ b/crates/aiken-project/src/watch.rs @@ -24,6 +24,7 @@ impl ExitFailure { } struct Summary { + check_count: Option, warning_count: usize, error_count: usize, } @@ -31,10 +32,18 @@ struct Summary { impl Display for Summary { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { f.write_str(&format!( - " {} {} {}, {} {}", + " {} {}{}{} {}, {} {}", "Summary" .if_supports_color(Stderr, |s| s.purple()) .if_supports_color(Stderr, |s| s.bold()), + if let Some(c) = self.check_count { format!("{} ", c) } else { "".to_string() }, + match self.check_count { + Some(1) => "check, ", + Some(_) => "checks, ", + None => "" + } + .if_supports_color(Stderr, |s| s.green()) + .if_supports_color(Stderr, |s| s.bold()), self.error_count, if self.error_count == 1 { "error" @@ -111,6 +120,7 @@ where eprintln!( "{}", Summary { + check_count: None, warning_count, error_count: errs.len(), } @@ -122,6 +132,7 @@ where eprintln!( "{}", Summary { + check_count: Some(41), error_count: 0, warning_count } From ace58e368c0a58ffe518e4fb82b5cdeef576f22e Mon Sep 17 00:00:00 2001 From: Pi Lanningham Date: Fri, 8 Mar 2024 20:40:50 -0500 Subject: [PATCH 2/3] Correctly report the checks count It might be slightly cleaner and more extensible to change to return a summary, potentially even making track the tests, coverage, etc. so it can be serialized to JSON. But, for now, this is much simpler, and the approach that KtorZ suggested. --- crates/aiken-project/src/lib.rs | 11 +++++++++++ crates/aiken-project/src/watch.rs | 4 ++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/crates/aiken-project/src/lib.rs b/crates/aiken-project/src/lib.rs index c4f6a1f0..f442fa39 100644 --- a/crates/aiken-project/src/lib.rs +++ b/crates/aiken-project/src/lib.rs @@ -89,6 +89,7 @@ where root: PathBuf, sources: Vec, warnings: Vec, + checks_count: Option, event_listener: T, functions: IndexMap, data_types: IndexMap, @@ -128,6 +129,7 @@ where root, sources: vec![], warnings: vec![], + checks_count: None, event_listener, functions, data_types, @@ -336,6 +338,15 @@ where let tests = self.run_tests(tests, seed); + self.checks_count = if tests.is_empty() { None } else { + Some(tests.iter().fold(0, |acc, test| { + acc + match test { + TestResult::PropertyTestResult(r) => r.iterations, + _ => 1, + } + })) + }; + let errors: Vec = tests .iter() .filter_map(|e| { diff --git a/crates/aiken-project/src/watch.rs b/crates/aiken-project/src/watch.rs index 2ae04ffc..f1a84d9b 100644 --- a/crates/aiken-project/src/watch.rs +++ b/crates/aiken-project/src/watch.rs @@ -120,7 +120,7 @@ where eprintln!( "{}", Summary { - check_count: None, + check_count: project.checks_count, warning_count, error_count: errs.len(), } @@ -132,7 +132,7 @@ where eprintln!( "{}", Summary { - check_count: Some(41), + check_count: project.checks_count, error_count: 0, warning_count } From ebd6c3a56eb598432169f543a63b4c423af62a73 Mon Sep 17 00:00:00 2001 From: Pi Lanningham Date: Fri, 8 Mar 2024 20:43:27 -0500 Subject: [PATCH 3/3] Cargo fmt --- crates/aiken-project/src/lib.rs | 4 +++- crates/aiken-project/src/watch.rs | 8 ++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/crates/aiken-project/src/lib.rs b/crates/aiken-project/src/lib.rs index f442fa39..9feef4c2 100644 --- a/crates/aiken-project/src/lib.rs +++ b/crates/aiken-project/src/lib.rs @@ -338,7 +338,9 @@ where let tests = self.run_tests(tests, seed); - self.checks_count = if tests.is_empty() { None } else { + self.checks_count = if tests.is_empty() { + None + } else { Some(tests.iter().fold(0, |acc, test| { acc + match test { TestResult::PropertyTestResult(r) => r.iterations, diff --git a/crates/aiken-project/src/watch.rs b/crates/aiken-project/src/watch.rs index f1a84d9b..fff15cb1 100644 --- a/crates/aiken-project/src/watch.rs +++ b/crates/aiken-project/src/watch.rs @@ -36,11 +36,15 @@ impl Display for Summary { "Summary" .if_supports_color(Stderr, |s| s.purple()) .if_supports_color(Stderr, |s| s.bold()), - if let Some(c) = self.check_count { format!("{} ", c) } else { "".to_string() }, + if let Some(c) = self.check_count { + format!("{} ", c) + } else { + "".to_string() + }, match self.check_count { Some(1) => "check, ", Some(_) => "checks, ", - None => "" + None => "", } .if_supports_color(Stderr, |s| s.green()) .if_supports_color(Stderr, |s| s.bold()),