diff --git a/tests/LinearAlgebra/Matrix4x4Tests.hpp b/tests/LinearAlgebra/Matrix4x4Tests.hpp index 0a29901..96008dd 100644 --- a/tests/LinearAlgebra/Matrix4x4Tests.hpp +++ b/tests/LinearAlgebra/Matrix4x4Tests.hpp @@ -11,8 +11,7 @@ namespace Matrix4x4Tests { using namespace J3ML::LinearAlgebra; using namespace J3ML::Math; - Matrix4x4Unit += Test("Add_Unary", [] - { + Matrix4x4Unit += Test("Add_Unary", [] { Matrix4x4 m(1,2,3,4, 5,6,7,8, 9,10,11,12, 13,14,15,16); Matrix4x4 m2 = +m; jtest::check(m.Equals(m2)); @@ -111,13 +110,52 @@ namespace Matrix4x4Tests { }); - Matrix4x4Unit += Test("CtorFromQuatTrans", [] {}); - Matrix4x4Unit += Test("Translate", [] {}); - Matrix4x4Unit += Test("Scale", [] {}); - Matrix4x4Unit += Test("InverseOrthogonalUniformScale", [] {}); - Matrix4x4Unit += Test("InverseOrthonormal", [] {}); - Matrix4x4Unit += Test("DeterminantCorrectness", [] { }); - Matrix4x4Unit += Test("MulMat3x3", [] {}); + Matrix4x4Unit += Test("CtorFromQuatTrans", [] { + RNG rng; + constexpr float SCALE = 1e2f; + Vector3 t = Vector3::RandomBox(rng, Vector3(-SCALE, -SCALE, -SCALE), Vector3(SCALE, SCALE, SCALE)); + Quaternion q = Quaternion::RandomRotation(rng); + + Matrix4x4 m (q, t); + + Vector3 v = Vector3(-1, 5, 20.f); + Vector3 v1 = q * v + t; + Vector3 v2 = m.Transform(v); + jtest::check(v1.Equals(v2)); + + }); + Matrix4x4Unit += Test("Translate", [] { + RNG rng; + constexpr float SCALE = 1e2f; + Vector3 t = Vector3::RandomBox(rng, Vector3(-SCALE, -SCALE, -SCALE), Vector3(SCALE, SCALE, SCALE)); + Vector3 t2 = Vector3::RandomBox(rng, Vector3(-SCALE, -SCALE, -SCALE), Vector3(SCALE, SCALE, SCALE)); + + Matrix4x4 m = Matrix4x4::Translate(t); + Matrix4x4 m2 = Matrix4x4::Translate({t.x, t.y, t.z}); + + Vector3 v = t + t2; + Vector3 v1 = m.Transform(t2); + Vector3 v2 = m2.Transform(t2); + + jtest::check(v1.Equals(v2)); + jtest::check(v.Equals(v1)); + }); + Matrix4x4Unit += Test("Scale", [] { + Matrix4x4 m = Matrix4x4::Scale({2, 4, 6}); + Matrix4x4 m2(2,0,0,0, 0,4,0,0, 0,0,6,0, 0,0,0,1); + jtest::check(m.Equals(m2)); + }); + Matrix4x4Unit += Test("MulMat3x3", [] { + RNG rng; + Matrix3x3 m = Matrix3x3::RandomGeneral(rng, -10.f, 10.f); + Matrix4x4 m_ = m; + Matrix4x4 m2 = Matrix4x4::RandomGeneral(rng, -10.f, 10.f); + + Matrix4x4 test = m2 * m; + Matrix4x4 correct = m2 * m_; + + jtest::check(test.Equals(correct)); + }); } inline void Run() {