Test that new code
This commit is contained in:
parent
3f7a1b7173
commit
11e48580b9
|
|
@ -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 don’t.
|
||||
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]
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user