Skip to content

Commit

Permalink
statistics: Fix doctests
Browse files Browse the repository at this point in the history
They were converted to use slices instead of arrays, which has several
advantages:

* Slices are more likely to be used than arrays in general.
* The type annotations for empty slices are much more minimal than for
  empty arrays.
  • Loading branch information
vks committed May 15, 2021
1 parent 8e51645 commit a79b4b6
Showing 1 changed file with 60 additions and 60 deletions.
120 changes: 60 additions & 60 deletions src/statistics/statistics.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,14 +28,14 @@ pub trait Statistics<T> {
/// use std::f64;
/// use statrs::statistics::Statistics;
///
/// let x: [f64; 0] = [];
/// assert!(x.min().is_nan());
/// let x = &[];
/// assert!(Statistics::min(x).is_nan());
///
/// let y = [0.0, f64::NAN, 3.0, -2.0];
/// assert!(y.min().is_nan());
/// let y = &[0.0, f64::NAN, 3.0, -2.0];
/// assert!(Statistics::min(y).is_nan());
///
/// let z = [0.0, 3.0, -2.0];
/// assert_eq!(z.min(), -2.0);
/// let z = &[0.0, 3.0, -2.0];
/// assert_eq!(Statistics::min(z), -2.0);
/// ```
fn min(self) -> T;

Expand All @@ -51,14 +51,14 @@ pub trait Statistics<T> {
/// use std::f64;
/// use statrs::statistics::Statistics;
///
/// let x: [f64; 0] = [];
/// assert!(x.max().is_nan());
/// let x = &[];
/// assert!(Statistics::max(x).is_nan());
///
/// let y = [0.0, f64::NAN, 3.0, -2.0];
/// assert!(y.max().is_nan());
/// let y = &[0.0, f64::NAN, 3.0, -2.0];
/// assert!(Statistics::max(y).is_nan());
///
/// let z = [0.0, 3.0, -2.0];
/// assert_eq!(z.max(), 3.0);
/// let z = &[0.0, 3.0, -2.0];
/// assert_eq!(Statistics::max(z), 3.0);
/// ```
fn max(self) -> T;

Expand All @@ -74,13 +74,13 @@ pub trait Statistics<T> {
/// use std::f64;
/// use statrs::statistics::Statistics;
///
/// let x = [];
/// let x = &[];
/// assert!(x.abs_min().is_nan());
///
/// let y = [0.0, f64::NAN, 3.0, -2.0];
/// let y = &[0.0, f64::NAN, 3.0, -2.0];
/// assert!(y.abs_min().is_nan());
///
/// let z = [0.0, 3.0, -2.0];
/// let z = &[0.0, 3.0, -2.0];
/// assert_eq!(z.abs_min(), 0.0);
/// ```
fn abs_min(self) -> T;
Expand All @@ -97,13 +97,13 @@ pub trait Statistics<T> {
/// use std::f64;
/// use statrs::statistics::Statistics;
///
/// let x = [];
/// let x = &[];
/// assert!(x.abs_max().is_nan());
///
/// let y = [0.0, f64::NAN, 3.0, -2.0];
/// let y = &[0.0, f64::NAN, 3.0, -2.0];
/// assert!(y.abs_max().is_nan());
///
/// let z = [0.0, 3.0, -2.0, -8.0];
/// let z = &[0.0, 3.0, -2.0, -8.0];
/// assert_eq!(z.abs_max(), 8.0);
/// ```
fn abs_max(self) -> T;
Expand All @@ -125,13 +125,13 @@ pub trait Statistics<T> {
/// use statrs::statistics::Statistics;
///
/// # fn main() {
/// let x = [];
/// let x = &[];
/// assert!(x.mean().is_nan());
///
/// let y = [0.0, f64::NAN, 3.0, -2.0];
/// let y = &[0.0, f64::NAN, 3.0, -2.0];
/// assert!(y.mean().is_nan());
///
/// let z = [0.0, 3.0, -2.0];
/// let z = &[0.0, 3.0, -2.0];
/// assert_almost_eq!(z.mean(), 1.0 / 3.0, 1e-15);
/// # }
/// ```
Expand All @@ -155,19 +155,19 @@ pub trait Statistics<T> {
/// use statrs::statistics::Statistics;
///
/// # fn main() {
/// let x = [];
/// let x = &[];
/// assert!(x.geometric_mean().is_nan());
///
/// let y = [0.0, f64::NAN, 3.0, -2.0];
/// let y = &[0.0, f64::NAN, 3.0, -2.0];
/// assert!(y.geometric_mean().is_nan());
///
/// let mut z = [0.0, 3.0, -2.0];
/// let mut z = &[0.0, 3.0, -2.0];
/// assert!(z.geometric_mean().is_nan());
///
/// z = [0.0, 3.0, 2.0];
/// z = &[0.0, 3.0, 2.0];
/// assert_eq!(z.geometric_mean(), 0.0);
///
/// z = [1.0, 2.0, 3.0];
/// z = &[1.0, 2.0, 3.0];
/// // test value from online calculator, could be more accurate
/// assert_almost_eq!(z.geometric_mean(), 1.81712, 1e-5);
/// # }
Expand All @@ -194,19 +194,19 @@ pub trait Statistics<T> {
/// use statrs::statistics::Statistics;
///
/// # fn main() {
/// let x = [];
/// let x = &[];
/// assert!(x.harmonic_mean().is_nan());
///
/// let y = [0.0, f64::NAN, 3.0, -2.0];
/// let y = &[0.0, f64::NAN, 3.0, -2.0];
/// assert!(y.harmonic_mean().is_nan());
///
/// let mut z = [0.0, 3.0, -2.0];
/// let mut z = &[0.0, 3.0, -2.0];
/// assert!(z.harmonic_mean().is_nan());
///
/// z = [0.0, 3.0, 2.0];
/// z = &[0.0, 3.0, 2.0];
/// assert_eq!(z.harmonic_mean(), 0.0);
///
/// z = [1.0, 2.0, 3.0];
/// z = &[1.0, 2.0, 3.0];
/// // test value from online calculator, could be more accurate
/// assert_almost_eq!(z.harmonic_mean(), 1.63636, 1e-5);
/// # }
Expand All @@ -229,13 +229,13 @@ pub trait Statistics<T> {
/// use std::f64;
/// use statrs::statistics::Statistics;
///
/// let x = [];
/// let x = &[];
/// assert!(x.variance().is_nan());
///
/// let y = [0.0, f64::NAN, 3.0, -2.0];
/// let y = &[0.0, f64::NAN, 3.0, -2.0];
/// assert!(y.variance().is_nan());
///
/// let z = [0.0, 3.0, -2.0];
/// let z = &[0.0, 3.0, -2.0];
/// assert_eq!(z.variance(), 19.0 / 3.0);
/// ```
fn variance(self) -> T;
Expand All @@ -257,13 +257,13 @@ pub trait Statistics<T> {
/// use std::f64;
/// use statrs::statistics::Statistics;
///
/// let x = [];
/// let x = &[];
/// assert!(x.std_dev().is_nan());
///
/// let y = [0.0, f64::NAN, 3.0, -2.0];
/// let y = &[0.0, f64::NAN, 3.0, -2.0];
/// assert!(y.std_dev().is_nan());
///
/// let z = [0.0, 3.0, -2.0];
/// let z = &[0.0, 3.0, -2.0];
/// assert_eq!(z.std_dev(), (19f64 / 3.0).sqrt());
/// ```
fn std_dev(self) -> T;
Expand All @@ -283,13 +283,13 @@ pub trait Statistics<T> {
/// use std::f64;
/// use statrs::statistics::Statistics;
///
/// let x = [];
/// let x = &[];
/// assert!(x.population_variance().is_nan());
///
/// let y = [0.0, f64::NAN, 3.0, -2.0];
/// let y = &[0.0, f64::NAN, 3.0, -2.0];
/// assert!(y.population_variance().is_nan());
///
/// let z = [0.0, 3.0, -2.0];
/// let z = &[0.0, 3.0, -2.0];
/// assert_eq!(z.population_variance(), 38.0 / 9.0);
/// ```
fn population_variance(self) -> T;
Expand All @@ -309,13 +309,13 @@ pub trait Statistics<T> {
/// use std::f64;
/// use statrs::statistics::Statistics;
///
/// let x = [];
/// let x = &[];
/// assert!(x.population_std_dev().is_nan());
///
/// let y = [0.0, f64::NAN, 3.0, -2.0];
/// let y = &[0.0, f64::NAN, 3.0, -2.0];
/// assert!(y.population_std_dev().is_nan());
///
/// let z = [0.0, 3.0, -2.0];
/// let z = &[0.0, 3.0, -2.0];
/// assert_eq!(z.population_std_dev(), (38f64 / 9.0).sqrt());
/// ```
fn population_std_dev(self) -> T;
Expand Down Expand Up @@ -345,16 +345,16 @@ pub trait Statistics<T> {
/// use statrs::statistics::Statistics;
///
/// # fn main() {
/// let x = [];
/// let x = &[];
/// assert!(x.covariance(&[]).is_nan());
///
/// let y1 = [0.0, f64::NAN, 3.0, -2.0];
/// let y2 = [-5.0, 4.0, 10.0, f64::NAN];
/// assert!(y1.covariance(&y2).is_nan());
/// let y1 = &[0.0, f64::NAN, 3.0, -2.0];
/// let y2 = &[-5.0, 4.0, 10.0, f64::NAN];
/// assert!(y1.covariance(y2).is_nan());
///
/// let z1 = [0.0, 3.0, -2.0];
/// let z2 = [-5.0, 4.0, 10.0];
/// assert_almost_eq!(z1.covariance(&z2), -5.5, 1e-14);
/// let z1 = &[0.0, 3.0, -2.0];
/// let z2 = &[-5.0, 4.0, 10.0];
/// assert_almost_eq!(z1.covariance(z2), -5.5, 1e-14);
/// # }
/// ```
fn covariance(self, other: Self) -> T;
Expand Down Expand Up @@ -382,16 +382,16 @@ pub trait Statistics<T> {
/// use statrs::statistics::Statistics;
///
/// # fn main() {
/// let x = [];
/// let x = &[];
/// assert!(x.population_covariance(&[]).is_nan());
///
/// let y1 = [0.0, f64::NAN, 3.0, -2.0];
/// let y2 = [-5.0, 4.0, 10.0, f64::NAN];
/// assert!(y1.population_covariance(&y2).is_nan());
/// let y1 = &[0.0, f64::NAN, 3.0, -2.0];
/// let y2 = &[-5.0, 4.0, 10.0, f64::NAN];
/// assert!(y1.population_covariance(y2).is_nan());
///
/// let z1 = [0.0, 3.0, -2.0];
/// let z2 = [-5.0, 4.0, 10.0];
/// assert_almost_eq!(z1.population_covariance(&z2), -11.0 / 3.0, 1e-14);
/// let z1 = &[0.0, 3.0, -2.0];
/// let z2 = &[-5.0, 4.0, 10.0];
/// assert_almost_eq!(z1.population_covariance(z2), -11.0 / 3.0, 1e-14);
/// # }
/// ```
fn population_covariance(self, other: Self) -> T;
Expand All @@ -412,13 +412,13 @@ pub trait Statistics<T> {
/// use statrs::statistics::Statistics;
///
/// # fn main() {
/// let x = [];
/// let x = &[];
/// assert!(x.quadratic_mean().is_nan());
///
/// let y = [0.0, f64::NAN, 3.0, -2.0];
/// let y = &[0.0, f64::NAN, 3.0, -2.0];
/// assert!(y.quadratic_mean().is_nan());
///
/// let z = [0.0, 3.0, -2.0];
/// let z = &[0.0, 3.0, -2.0];
/// // test value from online calculator, could be more accurate
/// assert_almost_eq!(z.quadratic_mean(), 2.08167, 1e-5);
/// # }
Expand Down

0 comments on commit a79b4b6

Please sign in to comment.