use crate::num::basic::floats::PrimitiveFloat;
use crate::num::float::NiceFloat;
use crate::test_util::stats::common_values_map::common_values_map;
use crate::test_util::stats::median;
use crate::test_util::stats::moments::{CheckedToF64, MomentStats, moment_stats};
use itertools::Itertools;
pub fn random_primitive_floats_helper_helper<
T: CheckedToF64 + PrimitiveFloat,
I: Clone + Iterator<Item = T>,
>(
xs: I,
expected_values: &[T],
expected_common_values: &[(T, usize)],
expected_median: (T, Option<T>),
expected_moment_stats: MomentStats,
) {
let actual_values = xs.clone().take(20).map(NiceFloat).collect_vec();
let actual_common_values = common_values_map(1000000, 10, xs.clone().map(NiceFloat));
let actual_median = median(xs.clone().map(NiceFloat).take(1000000));
let actual_moment_stats = moment_stats(xs.take(1000000));
let (lo, hi) = expected_median;
assert_eq!(
(
actual_values,
actual_common_values.as_slice(),
actual_median,
actual_moment_stats
),
(
expected_values.iter().copied().map(NiceFloat).collect_vec(),
expected_common_values
.iter()
.map(|&(x, freq)| (NiceFloat(x), freq))
.collect_vec()
.as_slice(),
(NiceFloat(lo), hi.map(NiceFloat)),
expected_moment_stats
)
);
}
pub fn special_random_primitive_floats_helper_helper<
T: CheckedToF64 + PrimitiveFloat,
I: Clone + Iterator<Item = T>,
>(
xs: I,
expected_values: &[T],
expected_common_values: &[(T, usize)],
expected_median: (T, Option<T>),
expected_moment_stats: MomentStats,
) {
let actual_values = xs.clone().take(50).map(NiceFloat).collect_vec();
let actual_common_values = common_values_map(1000000, 20, xs.clone().map(NiceFloat));
let actual_median = median(xs.clone().map(NiceFloat).take(1000000));
let actual_moment_stats = moment_stats(xs.take(1000000));
let (lo, hi) = expected_median;
assert_eq!(
(
actual_values,
actual_common_values.as_slice(),
actual_median,
actual_moment_stats
),
(
expected_values.iter().copied().map(NiceFloat).collect_vec(),
expected_common_values
.iter()
.map(|&(x, freq)| (NiceFloat(x), freq))
.collect_vec()
.as_slice(),
(NiceFloat(lo), hi.map(NiceFloat)),
expected_moment_stats
)
);
}
pub mod geometric;