use super::*;
#[test]
fn kolmogorov_drift_at_unit_velocity() {
let x0 = KolmogorovDriftX0::<f64> { _f: PhantomData };
let mut out = [0.0_f64; 2];
x0.evaluate(&[1.0, 2.0], &mut out).unwrap();
assert_eq!(out, [2.0, 0.0]);
}
#[test]
fn kolmogorov_drift_at_origin() {
let x0 = KolmogorovDriftX0::<f64> { _f: PhantomData };
let mut out = [0.0_f64; 2];
x0.evaluate(&[0.0, 0.0], &mut out).unwrap();
assert_eq!(out, [0.0, 0.0]);
}
#[test]
fn kolmogorov_diffusion_is_constant_unit() {
let x1 = KolmogorovDiffusionX1::<f64> { _f: PhantomData };
let mut out = [0.0_f64; 2];
x1.evaluate(&[3.0, 5.0], &mut out).unwrap();
assert_eq!(out, [0.0, 1.0]);
}
#[test]
fn kolmogorov_diffusion_f32_unit() {
let x1 = KolmogorovDiffusionX1::<f32> { _f: PhantomData };
let mut out = [0.0_f32; 2];
x1.evaluate(&[-1.0, 7.0], &mut out).unwrap();
assert_eq!(out, [0.0_f32, 1.0_f32]);
}
#[test]
fn heisenberg_x_at_origin() {
let hx = HeisenbergX::<f64> { _f: PhantomData };
let mut out = [0.0_f64; 3];
hx.evaluate(&[0.0, 0.0, 0.0], &mut out).unwrap();
assert_eq!(out, [1.0, 0.0, 0.0]);
}
#[test]
fn heisenberg_x_off_axis() {
let hx = HeisenbergX::<f64> { _f: PhantomData };
let mut out = [0.0_f64; 3];
hx.evaluate(&[1.0, 4.0, 0.0], &mut out).unwrap();
assert!((out[0] - 1.0).abs() < 1e-15);
assert!((out[1] - 0.0).abs() < 1e-15);
assert!((out[2] - (-2.0)).abs() < 1e-15);
}
#[test]
fn heisenberg_y_off_axis() {
let hy = HeisenbergY::<f64> { _f: PhantomData };
let mut out = [0.0_f64; 3];
hy.evaluate(&[3.0, 0.0, 0.0], &mut out).unwrap();
assert!((out[0] - 0.0).abs() < 1e-15);
assert!((out[1] - 1.0).abs() < 1e-15);
assert!((out[2] - 1.5).abs() < 1e-15);
}
#[test]
fn heisenberg_y_at_origin() {
let hy = HeisenbergY::<f64> { _f: PhantomData };
let mut out = [0.0_f64; 3];
hy.evaluate(&[0.0, 0.0, 0.0], &mut out).unwrap();
assert_eq!(out, [0.0, 1.0, 0.0]);
}
#[test]
fn kolmogorov_lie_bracket_x1_x0_numerical() {
let x0: KolmogorovDriftX0<f64> = KolmogorovPhaseSpace::x0_drift();
let x1: KolmogorovDiffusionX1<f64> = KolmogorovPhaseSpace::x1_diffusion();
let pt = [0.5_f64, 1.0_f64];
let mut out = [0.0_f64; 2];
x1.bracket_with(&x0, &pt, &mut out).unwrap();
assert!((out[0] - 1.0).abs() < 1e-4, "out[0]={}", out[0]);
assert!(out[1].abs() < 1e-4, "out[1]={}", out[1]);
}