use imgal::distribution::{inverse_normal_cdf, normalized_gaussian};
use imgal::integration::midpoint;
use imgal::prelude::*;
const TOLERANCE: f64 = 1e-10;
const THREADS: Option<usize> = Some(0);
fn approx_equal(a: f64, b: f64) -> bool {
(a - b).abs() < TOLERANCE
}
#[test]
fn distribution_inverse_normal_cdf_expected_results() -> Result<(), ImgalError> {
assert_eq!(inverse_normal_cdf(0.1)?, -1.2815515641401563);
assert_eq!(inverse_normal_cdf(0.975)?, 1.959963986120195);
assert_eq!(inverse_normal_cdf(0.5)?, 0.0);
assert_eq!(inverse_normal_cdf(0.0)?, f64::NEG_INFINITY);
assert_eq!(inverse_normal_cdf(1.0)?, f64::INFINITY);
Ok(())
}
#[test]
fn distribution_normalized_gaussian_expected_results() {
let gauss_arr_a_par = normalized_gaussian(0.5, 256, 0.4, 2.0, THREADS);
let gauss_arr_b_par = normalized_gaussian(2.0, 256, 4.0, 2.0, THREADS);
let gauss_arr_a_seq = normalized_gaussian(0.5, 256, 0.4, 2.0, None);
let gauss_arr_b_seq = normalized_gaussian(2.0, 256, 4.0, 2.0, None);
assert!(approx_equal(midpoint(&gauss_arr_a_par, None, None), 1.0));
assert!(approx_equal(midpoint(&gauss_arr_b_par, None, None), 1.0));
assert!(approx_equal(midpoint(&gauss_arr_a_seq, None, None), 1.0));
assert!(approx_equal(midpoint(&gauss_arr_b_seq, None, None), 1.0));
assert!(approx_equal(gauss_arr_a_par[100], 0.0021260086));
assert!(approx_equal(gauss_arr_b_par[100], 0.0044655072));
assert!(approx_equal(gauss_arr_a_seq[100], 0.0021260086));
assert!(approx_equal(gauss_arr_b_seq[100], 0.0044655072));
}