use numeric::*; use mat::*; use quat::*; use vec::*; // TODO #[test] fn test_quat() { let a = Quat { s: 1.0, v: Vec3 { x: 2.0, y: 3.0, z: 4.0 } }; assert!(a == quat::from_sv(1.0, vec3::new(2.0, 3.0, 4.0))); assert!(a == quat::new(1.0, 2.0, 3.0, 4.0)); assert!(quat::zero() == quat::new(0.0, 0.0, 0.0, 0.0)); assert!(quat::identity() == quat::new(1.0, 0.0, 0.0, 0.0)); assert!(a.s == 1.0); assert!(a.v.x == 2.0); assert!(a.v.y == 3.0); assert!(a.v.z == 4.0); assert!(a[0] == 1.0); assert!(a[1] == 2.0); assert!(a[2] == 3.0); assert!(a[3] == 4.0); // TODO } #[test] fn test_quat_2() { let v = vec3::new(1f32, 0f32, 0f32); let q = quat::from_angle_axis(radians(-45f32), &vec3::new(0f32, 0f32, -1f32)); // http://www.wolframalpha.com/input/?i={1,0}+rotate+-45+degrees assert!(q.mul_v(&v).fuzzy_eq(&vec3::new(1f32/sqrt(2f32), 1f32/sqrt(2f32), 0f32))); assert!(q.mul_v(&v).length() == v.length()); assert!(q.to_mat3().fuzzy_eq(&mat3::new( 1f32/sqrt(2f32), 1f32/sqrt(2f32), 0f32, -1f32/sqrt(2f32), 1f32/sqrt(2f32), 0f32, 0f32, 0f32, 1f32))); } #[test] fn test_quat_fuzzy_eq() { assert!(!quat::new(0.000001, 0.000001, 0.000001, 0.000001).fuzzy_eq(&quat::new(0.0, 0.0, 0.0, 0.0))); assert!(quat::new(0.0000001, 0.0000001, 0.0000001, 0.0000001).fuzzy_eq(&quat::new(0.0, 0.0, 0.0, 0.0))); }