nalgebra/src/tests/vec.rs

139 lines
2.8 KiB
Rust
Raw Normal View History

2013-05-19 01:04:03 +08:00
#[test]
2013-06-09 20:09:22 +08:00
use std::iterator::IteratorUtil;
#[test]
use std::num::{Zero, One};
2013-05-19 01:04:03 +08:00
#[test]
use std::rand::{random};
2013-05-19 01:04:03 +08:00
#[test]
use std::cmp::ApproxEq;
2013-05-19 01:04:03 +08:00
#[test]
use dim3::vec3::Vec3;
#[test]
use dim2::vec2::Vec2;
#[test]
use dim1::vec1::Vec1;
#[test]
use ndim::nvec::NVec;
#[test]
use traits::dim::d7;
#[test]
use traits::basis::Basis;
2013-05-19 05:56:03 +08:00
#[test]
use traits::cross::Cross;
#[test]
use traits::dot::Dot;
#[test]
use traits::norm::Norm;
2013-05-22 07:15:03 +08:00
macro_rules! test_commut_dot_impl(
($t:ty) => (
for 10000.times
2013-05-22 07:15:03 +08:00
{
let v1 : $t = random();
let v2 : $t = random();
assert!(v1.dot(&v2).approx_eq(&v2.dot(&v1)));
}
);
)
macro_rules! test_basis_impl(
($t:ty) => (
for 10000.times
2013-05-22 07:15:03 +08:00
{
let basis = Basis::canonical_basis::<$t>();
// check vectors form an ortogonal basis
2013-06-09 20:09:22 +08:00
assert!(
do basis.iter().zip(basis.iter()).all
|(e1, e2)| { e1 == e2 || e1.dot(e2).approx_eq(&Zero::zero()) }
);
2013-05-22 07:15:03 +08:00
// check vectors form an orthonormal basis
2013-06-09 20:12:18 +08:00
assert!(basis.all(|e| e.norm().approx_eq(&One::one())));
2013-05-22 07:15:03 +08:00
}
);
)
macro_rules! test_subspace_basis_impl(
($t:ty) => (
for 10000.times
2013-05-22 07:15:03 +08:00
{
let v : Vec3<f64> = random();
2013-06-09 20:09:22 +08:00
let v1 = v.normalized();
let subbasis = v1.orthogonal_subspace_basis();
2013-05-22 07:15:03 +08:00
// check vectors are orthogonal to v1
2013-06-09 20:12:18 +08:00
assert!(subbasis.all(|e| v1.dot(e).approx_eq(&Zero::zero())));
2013-05-22 07:15:03 +08:00
// check vectors form an ortogonal basis
2013-06-09 20:09:22 +08:00
assert!(
do subbasis.iter().zip(subbasis.iter()).all
|(e1, e2)| { e1 == e2 || e1.dot(e2).approx_eq(&Zero::zero()) }
);
2013-05-22 07:15:03 +08:00
// check vectors form an orthonormal basis
2013-06-09 20:12:18 +08:00
assert!(subbasis.all(|e| e.norm().approx_eq(&One::one())));
2013-05-22 07:15:03 +08:00
}
);
)
2013-05-19 01:04:03 +08:00
#[test]
fn test_cross_vec3()
{
for 10000.times
2013-05-19 01:04:03 +08:00
{
let v1 : Vec3<f64> = random();
let v2 : Vec3<f64> = random();
let v3 : Vec3<f64> = v1.cross(&v2);
assert!(v3.dot(&v2).approx_eq(&Zero::zero()));
assert!(v3.dot(&v1).approx_eq(&Zero::zero()));
2013-05-19 01:04:03 +08:00
}
}
#[test]
2013-05-22 07:15:03 +08:00
fn test_commut_dot_nvec()
{ test_commut_dot_impl!(NVec<d7, f64>); }
2013-05-19 01:04:03 +08:00
#[test]
fn test_commut_dot_vec3()
2013-05-22 07:15:03 +08:00
{ test_commut_dot_impl!(Vec3<f64>); }
2013-05-19 01:04:03 +08:00
#[test]
fn test_commut_dot_vec2()
2013-05-22 07:15:03 +08:00
{ test_commut_dot_impl!(Vec2<f64>); }
2013-05-19 01:04:03 +08:00
#[test]
fn test_commut_dot_vec1()
2013-05-22 07:15:03 +08:00
{ test_commut_dot_impl!(Vec1<f64>); }
2013-05-19 01:04:03 +08:00
#[test]
fn test_basis_vec1()
2013-05-22 07:15:03 +08:00
{ test_basis_impl!(Vec1<f64>); }
2013-05-19 01:04:03 +08:00
#[test]
fn test_basis_vec2()
2013-05-22 07:15:03 +08:00
{ test_basis_impl!(Vec2<f64>); }
2013-05-19 01:04:03 +08:00
#[test]
fn test_basis_vec3()
2013-05-22 07:15:03 +08:00
{ test_basis_impl!(Vec3<f64>); }
2013-05-19 01:04:03 +08:00
#[test]
fn test_basis_nvec()
2013-05-22 07:15:03 +08:00
{ test_basis_impl!(NVec<d7, f64>); }
2013-05-19 01:04:03 +08:00
#[test]
fn test_subspace_basis_vec1()
2013-05-22 07:15:03 +08:00
{ test_subspace_basis_impl!(Vec1<f64>); }
2013-05-19 01:04:03 +08:00
#[test]
fn test_subspace_basis_vec2()
2013-05-22 07:15:03 +08:00
{ test_subspace_basis_impl!(Vec2<f64>); }
2013-05-19 01:04:03 +08:00
#[test]
fn test_subspace_basis_vec3()
2013-05-22 07:15:03 +08:00
{ test_subspace_basis_impl!(Vec3<f64>); }
2013-05-19 01:04:03 +08:00
2013-05-22 07:15:03 +08:00
#[test]
fn test_subspace_basis_nvec()
{ test_subspace_basis_impl!(NVec<d7, f64>); }