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); }