From 3543a68a05b03c72a631c20cc14024aaeba2f55f Mon Sep 17 00:00:00 2001 From: prateek-shanbhag Date: Thu, 11 Jun 2026 23:14:46 +0530 Subject: [PATCH] feat : implemented interquartile_range and also added respective test cases --- src/primary/interquartile_range.rs | 7 ++++++ src/primary/mod.rs | 5 +++-- tests/interquartile_range.rs | 34 ++++++++++++++++++++++++++++++ 3 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 src/primary/interquartile_range.rs create mode 100644 tests/interquartile_range.rs diff --git a/src/primary/interquartile_range.rs b/src/primary/interquartile_range.rs new file mode 100644 index 0000000..0e8b570 --- /dev/null +++ b/src/primary/interquartile_range.rs @@ -0,0 +1,7 @@ +use crate::primary::quartiles; + +pub fn interquartile_range(values: &[f64]) -> Option { + let quartiles = quartiles(values)?; + + Some(quartiles.q3 - quartiles.q1) +} \ No newline at end of file diff --git a/src/primary/mod.rs b/src/primary/mod.rs index a03e58a..9ee4243 100644 --- a/src/primary/mod.rs +++ b/src/primary/mod.rs @@ -4,6 +4,7 @@ pub mod mode; pub mod quartiles; pub mod variance; pub mod std_deviation; +pub mod interquartile_range; pub mod range; @@ -13,5 +14,5 @@ pub use mode::mode; pub use quartiles::{Quartiles, quartiles}; pub use variance::variance; pub use std_deviation::std_deviation; - -pub use range::range; +pub use interquartile_range::interquartile_range; +pub use range::range; \ No newline at end of file diff --git a/tests/interquartile_range.rs b/tests/interquartile_range.rs new file mode 100644 index 0000000..b07f638 --- /dev/null +++ b/tests/interquartile_range.rs @@ -0,0 +1,34 @@ +use rustats::primary::interquartile_range; + +#[test] +fn empty_returns_none() { + assert_eq!(interquartile_range(&[]), None); +} + +#[test] +fn single_value_returns_zero() { + assert_eq!( + interquartile_range(&[10.0]), + Some(0.0) + ); +} + +#[test] +fn odd_length_dataset() { + let values = [1.0, 2.0, 3.0, 4.0, 5.0]; + + assert_eq!( + interquartile_range(&values), + Some(3.0) + ); +} + +#[test] +fn even_length_dataset() { + let values = [1.0, 2.0, 3.0, 4.0]; + + assert_eq!( + interquartile_range(&values), + Some(2.0) + ); +} \ No newline at end of file