1003 lines
42 KiB
C++
1003 lines
42 KiB
C++
/*
|
|
AUTOMATICALLY GENERATED FILE - DO NOT EDIT!
|
|
Please change MatrixNxN.py and re-run it
|
|
*/
|
|
/* Generated with ./MatrixNxN.py n = 3, TYPE = float */
|
|
|
|
#include "ZUnitTest.hpp"
|
|
#include <float.h>
|
|
#include <math.h>
|
|
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
#include <SST/SST_Mat33.h>
|
|
#include <SST/SST_Vec3.h>
|
|
|
|
|
|
|
|
|
|
static const char* testSST_Math_Mat33fAdd();
|
|
static const char* testSST_Math_Mat33fAddLocal();
|
|
static const char* testSST_Math_Mat33fSubtract();
|
|
static const char* testSST_Math_Mat33fSubtractLocal();
|
|
static const char* testSST_Math_Mat33fMultiplyElementwise();
|
|
static const char* testSST_Math_Mat33fMultiplyElementwiseLocal();
|
|
static const char* testSST_Math_Mat33fMultiplyScalar();
|
|
static const char* testSST_Math_Mat33fMultiplyScalarLocal();
|
|
static const char* testSST_Math_Mat33fMultiplyMatrix();
|
|
static const char* testSST_Math_Mat33fMultiplyMatrixLocal();
|
|
static const char* testSST_Math_Mat33fMultiplyVector();
|
|
static const char* testSST_Math_Mat33fMultiplyVectorLocal();
|
|
static const char* testSST_Math_Mat33fTranspose();
|
|
static const char* testSST_Math_Mat33fTransposeLocal();
|
|
static const char* testSST_Math_Mat33fDeterminant();
|
|
static const char* testSST_Math_Mat33fCheckOrthonormal();
|
|
static const char* testSST_Math_Mat33fInvert();
|
|
static const char* testSST_Math_Mat33fInvertLocal();
|
|
static const char* testSST_Math_Mat33fCreateLU();
|
|
static const char* testSST_Math_Mat33fCreateLULocal();
|
|
static const char* testSST_Math_Mat33fApplyLUMat();
|
|
static const char* testSST_Math_Mat33fApplyLUMatLocal();
|
|
static const char* testSST_Math_Mat33fApplyLUVec();
|
|
static const char* testSST_Math_Mat33fApplyLUVecLocal();
|
|
// List of unit tests
|
|
ZUnitTest SST_Math_Mat33fUnitTests[] =
|
|
{
|
|
{ "testSST_Math_Mat33fAdd " , testSST_Math_Mat33fAdd },
|
|
{ "testSST_Math_Mat33fAddLocal " , testSST_Math_Mat33fAddLocal },
|
|
{ "testSST_Math_Mat33fSubtract " , testSST_Math_Mat33fSubtract },
|
|
{ "testSST_Math_Mat33fSubtractLocal " , testSST_Math_Mat33fSubtractLocal },
|
|
{ "testSST_Math_Mat33fMultiplyElementwise " , testSST_Math_Mat33fMultiplyElementwise },
|
|
{ "testSST_Math_Mat33fMultiplyElementwiseLocal " , testSST_Math_Mat33fMultiplyElementwiseLocal },
|
|
{ "testSST_Math_Mat33fMultiplyScalar " , testSST_Math_Mat33fMultiplyScalar },
|
|
{ "testSST_Math_Mat33fMultiplyScalarLocal " , testSST_Math_Mat33fMultiplyScalarLocal },
|
|
{ "testSST_Math_Mat33fMultiplyMatrix " , testSST_Math_Mat33fMultiplyMatrix },
|
|
{ "testSST_Math_Mat33fMultiplyMatrixLocal " , testSST_Math_Mat33fMultiplyMatrixLocal },
|
|
{ "testSST_Math_Mat33fMultiplyVector " , testSST_Math_Mat33fMultiplyVector },
|
|
{ "testSST_Math_Mat33fMultiplyVectorLocal " , testSST_Math_Mat33fMultiplyVectorLocal },
|
|
{ "testSST_Math_Mat33fDeterminant " , testSST_Math_Mat33fDeterminant },
|
|
{ "testSST_Math_Mat33fCheckOrthonormal " , testSST_Math_Mat33fCheckOrthonormal },
|
|
{ "testSST_Math_Mat33fInvert " , testSST_Math_Mat33fInvert },
|
|
{ "testSST_Math_Mat33fInvertLocal " , testSST_Math_Mat33fInvertLocal },
|
|
{ "testSST_Math_Mat33fCreateLU " , testSST_Math_Mat33fCreateLU },
|
|
{ "testSST_Math_Mat33fCreateLULocal " , testSST_Math_Mat33fCreateLULocal },
|
|
{ "testSST_Math_Mat33fApplyLUMat " , testSST_Math_Mat33fApplyLUMat },
|
|
{ "testSST_Math_Mat33fApplyLUMatLocal " , testSST_Math_Mat33fApplyLUMatLocal },
|
|
{ "testSST_Math_Mat33fApplyLUVec " , testSST_Math_Mat33fApplyLUVec },
|
|
{ "testSST_Math_Mat33fApplyLUVecLocal " , testSST_Math_Mat33fApplyLUVecLocal },
|
|
{ "testSST_Math_Mat33fTranspose " , testSST_Math_Mat33fTranspose },
|
|
{ "testSST_Math_Mat33fTransposeLocal " , testSST_Math_Mat33fTransposeLocal }
|
|
};
|
|
DECLARE_ZTESTBLOCK(SST_Math_Mat33f)
|
|
|
|
/******************************************************************************/
|
|
|
|
static const char* testSST_Math_Mat33fAdd(){
|
|
SST_Mat33f X; /* 3 x 3 matrix */
|
|
SST_Mat33f Y; /* 3 x 3 matrix */
|
|
SST_Mat33f A; /* 3 x 3 matrix */
|
|
/* Resetting test vectors / mats */
|
|
X.v[0] = 4.000000f;
|
|
X.v[1] = -13.000000f;
|
|
X.v[2] = 19.000000f;
|
|
X.v[3] = 16.000000f;
|
|
X.v[4] = -3.000000f;
|
|
X.v[5] = 8.000000f;
|
|
X.v[6] = 9.000000f;
|
|
X.v[7] = -4.000000f;
|
|
X.v[8] = 2.000000f;
|
|
Y.v[0] = -14.000000f;
|
|
Y.v[1] = -17.000000f;
|
|
Y.v[2] = 1.000000f;
|
|
Y.v[3] = 7.000000f;
|
|
Y.v[4] = 19.000000f;
|
|
Y.v[5] = -16.000000f;
|
|
Y.v[6] = -16.000000f;
|
|
Y.v[7] = -5.000000f;
|
|
Y.v[8] = -7.000000f;
|
|
/*
|
|
[[ 4. 16. 9.]
|
|
[-13. -3. -4.]
|
|
[ 19. 8. 2.]]
|
|
[[-14. 7. -16.]
|
|
[-17. 19. -5.]
|
|
[ 1. -16. -7.]]
|
|
[[-10. 23. -7.]
|
|
[-30. 16. -9.]
|
|
[ 20. -8. -5.]]
|
|
*/
|
|
SST_Math_Mat33fAdd(&X,&Y,&A);
|
|
TASSERT(fabsf((A.v[0])-(-10.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a11 failed!");
|
|
TASSERT(fabsf((A.v[3])-(23.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a12 failed!");
|
|
TASSERT(fabsf((A.v[6])-(-7.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a13 failed!");
|
|
TASSERT(fabsf((A.v[1])-(-30.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a21 failed!");
|
|
TASSERT(fabsf((A.v[4])-(16.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a22 failed!");
|
|
TASSERT(fabsf((A.v[7])-(-9.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a23 failed!");
|
|
TASSERT(fabsf((A.v[2])-(20.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a31 failed!");
|
|
TASSERT(fabsf((A.v[5])-(-8.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a32 failed!");
|
|
TASSERT(fabsf((A.v[8])-(-5.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a33 failed!");
|
|
return ZTEST_SUCCESS;
|
|
}
|
|
|
|
/******************************************************************************/
|
|
|
|
static const char* testSST_Math_Mat33fAddLocal(){
|
|
SST_Mat33f X; /* 3 x 3 matrix */
|
|
SST_Mat33f Y; /* 3 x 3 matrix */
|
|
/* Resetting test vectors / mats */
|
|
X.v[0] = -8.000000f;
|
|
X.v[1] = 1.000000f;
|
|
X.v[2] = -3.000000f;
|
|
X.v[3] = 19.000000f;
|
|
X.v[4] = -13.000000f;
|
|
X.v[5] = 17.000000f;
|
|
X.v[6] = 18.000000f;
|
|
X.v[7] = 5.000000f;
|
|
X.v[8] = -1.000000f;
|
|
Y.v[0] = 4.000000f;
|
|
Y.v[1] = -18.000000f;
|
|
Y.v[2] = 16.000000f;
|
|
Y.v[3] = -11.000000f;
|
|
Y.v[4] = 8.000000f;
|
|
Y.v[5] = 10.000000f;
|
|
Y.v[6] = 17.000000f;
|
|
Y.v[7] = -18.000000f;
|
|
Y.v[8] = 3.000000f;
|
|
/*
|
|
[[ -8. 19. 18.]
|
|
[ 1. -13. 5.]
|
|
[ -3. 17. -1.]]
|
|
[[ 4. -11. 17.]
|
|
[-18. 8. -18.]
|
|
[ 16. 10. 3.]]
|
|
[[ -4. 8. 35.]
|
|
[-17. -5. -13.]
|
|
[ 13. 27. 2.]]
|
|
*/
|
|
SST_Math_Mat33fAddLocal(&X,&Y); /* for accuracy */
|
|
TASSERT(fabsf((X.v[0])-(-4.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a11 failed!");
|
|
TASSERT(fabsf((X.v[3])-(8.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a12 failed!");
|
|
TASSERT(fabsf((X.v[6])-(35.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a13 failed!");
|
|
TASSERT(fabsf((X.v[1])-(-17.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a21 failed!");
|
|
TASSERT(fabsf((X.v[4])-(-5.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a22 failed!");
|
|
TASSERT(fabsf((X.v[7])-(-13.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a23 failed!");
|
|
TASSERT(fabsf((X.v[2])-(13.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a31 failed!");
|
|
TASSERT(fabsf((X.v[5])-(27.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a32 failed!");
|
|
TASSERT(fabsf((X.v[8])-(2.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a33 failed!");
|
|
return ZTEST_SUCCESS;
|
|
}
|
|
|
|
/******************************************************************************/
|
|
|
|
static const char* testSST_Math_Mat33fSubtract(){
|
|
SST_Mat33f X; /* 3 x 3 matrix */
|
|
SST_Mat33f Y; /* 3 x 3 matrix */
|
|
SST_Mat33f A; /* 3 x 3 matrix */
|
|
/* Resetting test vectors / mats */
|
|
X.v[0] = 14.000000f;
|
|
X.v[1] = 7.000000f;
|
|
X.v[2] = -17.000000f;
|
|
X.v[3] = 15.000000f;
|
|
X.v[4] = -1.000000f;
|
|
X.v[5] = 11.000000f;
|
|
X.v[6] = -2.000000f;
|
|
X.v[7] = -10.000000f;
|
|
X.v[8] = 14.000000f;
|
|
Y.v[0] = 10.000000f;
|
|
Y.v[1] = 18.000000f;
|
|
Y.v[2] = 8.000000f;
|
|
Y.v[3] = -17.000000f;
|
|
Y.v[4] = -14.000000f;
|
|
Y.v[5] = -8.000000f;
|
|
Y.v[6] = 12.000000f;
|
|
Y.v[7] = -10.000000f;
|
|
Y.v[8] = 1.000000f;
|
|
/*
|
|
[[ 14. 15. -2.]
|
|
[ 7. -1. -10.]
|
|
[-17. 11. 14.]]
|
|
[[ 10. -17. 12.]
|
|
[ 18. -14. -10.]
|
|
[ 8. -8. 1.]]
|
|
[[ 4. 32. -14.]
|
|
[-11. 13. 0.]
|
|
[-25. 19. 13.]]
|
|
*/
|
|
SST_Math_Mat33fSubtract(&X,&Y,&A);
|
|
TASSERT(fabsf((A.v[0])-(4.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a11 failed!");
|
|
TASSERT(fabsf((A.v[3])-(32.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a12 failed!");
|
|
TASSERT(fabsf((A.v[6])-(-14.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a13 failed!");
|
|
TASSERT(fabsf((A.v[1])-(-11.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a21 failed!");
|
|
TASSERT(fabsf((A.v[4])-(13.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a22 failed!");
|
|
TASSERT(fabsf((A.v[7])-(0.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a23 failed!");
|
|
TASSERT(fabsf((A.v[2])-(-25.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a31 failed!");
|
|
TASSERT(fabsf((A.v[5])-(19.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a32 failed!");
|
|
TASSERT(fabsf((A.v[8])-(13.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a33 failed!");
|
|
return ZTEST_SUCCESS;
|
|
}
|
|
|
|
/******************************************************************************/
|
|
|
|
static const char* testSST_Math_Mat33fSubtractLocal(){
|
|
SST_Mat33f X; /* 3 x 3 matrix */
|
|
SST_Mat33f Y; /* 3 x 3 matrix */
|
|
/* Resetting test vectors / mats */
|
|
X.v[0] = -16.000000f;
|
|
X.v[1] = 15.000000f;
|
|
X.v[2] = -15.000000f;
|
|
X.v[3] = -7.000000f;
|
|
X.v[4] = 19.000000f;
|
|
X.v[5] = 3.000000f;
|
|
X.v[6] = -12.000000f;
|
|
X.v[7] = 4.000000f;
|
|
X.v[8] = -11.000000f;
|
|
Y.v[0] = 2.000000f;
|
|
Y.v[1] = -20.000000f;
|
|
Y.v[2] = 1.000000f;
|
|
Y.v[3] = 10.000000f;
|
|
Y.v[4] = -10.000000f;
|
|
Y.v[5] = 17.000000f;
|
|
Y.v[6] = 0.000000f;
|
|
Y.v[7] = -20.000000f;
|
|
Y.v[8] = -18.000000f;
|
|
/*
|
|
[[-16. -7. -12.]
|
|
[ 15. 19. 4.]
|
|
[-15. 3. -11.]]
|
|
[[ 2. 10. 0.]
|
|
[-20. -10. -20.]
|
|
[ 1. 17. -18.]]
|
|
[[-18. -17. -12.]
|
|
[ 35. 29. 24.]
|
|
[-16. -14. 7.]]
|
|
*/
|
|
SST_Math_Mat33fSubtractLocal(&X,&Y); /* for accuracy */
|
|
TASSERT(fabsf((X.v[0])-(-18.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a11 failed!");
|
|
TASSERT(fabsf((X.v[3])-(-17.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a12 failed!");
|
|
TASSERT(fabsf((X.v[6])-(-12.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a13 failed!");
|
|
TASSERT(fabsf((X.v[1])-(35.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a21 failed!");
|
|
TASSERT(fabsf((X.v[4])-(29.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a22 failed!");
|
|
TASSERT(fabsf((X.v[7])-(24.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a23 failed!");
|
|
TASSERT(fabsf((X.v[2])-(-16.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a31 failed!");
|
|
TASSERT(fabsf((X.v[5])-(-14.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a32 failed!");
|
|
TASSERT(fabsf((X.v[8])-(7.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a33 failed!");
|
|
return ZTEST_SUCCESS;
|
|
}
|
|
|
|
/******************************************************************************/
|
|
|
|
static const char* testSST_Math_Mat33fMultiplyElementwise(){
|
|
SST_Mat33f X; /* 3 x 3 matrix */
|
|
SST_Mat33f Y; /* 3 x 3 matrix */
|
|
SST_Mat33f A; /* 3 x 3 matrix */
|
|
/* Resetting test vectors / mats */
|
|
X.v[0] = -13.000000f;
|
|
X.v[1] = -17.000000f;
|
|
X.v[2] = -10.000000f;
|
|
X.v[3] = 13.000000f;
|
|
X.v[4] = 4.000000f;
|
|
X.v[5] = 1.000000f;
|
|
X.v[6] = -1.000000f;
|
|
X.v[7] = 4.000000f;
|
|
X.v[8] = -8.000000f;
|
|
Y.v[0] = 11.000000f;
|
|
Y.v[1] = 9.000000f;
|
|
Y.v[2] = 4.000000f;
|
|
Y.v[3] = 3.000000f;
|
|
Y.v[4] = -6.000000f;
|
|
Y.v[5] = -11.000000f;
|
|
Y.v[6] = -6.000000f;
|
|
Y.v[7] = 14.000000f;
|
|
Y.v[8] = 17.000000f;
|
|
/*
|
|
[[-13. 13. -1.]
|
|
[-17. 4. 4.]
|
|
[-10. 1. -8.]]
|
|
[[ 11. 3. -6.]
|
|
[ 9. -6. 14.]
|
|
[ 4. -11. 17.]]
|
|
[[-143. 39. 6.]
|
|
[-153. -24. 56.]
|
|
[ -40. -11. -136.]]
|
|
*/
|
|
SST_Math_Mat33fMultiplyElementwise(&X, &Y, &A);
|
|
TASSERT(fabsf((A.v[0])-(-143.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a11 failed!");
|
|
TASSERT(fabsf((A.v[3])-(39.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a12 failed!");
|
|
TASSERT(fabsf((A.v[6])-(6.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a13 failed!");
|
|
TASSERT(fabsf((A.v[1])-(-153.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a21 failed!");
|
|
TASSERT(fabsf((A.v[4])-(-24.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a22 failed!");
|
|
TASSERT(fabsf((A.v[7])-(56.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a23 failed!");
|
|
TASSERT(fabsf((A.v[2])-(-40.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a31 failed!");
|
|
TASSERT(fabsf((A.v[5])-(-11.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a32 failed!");
|
|
TASSERT(fabsf((A.v[8])-(-136.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a33 failed!");
|
|
return ZTEST_SUCCESS;
|
|
}
|
|
|
|
/******************************************************************************/
|
|
|
|
static const char* testSST_Math_Mat33fMultiplyElementwiseLocal(){
|
|
SST_Mat33f X; /* 3 x 3 matrix */
|
|
SST_Mat33f Y; /* 3 x 3 matrix */
|
|
/* Resetting test vectors / mats */
|
|
X.v[0] = 3.000000f;
|
|
X.v[1] = -19.000000f;
|
|
X.v[2] = 9.000000f;
|
|
X.v[3] = 4.000000f;
|
|
X.v[4] = -8.000000f;
|
|
X.v[5] = -7.000000f;
|
|
X.v[6] = -16.000000f;
|
|
X.v[7] = 8.000000f;
|
|
X.v[8] = 0.000000f;
|
|
Y.v[0] = 1.000000f;
|
|
Y.v[1] = 0.000000f;
|
|
Y.v[2] = -9.000000f;
|
|
Y.v[3] = -6.000000f;
|
|
Y.v[4] = -7.000000f;
|
|
Y.v[5] = -2.000000f;
|
|
Y.v[6] = 17.000000f;
|
|
Y.v[7] = 19.000000f;
|
|
Y.v[8] = -16.000000f;
|
|
/*
|
|
[[ 3. 4. -16.]
|
|
[-19. -8. 8.]
|
|
[ 9. -7. 0.]]
|
|
[[ 1. -6. 17.]
|
|
[ 0. -7. 19.]
|
|
[ -9. -2. -16.]]
|
|
[[ 3. -24. -272.]
|
|
[ -0. 56. 152.]
|
|
[ -81. 14. -0.]]
|
|
*/
|
|
SST_Math_Mat33fMultiplyElementwiseLocal(&X,&Y);
|
|
TASSERT(fabsf((X.v[0])-(3.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a11 failed!");
|
|
TASSERT(fabsf((X.v[3])-(-24.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a12 failed!");
|
|
TASSERT(fabsf((X.v[6])-(-272.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a13 failed!");
|
|
TASSERT(fabsf((X.v[1])-(-0.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a21 failed!");
|
|
TASSERT(fabsf((X.v[4])-(56.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a22 failed!");
|
|
TASSERT(fabsf((X.v[7])-(152.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a23 failed!");
|
|
TASSERT(fabsf((X.v[2])-(-81.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a31 failed!");
|
|
TASSERT(fabsf((X.v[5])-(14.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a32 failed!");
|
|
TASSERT(fabsf((X.v[8])-(-0.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a33 failed!");
|
|
return ZTEST_SUCCESS;
|
|
}
|
|
|
|
/******************************************************************************/
|
|
|
|
static const char* testSST_Math_Mat33fMultiplyScalar(){
|
|
SST_Mat33f X; /* 3 x 3 matrix */
|
|
SST_Mat33f A; /* 3 x 3 matrix */
|
|
/* Resetting test vectors / mats */
|
|
X.v[0] = -9.000000f;
|
|
X.v[1] = -10.000000f;
|
|
X.v[2] = 19.000000f;
|
|
X.v[3] = -15.000000f;
|
|
X.v[4] = 6.000000f;
|
|
X.v[5] = -8.000000f;
|
|
X.v[6] = -13.000000f;
|
|
X.v[7] = 7.000000f;
|
|
X.v[8] = 15.000000f;
|
|
/*
|
|
[[ -9. -15. -13.]
|
|
[-10. 6. 7.]
|
|
[ 19. -8. 15.]]
|
|
[[-18. -30. -26.]
|
|
[-20. 12. 14.]
|
|
[ 38. -16. 30.]]
|
|
*/
|
|
SST_Math_Mat33fMultiplyScalar(&X,2.000000f,&A);
|
|
TASSERT(fabsf((A.v[0])-(-18.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a11 failed!");
|
|
TASSERT(fabsf((A.v[3])-(-30.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a12 failed!");
|
|
TASSERT(fabsf((A.v[6])-(-26.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a13 failed!");
|
|
TASSERT(fabsf((A.v[1])-(-20.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a21 failed!");
|
|
TASSERT(fabsf((A.v[4])-(12.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a22 failed!");
|
|
TASSERT(fabsf((A.v[7])-(14.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a23 failed!");
|
|
TASSERT(fabsf((A.v[2])-(38.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a31 failed!");
|
|
TASSERT(fabsf((A.v[5])-(-16.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a32 failed!");
|
|
TASSERT(fabsf((A.v[8])-(30.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a33 failed!");
|
|
return ZTEST_SUCCESS;
|
|
}
|
|
|
|
/******************************************************************************/
|
|
|
|
static const char* testSST_Math_Mat33fMultiplyScalarLocal(){
|
|
SST_Mat33f X; /* 3 x 3 matrix */
|
|
/* Resetting test vectors / mats */
|
|
X.v[0] = 4.000000f;
|
|
X.v[1] = 9.000000f;
|
|
X.v[2] = 1.000000f;
|
|
X.v[3] = -7.000000f;
|
|
X.v[4] = 15.000000f;
|
|
X.v[5] = 17.000000f;
|
|
X.v[6] = 12.000000f;
|
|
X.v[7] = -2.000000f;
|
|
X.v[8] = 11.000000f;
|
|
/*
|
|
[[ 4. -7. 12.]
|
|
[ 9. 15. -2.]
|
|
[ 1. 17. 11.]]
|
|
[[ 8. -14. 24.]
|
|
[ 18. 30. -4.]
|
|
[ 2. 34. 22.]]
|
|
*/
|
|
SST_Math_Mat33fMultiplyScalarLocal(&X,2.000000f);
|
|
TASSERT(fabsf((X.v[0])-(8.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a11 failed!");
|
|
TASSERT(fabsf((X.v[3])-(-14.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a12 failed!");
|
|
TASSERT(fabsf((X.v[6])-(24.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a13 failed!");
|
|
TASSERT(fabsf((X.v[1])-(18.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a21 failed!");
|
|
TASSERT(fabsf((X.v[4])-(30.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a22 failed!");
|
|
TASSERT(fabsf((X.v[7])-(-4.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a23 failed!");
|
|
TASSERT(fabsf((X.v[2])-(2.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a31 failed!");
|
|
TASSERT(fabsf((X.v[5])-(34.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a32 failed!");
|
|
TASSERT(fabsf((X.v[8])-(22.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a33 failed!");
|
|
return ZTEST_SUCCESS;
|
|
}
|
|
|
|
/******************************************************************************/
|
|
|
|
static const char* testSST_Math_Mat33fMultiplyMatrix(){
|
|
SST_Mat33f X; /* 3 x 3 matrix */
|
|
SST_Mat33f Y; /* 3 x 3 matrix */
|
|
SST_Mat33f A; /* 3 x 3 matrix */
|
|
/* Resetting test vectors / mats */
|
|
X.v[0] = 10.000000f;
|
|
X.v[1] = -19.000000f;
|
|
X.v[2] = -19.000000f;
|
|
X.v[3] = 2.000000f;
|
|
X.v[4] = 18.000000f;
|
|
X.v[5] = -5.000000f;
|
|
X.v[6] = 9.000000f;
|
|
X.v[7] = -2.000000f;
|
|
X.v[8] = 4.000000f;
|
|
Y.v[0] = -20.000000f;
|
|
Y.v[1] = -18.000000f;
|
|
Y.v[2] = -7.000000f;
|
|
Y.v[3] = 18.000000f;
|
|
Y.v[4] = 15.000000f;
|
|
Y.v[5] = -11.000000f;
|
|
Y.v[6] = 15.000000f;
|
|
Y.v[7] = -13.000000f;
|
|
Y.v[8] = 3.000000f;
|
|
/*
|
|
X
|
|
[[ 10. 2. 9.]
|
|
[-19. 18. -2.]
|
|
[-19. -5. 4.]]
|
|
Y
|
|
[[-20. 18. 15.]
|
|
[-18. 15. -13.]
|
|
[ -7. -11. 3.]]
|
|
[[-299. 111. 151.]
|
|
[ 70. -50. -525.]
|
|
[ 442. -461. -208.]]
|
|
*/
|
|
SST_Math_Mat33fMultiplyMatrix(&X,&Y,&A);
|
|
TASSERT(fabsf((A.v[0])-(-299.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a11 failed!");
|
|
TASSERT(fabsf((A.v[3])-(111.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a12 failed!");
|
|
TASSERT(fabsf((A.v[6])-(151.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a13 failed!");
|
|
TASSERT(fabsf((A.v[1])-(70.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a21 failed!");
|
|
TASSERT(fabsf((A.v[4])-(-50.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a22 failed!");
|
|
TASSERT(fabsf((A.v[7])-(-525.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a23 failed!");
|
|
TASSERT(fabsf((A.v[2])-(442.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a31 failed!");
|
|
TASSERT(fabsf((A.v[5])-(-461.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a32 failed!");
|
|
TASSERT(fabsf((A.v[8])-(-208.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a33 failed!");
|
|
return ZTEST_SUCCESS;
|
|
}
|
|
|
|
/******************************************************************************/
|
|
|
|
static const char* testSST_Math_Mat33fMultiplyMatrixLocal(){
|
|
SST_Mat33f X; /* 3 x 3 matrix */
|
|
SST_Mat33f Y; /* 3 x 3 matrix */
|
|
/* Resetting test vectors / mats */
|
|
X.v[0] = -16.000000f;
|
|
X.v[1] = -13.000000f;
|
|
X.v[2] = 3.000000f;
|
|
X.v[3] = -2.000000f;
|
|
X.v[4] = -15.000000f;
|
|
X.v[5] = -13.000000f;
|
|
X.v[6] = -7.000000f;
|
|
X.v[7] = 7.000000f;
|
|
X.v[8] = 13.000000f;
|
|
Y.v[0] = -18.000000f;
|
|
Y.v[1] = -11.000000f;
|
|
Y.v[2] = -11.000000f;
|
|
Y.v[3] = -20.000000f;
|
|
Y.v[4] = -7.000000f;
|
|
Y.v[5] = 3.000000f;
|
|
Y.v[6] = 6.000000f;
|
|
Y.v[7] = 2.000000f;
|
|
Y.v[8] = -15.000000f;
|
|
/*
|
|
X
|
|
[[-16. -2. -7.]
|
|
[-13. -15. 7.]
|
|
[ 3. -13. 13.]]
|
|
Y
|
|
[[-18. -20. 6.]
|
|
[-11. -7. 2.]
|
|
[-11. 3. -15.]]
|
|
X
|
|
[[ 387. 313. 5.]
|
|
[ 322. 386. -213.]
|
|
[ -54. 70. -203.]]
|
|
*/
|
|
SST_Math_Mat33fMultiplyMatrixLocal(&X,&Y);
|
|
TASSERT(fabsf((X.v[0])-(387.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a11 failed!");
|
|
TASSERT(fabsf((X.v[3])-(313.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a12 failed!");
|
|
TASSERT(fabsf((X.v[6])-(5.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a13 failed!");
|
|
TASSERT(fabsf((X.v[1])-(322.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a21 failed!");
|
|
TASSERT(fabsf((X.v[4])-(386.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a22 failed!");
|
|
TASSERT(fabsf((X.v[7])-(-213.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a23 failed!");
|
|
TASSERT(fabsf((X.v[2])-(-54.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a31 failed!");
|
|
TASSERT(fabsf((X.v[5])-(70.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a32 failed!");
|
|
TASSERT(fabsf((X.v[8])-(-203.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a33 failed!");
|
|
return ZTEST_SUCCESS;
|
|
}
|
|
|
|
/******************************************************************************/
|
|
|
|
static const char* testSST_Math_Mat33fMultiplyVector(){
|
|
SST_Mat33f X; /* 3 x 3 matrix */
|
|
SST_Vec3f v; /* 3 vector */
|
|
SST_Vec3f w; /* 3 vector */
|
|
/* Resetting test vectors / mats */
|
|
v.v[0] = 7.000000f;
|
|
v.v[1] = -1.000000f;
|
|
v.v[2] = 16.000000f;
|
|
X.v[0] = 3.000000f;
|
|
X.v[1] = -5.000000f;
|
|
X.v[2] = 6.000000f;
|
|
X.v[3] = -12.000000f;
|
|
X.v[4] = -11.000000f;
|
|
X.v[5] = -12.000000f;
|
|
X.v[6] = -19.000000f;
|
|
X.v[7] = -13.000000f;
|
|
X.v[8] = 7.000000f;
|
|
/*
|
|
X
|
|
[[ 3. -12. -19.]
|
|
[ -5. -11. -13.]
|
|
[ 6. -12. 7.]]
|
|
v
|
|
[ 7. -1. 16.]
|
|
w
|
|
[-271. -232. 166.]
|
|
*/
|
|
SST_Math_Mat33fMultiplyVector(&X,&v,&w);
|
|
TASSERT(fabsf((w.v[0])-(-271.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry .v[0] failed!");
|
|
TASSERT(fabsf((w.v[1])-(-232.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry .v[1] failed!");
|
|
TASSERT(fabsf((w.v[2])-(166.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry .v[2] failed!");
|
|
return ZTEST_SUCCESS;
|
|
}
|
|
|
|
/******************************************************************************/
|
|
|
|
static const char* testSST_Math_Mat33fMultiplyVectorLocal(){
|
|
SST_Mat33f X; /* 3 x 3 matrix */
|
|
SST_Vec3f v; /* 3 vector */
|
|
/* Resetting test vectors / mats */
|
|
v.v[0] = 14.000000f;
|
|
v.v[1] = 17.000000f;
|
|
v.v[2] = 17.000000f;
|
|
X.v[0] = 5.000000f;
|
|
X.v[1] = -20.000000f;
|
|
X.v[2] = -1.000000f;
|
|
X.v[3] = 10.000000f;
|
|
X.v[4] = 14.000000f;
|
|
X.v[5] = 8.000000f;
|
|
X.v[6] = 0.000000f;
|
|
X.v[7] = 19.000000f;
|
|
X.v[8] = 5.000000f;
|
|
/*
|
|
X
|
|
[[ 5. 10. 0.]
|
|
[-20. 14. 19.]
|
|
[ -1. 8. 5.]]
|
|
v
|
|
[ 14. 17. 17.]
|
|
v
|
|
[ 240. 281. 207.]
|
|
*/
|
|
SST_Math_Mat33fMultiplyVectorLocal(&X,&v);
|
|
TASSERT(fabsf((v.v[0])-(240.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry .v[0] failed!");
|
|
TASSERT(fabsf((v.v[1])-(281.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry .v[1] failed!");
|
|
TASSERT(fabsf((v.v[2])-(207.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry .v[2] failed!");
|
|
return ZTEST_SUCCESS;
|
|
}
|
|
|
|
/******************************************************************************/
|
|
|
|
static const char* testSST_Math_Mat33fTranspose(){
|
|
SST_Mat33f X; /* 3 x 3 matrix */
|
|
SST_Mat33f A; /* 3 x 3 matrix */
|
|
/* Resetting test vectors / mats */
|
|
X.v[0] = 0.000000f;
|
|
X.v[1] = -14.000000f;
|
|
X.v[2] = 2.000000f;
|
|
X.v[3] = -15.000000f;
|
|
X.v[4] = 4.000000f;
|
|
X.v[5] = 14.000000f;
|
|
X.v[6] = 13.000000f;
|
|
X.v[7] = -5.000000f;
|
|
X.v[8] = 4.000000f;
|
|
SST_Math_Mat33fTranspose(&X,&A);
|
|
TASSERT(fabsf((A.v[0])-(0.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a11 failed!");
|
|
TASSERT(fabsf((A.v[3])-(-14.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a12 failed!");
|
|
TASSERT(fabsf((A.v[6])-(2.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a13 failed!");
|
|
TASSERT(fabsf((A.v[1])-(-15.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a21 failed!");
|
|
TASSERT(fabsf((A.v[4])-(4.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a22 failed!");
|
|
TASSERT(fabsf((A.v[7])-(14.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a23 failed!");
|
|
TASSERT(fabsf((A.v[2])-(13.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a31 failed!");
|
|
TASSERT(fabsf((A.v[5])-(-5.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a32 failed!");
|
|
TASSERT(fabsf((A.v[8])-(4.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a33 failed!");
|
|
return ZTEST_SUCCESS;
|
|
}
|
|
|
|
/******************************************************************************/
|
|
|
|
static const char* testSST_Math_Mat33fTransposeLocal(){
|
|
SST_Mat33f X; /* 3 x 3 matrix */
|
|
/* Resetting test vectors / mats */
|
|
X.v[0] = -6.000000f;
|
|
X.v[1] = -14.000000f;
|
|
X.v[2] = 12.000000f;
|
|
X.v[3] = -19.000000f;
|
|
X.v[4] = 14.000000f;
|
|
X.v[5] = 17.000000f;
|
|
X.v[6] = -14.000000f;
|
|
X.v[7] = -10.000000f;
|
|
X.v[8] = 11.000000f;
|
|
SST_Math_Mat33fTransposeLocal(&X);
|
|
TASSERT(fabsf((X.v[0])-(-6.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a11 failed!");
|
|
TASSERT(fabsf((X.v[3])-(-14.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a12 failed!");
|
|
TASSERT(fabsf((X.v[6])-(12.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a13 failed!");
|
|
TASSERT(fabsf((X.v[1])-(-19.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a21 failed!");
|
|
TASSERT(fabsf((X.v[4])-(14.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a22 failed!");
|
|
TASSERT(fabsf((X.v[7])-(17.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a23 failed!");
|
|
TASSERT(fabsf((X.v[2])-(-14.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a31 failed!");
|
|
TASSERT(fabsf((X.v[5])-(-10.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a32 failed!");
|
|
TASSERT(fabsf((X.v[8])-(11.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a33 failed!");
|
|
return ZTEST_SUCCESS;
|
|
}
|
|
|
|
/******************************************************************************/
|
|
|
|
static const char* testSST_Math_Mat33fCheckOrthonormal(){
|
|
SST_Mat33f X; /* 3 x 3 matrix */
|
|
SST_Mat33f Y; /* 3 x 3 matrix */
|
|
/* Resetting test vectors / mats */
|
|
X.v[0] = 11.000000f;
|
|
X.v[1] = -18.000000f;
|
|
X.v[2] = 18.000000f;
|
|
X.v[3] = 11.000000f;
|
|
X.v[4] = 17.000000f;
|
|
X.v[5] = 9.000000f;
|
|
X.v[6] = 7.000000f;
|
|
X.v[7] = 0.000000f;
|
|
X.v[8] = -10.000000f;
|
|
Y.v[0] = -20.000000f;
|
|
Y.v[1] = -5.000000f;
|
|
Y.v[2] = 10.000000f;
|
|
Y.v[3] = 14.000000f;
|
|
Y.v[4] = -11.000000f;
|
|
Y.v[5] = -2.000000f;
|
|
Y.v[6] = -10.000000f;
|
|
Y.v[7] = 9.000000f;
|
|
Y.v[8] = 6.000000f;
|
|
/*
|
|
[[-0.39667013 -0.5116291 -0.76216042]
|
|
[ 0.64909661 -0.7434243 0.16122624]
|
|
[-0.64909661 -0.43076208 0.62699091]]
|
|
[[ 1.00000000e+00 -2.98023224e-08 -2.98023224e-08]
|
|
[ -2.98023224e-08 1.00000000e+00 2.98023224e-08]
|
|
[ -2.98023224e-08 2.98023224e-08 1.00000000e+00]]
|
|
*/
|
|
/* Set X to orthogonal matrix Q */
|
|
X.v[0] = (float)-0.396670f;
|
|
X.v[1] = (float)0.649097f;
|
|
X.v[2] = (float)-0.649097f;
|
|
X.v[3] = (float)-0.511629f;
|
|
X.v[4] = (float)-0.743424f;
|
|
X.v[5] = (float)-0.430762f;
|
|
X.v[6] = (float)-0.762160f;
|
|
X.v[7] = (float)0.161226f;
|
|
X.v[8] = (float)0.626991f;
|
|
/* Check Positive Test */
|
|
TASSERT(SST_Math_Mat33fCheckOrthonormal(&X),"CheckOrthonormal failed when it should have passed");
|
|
/* Check Negative Test */
|
|
TASSERT(!SST_Math_Mat33fCheckOrthonormal(&Y),"CheckOrthonormal succeeded when it should have failed");
|
|
return ZTEST_SUCCESS;
|
|
}
|
|
|
|
/******************************************************************************/
|
|
|
|
static const char* testSST_Math_Mat33fDeterminant(){
|
|
SST_Mat33f X; /* 3 x 3 matrix */
|
|
/* Resetting test vectors / mats */
|
|
X.v[0] = -8.000000f;
|
|
X.v[1] = -11.000000f;
|
|
X.v[2] = 15.000000f;
|
|
X.v[3] = -1.000000f;
|
|
X.v[4] = 1.000000f;
|
|
X.v[5] = -3.000000f;
|
|
X.v[6] = 4.000000f;
|
|
X.v[7] = -11.000000f;
|
|
X.v[8] = 19.000000f;
|
|
/* det(X) =
|
|
140.0
|
|
*/
|
|
float result = SST_Math_Mat33fDeterminant(&X);
|
|
TASSERT(fabsf( (result)/(140.000000f) - 1.000000f ) <= 100*FLT_EPSILON,"Determinant failed!");
|
|
return ZTEST_SUCCESS;
|
|
}
|
|
|
|
/******************************************************************************/
|
|
|
|
static const char* testSST_Math_Mat33fInvert(){
|
|
SST_Mat33f X; /* 3 x 3 matrix */
|
|
SST_Mat33f B; /* 3 x 3 matrix */
|
|
/* Resetting test vectors / mats */
|
|
X.v[0] = -16.000000f;
|
|
X.v[1] = 7.000000f;
|
|
X.v[2] = -12.000000f;
|
|
X.v[3] = -14.000000f;
|
|
X.v[4] = 0.000000f;
|
|
X.v[5] = -10.000000f;
|
|
X.v[6] = 19.000000f;
|
|
X.v[7] = 10.000000f;
|
|
X.v[8] = -4.000000f;
|
|
/*
|
|
[[-0.06090134 0.1498173 0.08526187]
|
|
[ 0.05602923 -0.17783192 -0.17844093]
|
|
[ 0.04263094 -0.00487211 -0.05968331]]
|
|
*/
|
|
SST_Math_Mat33fInvert(&X,&B);
|
|
TASSERT(fabsf((B.v[0])-(-0.060901f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a11 failed!");
|
|
TASSERT(fabsf((B.v[1])-(0.056029f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a21 failed!");
|
|
TASSERT(fabsf((B.v[2])-(0.042631f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a31 failed!");
|
|
TASSERT(fabsf((B.v[3])-(0.149817f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a12 failed!");
|
|
TASSERT(fabsf((B.v[4])-(-0.177832f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a22 failed!");
|
|
TASSERT(fabsf((B.v[5])-(-0.004872f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a32 failed!");
|
|
TASSERT(fabsf((B.v[6])-(0.085262f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a13 failed!");
|
|
TASSERT(fabsf((B.v[7])-(-0.178441f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a23 failed!");
|
|
TASSERT(fabsf((B.v[8])-(-0.059683f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a33 failed!");
|
|
return ZTEST_SUCCESS;
|
|
}
|
|
|
|
/******************************************************************************/
|
|
|
|
static const char* testSST_Math_Mat33fInvertLocal(){
|
|
SST_Mat33f X; /* 3 x 3 matrix */
|
|
/* Resetting test vectors / mats */
|
|
X.v[0] = 13.000000f;
|
|
X.v[1] = -16.000000f;
|
|
X.v[2] = 2.000000f;
|
|
X.v[3] = 15.000000f;
|
|
X.v[4] = -3.000000f;
|
|
X.v[5] = -8.000000f;
|
|
X.v[6] = -18.000000f;
|
|
X.v[7] = 15.000000f;
|
|
X.v[8] = -5.000000f;
|
|
/*
|
|
()
|
|
[[-0.09594883 -0.15565032 -0.12153518]
|
|
[ 0.0355366 0.02061123 -0.06609808]
|
|
[-0.0952381 -0.0952381 -0.14285715]]
|
|
*/
|
|
SST_Math_Mat33fInvertLocal(&X);
|
|
TASSERT(fabsf((X.v[0])-(-0.095949f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a11 failed!");
|
|
TASSERT(fabsf((X.v[1])-(0.035537f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a21 failed!");
|
|
TASSERT(fabsf((X.v[2])-(-0.095238f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a31 failed!");
|
|
TASSERT(fabsf((X.v[3])-(-0.155650f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a12 failed!");
|
|
TASSERT(fabsf((X.v[4])-(0.020611f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a22 failed!");
|
|
TASSERT(fabsf((X.v[5])-(-0.095238f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a32 failed!");
|
|
TASSERT(fabsf((X.v[6])-(-0.121535f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a13 failed!");
|
|
TASSERT(fabsf((X.v[7])-(-0.066098f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a23 failed!");
|
|
TASSERT(fabsf((X.v[8])-(-0.142857f)) <=100*FLT_EPSILON /* yes this is bad */,"Entry _a33 failed!");
|
|
return ZTEST_SUCCESS;
|
|
}
|
|
|
|
/******************************************************************************/
|
|
|
|
static const char* testSST_Math_Mat33fCreateLU(){
|
|
SST_Mat33f X; /* 3 x 3 matrix */
|
|
SST_Mat33f LU; /* 3 x 3 matrix */
|
|
X.v[0] = 2.000000f;
|
|
X.v[1] = 1.000000f;
|
|
X.v[2] = 0.000000f;
|
|
X.v[3] = -1.000000f;
|
|
X.v[4] = 0.000000f;
|
|
X.v[5] = 2.000000f;
|
|
X.v[6] = -1.000000f;
|
|
X.v[7] = -1.000000f;
|
|
X.v[8] = 1.000000f;
|
|
SST_Math_Mat33fCreateLU(&X,&LU);
|
|
/*
|
|
[[ 2 -1 -1]
|
|
[ 1 0 -1]
|
|
[ 0 2 1]]
|
|
*/
|
|
/*
|
|
[[ 2. 0. 0. ]
|
|
[ 1. 0.5 0. ]
|
|
[ 0. 2. 3. ]]
|
|
*/
|
|
/*
|
|
[[ 1. -0.5 -0.5]
|
|
[ 0. 1. -1. ]
|
|
[ 0. 0. 1. ]]
|
|
*/
|
|
TASSERT(fabsf((LU.v[0])-(2.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"L:Entry A_a11 failed!");
|
|
TASSERT(fabsf((LU.v[3])-(-0.500000f)) <=100*FLT_EPSILON /* yes this is bad */,"U:Entry B_a12 failed!");
|
|
TASSERT(fabsf((LU.v[6])-(-0.500000f)) <=100*FLT_EPSILON /* yes this is bad */,"U:Entry B_a13 failed!");
|
|
TASSERT(fabsf((LU.v[1])-(1.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"L:Entry A_a21 failed!");
|
|
TASSERT(fabsf((LU.v[4])-(0.500000f)) <=100*FLT_EPSILON /* yes this is bad */,"L:Entry A_a22 failed!");
|
|
TASSERT(fabsf((LU.v[7])-(-1.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"U:Entry B_a23 failed!");
|
|
TASSERT(fabsf((LU.v[2])-(0.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"L:Entry A_a31 failed!");
|
|
TASSERT(fabsf((LU.v[5])-(2.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"L:Entry A_a32 failed!");
|
|
TASSERT(fabsf((LU.v[8])-(3.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"L:Entry A_a33 failed!");
|
|
return ZTEST_SUCCESS;
|
|
}
|
|
static const char* testSST_Math_Mat33fCreateLULocal(){
|
|
SST_Mat33f X; /* 3 x 3 matrix */
|
|
X.v[0] = 2.000000f;
|
|
X.v[1] = 1.000000f;
|
|
X.v[2] = 0.000000f;
|
|
X.v[3] = -1.000000f;
|
|
X.v[4] = 0.000000f;
|
|
X.v[5] = 2.000000f;
|
|
X.v[6] = -1.000000f;
|
|
X.v[7] = -1.000000f;
|
|
X.v[8] = 1.000000f;
|
|
SST_Math_Mat33fCreateLULocal(&X);
|
|
TASSERT(fabsf((X.v[0])-(2.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"L:Entry A_a11 failed!");
|
|
TASSERT(fabsf((X.v[3])-(-0.500000f)) <=100*FLT_EPSILON /* yes this is bad */,"U:Entry B_a12 failed!");
|
|
TASSERT(fabsf((X.v[6])-(-0.500000f)) <=100*FLT_EPSILON /* yes this is bad */,"U:Entry B_a13 failed!");
|
|
TASSERT(fabsf((X.v[1])-(1.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"L:Entry A_a21 failed!");
|
|
TASSERT(fabsf((X.v[4])-(0.500000f)) <=100*FLT_EPSILON /* yes this is bad */,"L:Entry A_a22 failed!");
|
|
TASSERT(fabsf((X.v[7])-(-1.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"U:Entry B_a23 failed!");
|
|
TASSERT(fabsf((X.v[2])-(0.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"L:Entry A_a31 failed!");
|
|
TASSERT(fabsf((X.v[5])-(2.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"L:Entry A_a32 failed!");
|
|
TASSERT(fabsf((X.v[8])-(3.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"L:Entry A_a33 failed!");
|
|
return ZTEST_SUCCESS;
|
|
}
|
|
static const char* testSST_Math_Mat33fApplyLUMat(){
|
|
SST_Mat33f X; /* 3 x 3 matrix */
|
|
SST_Mat33f LU; /* 3 x 3 matrix */
|
|
SST_Mat33f I; /* 3 x 3 matrix */
|
|
X.v[0] = 2.000000f;
|
|
X.v[1] = 1.000000f;
|
|
X.v[2] = 0.000000f;
|
|
X.v[3] = -1.000000f;
|
|
X.v[4] = 0.000000f;
|
|
X.v[5] = 2.000000f;
|
|
X.v[6] = -1.000000f;
|
|
X.v[7] = -1.000000f;
|
|
X.v[8] = 1.000000f;
|
|
SST_Math_Mat33fCreateLU(&X,&LU);
|
|
/*
|
|
[[ 2 -1 -1]
|
|
[ 1 0 -1]
|
|
[ 0 2 1]]
|
|
*/
|
|
/*
|
|
[[ 2. 0. 0. ]
|
|
[ 1. 0.5 0. ]
|
|
[ 0. 2. 3. ]]
|
|
*/
|
|
/*
|
|
[[ 1. -0.5 -0.5]
|
|
[ 0. 1. -1. ]
|
|
[ 0. 0. 1. ]]
|
|
*/
|
|
TASSERT(fabsf((LU.v[0])-(2.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"L:Entry A_a11 failed!");
|
|
TASSERT(fabsf((LU.v[3])-(-0.500000f)) <=100*FLT_EPSILON /* yes this is bad */,"U:Entry B_a12 failed!");
|
|
TASSERT(fabsf((LU.v[6])-(-0.500000f)) <=100*FLT_EPSILON /* yes this is bad */,"U:Entry B_a13 failed!");
|
|
TASSERT(fabsf((LU.v[1])-(1.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"L:Entry A_a21 failed!");
|
|
TASSERT(fabsf((LU.v[4])-(0.500000f)) <=100*FLT_EPSILON /* yes this is bad */,"L:Entry A_a22 failed!");
|
|
TASSERT(fabsf((LU.v[7])-(-1.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"U:Entry B_a23 failed!");
|
|
TASSERT(fabsf((LU.v[2])-(0.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"L:Entry A_a31 failed!");
|
|
TASSERT(fabsf((LU.v[5])-(2.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"L:Entry A_a32 failed!");
|
|
TASSERT(fabsf((LU.v[8])-(3.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"L:Entry A_a33 failed!");
|
|
SST_Math_Mat33fApplyLUMat(&LU,&X,&I);
|
|
TASSERT(fabsf((I.v[0])-(1.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"I:Entry I_a11 failed!");
|
|
TASSERT(fabsf((I.v[1])-(0.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"I:Entry I_a21 failed!");
|
|
TASSERT(fabsf((I.v[2])-(0.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"I:Entry I_a31 failed!");
|
|
TASSERT(fabsf((I.v[3])-(0.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"I:Entry I_a12 failed!");
|
|
TASSERT(fabsf((I.v[4])-(1.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"I:Entry I_a22 failed!");
|
|
TASSERT(fabsf((I.v[5])-(0.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"I:Entry I_a32 failed!");
|
|
TASSERT(fabsf((I.v[6])-(0.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"I:Entry I_a13 failed!");
|
|
TASSERT(fabsf((I.v[7])-(0.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"I:Entry I_a23 failed!");
|
|
TASSERT(fabsf((I.v[8])-(1.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"I:Entry I_a33 failed!");
|
|
return ZTEST_SUCCESS;
|
|
}
|
|
static const char* testSST_Math_Mat33fApplyLUMatLocal(){
|
|
SST_Mat33f X; /* 3 x 3 matrix */
|
|
SST_Mat33f Xinv; /* 3 x 3 matrix */
|
|
X.v[0] = 2.000000f;
|
|
X.v[1] = 1.000000f;
|
|
X.v[2] = 0.000000f;
|
|
X.v[3] = -1.000000f;
|
|
X.v[4] = 0.000000f;
|
|
X.v[5] = 2.000000f;
|
|
X.v[6] = -1.000000f;
|
|
X.v[7] = -1.000000f;
|
|
X.v[8] = 1.000000f;
|
|
Xinv.v[0] = 2.000000f;
|
|
Xinv.v[1] = 1.000000f;
|
|
Xinv.v[2] = 0.000000f;
|
|
Xinv.v[3] = -1.000000f;
|
|
Xinv.v[4] = 0.000000f;
|
|
Xinv.v[5] = 2.000000f;
|
|
Xinv.v[6] = -1.000000f;
|
|
Xinv.v[7] = -1.000000f;
|
|
Xinv.v[8] = 1.000000f;
|
|
SST_Math_Mat33fCreateLULocal(&X);
|
|
TASSERT(fabsf((X.v[0])-(2.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"L:Entry A_a11 failed!");
|
|
TASSERT(fabsf((X.v[3])-(-0.500000f)) <=100*FLT_EPSILON /* yes this is bad */,"U:Entry B_a12 failed!");
|
|
TASSERT(fabsf((X.v[6])-(-0.500000f)) <=100*FLT_EPSILON /* yes this is bad */,"U:Entry B_a13 failed!");
|
|
TASSERT(fabsf((X.v[1])-(1.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"L:Entry A_a21 failed!");
|
|
TASSERT(fabsf((X.v[4])-(0.500000f)) <=100*FLT_EPSILON /* yes this is bad */,"L:Entry A_a22 failed!");
|
|
TASSERT(fabsf((X.v[7])-(-1.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"U:Entry B_a23 failed!");
|
|
TASSERT(fabsf((X.v[2])-(0.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"L:Entry A_a31 failed!");
|
|
TASSERT(fabsf((X.v[5])-(2.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"L:Entry A_a32 failed!");
|
|
TASSERT(fabsf((X.v[8])-(3.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"L:Entry A_a33 failed!");
|
|
SST_Math_Mat33fApplyLUMatLocal(&X,&Xinv);
|
|
TASSERT(fabsf((Xinv.v[0])-(1.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Xinv:Entry Xinv_a11 failed!");
|
|
TASSERT(fabsf((Xinv.v[1])-(0.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Xinv:Entry Xinv_a21 failed!");
|
|
TASSERT(fabsf((Xinv.v[2])-(0.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Xinv:Entry Xinv_a31 failed!");
|
|
TASSERT(fabsf((Xinv.v[3])-(0.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Xinv:Entry Xinv_a12 failed!");
|
|
TASSERT(fabsf((Xinv.v[4])-(1.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Xinv:Entry Xinv_a22 failed!");
|
|
TASSERT(fabsf((Xinv.v[5])-(0.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Xinv:Entry Xinv_a32 failed!");
|
|
TASSERT(fabsf((Xinv.v[6])-(0.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Xinv:Entry Xinv_a13 failed!");
|
|
TASSERT(fabsf((Xinv.v[7])-(0.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Xinv:Entry Xinv_a23 failed!");
|
|
TASSERT(fabsf((Xinv.v[8])-(1.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"Xinv:Entry Xinv_a33 failed!");
|
|
return ZTEST_SUCCESS;
|
|
}
|
|
static const char* testSST_Math_Mat33fApplyLUVec(){
|
|
SST_Mat33f X; /* 3 x 3 matrix */
|
|
SST_Mat33f LU; /* 3 x 3 matrix */
|
|
SST_Vec3f b; /* 3 x 3 vector */
|
|
SST_Vec3f x; /* 3 x 3 vector */
|
|
X.v[0] = 2.000000f;
|
|
X.v[1] = 1.000000f;
|
|
X.v[2] = 0.000000f;
|
|
X.v[3] = -1.000000f;
|
|
X.v[4] = 0.000000f;
|
|
X.v[5] = 2.000000f;
|
|
X.v[6] = -1.000000f;
|
|
X.v[7] = -1.000000f;
|
|
X.v[8] = 1.000000f;
|
|
b.v[0] = 2.000000f;
|
|
b.v[1] = -1.000000f;
|
|
b.v[2] = 1.000000f;
|
|
SST_Math_Mat33fCreateLU(&X,&LU);
|
|
SST_Math_Mat33fApplyLUVec(&LU,&b,&x);
|
|
TASSERT(fabsf((x.v[0])-(2.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"x:Entry x_a1 failed!");
|
|
TASSERT(fabsf((x.v[1])-(-1.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"x:Entry x_a2 failed!");
|
|
TASSERT(fabsf((x.v[2])-(3.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"x:Entry x_a3 failed!");
|
|
return ZTEST_SUCCESS;
|
|
}
|
|
static const char* testSST_Math_Mat33fApplyLUVecLocal(){
|
|
SST_Mat33f X; /* 3 x 3 matrix */
|
|
SST_Mat33f LU; /* 3 x 3 matrix */
|
|
SST_Vec3f b; /* 3 x 3 vector */
|
|
X.v[0] = 2.000000f;
|
|
X.v[1] = 1.000000f;
|
|
X.v[2] = 0.000000f;
|
|
X.v[3] = -1.000000f;
|
|
X.v[4] = 0.000000f;
|
|
X.v[5] = 2.000000f;
|
|
X.v[6] = -1.000000f;
|
|
X.v[7] = -1.000000f;
|
|
X.v[8] = 1.000000f;
|
|
b.v[0] = 2.000000f;
|
|
b.v[1] = -1.000000f;
|
|
b.v[2] = 1.000000f;
|
|
SST_Math_Mat33fCreateLU(&X,&LU);
|
|
SST_Math_Mat33fApplyLUVecLocal(&LU,&b);
|
|
TASSERT(fabsf((b.v[0])-(2.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"x:Entry x_a1 failed!");
|
|
TASSERT(fabsf((b.v[1])-(-1.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"x:Entry x_a2 failed!");
|
|
TASSERT(fabsf((b.v[2])-(3.000000f)) <=100*FLT_EPSILON /* yes this is bad */,"x:Entry x_a3 failed!");
|
|
return ZTEST_SUCCESS;
|
|
}
|