use nalgebra::Vector3;
use crate::crate_utils::define_source;
define_source! {
SphereMagnet
field_fn: sphere_B
args: {
polarization: Vector3<T> = Vector3::z(),
diameter: T = T::one();
validate diameter > T::zero();
error "Diameter cannot be negative.",
}
arg_display: "pol={}, d={}";
arg_fmt: [format_vector3, format_float]
docs: {
new: {
}
}
}
#[cfg(all(test, feature = "std"))]
crate::testing_util::generate_tests! {
SphereMagnet
filename: sphere
params: { polarization: vector![1.0, 2.0, 3.0], d: 0.1 }
rtols: {
static: 1e-10,
static_small: 1e-10,
translate: 1e-10,
rotate: 1e-10,
}
p95_rtols: {
static: 1e-10,
static_small: 1e-10,
translate: 1e-10,
rotate: 1e-10,
}
f32_rtols: {
static: 1e-6,
static_small: 1e-6,
translate: 1e-6,
rotate: 1e-6,
}
f32_p95_rtols: {
static: 1e-6,
static_small: 1e-6,
translate: 1e-6,
rotate: 1e-6,
}
}
#[cfg(test)]
mod tests {
use crate::magnets::SphereMagnet;
#[test]
#[should_panic]
fn test_init_validation() {
let _ = SphereMagnet::<f64>::new(
[0.0; 3],
nalgebra::UnitQuaternion::identity(),
[0.0, 0.0, 1.0],
-1.0_f64,
);
}
#[test]
#[should_panic]
fn test_set_diameter_validation() {
let mut magnet = SphereMagnet::<f64>::default();
magnet.set_diameter(-1.0_f64);
}
#[test]
#[should_panic]
fn test_with_diameter_validation() {
let _: SphereMagnet<f64> = SphereMagnet::<f64>::default().with_diameter(-1.0_f64);
}
}