big_o 0.1.4

Infers asymptotic computational complexity
Documentation
use assert_approx_eq::assert_approx_eq;

const EPSILON: f64 = 1e-9;

#[test]
#[ignore]
fn infer_exponential_stress_1() {
    let (name, notation) = (big_o::Name::Exponential, "O(c^n)");
    let (gain, base): (f64, f64) = (530.7409528224476, 0.000013222324524164719);
    let f = Box::new(|x: f64| gain * base.powf(x));

    let data: Vec<(f64, f64)> = (1..100).map(|i| i as f64).map(|x| (x, f(x))).collect();
    let (complexity, _all) = big_o::infer_complexity(data).unwrap();

    println!("{:?}", complexity.params);

    assert_eq!(complexity.name, name);
    assert_eq!(complexity.notation, notation);
    assert_approx_eq!(complexity.params.gain.unwrap(), gain, EPSILON);
    assert_approx_eq!(complexity.params.base.unwrap(), base, EPSILON);
}

#[test]
#[ignore]
fn infer_exponential_stress_2() {
    let (name, notation) = (big_o::Name::Exponential, "O(c^n)");
    let (gain, base): (f64, f64) = (17.7379380563778, 0.0005420564306968245);
    let f = Box::new(|x: f64| gain * base.powf(x));

    let data: Vec<(f64, f64)> = (1..100).map(|i| i as f64).map(|x| (x, f(x))).collect();
    let (complexity, _all) = big_o::infer_complexity(data).unwrap();

    println!("{:?}", complexity.params);

    assert_eq!(complexity.name, name);
    assert_eq!(complexity.notation, notation);
    assert_approx_eq!(complexity.params.gain.unwrap(), gain, EPSILON);
    assert_approx_eq!(complexity.params.base.unwrap(), base, EPSILON);
}

#[test]
#[ignore]
fn infer_logarithmic_stress_1() {
    let (name, notation) = (big_o::Name::Logarithmic, "O(log n)");
    let (gain, offset): (f64, f64) = (0.00016209916053888662, 753.1476064361);
    let f = Box::new(|x: f64| gain * x.ln() + offset);

    let data: Vec<(f64, f64)> = (1..100).map(|i| i as f64).map(|x| (x, f(x))).collect();
    let (complexity, _all) = big_o::infer_complexity(data).unwrap();

    println!("{:?}", complexity.params);

    assert_eq!(complexity.name, name);
    assert_eq!(complexity.notation, notation);
    assert_approx_eq!(complexity.params.gain.unwrap(), gain, EPSILON);
    assert_approx_eq!(complexity.params.offset.unwrap(), offset, EPSILON);
}