2013-03-29 07:48:01 +00:00
|
|
|
use std::cmp::FuzzyEq;
|
2013-01-27 22:22:15 +00:00
|
|
|
use numeric::*;
|
2012-12-16 05:05:04 +00:00
|
|
|
|
2012-11-15 02:23:39 +00:00
|
|
|
use mat::*;
|
|
|
|
use quat::*;
|
|
|
|
use vec::*;
|
|
|
|
|
|
|
|
// TODO
|
|
|
|
|
|
|
|
#[test]
|
2012-12-18 03:48:02 +00:00
|
|
|
fn test_quat() {
|
2013-01-29 09:26:48 +00:00
|
|
|
let a = Quat { s: 1.0, v: Vec3 { x: 2.0, y: 3.0, z: 4.0 } };
|
2012-11-15 02:23:39 +00:00
|
|
|
|
2013-03-28 10:54:25 +00:00
|
|
|
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));
|
2012-11-15 02:23:39 +00:00
|
|
|
|
2013-03-28 10:54:25 +00:00
|
|
|
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));
|
2012-11-15 02:23:39 +00:00
|
|
|
|
2013-03-28 10:54:25 +00:00
|
|
|
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);
|
2012-11-15 02:23:39 +00:00
|
|
|
// TODO
|
2012-12-14 06:05:18 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn test_quat_2() {
|
2013-01-29 09:26:48 +00:00
|
|
|
let v = vec3::new(1f32, 0f32, 0f32);
|
2012-12-14 06:05:18 +00:00
|
|
|
|
2013-01-29 09:26:48 +00:00
|
|
|
let q = quat::from_angle_axis(radians(-45f32), &vec3::new(0f32, 0f32, -1f32));
|
2012-12-14 06:05:18 +00:00
|
|
|
|
|
|
|
// http://www.wolframalpha.com/input/?i={1,0}+rotate+-45+degrees
|
2013-03-28 10:54:25 +00:00
|
|
|
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)));
|
2012-12-18 03:48:02 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn test_quat_fuzzy_eq() {
|
2013-03-28 10:54:25 +00:00
|
|
|
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)));
|
2012-12-14 06:31:07 +00:00
|
|
|
}
|