diff --git a/src/bin/flat/riemann.rs b/src/bin/flat/riemann.rs index a06ae24..afc4b7b 100644 --- a/src/bin/flat/riemann.rs +++ b/src/bin/flat/riemann.rs @@ -169,11 +169,12 @@ pub mod samples { #[cfg(test)] mod tests { + use approx::assert_abs_diff_eq; + use super::*; + use glam::{Mat2, mat2, vec2}; use rand::{Rng, SeedableRng}; - use super::{Decomp2, Metric, samples}; - #[test] fn uniform_scaled_metric() { let mut rng = rand_pcg::Pcg64Mcg::seed_from_u64(17); @@ -192,4 +193,16 @@ mod tests { assert_eq!(metric.globalize(rng.gen(), vec2(0., 1.)), vec2(0., 1. / 4.)); assert_eq!(metric.globalize(rng.gen(), vec2(1., 1.)), vec2(1. / 3., 1. / 4.)); } + + #[test] + fn test_trace_iter() { + let metric = samples::ScaledMetric { scale: vec2(2., 4.) }; + assert_eq!(trace_iter(&metric, vec2(3., 5.), vec2(1., 0.), 1.).nth(7).unwrap(), vec2(7., 5.)); + assert_eq!(trace_iter(&metric, vec2(3., 5.), vec2(2., 0.), 1.).nth(7).unwrap(), vec2(7., 5.)); + assert_eq!(trace_iter(&metric, vec2(3., 5.), vec2(1., 0.), 0.5).nth(7).unwrap(), vec2(5., 5.)); + assert_eq!(trace_iter(&metric, vec2(3., 5.), vec2(0., 1.), 1.).nth(9).unwrap(), vec2(3., 7.5)); + assert_eq!(trace_iter(&metric, vec2(3., 5.), vec2(0., 4.), 1.).nth(9).unwrap(), vec2(3., 7.5)); + assert_eq!(trace_iter(&metric, vec2(3., 5.), vec2(0., 1.), 0.5).nth(9).unwrap(), vec2(3., 6.25)); + assert_abs_diff_eq!(trace_iter(&metric, vec2(3., 5.), vec2(0.5, 0.25), std::f32::consts::SQRT_2).nth(7).unwrap(), vec2(7., 7.), epsilon=1e-5); + } }