mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-08-11 12:15:36 +08:00
committed by
Mathew Sutcliffe
parent
1f2a88e502
commit
ab17dabd5b
@@ -10,72 +10,72 @@ using namespace BlackMisc::Math;
|
||||
namespace BlackMiscTest
|
||||
{
|
||||
|
||||
/*
|
||||
* Basic tests vector
|
||||
*/
|
||||
void CTestVectorMatrix::vectorBasics()
|
||||
{
|
||||
CVector3D v1(1);
|
||||
v1 *= 2.0;
|
||||
CVector3D v2(2);
|
||||
QVERIFY2(v1 == v2, "Vectors should be equal");
|
||||
QVERIFY2(v1 * 2 == 2 * v2, "Commutative vector multiplication failed");
|
||||
CVector3D v3(1, 1, 1);
|
||||
CVector3D v4(2, 2, 2);
|
||||
CVector3D v5 = v3.crossProduct(v4);
|
||||
QVERIFY2(v5.isZeroEpsilon(), "Cross product shall be {0, 0, 0}");
|
||||
CVector3D v6(1, 2, 3);
|
||||
CVector3D v7(3, 4, 5);
|
||||
QVERIFY2(v6.crossProduct(v7) == CVector3D(-2, 4, -2), "Cross product is wrong");
|
||||
QVERIFY2(v6.dotProduct(v7) == 26, "Dot product is wrong, 26 expected");
|
||||
QVERIFY2(v6.length() == sqrt(1.0 + 4.0 + 9.0), "Wrong vector magnitude");
|
||||
}
|
||||
/*
|
||||
* Basic tests vector
|
||||
*/
|
||||
void CTestVectorMatrix::vectorBasics()
|
||||
{
|
||||
CVector3D v1(1);
|
||||
v1 *= 2.0;
|
||||
CVector3D v2(2);
|
||||
QVERIFY2(v1 == v2, "Vectors should be equal");
|
||||
QVERIFY2(v1 * 2 == 2 * v2, "Commutative vector multiplication failed");
|
||||
CVector3D v3(1, 1, 1);
|
||||
CVector3D v4(2, 2, 2);
|
||||
CVector3D v5 = v3.crossProduct(v4);
|
||||
QVERIFY2(v5.isZeroEpsilon(), "Cross product shall be {0, 0, 0}");
|
||||
CVector3D v6(1, 2, 3);
|
||||
CVector3D v7(3, 4, 5);
|
||||
QVERIFY2(v6.crossProduct(v7) == CVector3D(-2, 4, -2), "Cross product is wrong");
|
||||
QVERIFY2(CMath::epsilonEqual(v6.dotProduct(v7), 26), "Dot product is wrong, 26 expected");
|
||||
QVERIFY2(CMath::epsilonEqual(v6.length(), sqrt(1.0 + 4.0 + 9.0)), "Wrong vector magnitude");
|
||||
}
|
||||
|
||||
/*
|
||||
* Matrix tests
|
||||
* http://www.bluebit.gr/matrix-calculator/
|
||||
*/
|
||||
void CTestVectorMatrix::matrixBasics()
|
||||
{
|
||||
CMatrix3x3 m1;
|
||||
CMatrix3x3 m2 = m1 - m1;
|
||||
QVERIFY2(m1.isIdentity(), "Default matrix should be identity");
|
||||
QVERIFY2(m2.isZero(), "Matrix should be zero");
|
||||
/*
|
||||
* Matrix tests
|
||||
* http://www.bluebit.gr/matrix-calculator/
|
||||
*/
|
||||
void CTestVectorMatrix::matrixBasics()
|
||||
{
|
||||
CMatrix3x3 m1;
|
||||
CMatrix3x3 m2 = m1 - m1;
|
||||
QVERIFY2(m1.isIdentity(), "Default matrix should be identity");
|
||||
QVERIFY2(m2.isZero(), "Matrix should be zero");
|
||||
|
||||
bool invertible;
|
||||
CMatrix3x3 mr;
|
||||
CMatrix3x3 msame(3.0);
|
||||
mr = msame.inverse(invertible);
|
||||
QVERIFY2(!invertible, "Matrix with sigular values cannot be inverted");
|
||||
bool invertible;
|
||||
CMatrix3x3 mr;
|
||||
CMatrix3x3 msame(3.0);
|
||||
mr = msame.inverse(invertible);
|
||||
QVERIFY2(!invertible, "Matrix with sigular values cannot be inverted");
|
||||
|
||||
mr.setToIdentity();
|
||||
QVERIFY2(mr.determinant() == 1, "Identity matrix should have determinant 1");
|
||||
mr = mr.inverse(invertible);
|
||||
QVERIFY2(invertible && mr.isIdentity() == 1, "Identity matrix should have inverse identity");
|
||||
mr.setToIdentity();
|
||||
QVERIFY2(mr.determinant() == 1, "Identity matrix should have determinant 1");
|
||||
mr = mr.inverse(invertible);
|
||||
QVERIFY2(invertible && mr.isIdentity() == 1, "Identity matrix should have inverse identity");
|
||||
|
||||
m1.setToIdentity();
|
||||
m2 = m1 + m1;
|
||||
m1 = m1 * 2.0;
|
||||
QVERIFY2(m1 == m2, "2* Identity should be Identity + Identity");
|
||||
QVERIFY2(m1 * 2 == 2 * m1, "Commutative matrix multiplication failed");
|
||||
m1.setToIdentity();
|
||||
m2 = m1 + m1;
|
||||
m1 = m1 * 2.0;
|
||||
QVERIFY2(m1 == m2, "2* Identity should be Identity + Identity");
|
||||
QVERIFY2(m1 * 2 == 2 * m1, "Commutative matrix multiplication failed");
|
||||
|
||||
m1 /= 2.0;
|
||||
m2 -= m1;
|
||||
QVERIFY2(m1 == m2, "Identity should be Identity");
|
||||
m1 /= 2.0;
|
||||
m2 -= m1;
|
||||
QVERIFY2(m1 == m2, "Identity should be Identity");
|
||||
|
||||
m1 = CMatrix3x3(1, 5, 3, 2, 4, 7, 4, 6, 2);
|
||||
double det = m1.determinant();
|
||||
QVERIFY2(det == 74, qPrintable(QString("Determinant should be 74, but is: %1").arg(det)));
|
||||
QVERIFY2(m1(0, 0) == 1 && m1(1, 0) == 2 && m1(0, 2) == 3, "Index error");
|
||||
CMatrix3x3 mi = m1.inverse(invertible);
|
||||
CMatrix3x3 mid = m1 * mi;
|
||||
QVERIFY2(mid.isIdentityEpsilon(), qPrintable(QString("Multiply with inverse should be identity: %1").arg(mid.toQString())));
|
||||
m1 = CMatrix3x3(1, 5, 3, 2, 4, 7, 4, 6, 2);
|
||||
double det = m1.determinant();
|
||||
QVERIFY2(det == 74, qPrintable(QString("Determinant should be 74, but is: %1").arg(det)));
|
||||
QVERIFY2(m1(0, 0) == 1 && m1(1, 0) == 2 && m1(0, 2) == 3, "Index error");
|
||||
CMatrix3x3 mi = m1.inverse(invertible);
|
||||
CMatrix3x3 mid = m1 * mi;
|
||||
QVERIFY2(mid.isIdentityEpsilon(), qPrintable(QString("Multiply with inverse should be identity: %1").arg(mid.toQString())));
|
||||
|
||||
m1.setToIdentity();
|
||||
CMatrix3x1 mc1 = m1.getColumn(0);
|
||||
CMatrix1x3 mr2 = m1.getRow(1);
|
||||
QVERIFY2(mc1 == CMatrix3x1(1, 0, 0), "Wrong column 0");
|
||||
QVERIFY2(mr2 == CMatrix1x3(0, 1, 0), "Wrong row 1");
|
||||
}
|
||||
m1.setToIdentity();
|
||||
CMatrix3x1 mc1 = m1.getColumn(0);
|
||||
CMatrix1x3 mr2 = m1.getRow(1);
|
||||
QVERIFY2(mc1 == CMatrix3x1(1, 0, 0), "Wrong column 0");
|
||||
QVERIFY2(mr2 == CMatrix1x3(0, 1, 0), "Wrong row 1");
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
Reference in New Issue
Block a user