sequential-integration 1.0.2

Lightweight library for sequential integration
Documentation
use assert_approx_eq::assert_approx_eq;
use sequential_integration::calculate_double_integral_simpson;

#[test]
fn calculate_double_integral_simpson_circel() {
    let equation = |_x, _y| 1.;
    let first_integral_begin = -1.;
    let first_integral_end = 1.;
    let first_integral_step = 0.005;

    let second_integral_begin = |_x| -0.;
    let second_integral_end = |x: f64| (1. - x.powf(2.)).sqrt();
    let second_integral_step = 0.005;

    let result = calculate_double_integral_simpson(
        equation,
        first_integral_begin,
        first_integral_end,
        first_integral_step,
        second_integral_begin,
        second_integral_end,
        second_integral_step,
    )
    .unwrap();

    println!(
        "result: {}, expected: {}, diff: {}",
        result,
        std::f64::consts::FRAC_PI_2,
        result - std::f64::consts::FRAC_PI_2
    );

    assert_approx_eq!(result, std::f64::consts::FRAC_PI_2, 1e-2);
}

#[test]
fn calculate_double_integral_simpson_not_const_equation() {
    let equation = |x: f64, y: f64| x.powf(2.) / y.powf(2.);
    let first_integral_begin = 1.;
    let first_integral_end = 2.;
    let first_integral_step = 0.001;

    let second_integral_begin = |x: f64| 1. / x;
    let second_integral_end = |x: f64| x;
    let second_integral_step = 0.001;

    let result = calculate_double_integral_simpson(
        equation,
        first_integral_begin,
        first_integral_end,
        first_integral_step,
        second_integral_begin,
        second_integral_end,
        second_integral_step,
    )
    .unwrap();

    println!(
        "result: {}, expected: {}, diff: {}",
        result,
        2.25,
        result - 2.25
    );

    assert_approx_eq!(result, 2.25, 1e-2);
}