Test that new code

This commit is contained in:
numzero 2024-06-10 17:28:33 +03:00
parent 3f7a1b7173
commit 11e48580b9

View File

@ -558,6 +558,9 @@ impl Rect {
mod fns {
use crate::FloatExt2;
#[cfg(test)]
use approx::abs_diff_eq;
pub struct RectX {
pub min: f32,
pub max: f32,
@ -594,6 +597,32 @@ mod fns {
pub fn du(&self, x: f32) -> f32 { extend_const(x, |x| 1.0 / self.root(x), self.external, 1.0) }
pub fn d2u(&self, x: f32) -> f32 { extend_const(x, |x| -2.0 * x.signum() * self.a() * self.root(x).powi(-3), self.external, 0.0) }
}
#[test]
fn test_rect_y() {
let testee = RectY { internal: 100.0, external: 150.0 };
let ε = 1.0e-4f32;
let δ = 1.0 / 8.0; // Mathematically, you want this to be small. Computationally, you dont.
let margin = 1.0 / 16.0;
let mul = 1.0 + margin;
for x in itertools_num::linspace(-mul * testee.external, mul * testee.external, 100) {
let u = testee.u(x);
assert!(abs_diff_eq!(x, testee.x(u), epsilon = ε), "At x={}:\nu(x): {}\nx(u(x)): {}\n", x, u, testee.x(u));
let du = (testee.u(x + δ) - testee.u(x - δ)) / (2. * δ);
assert!(abs_diff_eq!(du, testee.du(x), epsilon = ε), "At x={}, u':\nexpected: {}\nactual: {}\n", x, du, testee.du(x));
let d2u = (testee.du(x + δ) - testee.du(x - δ)) / (2. * δ);
assert!(abs_diff_eq!(d2u, testee.d2u(x), epsilon = ε), "At x={}, u'':\nexpected: {}\nactual: {}\n", x, d2u, testee.d2u(x));
}
for u in itertools_num::linspace(-mul * testee.internal, mul * testee.internal, 100) {
let x = testee.x(u);
assert!(abs_diff_eq!(x, testee.x(u), epsilon = ε), "At u={}:\nx(u): {}\nu(x(u)): {}\n", u, x, testee.u(x));
let dx = (testee.x(u + δ) - testee.x(u - δ)) / (2. * δ);
assert!(abs_diff_eq!(dx, testee.dx(u), epsilon = ε), "At u={}, x':\nexpected: {}\nactual: {}\n", u, dx, testee.dx(u));
}
}
}
#[test]