From d5d92d5296634b50eecaf294a9ff2b465da01920 Mon Sep 17 00:00:00 2001 From: Luni-4 Date: Mon, 11 Jan 2021 10:38:58 +0100 Subject: [PATCH 1/2] Add a way to compare NAN values in tests --- src/macros.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/macros.rs b/src/macros.rs index a8b1702a8..20c3194fa 100644 --- a/src/macros.rs +++ b/src/macros.rs @@ -297,7 +297,12 @@ macro_rules! check_metrics { $( $( - assert!((func_space.metrics.$metric.$func_float() - $true_float_value).abs() < f64::EPSILON); + let value: f64 = $true_float_value; + if !value.is_nan() { + assert!((func_space.metrics.$metric.$func_float() - value).abs() < f64::EPSILON); + } else { + assert!(func_space.metrics.$metric.$func_float().is_nan()); + } )* )? } From 946bec0b93291a5a247d9e1c1dd3407720815127 Mon Sep 17 00:00:00 2001 From: Luni-4 Date: Mon, 11 Jan 2021 10:41:08 +0100 Subject: [PATCH 2/2] Set cognitive average value to NAN when no functions --- src/metrics/cognitive.rs | 50 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/src/metrics/cognitive.rs b/src/metrics/cognitive.rs index adee9a135..13ff2f181 100644 --- a/src/metrics/cognitive.rs +++ b/src/metrics/cognitive.rs @@ -72,6 +72,8 @@ impl Stats { /// /// This value is computed dividing the `Cognitive Complexity` value /// for the total number of functions/closures in a space. + /// + /// If there are no functions in a code, its value is `NAN`. pub fn cognitive_average(&self) -> f64 { self.cognitive() / self.total_space_functions as f64 } @@ -411,6 +413,54 @@ mod tests { use super::*; + #[test] + fn python_no_cognitive() { + check_metrics!( + "a = 42", + "foo.py", + PythonParser, + cognitive, + [(cognitive, 0, usize)], + [(cognitive_average, f64::NAN)] + ); + } + + #[test] + fn rust_no_cognitive() { + check_metrics!( + "let a = 42;", + "foo.rs", + RustParser, + cognitive, + [(cognitive, 0, usize)], + [(cognitive_average, f64::NAN)] + ); + } + + #[test] + fn c_no_cognitive() { + check_metrics!( + "int a = 42;", + "foo.c", + CppParser, + cognitive, + [(cognitive, 0, usize)], + [(cognitive_average, f64::NAN)] + ); + } + + #[test] + fn mozjs_no_cognitive() { + check_metrics!( + "var a = 42;", + "foo.js", + MozjsParser, + cognitive, + [(cognitive, 0, usize)], + [(cognitive_average, f64::NAN)] + ); + } + #[test] fn python_simple_function() { check_metrics!(