use std::f64::consts::PI;
use crate::bathymetry::ConstantDepth;
use crate::current::ConstantCurrent;
use crate::datatype::{Point, RayState, WaveNumber};
use crate::ray::ManyRays;
use crate::tests::helper::*;
#[test]
fn constant_depth_deep() {
let bathymetry_data = ConstantDepth::new(2000.0);
let current_data = ConstantCurrent::new(0.0, 0.0);
let init_rays: Vec<RayState<f64>> = (0..12)
.map(|i| {
RayState::new(
Point::new(50_000.0, 25_000.0),
WaveNumber::new(
0.05 * (PI * i as f64 / 6.0).cos(),
0.05 * (PI * i as f64 / 6.0).sin(),
),
)
})
.collect();
let rays = ManyRays::new(&bathymetry_data, ¤t_data, &init_rays);
let results = rays.trace_many(0.0, 5000.0, 1.0);
for (i, ray) in results.iter().flatten().enumerate() {
let (_, data) = &ray.get();
let target_ray = init_rays.get(i).unwrap().to_owned();
let kx = target_ray.wave_number().kx();
let ky = target_ray.wave_number().ky();
if (kx - 0.0).abs() < f64::EPSILON {
assert!(same(data, XINDEX));
} else if kx.is_sign_positive() {
assert!(increase(data, XINDEX));
} else {
assert!(decrease(data, XINDEX));
}
if (ky - 0.0).abs() < f64::EPSILON {
assert!(same(data, YINDEX));
} else if ky.is_sign_positive() {
assert!(increase(data, YINDEX));
} else {
assert!(decrease(data, YINDEX));
}
assert!(same(data, KX_INDEX));
assert!(same(data, KY_INDEX));
}
}
#[test]
fn constant_depth_shallow() {
let bathymetry_data = ConstantDepth::new(10.0);
let current_data = ConstantCurrent::new(0.0, 0.0);
let init_rays: Vec<RayState<f64>> = (0..12)
.map(|i| {
RayState::new(
Point::new(50_000.0, 25_000.0),
WaveNumber::new(
0.05 * (PI * i as f64 / 6.0).cos(),
0.05 * (PI * i as f64 / 6.0).sin(),
),
)
})
.collect();
let rays = ManyRays::new(&bathymetry_data, ¤t_data, &init_rays);
let results = rays.trace_many(0.0, 5000.0, 1.0);
for (i, ray) in results.iter().flatten().enumerate() {
let (_, data) = &ray.get();
let target_ray = init_rays.get(i).unwrap().to_owned();
let kx = target_ray.wave_number().kx();
let ky = target_ray.wave_number().ky();
if (kx - 0.0).abs() < f64::EPSILON {
assert!(same(data, XINDEX));
} else if kx.is_sign_positive() {
assert!(increase(data, XINDEX));
} else {
assert!(decrease(data, XINDEX));
}
if (ky - 0.0).abs() < f64::EPSILON {
assert!(same(data, YINDEX));
} else if ky.is_sign_positive() {
assert!(increase(data, YINDEX));
} else {
assert!(decrease(data, YINDEX));
}
assert!(same(data, KX_INDEX));
assert!(same(data, KY_INDEX));
}
}