Fixed transposition.

This commit is contained in:
Sébastien Crozet 2013-07-23 11:15:20 +02:00
parent cd2aeb4861
commit 4ea1dd92e6
2 changed files with 55 additions and 2 deletions

View File

@ -340,7 +340,7 @@ macro_rules! transpose_impl(
{
for iterate(1u, $dim) |i|
{
for iterate(0u, $dim - 1) |j|
for iterate(0u, i) |j|
{ self.swap((i, j), (j, i)) }
}
}

View File

@ -5,6 +5,10 @@ use std::rand::random;
#[test]
use std::cmp::ApproxEq;
#[test]
use traits::norm::Norm;
#[test]
use traits::scalar_op::ScalarMul;
#[test]
use traits::inv::Inv;
#[test]
use traits::rotation::{Rotation, Rotatable};
@ -13,7 +17,7 @@ use traits::indexable::Indexable;
#[test]
use traits::transpose::Transpose;
#[test]
use vec::Vec1;
use vec::{Vec1, Vec3};
#[test]
use mat::{Mat1, Mat2, Mat3, Mat4, Mat5, Mat6};
#[test]
@ -30,6 +34,41 @@ macro_rules! test_inv_mat_impl(
);
)
macro_rules! test_transpose_mat_impl(
($t: ty) => (
for 10000.times
{
let randmat : $t = random();
assert!(randmat.transposed().transposed().eq(&randmat));
}
);
)
#[test]
fn test_transpose_mat1()
{ test_transpose_mat_impl!(Mat1<f64>); }
#[test]
fn test_transpose_mat2()
{ test_transpose_mat_impl!(Mat2<f64>); }
#[test]
fn test_transpose_mat3()
{ test_transpose_mat_impl!(Mat3<f64>); }
#[test]
fn test_transpose_mat4()
{ test_transpose_mat_impl!(Mat4<f64>); }
#[test]
fn test_transpose_mat5()
{ test_transpose_mat_impl!(Mat5<f64>); }
#[test]
fn test_transpose_mat6()
{ test_transpose_mat_impl!(Mat6<f64>); }
#[test]
fn test_inv_mat1()
{ test_inv_mat_impl!(Mat1<f64>); }
@ -73,3 +112,17 @@ fn test_index_mat2()
assert!(mat.at((0, 1)) == mat.transposed().at((1, 0)));
}
#[test]
fn test_inv_rotation3()
{
for 10000.times
{
let randmat = One::one::<Rotmat<Mat3<f64>>>();
let dir: Vec3<f64> = random();
let ang = &dir.normalized().scalar_mul(&(abs::<f64>(random()) % Real::pi()));
let rot = randmat.rotated(ang);
assert!((rot.transposed() * rot).approx_eq(&One::one()));
}
}