Another project
0

Configure Feed

Select the types of activity you want to include in your feed.

at main 2.0 kB View raw
1#[cfg(test)] 2use bone_types::Vec3; 3use bone_types::{Point3, Tolerance, UnitVec3}; 4use truck_modeling::{Point3 as TruckPoint3, Vector3 as TruckVector3}; 5 6pub(crate) fn point_from_truck(p: TruckPoint3) -> Point3 { 7 Point3::from_mm(p.x, p.y, p.z) 8} 9 10pub(crate) fn try_unit_from_truck(v: TruckVector3, tolerance: Tolerance) -> Option<UnitVec3> { 11 UnitVec3::try_from_components(v.x, v.y, v.z, tolerance).ok() 12} 13 14#[cfg(test)] 15pub(crate) fn point_to_truck(p: Point3) -> TruckPoint3 { 16 let (x, y, z) = p.coords_mm(); 17 TruckPoint3::new(x, y, z) 18} 19 20#[cfg(test)] 21pub(crate) fn vec_from_truck(v: TruckVector3) -> Vec3 { 22 Vec3::from_mm(v.x, v.y, v.z) 23} 24 25#[cfg(test)] 26pub(crate) fn vec_to_truck(v: Vec3) -> TruckVector3 { 27 let (x, y, z) = v.coords_mm(); 28 TruckVector3::new(x, y, z) 29} 30 31#[cfg(test)] 32mod tests { 33 use super::*; 34 use proptest::prelude::*; 35 36 fn finite_coord() -> impl Strategy<Value = f64> { 37 prop::num::f64::POSITIVE | prop::num::f64::NEGATIVE | prop::num::f64::ZERO 38 } 39 40 proptest! { 41 #[test] 42 fn point_roundtrips_to_ulp( 43 x in finite_coord(), 44 y in finite_coord(), 45 z in finite_coord(), 46 ) { 47 let bone = Point3::from_mm(x, y, z); 48 let back = point_from_truck(point_to_truck(bone)); 49 let (bx, by, bz) = back.coords_mm(); 50 prop_assert!(bx.to_bits() == x.to_bits()); 51 prop_assert!(by.to_bits() == y.to_bits()); 52 prop_assert!(bz.to_bits() == z.to_bits()); 53 } 54 55 #[test] 56 fn vec_roundtrips_to_ulp( 57 x in finite_coord(), 58 y in finite_coord(), 59 z in finite_coord(), 60 ) { 61 let bone = Vec3::from_mm(x, y, z); 62 let back = vec_from_truck(vec_to_truck(bone)); 63 let (bx, by, bz) = back.coords_mm(); 64 prop_assert!(bx.to_bits() == x.to_bits()); 65 prop_assert!(by.to_bits() == y.to_bits()); 66 prop_assert!(bz.to_bits() == z.to_bits()); 67 } 68 } 69}