1436 lines
78 KiB
C++
1436 lines
78 KiB
C++
/*
|
|
AUTOMATICALLY GENERATED FILE - DO NOT EDIT!
|
|
Please change MatrixNxN.py and re-run it
|
|
*/
|
|
/* Generated with ./MatrixNxN.py n = 4, TYPE = double */
|
|
|
|
#include "ZUnitTest.hpp"
|
|
#include <float.h>
|
|
#include <math.h>
|
|
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
#include <SST/SST_Mat44.h>
|
|
#include <SST/SST_Vec4.h>
|
|
|
|
|
|
|
|
|
|
static const char* testSST_Math_Mat44dAdd();
|
|
static const char* testSST_Math_Mat44dAddLocal();
|
|
static const char* testSST_Math_Mat44dSubtract();
|
|
static const char* testSST_Math_Mat44dSubtractLocal();
|
|
static const char* testSST_Math_Mat44dMultiplyElementwise();
|
|
static const char* testSST_Math_Mat44dMultiplyElementwiseLocal();
|
|
static const char* testSST_Math_Mat44dMultiplyScalar();
|
|
static const char* testSST_Math_Mat44dMultiplyScalarLocal();
|
|
static const char* testSST_Math_Mat44dMultiplyMatrix();
|
|
static const char* testSST_Math_Mat44dMultiplyMatrixLocal();
|
|
static const char* testSST_Math_Mat44dMultiplyVector();
|
|
static const char* testSST_Math_Mat44dMultiplyVectorLocal();
|
|
static const char* testSST_Math_Mat44dTranspose();
|
|
static const char* testSST_Math_Mat44dTransposeLocal();
|
|
static const char* testSST_Math_Mat44dDeterminant();
|
|
static const char* testSST_Math_Mat44dCheckOrthonormal();
|
|
static const char* testSST_Math_Mat44dInvert();
|
|
static const char* testSST_Math_Mat44dInvertLocal();
|
|
static const char* testSST_Math_Mat44dCreateLU();
|
|
static const char* testSST_Math_Mat44dCreateLULocal();
|
|
static const char* testSST_Math_Mat44dApplyLUMat();
|
|
static const char* testSST_Math_Mat44dApplyLUMatLocal();
|
|
static const char* testSST_Math_Mat44dApplyLUVec();
|
|
static const char* testSST_Math_Mat44dApplyLUVecLocal();
|
|
// List of unit tests
|
|
ZUnitTest SST_Math_Mat44dUnitTests[] =
|
|
{
|
|
{ "testSST_Math_Mat44dAdd " , testSST_Math_Mat44dAdd },
|
|
{ "testSST_Math_Mat44dAddLocal " , testSST_Math_Mat44dAddLocal },
|
|
{ "testSST_Math_Mat44dSubtract " , testSST_Math_Mat44dSubtract },
|
|
{ "testSST_Math_Mat44dSubtractLocal " , testSST_Math_Mat44dSubtractLocal },
|
|
{ "testSST_Math_Mat44dMultiplyElementwise " , testSST_Math_Mat44dMultiplyElementwise },
|
|
{ "testSST_Math_Mat44dMultiplyElementwiseLocal " , testSST_Math_Mat44dMultiplyElementwiseLocal },
|
|
{ "testSST_Math_Mat44dMultiplyScalar " , testSST_Math_Mat44dMultiplyScalar },
|
|
{ "testSST_Math_Mat44dMultiplyScalarLocal " , testSST_Math_Mat44dMultiplyScalarLocal },
|
|
{ "testSST_Math_Mat44dMultiplyMatrix " , testSST_Math_Mat44dMultiplyMatrix },
|
|
{ "testSST_Math_Mat44dMultiplyMatrixLocal " , testSST_Math_Mat44dMultiplyMatrixLocal },
|
|
{ "testSST_Math_Mat44dMultiplyVector " , testSST_Math_Mat44dMultiplyVector },
|
|
{ "testSST_Math_Mat44dMultiplyVectorLocal " , testSST_Math_Mat44dMultiplyVectorLocal },
|
|
{ "testSST_Math_Mat44dDeterminant " , testSST_Math_Mat44dDeterminant },
|
|
{ "testSST_Math_Mat44dCheckOrthonormal " , testSST_Math_Mat44dCheckOrthonormal },
|
|
{ "testSST_Math_Mat44dInvert " , testSST_Math_Mat44dInvert },
|
|
{ "testSST_Math_Mat44dInvertLocal " , testSST_Math_Mat44dInvertLocal },
|
|
{ "testSST_Math_Mat44dCreateLU " , testSST_Math_Mat44dCreateLU },
|
|
{ "testSST_Math_Mat44dCreateLULocal " , testSST_Math_Mat44dCreateLULocal },
|
|
{ "testSST_Math_Mat44dApplyLUMat " , testSST_Math_Mat44dApplyLUMat },
|
|
{ "testSST_Math_Mat44dApplyLUMatLocal " , testSST_Math_Mat44dApplyLUMatLocal },
|
|
{ "testSST_Math_Mat44dApplyLUVec " , testSST_Math_Mat44dApplyLUVec },
|
|
{ "testSST_Math_Mat44dApplyLUVecLocal " , testSST_Math_Mat44dApplyLUVecLocal },
|
|
{ "testSST_Math_Mat44dTranspose " , testSST_Math_Mat44dTranspose },
|
|
{ "testSST_Math_Mat44dTransposeLocal " , testSST_Math_Mat44dTransposeLocal }
|
|
};
|
|
DECLARE_ZTESTBLOCK(SST_Math_Mat44d)
|
|
|
|
/******************************************************************************/
|
|
|
|
static const char* testSST_Math_Mat44dAdd(){
|
|
SST_Mat44d X; /* 4 x 4 matrix */
|
|
SST_Mat44d Y; /* 4 x 4 matrix */
|
|
SST_Mat44d A; /* 4 x 4 matrix */
|
|
/* Resetting test vectors / mats */
|
|
X.v[0] = -1.000000000000000;
|
|
X.v[1] = 19.000000000000000;
|
|
X.v[2] = 5.000000000000000;
|
|
X.v[3] = -2.000000000000000;
|
|
X.v[4] = -18.000000000000000;
|
|
X.v[5] = 7.000000000000000;
|
|
X.v[6] = 13.000000000000000;
|
|
X.v[7] = -10.000000000000000;
|
|
X.v[8] = -8.000000000000000;
|
|
X.v[9] = -20.000000000000000;
|
|
X.v[10] = 3.000000000000000;
|
|
X.v[11] = -8.000000000000000;
|
|
X.v[12] = 15.000000000000000;
|
|
X.v[13] = -6.000000000000000;
|
|
X.v[14] = 7.000000000000000;
|
|
X.v[15] = 16.000000000000000;
|
|
Y.v[0] = 18.000000000000000;
|
|
Y.v[1] = 8.000000000000000;
|
|
Y.v[2] = 1.000000000000000;
|
|
Y.v[3] = 16.000000000000000;
|
|
Y.v[4] = 15.000000000000000;
|
|
Y.v[5] = 11.000000000000000;
|
|
Y.v[6] = -12.000000000000000;
|
|
Y.v[7] = 14.000000000000000;
|
|
Y.v[8] = 11.000000000000000;
|
|
Y.v[9] = -5.000000000000000;
|
|
Y.v[10] = -18.000000000000000;
|
|
Y.v[11] = 8.000000000000000;
|
|
Y.v[12] = -4.000000000000000;
|
|
Y.v[13] = -7.000000000000000;
|
|
Y.v[14] = 14.000000000000000;
|
|
Y.v[15] = -15.000000000000000;
|
|
/*
|
|
[[ -1. -18. -8. 15.]
|
|
[ 19. 7. -20. -6.]
|
|
[ 5. 13. 3. 7.]
|
|
[ -2. -10. -8. 16.]]
|
|
[[ 18. 15. 11. -4.]
|
|
[ 8. 11. -5. -7.]
|
|
[ 1. -12. -18. 14.]
|
|
[ 16. 14. 8. -15.]]
|
|
[[ 17. -3. 3. 11.]
|
|
[ 27. 18. -25. -13.]
|
|
[ 6. 1. -15. 21.]
|
|
[ 14. 4. 0. 1.]]
|
|
*/
|
|
SST_Math_Mat44dAdd(&X,&Y,&A);
|
|
TASSERT(fabs((A.v[0])-( 17.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a11 failed!");
|
|
TASSERT(fabs((A.v[4])-( -3.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a12 failed!");
|
|
TASSERT(fabs((A.v[8])-( 3.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a13 failed!");
|
|
TASSERT(fabs((A.v[12])-( 11.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a14 failed!");
|
|
TASSERT(fabs((A.v[1])-( 27.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a21 failed!");
|
|
TASSERT(fabs((A.v[5])-( 18.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a22 failed!");
|
|
TASSERT(fabs((A.v[9])-( -25.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a23 failed!");
|
|
TASSERT(fabs((A.v[13])-( -13.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a24 failed!");
|
|
TASSERT(fabs((A.v[2])-( 6.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a31 failed!");
|
|
TASSERT(fabs((A.v[6])-( 1.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a32 failed!");
|
|
TASSERT(fabs((A.v[10])-( -15.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a33 failed!");
|
|
TASSERT(fabs((A.v[14])-( 21.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a34 failed!");
|
|
TASSERT(fabs((A.v[3])-( 14.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a41 failed!");
|
|
TASSERT(fabs((A.v[7])-( 4.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a42 failed!");
|
|
TASSERT(fabs((A.v[11])-( 0.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a43 failed!");
|
|
TASSERT(fabs((A.v[15])-( 1.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a44 failed!");
|
|
return ZTEST_SUCCESS;
|
|
}
|
|
|
|
/******************************************************************************/
|
|
|
|
static const char* testSST_Math_Mat44dAddLocal(){
|
|
SST_Mat44d X; /* 4 x 4 matrix */
|
|
SST_Mat44d Y; /* 4 x 4 matrix */
|
|
/* Resetting test vectors / mats */
|
|
X.v[0] = -10.000000000000000;
|
|
X.v[1] = -8.000000000000000;
|
|
X.v[2] = -5.000000000000000;
|
|
X.v[3] = 19.000000000000000;
|
|
X.v[4] = -1.000000000000000;
|
|
X.v[5] = -15.000000000000000;
|
|
X.v[6] = -5.000000000000000;
|
|
X.v[7] = -17.000000000000000;
|
|
X.v[8] = -14.000000000000000;
|
|
X.v[9] = 15.000000000000000;
|
|
X.v[10] = 6.000000000000000;
|
|
X.v[11] = -13.000000000000000;
|
|
X.v[12] = 14.000000000000000;
|
|
X.v[13] = -5.000000000000000;
|
|
X.v[14] = -5.000000000000000;
|
|
X.v[15] = -14.000000000000000;
|
|
Y.v[0] = -5.000000000000000;
|
|
Y.v[1] = -8.000000000000000;
|
|
Y.v[2] = 12.000000000000000;
|
|
Y.v[3] = -18.000000000000000;
|
|
Y.v[4] = -15.000000000000000;
|
|
Y.v[5] = -14.000000000000000;
|
|
Y.v[6] = -3.000000000000000;
|
|
Y.v[7] = -5.000000000000000;
|
|
Y.v[8] = 17.000000000000000;
|
|
Y.v[9] = -16.000000000000000;
|
|
Y.v[10] = 16.000000000000000;
|
|
Y.v[11] = -7.000000000000000;
|
|
Y.v[12] = -3.000000000000000;
|
|
Y.v[13] = 4.000000000000000;
|
|
Y.v[14] = -9.000000000000000;
|
|
Y.v[15] = 9.000000000000000;
|
|
/*
|
|
[[-10. -1. -14. 14.]
|
|
[ -8. -15. 15. -5.]
|
|
[ -5. -5. 6. -5.]
|
|
[ 19. -17. -13. -14.]]
|
|
[[ -5. -15. 17. -3.]
|
|
[ -8. -14. -16. 4.]
|
|
[ 12. -3. 16. -9.]
|
|
[-18. -5. -7. 9.]]
|
|
[[-15. -16. 3. 11.]
|
|
[-16. -29. -1. -1.]
|
|
[ 7. -8. 22. -14.]
|
|
[ 1. -22. -20. -5.]]
|
|
*/
|
|
SST_Math_Mat44dAddLocal(&X,&Y); /* for accuracy */
|
|
TASSERT(fabs((X.v[0])-( -15.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a11 failed!");
|
|
TASSERT(fabs((X.v[4])-( -16.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a12 failed!");
|
|
TASSERT(fabs((X.v[8])-( 3.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a13 failed!");
|
|
TASSERT(fabs((X.v[12])-( 11.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a14 failed!");
|
|
TASSERT(fabs((X.v[1])-( -16.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a21 failed!");
|
|
TASSERT(fabs((X.v[5])-( -29.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a22 failed!");
|
|
TASSERT(fabs((X.v[9])-( -1.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a23 failed!");
|
|
TASSERT(fabs((X.v[13])-( -1.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a24 failed!");
|
|
TASSERT(fabs((X.v[2])-( 7.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a31 failed!");
|
|
TASSERT(fabs((X.v[6])-( -8.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a32 failed!");
|
|
TASSERT(fabs((X.v[10])-( 22.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a33 failed!");
|
|
TASSERT(fabs((X.v[14])-( -14.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a34 failed!");
|
|
TASSERT(fabs((X.v[3])-( 1.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a41 failed!");
|
|
TASSERT(fabs((X.v[7])-( -22.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a42 failed!");
|
|
TASSERT(fabs((X.v[11])-( -20.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a43 failed!");
|
|
TASSERT(fabs((X.v[15])-( -5.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a44 failed!");
|
|
return ZTEST_SUCCESS;
|
|
}
|
|
|
|
/******************************************************************************/
|
|
|
|
static const char* testSST_Math_Mat44dSubtract(){
|
|
SST_Mat44d X; /* 4 x 4 matrix */
|
|
SST_Mat44d Y; /* 4 x 4 matrix */
|
|
SST_Mat44d A; /* 4 x 4 matrix */
|
|
/* Resetting test vectors / mats */
|
|
X.v[0] = -11.000000000000000;
|
|
X.v[1] = 13.000000000000000;
|
|
X.v[2] = 7.000000000000000;
|
|
X.v[3] = -14.000000000000000;
|
|
X.v[4] = 8.000000000000000;
|
|
X.v[5] = 6.000000000000000;
|
|
X.v[6] = -14.000000000000000;
|
|
X.v[7] = 4.000000000000000;
|
|
X.v[8] = 15.000000000000000;
|
|
X.v[9] = 17.000000000000000;
|
|
X.v[10] = -12.000000000000000;
|
|
X.v[11] = 14.000000000000000;
|
|
X.v[12] = -1.000000000000000;
|
|
X.v[13] = 8.000000000000000;
|
|
X.v[14] = -5.000000000000000;
|
|
X.v[15] = -12.000000000000000;
|
|
Y.v[0] = -1.000000000000000;
|
|
Y.v[1] = -17.000000000000000;
|
|
Y.v[2] = -4.000000000000000;
|
|
Y.v[3] = -16.000000000000000;
|
|
Y.v[4] = 7.000000000000000;
|
|
Y.v[5] = -6.000000000000000;
|
|
Y.v[6] = -1.000000000000000;
|
|
Y.v[7] = 2.000000000000000;
|
|
Y.v[8] = 1.000000000000000;
|
|
Y.v[9] = -15.000000000000000;
|
|
Y.v[10] = -6.000000000000000;
|
|
Y.v[11] = 5.000000000000000;
|
|
Y.v[12] = -1.000000000000000;
|
|
Y.v[13] = -19.000000000000000;
|
|
Y.v[14] = -5.000000000000000;
|
|
Y.v[15] = -20.000000000000000;
|
|
/*
|
|
[[-11. 8. 15. -1.]
|
|
[ 13. 6. 17. 8.]
|
|
[ 7. -14. -12. -5.]
|
|
[-14. 4. 14. -12.]]
|
|
[[ -1. 7. 1. -1.]
|
|
[-17. -6. -15. -19.]
|
|
[ -4. -1. -6. -5.]
|
|
[-16. 2. 5. -20.]]
|
|
[[-10. 1. 14. 0.]
|
|
[ 30. 12. 32. 27.]
|
|
[ 11. -13. -6. 0.]
|
|
[ 2. 2. 9. 8.]]
|
|
*/
|
|
SST_Math_Mat44dSubtract(&X,&Y,&A);
|
|
TASSERT(fabs((A.v[0])-( -10.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a11 failed!");
|
|
TASSERT(fabs((A.v[4])-( 1.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a12 failed!");
|
|
TASSERT(fabs((A.v[8])-( 14.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a13 failed!");
|
|
TASSERT(fabs((A.v[12])-( 0.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a14 failed!");
|
|
TASSERT(fabs((A.v[1])-( 30.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a21 failed!");
|
|
TASSERT(fabs((A.v[5])-( 12.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a22 failed!");
|
|
TASSERT(fabs((A.v[9])-( 32.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a23 failed!");
|
|
TASSERT(fabs((A.v[13])-( 27.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a24 failed!");
|
|
TASSERT(fabs((A.v[2])-( 11.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a31 failed!");
|
|
TASSERT(fabs((A.v[6])-( -13.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a32 failed!");
|
|
TASSERT(fabs((A.v[10])-( -6.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a33 failed!");
|
|
TASSERT(fabs((A.v[14])-( 0.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a34 failed!");
|
|
TASSERT(fabs((A.v[3])-( 2.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a41 failed!");
|
|
TASSERT(fabs((A.v[7])-( 2.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a42 failed!");
|
|
TASSERT(fabs((A.v[11])-( 9.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a43 failed!");
|
|
TASSERT(fabs((A.v[15])-( 8.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a44 failed!");
|
|
return ZTEST_SUCCESS;
|
|
}
|
|
|
|
/******************************************************************************/
|
|
|
|
static const char* testSST_Math_Mat44dSubtractLocal(){
|
|
SST_Mat44d X; /* 4 x 4 matrix */
|
|
SST_Mat44d Y; /* 4 x 4 matrix */
|
|
/* Resetting test vectors / mats */
|
|
X.v[0] = 17.000000000000000;
|
|
X.v[1] = -19.000000000000000;
|
|
X.v[2] = -12.000000000000000;
|
|
X.v[3] = 8.000000000000000;
|
|
X.v[4] = -8.000000000000000;
|
|
X.v[5] = -16.000000000000000;
|
|
X.v[6] = 7.000000000000000;
|
|
X.v[7] = 2.000000000000000;
|
|
X.v[8] = -2.000000000000000;
|
|
X.v[9] = 3.000000000000000;
|
|
X.v[10] = -12.000000000000000;
|
|
X.v[11] = -11.000000000000000;
|
|
X.v[12] = -6.000000000000000;
|
|
X.v[13] = -20.000000000000000;
|
|
X.v[14] = 5.000000000000000;
|
|
X.v[15] = -17.000000000000000;
|
|
Y.v[0] = -7.000000000000000;
|
|
Y.v[1] = 18.000000000000000;
|
|
Y.v[2] = -18.000000000000000;
|
|
Y.v[3] = 15.000000000000000;
|
|
Y.v[4] = -14.000000000000000;
|
|
Y.v[5] = -19.000000000000000;
|
|
Y.v[6] = -14.000000000000000;
|
|
Y.v[7] = 8.000000000000000;
|
|
Y.v[8] = 3.000000000000000;
|
|
Y.v[9] = 8.000000000000000;
|
|
Y.v[10] = -5.000000000000000;
|
|
Y.v[11] = 10.000000000000000;
|
|
Y.v[12] = 13.000000000000000;
|
|
Y.v[13] = 3.000000000000000;
|
|
Y.v[14] = -5.000000000000000;
|
|
Y.v[15] = 15.000000000000000;
|
|
/*
|
|
[[ 17. -8. -2. -6.]
|
|
[-19. -16. 3. -20.]
|
|
[-12. 7. -12. 5.]
|
|
[ 8. 2. -11. -17.]]
|
|
[[ -7. -14. 3. 13.]
|
|
[ 18. -19. 8. 3.]
|
|
[-18. -14. -5. -5.]
|
|
[ 15. 8. 10. 15.]]
|
|
[[ 24. 6. -5. -19.]
|
|
[-37. 3. -5. -23.]
|
|
[ 6. 21. -7. 10.]
|
|
[ -7. -6. -21. -32.]]
|
|
*/
|
|
SST_Math_Mat44dSubtractLocal(&X,&Y); /* for accuracy */
|
|
TASSERT(fabs((X.v[0])-( 24.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a11 failed!");
|
|
TASSERT(fabs((X.v[4])-( 6.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a12 failed!");
|
|
TASSERT(fabs((X.v[8])-( -5.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a13 failed!");
|
|
TASSERT(fabs((X.v[12])-( -19.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a14 failed!");
|
|
TASSERT(fabs((X.v[1])-( -37.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a21 failed!");
|
|
TASSERT(fabs((X.v[5])-( 3.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a22 failed!");
|
|
TASSERT(fabs((X.v[9])-( -5.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a23 failed!");
|
|
TASSERT(fabs((X.v[13])-( -23.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a24 failed!");
|
|
TASSERT(fabs((X.v[2])-( 6.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a31 failed!");
|
|
TASSERT(fabs((X.v[6])-( 21.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a32 failed!");
|
|
TASSERT(fabs((X.v[10])-( -7.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a33 failed!");
|
|
TASSERT(fabs((X.v[14])-( 10.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a34 failed!");
|
|
TASSERT(fabs((X.v[3])-( -7.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a41 failed!");
|
|
TASSERT(fabs((X.v[7])-( -6.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a42 failed!");
|
|
TASSERT(fabs((X.v[11])-( -21.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a43 failed!");
|
|
TASSERT(fabs((X.v[15])-( -32.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a44 failed!");
|
|
return ZTEST_SUCCESS;
|
|
}
|
|
|
|
/******************************************************************************/
|
|
|
|
static const char* testSST_Math_Mat44dMultiplyElementwise(){
|
|
SST_Mat44d X; /* 4 x 4 matrix */
|
|
SST_Mat44d Y; /* 4 x 4 matrix */
|
|
SST_Mat44d A; /* 4 x 4 matrix */
|
|
/* Resetting test vectors / mats */
|
|
X.v[0] = 9.000000000000000;
|
|
X.v[1] = 9.000000000000000;
|
|
X.v[2] = -5.000000000000000;
|
|
X.v[3] = -10.000000000000000;
|
|
X.v[4] = 2.000000000000000;
|
|
X.v[5] = -13.000000000000000;
|
|
X.v[6] = 17.000000000000000;
|
|
X.v[7] = 17.000000000000000;
|
|
X.v[8] = 16.000000000000000;
|
|
X.v[9] = 1.000000000000000;
|
|
X.v[10] = -20.000000000000000;
|
|
X.v[11] = -15.000000000000000;
|
|
X.v[12] = 7.000000000000000;
|
|
X.v[13] = 6.000000000000000;
|
|
X.v[14] = 18.000000000000000;
|
|
X.v[15] = 0.000000000000000;
|
|
Y.v[0] = 8.000000000000000;
|
|
Y.v[1] = 5.000000000000000;
|
|
Y.v[2] = 16.000000000000000;
|
|
Y.v[3] = -9.000000000000000;
|
|
Y.v[4] = -5.000000000000000;
|
|
Y.v[5] = -9.000000000000000;
|
|
Y.v[6] = -8.000000000000000;
|
|
Y.v[7] = -17.000000000000000;
|
|
Y.v[8] = 8.000000000000000;
|
|
Y.v[9] = 17.000000000000000;
|
|
Y.v[10] = 19.000000000000000;
|
|
Y.v[11] = -14.000000000000000;
|
|
Y.v[12] = 15.000000000000000;
|
|
Y.v[13] = -1.000000000000000;
|
|
Y.v[14] = 14.000000000000000;
|
|
Y.v[15] = 2.000000000000000;
|
|
/*
|
|
[[ 9. 2. 16. 7.]
|
|
[ 9. -13. 1. 6.]
|
|
[ -5. 17. -20. 18.]
|
|
[-10. 17. -15. 0.]]
|
|
[[ 8. -5. 8. 15.]
|
|
[ 5. -9. 17. -1.]
|
|
[ 16. -8. 19. 14.]
|
|
[ -9. -17. -14. 2.]]
|
|
[[ 72. -10. 128. 105.]
|
|
[ 45. 117. 17. -6.]
|
|
[ -80. -136. -380. 252.]
|
|
[ 90. -289. 210. 0.]]
|
|
*/
|
|
SST_Math_Mat44dMultiplyElementwise(&X, &Y, &A);
|
|
TASSERT(fabs((A.v[0])-( 72.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a11 failed!");
|
|
TASSERT(fabs((A.v[4])-( -10.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a12 failed!");
|
|
TASSERT(fabs((A.v[8])-( 128.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a13 failed!");
|
|
TASSERT(fabs((A.v[12])-( 105.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a14 failed!");
|
|
TASSERT(fabs((A.v[1])-( 45.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a21 failed!");
|
|
TASSERT(fabs((A.v[5])-( 117.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a22 failed!");
|
|
TASSERT(fabs((A.v[9])-( 17.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a23 failed!");
|
|
TASSERT(fabs((A.v[13])-( -6.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a24 failed!");
|
|
TASSERT(fabs((A.v[2])-( -80.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a31 failed!");
|
|
TASSERT(fabs((A.v[6])-( -136.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a32 failed!");
|
|
TASSERT(fabs((A.v[10])-( -380.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a33 failed!");
|
|
TASSERT(fabs((A.v[14])-( 252.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a34 failed!");
|
|
TASSERT(fabs((A.v[3])-( 90.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a41 failed!");
|
|
TASSERT(fabs((A.v[7])-( -289.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a42 failed!");
|
|
TASSERT(fabs((A.v[11])-( 210.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a43 failed!");
|
|
TASSERT(fabs((A.v[15])-( 0.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a44 failed!");
|
|
return ZTEST_SUCCESS;
|
|
}
|
|
|
|
/******************************************************************************/
|
|
|
|
static const char* testSST_Math_Mat44dMultiplyElementwiseLocal(){
|
|
SST_Mat44d X; /* 4 x 4 matrix */
|
|
SST_Mat44d Y; /* 4 x 4 matrix */
|
|
/* Resetting test vectors / mats */
|
|
X.v[0] = -1.000000000000000;
|
|
X.v[1] = 14.000000000000000;
|
|
X.v[2] = -8.000000000000000;
|
|
X.v[3] = -12.000000000000000;
|
|
X.v[4] = -4.000000000000000;
|
|
X.v[5] = -3.000000000000000;
|
|
X.v[6] = 10.000000000000000;
|
|
X.v[7] = 16.000000000000000;
|
|
X.v[8] = 0.000000000000000;
|
|
X.v[9] = -13.000000000000000;
|
|
X.v[10] = -3.000000000000000;
|
|
X.v[11] = -20.000000000000000;
|
|
X.v[12] = 4.000000000000000;
|
|
X.v[13] = -19.000000000000000;
|
|
X.v[14] = -18.000000000000000;
|
|
X.v[15] = -14.000000000000000;
|
|
Y.v[0] = -7.000000000000000;
|
|
Y.v[1] = -7.000000000000000;
|
|
Y.v[2] = -1.000000000000000;
|
|
Y.v[3] = -13.000000000000000;
|
|
Y.v[4] = 12.000000000000000;
|
|
Y.v[5] = -18.000000000000000;
|
|
Y.v[6] = -7.000000000000000;
|
|
Y.v[7] = 5.000000000000000;
|
|
Y.v[8] = -11.000000000000000;
|
|
Y.v[9] = -17.000000000000000;
|
|
Y.v[10] = -14.000000000000000;
|
|
Y.v[11] = -5.000000000000000;
|
|
Y.v[12] = 2.000000000000000;
|
|
Y.v[13] = 4.000000000000000;
|
|
Y.v[14] = -15.000000000000000;
|
|
Y.v[15] = -15.000000000000000;
|
|
/*
|
|
[[ -1. -4. 0. 4.]
|
|
[ 14. -3. -13. -19.]
|
|
[ -8. 10. -3. -18.]
|
|
[-12. 16. -20. -14.]]
|
|
[[ -7. 12. -11. 2.]
|
|
[ -7. -18. -17. 4.]
|
|
[ -1. -7. -14. -15.]
|
|
[-13. 5. -5. -15.]]
|
|
[[ 7. -48. -0. 8.]
|
|
[ -98. 54. 221. -76.]
|
|
[ 8. -70. 42. 270.]
|
|
[ 156. 80. 100. 210.]]
|
|
*/
|
|
SST_Math_Mat44dMultiplyElementwiseLocal(&X,&Y);
|
|
TASSERT(fabs((X.v[0])-( 7.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a11 failed!");
|
|
TASSERT(fabs((X.v[4])-( -48.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a12 failed!");
|
|
TASSERT(fabs((X.v[8])-( -0.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a13 failed!");
|
|
TASSERT(fabs((X.v[12])-( 8.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a14 failed!");
|
|
TASSERT(fabs((X.v[1])-( -98.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a21 failed!");
|
|
TASSERT(fabs((X.v[5])-( 54.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a22 failed!");
|
|
TASSERT(fabs((X.v[9])-( 221.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a23 failed!");
|
|
TASSERT(fabs((X.v[13])-( -76.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a24 failed!");
|
|
TASSERT(fabs((X.v[2])-( 8.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a31 failed!");
|
|
TASSERT(fabs((X.v[6])-( -70.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a32 failed!");
|
|
TASSERT(fabs((X.v[10])-( 42.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a33 failed!");
|
|
TASSERT(fabs((X.v[14])-( 270.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a34 failed!");
|
|
TASSERT(fabs((X.v[3])-( 156.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a41 failed!");
|
|
TASSERT(fabs((X.v[7])-( 80.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a42 failed!");
|
|
TASSERT(fabs((X.v[11])-( 100.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a43 failed!");
|
|
TASSERT(fabs((X.v[15])-( 210.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a44 failed!");
|
|
return ZTEST_SUCCESS;
|
|
}
|
|
|
|
/******************************************************************************/
|
|
|
|
static const char* testSST_Math_Mat44dMultiplyScalar(){
|
|
SST_Mat44d X; /* 4 x 4 matrix */
|
|
SST_Mat44d A; /* 4 x 4 matrix */
|
|
/* Resetting test vectors / mats */
|
|
X.v[0] = -11.000000000000000;
|
|
X.v[1] = 8.000000000000000;
|
|
X.v[2] = 9.000000000000000;
|
|
X.v[3] = 8.000000000000000;
|
|
X.v[4] = -1.000000000000000;
|
|
X.v[5] = -8.000000000000000;
|
|
X.v[6] = -20.000000000000000;
|
|
X.v[7] = 9.000000000000000;
|
|
X.v[8] = 16.000000000000000;
|
|
X.v[9] = -2.000000000000000;
|
|
X.v[10] = -13.000000000000000;
|
|
X.v[11] = -3.000000000000000;
|
|
X.v[12] = -7.000000000000000;
|
|
X.v[13] = -8.000000000000000;
|
|
X.v[14] = 14.000000000000000;
|
|
X.v[15] = -9.000000000000000;
|
|
/*
|
|
[[-11. -1. 16. -7.]
|
|
[ 8. -8. -2. -8.]
|
|
[ 9. -20. -13. 14.]
|
|
[ 8. 9. -3. -9.]]
|
|
[[-22. -2. 32. -14.]
|
|
[ 16. -16. -4. -16.]
|
|
[ 18. -40. -26. 28.]
|
|
[ 16. 18. -6. -18.]]
|
|
*/
|
|
SST_Math_Mat44dMultiplyScalar(&X, 2.000000000000000,&A);
|
|
TASSERT(fabs((A.v[0])-( -22.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a11 failed!");
|
|
TASSERT(fabs((A.v[4])-( -2.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a12 failed!");
|
|
TASSERT(fabs((A.v[8])-( 32.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a13 failed!");
|
|
TASSERT(fabs((A.v[12])-( -14.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a14 failed!");
|
|
TASSERT(fabs((A.v[1])-( 16.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a21 failed!");
|
|
TASSERT(fabs((A.v[5])-( -16.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a22 failed!");
|
|
TASSERT(fabs((A.v[9])-( -4.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a23 failed!");
|
|
TASSERT(fabs((A.v[13])-( -16.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a24 failed!");
|
|
TASSERT(fabs((A.v[2])-( 18.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a31 failed!");
|
|
TASSERT(fabs((A.v[6])-( -40.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a32 failed!");
|
|
TASSERT(fabs((A.v[10])-( -26.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a33 failed!");
|
|
TASSERT(fabs((A.v[14])-( 28.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a34 failed!");
|
|
TASSERT(fabs((A.v[3])-( 16.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a41 failed!");
|
|
TASSERT(fabs((A.v[7])-( 18.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a42 failed!");
|
|
TASSERT(fabs((A.v[11])-( -6.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a43 failed!");
|
|
TASSERT(fabs((A.v[15])-( -18.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a44 failed!");
|
|
return ZTEST_SUCCESS;
|
|
}
|
|
|
|
/******************************************************************************/
|
|
|
|
static const char* testSST_Math_Mat44dMultiplyScalarLocal(){
|
|
SST_Mat44d X; /* 4 x 4 matrix */
|
|
/* Resetting test vectors / mats */
|
|
X.v[0] = -14.000000000000000;
|
|
X.v[1] = 7.000000000000000;
|
|
X.v[2] = -15.000000000000000;
|
|
X.v[3] = 10.000000000000000;
|
|
X.v[4] = 1.000000000000000;
|
|
X.v[5] = -12.000000000000000;
|
|
X.v[6] = 3.000000000000000;
|
|
X.v[7] = -1.000000000000000;
|
|
X.v[8] = -7.000000000000000;
|
|
X.v[9] = 19.000000000000000;
|
|
X.v[10] = -15.000000000000000;
|
|
X.v[11] = 3.000000000000000;
|
|
X.v[12] = -1.000000000000000;
|
|
X.v[13] = -4.000000000000000;
|
|
X.v[14] = 2.000000000000000;
|
|
X.v[15] = 4.000000000000000;
|
|
/*
|
|
[[-14. 1. -7. -1.]
|
|
[ 7. -12. 19. -4.]
|
|
[-15. 3. -15. 2.]
|
|
[ 10. -1. 3. 4.]]
|
|
[[-28. 2. -14. -2.]
|
|
[ 14. -24. 38. -8.]
|
|
[-30. 6. -30. 4.]
|
|
[ 20. -2. 6. 8.]]
|
|
*/
|
|
SST_Math_Mat44dMultiplyScalarLocal(&X, 2.000000000000000);
|
|
TASSERT(fabs((X.v[0])-( -28.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a11 failed!");
|
|
TASSERT(fabs((X.v[4])-( 2.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a12 failed!");
|
|
TASSERT(fabs((X.v[8])-( -14.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a13 failed!");
|
|
TASSERT(fabs((X.v[12])-( -2.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a14 failed!");
|
|
TASSERT(fabs((X.v[1])-( 14.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a21 failed!");
|
|
TASSERT(fabs((X.v[5])-( -24.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a22 failed!");
|
|
TASSERT(fabs((X.v[9])-( 38.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a23 failed!");
|
|
TASSERT(fabs((X.v[13])-( -8.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a24 failed!");
|
|
TASSERT(fabs((X.v[2])-( -30.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a31 failed!");
|
|
TASSERT(fabs((X.v[6])-( 6.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a32 failed!");
|
|
TASSERT(fabs((X.v[10])-( -30.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a33 failed!");
|
|
TASSERT(fabs((X.v[14])-( 4.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a34 failed!");
|
|
TASSERT(fabs((X.v[3])-( 20.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a41 failed!");
|
|
TASSERT(fabs((X.v[7])-( -2.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a42 failed!");
|
|
TASSERT(fabs((X.v[11])-( 6.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a43 failed!");
|
|
TASSERT(fabs((X.v[15])-( 8.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a44 failed!");
|
|
return ZTEST_SUCCESS;
|
|
}
|
|
|
|
/******************************************************************************/
|
|
|
|
static const char* testSST_Math_Mat44dMultiplyMatrix(){
|
|
SST_Mat44d X; /* 4 x 4 matrix */
|
|
SST_Mat44d Y; /* 4 x 4 matrix */
|
|
SST_Mat44d A; /* 4 x 4 matrix */
|
|
/* Resetting test vectors / mats */
|
|
X.v[0] = -9.000000000000000;
|
|
X.v[1] = 11.000000000000000;
|
|
X.v[2] = -6.000000000000000;
|
|
X.v[3] = -4.000000000000000;
|
|
X.v[4] = 18.000000000000000;
|
|
X.v[5] = 3.000000000000000;
|
|
X.v[6] = 18.000000000000000;
|
|
X.v[7] = -17.000000000000000;
|
|
X.v[8] = -12.000000000000000;
|
|
X.v[9] = 14.000000000000000;
|
|
X.v[10] = -2.000000000000000;
|
|
X.v[11] = 8.000000000000000;
|
|
X.v[12] = 0.000000000000000;
|
|
X.v[13] = -13.000000000000000;
|
|
X.v[14] = 11.000000000000000;
|
|
X.v[15] = 0.000000000000000;
|
|
Y.v[0] = 11.000000000000000;
|
|
Y.v[1] = -16.000000000000000;
|
|
Y.v[2] = 11.000000000000000;
|
|
Y.v[3] = -20.000000000000000;
|
|
Y.v[4] = -7.000000000000000;
|
|
Y.v[5] = -3.000000000000000;
|
|
Y.v[6] = 9.000000000000000;
|
|
Y.v[7] = 16.000000000000000;
|
|
Y.v[8] = 5.000000000000000;
|
|
Y.v[9] = -9.000000000000000;
|
|
Y.v[10] = -7.000000000000000;
|
|
Y.v[11] = -19.000000000000000;
|
|
Y.v[12] = -5.000000000000000;
|
|
Y.v[13] = 19.000000000000000;
|
|
Y.v[14] = 10.000000000000000;
|
|
Y.v[15] = 6.000000000000000;
|
|
/*
|
|
X
|
|
[[ -9. 18. -12. 0.]
|
|
[ 11. 3. 14. -13.]
|
|
[ -6. 18. -2. 11.]
|
|
[ -4. -17. 8. 0.]]
|
|
Y
|
|
[[ 11. -7. 5. -5.]
|
|
[-16. -3. -9. 19.]
|
|
[ 11. 9. -7. 10.]
|
|
[-20. 16. -19. 6.]]
|
|
[[-519. -99. -123. 267.]
|
|
[ 487. -168. 177. 64.]
|
|
[-596. 146. -387. 418.]
|
|
[ 316. 151. 77. -223.]]
|
|
*/
|
|
SST_Math_Mat44dMultiplyMatrix(&X,&Y,&A);
|
|
TASSERT(fabs((A.v[0])-( -519.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a11 failed!");
|
|
TASSERT(fabs((A.v[4])-( -99.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a12 failed!");
|
|
TASSERT(fabs((A.v[8])-( -123.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a13 failed!");
|
|
TASSERT(fabs((A.v[12])-( 267.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a14 failed!");
|
|
TASSERT(fabs((A.v[1])-( 487.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a21 failed!");
|
|
TASSERT(fabs((A.v[5])-( -168.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a22 failed!");
|
|
TASSERT(fabs((A.v[9])-( 177.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a23 failed!");
|
|
TASSERT(fabs((A.v[13])-( 64.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a24 failed!");
|
|
TASSERT(fabs((A.v[2])-( -596.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a31 failed!");
|
|
TASSERT(fabs((A.v[6])-( 146.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a32 failed!");
|
|
TASSERT(fabs((A.v[10])-( -387.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a33 failed!");
|
|
TASSERT(fabs((A.v[14])-( 418.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a34 failed!");
|
|
TASSERT(fabs((A.v[3])-( 316.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a41 failed!");
|
|
TASSERT(fabs((A.v[7])-( 151.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a42 failed!");
|
|
TASSERT(fabs((A.v[11])-( 77.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a43 failed!");
|
|
TASSERT(fabs((A.v[15])-( -223.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a44 failed!");
|
|
return ZTEST_SUCCESS;
|
|
}
|
|
|
|
/******************************************************************************/
|
|
|
|
static const char* testSST_Math_Mat44dMultiplyMatrixLocal(){
|
|
SST_Mat44d X; /* 4 x 4 matrix */
|
|
SST_Mat44d Y; /* 4 x 4 matrix */
|
|
/* Resetting test vectors / mats */
|
|
X.v[0] = -14.000000000000000;
|
|
X.v[1] = 0.000000000000000;
|
|
X.v[2] = -17.000000000000000;
|
|
X.v[3] = -11.000000000000000;
|
|
X.v[4] = -20.000000000000000;
|
|
X.v[5] = 3.000000000000000;
|
|
X.v[6] = -6.000000000000000;
|
|
X.v[7] = 11.000000000000000;
|
|
X.v[8] = 13.000000000000000;
|
|
X.v[9] = 7.000000000000000;
|
|
X.v[10] = -9.000000000000000;
|
|
X.v[11] = 12.000000000000000;
|
|
X.v[12] = -18.000000000000000;
|
|
X.v[13] = -18.000000000000000;
|
|
X.v[14] = -3.000000000000000;
|
|
X.v[15] = -4.000000000000000;
|
|
Y.v[0] = 0.000000000000000;
|
|
Y.v[1] = -10.000000000000000;
|
|
Y.v[2] = 7.000000000000000;
|
|
Y.v[3] = 5.000000000000000;
|
|
Y.v[4] = -15.000000000000000;
|
|
Y.v[5] = -14.000000000000000;
|
|
Y.v[6] = 19.000000000000000;
|
|
Y.v[7] = 17.000000000000000;
|
|
Y.v[8] = 0.000000000000000;
|
|
Y.v[9] = -8.000000000000000;
|
|
Y.v[10] = 16.000000000000000;
|
|
Y.v[11] = -5.000000000000000;
|
|
Y.v[12] = -12.000000000000000;
|
|
Y.v[13] = 19.000000000000000;
|
|
Y.v[14] = -8.000000000000000;
|
|
Y.v[15] = 3.000000000000000;
|
|
/*
|
|
X
|
|
[[-14. -20. 13. -18.]
|
|
[ 0. 3. 7. -18.]
|
|
[-17. -6. -9. -3.]
|
|
[-11. 11. 12. -4.]]
|
|
Y
|
|
[[ 0. -15. 0. -12.]
|
|
[-10. -14. -8. 19.]
|
|
[ 7. 19. 16. -8.]
|
|
[ 5. 17. -5. 3.]]
|
|
X
|
|
[[ 201. 431. 458. -370.]
|
|
[ -71. -215. 178. -53.]
|
|
[ -18. 117. -81. 153.]
|
|
[ -46. 171. 124. 233.]]
|
|
*/
|
|
SST_Math_Mat44dMultiplyMatrixLocal(&X,&Y);
|
|
TASSERT(fabs((X.v[0])-( 201.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a11 failed!");
|
|
TASSERT(fabs((X.v[4])-( 431.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a12 failed!");
|
|
TASSERT(fabs((X.v[8])-( 458.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a13 failed!");
|
|
TASSERT(fabs((X.v[12])-( -370.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a14 failed!");
|
|
TASSERT(fabs((X.v[1])-( -71.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a21 failed!");
|
|
TASSERT(fabs((X.v[5])-( -215.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a22 failed!");
|
|
TASSERT(fabs((X.v[9])-( 178.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a23 failed!");
|
|
TASSERT(fabs((X.v[13])-( -53.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a24 failed!");
|
|
TASSERT(fabs((X.v[2])-( -18.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a31 failed!");
|
|
TASSERT(fabs((X.v[6])-( 117.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a32 failed!");
|
|
TASSERT(fabs((X.v[10])-( -81.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a33 failed!");
|
|
TASSERT(fabs((X.v[14])-( 153.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a34 failed!");
|
|
TASSERT(fabs((X.v[3])-( -46.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a41 failed!");
|
|
TASSERT(fabs((X.v[7])-( 171.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a42 failed!");
|
|
TASSERT(fabs((X.v[11])-( 124.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a43 failed!");
|
|
TASSERT(fabs((X.v[15])-( 233.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a44 failed!");
|
|
return ZTEST_SUCCESS;
|
|
}
|
|
|
|
/******************************************************************************/
|
|
|
|
static const char* testSST_Math_Mat44dMultiplyVector(){
|
|
SST_Mat44d X; /* 4 x 4 matrix */
|
|
SST_Vec4d v; /* 4 vector */
|
|
SST_Vec4d w; /* 4 vector */
|
|
/* Resetting test vectors / mats */
|
|
v.v[0] = -9.000000000000000;
|
|
v.v[1] = 10.000000000000000;
|
|
v.v[2] = -9.000000000000000;
|
|
v.v[3] = -15.000000000000000;
|
|
X.v[0] = 2.000000000000000;
|
|
X.v[1] = -9.000000000000000;
|
|
X.v[2] = 7.000000000000000;
|
|
X.v[3] = -3.000000000000000;
|
|
X.v[4] = -16.000000000000000;
|
|
X.v[5] = -9.000000000000000;
|
|
X.v[6] = 19.000000000000000;
|
|
X.v[7] = -11.000000000000000;
|
|
X.v[8] = -15.000000000000000;
|
|
X.v[9] = -4.000000000000000;
|
|
X.v[10] = 5.000000000000000;
|
|
X.v[11] = -17.000000000000000;
|
|
X.v[12] = 5.000000000000000;
|
|
X.v[13] = 17.000000000000000;
|
|
X.v[14] = 11.000000000000000;
|
|
X.v[15] = 4.000000000000000;
|
|
/*
|
|
X
|
|
[[ 2. -16. -15. 5.]
|
|
[ -9. -9. -4. 17.]
|
|
[ 7. 19. 5. 11.]
|
|
[ -3. -11. -17. 4.]]
|
|
v
|
|
[ -9. 10. -9. -15.]
|
|
w
|
|
[-118. -228. -83. 10.]
|
|
*/
|
|
SST_Math_Mat44dMultiplyVector(&X,&v,&w);
|
|
TASSERT(fabs((w.v[0])-( -118.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry .v[0] failed!");
|
|
TASSERT(fabs((w.v[1])-( -228.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry .v[1] failed!");
|
|
TASSERT(fabs((w.v[2])-( -83.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry .v[2] failed!");
|
|
TASSERT(fabs((w.v[3])-( 10.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry .v[3] failed!");
|
|
return ZTEST_SUCCESS;
|
|
}
|
|
|
|
/******************************************************************************/
|
|
|
|
static const char* testSST_Math_Mat44dMultiplyVectorLocal(){
|
|
SST_Mat44d X; /* 4 x 4 matrix */
|
|
SST_Vec4d v; /* 4 vector */
|
|
/* Resetting test vectors / mats */
|
|
v.v[0] = -5.000000000000000;
|
|
v.v[1] = 3.000000000000000;
|
|
v.v[2] = 11.000000000000000;
|
|
v.v[3] = -4.000000000000000;
|
|
X.v[0] = -12.000000000000000;
|
|
X.v[1] = -8.000000000000000;
|
|
X.v[2] = -4.000000000000000;
|
|
X.v[3] = 19.000000000000000;
|
|
X.v[4] = -17.000000000000000;
|
|
X.v[5] = -1.000000000000000;
|
|
X.v[6] = -9.000000000000000;
|
|
X.v[7] = 7.000000000000000;
|
|
X.v[8] = 4.000000000000000;
|
|
X.v[9] = 3.000000000000000;
|
|
X.v[10] = 9.000000000000000;
|
|
X.v[11] = -13.000000000000000;
|
|
X.v[12] = 8.000000000000000;
|
|
X.v[13] = -14.000000000000000;
|
|
X.v[14] = -13.000000000000000;
|
|
X.v[15] = 8.000000000000000;
|
|
/*
|
|
X
|
|
[[-12. -17. 4. 8.]
|
|
[ -8. -1. 3. -14.]
|
|
[ -4. -9. 9. -13.]
|
|
[ 19. 7. -13. 8.]]
|
|
v
|
|
[ -5. 3. 11. -4.]
|
|
v
|
|
[ 21. 126. 144. -249.]
|
|
*/
|
|
SST_Math_Mat44dMultiplyVectorLocal(&X,&v);
|
|
TASSERT(fabs((v.v[0])-( 21.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry .v[0] failed!");
|
|
TASSERT(fabs((v.v[1])-( 126.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry .v[1] failed!");
|
|
TASSERT(fabs((v.v[2])-( 144.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry .v[2] failed!");
|
|
TASSERT(fabs((v.v[3])-( -249.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry .v[3] failed!");
|
|
return ZTEST_SUCCESS;
|
|
}
|
|
|
|
/******************************************************************************/
|
|
|
|
static const char* testSST_Math_Mat44dTranspose(){
|
|
SST_Mat44d X; /* 4 x 4 matrix */
|
|
SST_Mat44d A; /* 4 x 4 matrix */
|
|
/* Resetting test vectors / mats */
|
|
X.v[0] = -4.000000000000000;
|
|
X.v[1] = 16.000000000000000;
|
|
X.v[2] = -4.000000000000000;
|
|
X.v[3] = 3.000000000000000;
|
|
X.v[4] = -13.000000000000000;
|
|
X.v[5] = 2.000000000000000;
|
|
X.v[6] = 15.000000000000000;
|
|
X.v[7] = -17.000000000000000;
|
|
X.v[8] = 1.000000000000000;
|
|
X.v[9] = 9.000000000000000;
|
|
X.v[10] = -5.000000000000000;
|
|
X.v[11] = 4.000000000000000;
|
|
X.v[12] = -19.000000000000000;
|
|
X.v[13] = -17.000000000000000;
|
|
X.v[14] = 7.000000000000000;
|
|
X.v[15] = -10.000000000000000;
|
|
SST_Math_Mat44dTranspose(&X,&A);
|
|
TASSERT(fabs((A.v[0])-( -4.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a11 failed!");
|
|
TASSERT(fabs((A.v[4])-( 16.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a12 failed!");
|
|
TASSERT(fabs((A.v[8])-( -4.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a13 failed!");
|
|
TASSERT(fabs((A.v[12])-( 3.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a14 failed!");
|
|
TASSERT(fabs((A.v[1])-( -13.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a21 failed!");
|
|
TASSERT(fabs((A.v[5])-( 2.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a22 failed!");
|
|
TASSERT(fabs((A.v[9])-( 15.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a23 failed!");
|
|
TASSERT(fabs((A.v[13])-( -17.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a24 failed!");
|
|
TASSERT(fabs((A.v[2])-( 1.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a31 failed!");
|
|
TASSERT(fabs((A.v[6])-( 9.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a32 failed!");
|
|
TASSERT(fabs((A.v[10])-( -5.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a33 failed!");
|
|
TASSERT(fabs((A.v[14])-( 4.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a34 failed!");
|
|
TASSERT(fabs((A.v[3])-( -19.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a41 failed!");
|
|
TASSERT(fabs((A.v[7])-( -17.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a42 failed!");
|
|
TASSERT(fabs((A.v[11])-( 7.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a43 failed!");
|
|
TASSERT(fabs((A.v[15])-( -10.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a44 failed!");
|
|
return ZTEST_SUCCESS;
|
|
}
|
|
|
|
/******************************************************************************/
|
|
|
|
static const char* testSST_Math_Mat44dTransposeLocal(){
|
|
SST_Mat44d X; /* 4 x 4 matrix */
|
|
/* Resetting test vectors / mats */
|
|
X.v[0] = 18.000000000000000;
|
|
X.v[1] = 9.000000000000000;
|
|
X.v[2] = 5.000000000000000;
|
|
X.v[3] = 10.000000000000000;
|
|
X.v[4] = 15.000000000000000;
|
|
X.v[5] = -18.000000000000000;
|
|
X.v[6] = 9.000000000000000;
|
|
X.v[7] = -5.000000000000000;
|
|
X.v[8] = -14.000000000000000;
|
|
X.v[9] = 13.000000000000000;
|
|
X.v[10] = -16.000000000000000;
|
|
X.v[11] = 3.000000000000000;
|
|
X.v[12] = -13.000000000000000;
|
|
X.v[13] = 2.000000000000000;
|
|
X.v[14] = -15.000000000000000;
|
|
X.v[15] = -4.000000000000000;
|
|
SST_Math_Mat44dTransposeLocal(&X);
|
|
TASSERT(fabs((X.v[0])-( 18.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a11 failed!");
|
|
TASSERT(fabs((X.v[4])-( 9.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a12 failed!");
|
|
TASSERT(fabs((X.v[8])-( 5.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a13 failed!");
|
|
TASSERT(fabs((X.v[12])-( 10.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a14 failed!");
|
|
TASSERT(fabs((X.v[1])-( 15.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a21 failed!");
|
|
TASSERT(fabs((X.v[5])-( -18.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a22 failed!");
|
|
TASSERT(fabs((X.v[9])-( 9.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a23 failed!");
|
|
TASSERT(fabs((X.v[13])-( -5.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a24 failed!");
|
|
TASSERT(fabs((X.v[2])-( -14.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a31 failed!");
|
|
TASSERT(fabs((X.v[6])-( 13.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a32 failed!");
|
|
TASSERT(fabs((X.v[10])-( -16.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a33 failed!");
|
|
TASSERT(fabs((X.v[14])-( 3.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a34 failed!");
|
|
TASSERT(fabs((X.v[3])-( -13.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a41 failed!");
|
|
TASSERT(fabs((X.v[7])-( 2.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a42 failed!");
|
|
TASSERT(fabs((X.v[11])-( -15.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a43 failed!");
|
|
TASSERT(fabs((X.v[15])-( -4.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a44 failed!");
|
|
return ZTEST_SUCCESS;
|
|
}
|
|
|
|
/******************************************************************************/
|
|
|
|
static const char* testSST_Math_Mat44dCheckOrthonormal(){
|
|
SST_Mat44d X; /* 4 x 4 matrix */
|
|
SST_Mat44d Y; /* 4 x 4 matrix */
|
|
/* Resetting test vectors / mats */
|
|
X.v[0] = 13.000000000000000;
|
|
X.v[1] = 5.000000000000000;
|
|
X.v[2] = 6.000000000000000;
|
|
X.v[3] = -8.000000000000000;
|
|
X.v[4] = -13.000000000000000;
|
|
X.v[5] = 0.000000000000000;
|
|
X.v[6] = 0.000000000000000;
|
|
X.v[7] = 18.000000000000000;
|
|
X.v[8] = -9.000000000000000;
|
|
X.v[9] = 18.000000000000000;
|
|
X.v[10] = -2.000000000000000;
|
|
X.v[11] = -4.000000000000000;
|
|
X.v[12] = 5.000000000000000;
|
|
X.v[13] = -8.000000000000000;
|
|
X.v[14] = 9.000000000000000;
|
|
X.v[15] = 4.000000000000000;
|
|
Y.v[0] = 3.000000000000000;
|
|
Y.v[1] = 15.000000000000000;
|
|
Y.v[2] = 15.000000000000000;
|
|
Y.v[3] = -8.000000000000000;
|
|
Y.v[4] = 12.000000000000000;
|
|
Y.v[5] = 17.000000000000000;
|
|
Y.v[6] = -10.000000000000000;
|
|
Y.v[7] = -11.000000000000000;
|
|
Y.v[8] = 15.000000000000000;
|
|
Y.v[9] = 12.000000000000000;
|
|
Y.v[10] = -7.000000000000000;
|
|
Y.v[11] = 11.000000000000000;
|
|
Y.v[12] = -10.000000000000000;
|
|
Y.v[13] = 15.000000000000000;
|
|
Y.v[14] = 3.000000000000000;
|
|
Y.v[15] = 13.000000000000000;
|
|
/*
|
|
[[-0.7581754 -0.06646594 -0.43576095 0.48048387]
|
|
[-0.29160592 -0.42113034 0.82701602 0.23164571]
|
|
[-0.34992711 -0.5053564 -0.16465295 -0.7713983 ]
|
|
[ 0.46656947 -0.75023091 -0.31471624 0.34701613]]
|
|
[[ 1.00000000e+00 0.00000000e+00 0.00000000e+00 8.32667268e-17]
|
|
[ 0.00000000e+00 1.00000000e+00 -1.38777878e-16 -5.55111512e-17]
|
|
[ 0.00000000e+00 -1.38777878e-16 1.00000000e+00 -4.16333634e-17]
|
|
[ 8.32667268e-17 -5.55111512e-17 -4.16333634e-17 1.00000000e+00]]
|
|
*/
|
|
/* Set X to orthogonal matrix Q */
|
|
X.v[0] = (double) -0.758175396575746;
|
|
X.v[1] = (double) -0.291605921759902;
|
|
X.v[2] = (double) -0.349927106111883;
|
|
X.v[3] = (double) 0.466569474815844;
|
|
X.v[4] = (double) -0.066465938150304;
|
|
X.v[5] = (double) -0.421130336863261;
|
|
X.v[6] = (double) -0.505356404235913;
|
|
X.v[7] = (double) -0.750230913210716;
|
|
X.v[8] = (double) -0.435760946151503;
|
|
X.v[9] = (double) 0.827016017354744;
|
|
X.v[10] = (double) -0.164652949650292;
|
|
X.v[11] = (double) -0.314716238887197;
|
|
X.v[12] = (double) 0.480483865392125;
|
|
X.v[13] = (double) 0.231645705349122;
|
|
X.v[14] = (double) -0.771398296133308;
|
|
X.v[15] = (double) 0.347016125005424;
|
|
/* Check Positive Test */
|
|
TASSERT(SST_Math_Mat44dCheckOrthonormal(&X),"CheckOrthonormal failed when it should have passed");
|
|
/* Check Negative Test */
|
|
TASSERT(!SST_Math_Mat44dCheckOrthonormal(&Y),"CheckOrthonormal succeeded when it should have failed");
|
|
return ZTEST_SUCCESS;
|
|
}
|
|
|
|
/******************************************************************************/
|
|
|
|
static const char* testSST_Math_Mat44dDeterminant(){
|
|
SST_Mat44d X; /* 4 x 4 matrix */
|
|
/* Resetting test vectors / mats */
|
|
X.v[0] = 13.000000000000000;
|
|
X.v[1] = 1.000000000000000;
|
|
X.v[2] = -13.000000000000000;
|
|
X.v[3] = 12.000000000000000;
|
|
X.v[4] = 0.000000000000000;
|
|
X.v[5] = 15.000000000000000;
|
|
X.v[6] = -16.000000000000000;
|
|
X.v[7] = 15.000000000000000;
|
|
X.v[8] = 1.000000000000000;
|
|
X.v[9] = -15.000000000000000;
|
|
X.v[10] = 0.000000000000000;
|
|
X.v[11] = -7.000000000000000;
|
|
X.v[12] = -20.000000000000000;
|
|
X.v[13] = -18.000000000000000;
|
|
X.v[14] = -17.000000000000000;
|
|
X.v[15] = 18.000000000000000;
|
|
/* det(X) =
|
|
-79537.0
|
|
*/
|
|
double result = SST_Math_Mat44dDeterminant(&X);
|
|
TASSERT(fabs( (result)/( -79537.000000000087311) - 1.000000000000000 ) <= 100*DBL_EPSILON,"Determinant failed!");
|
|
return ZTEST_SUCCESS;
|
|
}
|
|
|
|
/******************************************************************************/
|
|
|
|
static const char* testSST_Math_Mat44dInvert(){
|
|
SST_Mat44d X; /* 4 x 4 matrix */
|
|
SST_Mat44d B; /* 4 x 4 matrix */
|
|
/* Resetting test vectors / mats */
|
|
X.v[0] = 18.000000000000000;
|
|
X.v[1] = -3.000000000000000;
|
|
X.v[2] = -18.000000000000000;
|
|
X.v[3] = 6.000000000000000;
|
|
X.v[4] = 18.000000000000000;
|
|
X.v[5] = 7.000000000000000;
|
|
X.v[6] = 3.000000000000000;
|
|
X.v[7] = 17.000000000000000;
|
|
X.v[8] = -19.000000000000000;
|
|
X.v[9] = 4.000000000000000;
|
|
X.v[10] = 1.000000000000000;
|
|
X.v[11] = -5.000000000000000;
|
|
X.v[12] = -19.000000000000000;
|
|
X.v[13] = -5.000000000000000;
|
|
X.v[14] = -13.000000000000000;
|
|
X.v[15] = 19.000000000000000;
|
|
/*
|
|
[[ 0.0105392 0.04187555 -0.05804834 -0.0181582 ]
|
|
[ 0.00640294 0.06154762 0.00476498 0.02585993]
|
|
[-0.02178984 0.1316325 -0.05109942 -0.02211247]
|
|
[-0.01479128 -0.03365265 0.00062044 0.02940884]]
|
|
*/
|
|
SST_Math_Mat44dInvert(&X,&B);
|
|
TASSERT(fabs((B.v[0])-( 0.010539203520789)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a11 failed!");
|
|
TASSERT(fabs((B.v[1])-( 0.006402938402740)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a21 failed!");
|
|
TASSERT(fabs((B.v[2])-( -0.021789844641882)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a31 failed!");
|
|
TASSERT(fabs((B.v[3])-( -0.014791284062143)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a41 failed!");
|
|
TASSERT(fabs((B.v[4])-( 0.041875548055128)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a12 failed!");
|
|
TASSERT(fabs((B.v[5])-( 0.061547624956569)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a22 failed!");
|
|
TASSERT(fabs((B.v[6])-( 0.131632501116792)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a32 failed!");
|
|
TASSERT(fabs((B.v[7])-( -0.033652653000447)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a42 failed!");
|
|
TASSERT(fabs((B.v[8])-( -0.058048344666700)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a13 failed!");
|
|
TASSERT(fabs((B.v[9])-( 0.004764977415992)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a23 failed!");
|
|
TASSERT(fabs((B.v[10])-( -0.051099419268377)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a33 failed!");
|
|
TASSERT(fabs((B.v[11])-( 0.000620439767707)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a43 failed!");
|
|
TASSERT(fabs((B.v[12])-( -0.018158203868235)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a14 failed!");
|
|
TASSERT(fabs((B.v[13])-( 0.025859929518042)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a24 failed!");
|
|
TASSERT(fabs((B.v[14])-( -0.022112473321090)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a34 failed!");
|
|
TASSERT(fabs((B.v[15])-( 0.029408844989328)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a44 failed!");
|
|
return ZTEST_SUCCESS;
|
|
}
|
|
|
|
/******************************************************************************/
|
|
|
|
static const char* testSST_Math_Mat44dInvertLocal(){
|
|
SST_Mat44d X; /* 4 x 4 matrix */
|
|
/* Resetting test vectors / mats */
|
|
X.v[0] = -14.000000000000000;
|
|
X.v[1] = 12.000000000000000;
|
|
X.v[2] = 19.000000000000000;
|
|
X.v[3] = -7.000000000000000;
|
|
X.v[4] = 5.000000000000000;
|
|
X.v[5] = -17.000000000000000;
|
|
X.v[6] = -4.000000000000000;
|
|
X.v[7] = 11.000000000000000;
|
|
X.v[8] = 8.000000000000000;
|
|
X.v[9] = -8.000000000000000;
|
|
X.v[10] = -20.000000000000000;
|
|
X.v[11] = 7.000000000000000;
|
|
X.v[12] = 12.000000000000000;
|
|
X.v[13] = 16.000000000000000;
|
|
X.v[14] = 2.000000000000000;
|
|
X.v[15] = 13.000000000000000;
|
|
/*
|
|
()
|
|
[[-0.14091124 0.03012476 -0.03403348 0.09823121]
|
|
[-0.02590019 -0.03284902 0.02400505 0.06064435]
|
|
[-0.12723073 0.03756712 -0.08634713 0.08449147]
|
|
[ 0.01454912 0.0237879 0.00785692 0.03300695]]
|
|
*/
|
|
SST_Math_Mat44dInvertLocal(&X);
|
|
TASSERT(fabs((X.v[0])-( -0.140911244472521)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a11 failed!");
|
|
TASSERT(fabs((X.v[1])-( -0.025900189513582)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a21 failed!");
|
|
TASSERT(fabs((X.v[2])-( -0.127230732785850)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a31 failed!");
|
|
TASSERT(fabs((X.v[3])-( 0.014549115603285)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a41 failed!");
|
|
TASSERT(fabs((X.v[4])-( 0.030124763108023)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a12 failed!");
|
|
TASSERT(fabs((X.v[5])-( -0.032849020846494)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a22 failed!");
|
|
TASSERT(fabs((X.v[6])-( 0.037567119393557)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a32 failed!");
|
|
TASSERT(fabs((X.v[7])-( 0.023787902716361)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a42 failed!");
|
|
TASSERT(fabs((X.v[8])-( -0.034033480732786)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a13 failed!");
|
|
TASSERT(fabs((X.v[9])-( 0.024005053695515)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a23 failed!");
|
|
TASSERT(fabs((X.v[10])-( -0.086347125710676)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a33 failed!");
|
|
TASSERT(fabs((X.v[11])-( 0.007856917245736)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a43 failed!");
|
|
TASSERT(fabs((X.v[12])-( 0.098231206569804)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a14 failed!");
|
|
TASSERT(fabs((X.v[13])-( 0.060644346178143)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a24 failed!");
|
|
TASSERT(fabs((X.v[14])-( 0.084491471888819)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a34 failed!");
|
|
TASSERT(fabs((X.v[15])-( 0.033006948831333)) <=100*DBL_EPSILON /* yes this is bad */,"Entry _a44 failed!");
|
|
return ZTEST_SUCCESS;
|
|
}
|
|
|
|
/******************************************************************************/
|
|
|
|
static const char* testSST_Math_Mat44dCreateLU(){
|
|
SST_Mat44d X; /* 4 x 4 matrix */
|
|
SST_Mat44d LU; /* 4 x 4 matrix */
|
|
X.v[0] = 2.000000000000000;
|
|
X.v[1] = 1.000000000000000;
|
|
X.v[2] = 0.000000000000000;
|
|
X.v[3] = 4.000000000000000;
|
|
X.v[4] = -1.000000000000000;
|
|
X.v[5] = 0.000000000000000;
|
|
X.v[6] = 2.000000000000000;
|
|
X.v[7] = 2.000000000000000;
|
|
X.v[8] = -1.000000000000000;
|
|
X.v[9] = -1.000000000000000;
|
|
X.v[10] = 1.000000000000000;
|
|
X.v[11] = 0.000000000000000;
|
|
X.v[12] = 1.000000000000000;
|
|
X.v[13] = 2.000000000000000;
|
|
X.v[14] = 1.000000000000000;
|
|
X.v[15] = 0.000000000000000;
|
|
SST_Math_Mat44dCreateLU(&X,&LU);
|
|
/*
|
|
[[ 2 -1 -1 1]
|
|
[ 1 0 -1 2]
|
|
[ 0 2 1 1]
|
|
[ 4 2 0 0]]
|
|
*/
|
|
/*
|
|
[[ 2. 0. 0. 0. ]
|
|
[ 1. 0.5 0. 0. ]
|
|
[ 0. 2. 3. 0. ]
|
|
[ 4. 4. 6. -4. ]]
|
|
*/
|
|
/*
|
|
[[ 1. -0.5 -0.5 0.5 ]
|
|
[ 0. 1. -1. 3. ]
|
|
[ 0. 0. 1. -1.66666667]
|
|
[ 0. 0. 0. 1. ]]
|
|
*/
|
|
TASSERT(fabs((LU.v[0])-( 2.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"L:Entry A_a11 failed!");
|
|
TASSERT(fabs((LU.v[4])-( -0.500000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"U:Entry B_a12 failed!");
|
|
TASSERT(fabs((LU.v[8])-( -0.500000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"U:Entry B_a13 failed!");
|
|
TASSERT(fabs((LU.v[12])-( 0.500000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"U:Entry B_a14 failed!");
|
|
TASSERT(fabs((LU.v[1])-( 1.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"L:Entry A_a21 failed!");
|
|
TASSERT(fabs((LU.v[5])-( 0.500000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"L:Entry A_a22 failed!");
|
|
TASSERT(fabs((LU.v[9])-( -1.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"U:Entry B_a23 failed!");
|
|
TASSERT(fabs((LU.v[13])-( 3.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"U:Entry B_a24 failed!");
|
|
TASSERT(fabs((LU.v[2])-( 0.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"L:Entry A_a31 failed!");
|
|
TASSERT(fabs((LU.v[6])-( 2.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"L:Entry A_a32 failed!");
|
|
TASSERT(fabs((LU.v[10])-( 3.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"L:Entry A_a33 failed!");
|
|
TASSERT(fabs((LU.v[14])-( -1.666666666666670)) <=100*DBL_EPSILON /* yes this is bad */,"U:Entry B_a34 failed!");
|
|
TASSERT(fabs((LU.v[3])-( 4.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"L:Entry A_a41 failed!");
|
|
TASSERT(fabs((LU.v[7])-( 4.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"L:Entry A_a42 failed!");
|
|
TASSERT(fabs((LU.v[11])-( 6.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"L:Entry A_a43 failed!");
|
|
TASSERT(fabs((LU.v[15])-( -4.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"L:Entry A_a44 failed!");
|
|
return ZTEST_SUCCESS;
|
|
}
|
|
static const char* testSST_Math_Mat44dCreateLULocal(){
|
|
SST_Mat44d X; /* 4 x 4 matrix */
|
|
X.v[0] = 2.000000000000000;
|
|
X.v[1] = 1.000000000000000;
|
|
X.v[2] = 0.000000000000000;
|
|
X.v[3] = 4.000000000000000;
|
|
X.v[4] = -1.000000000000000;
|
|
X.v[5] = 0.000000000000000;
|
|
X.v[6] = 2.000000000000000;
|
|
X.v[7] = 2.000000000000000;
|
|
X.v[8] = -1.000000000000000;
|
|
X.v[9] = -1.000000000000000;
|
|
X.v[10] = 1.000000000000000;
|
|
X.v[11] = 0.000000000000000;
|
|
X.v[12] = 1.000000000000000;
|
|
X.v[13] = 2.000000000000000;
|
|
X.v[14] = 1.000000000000000;
|
|
X.v[15] = 0.000000000000000;
|
|
SST_Math_Mat44dCreateLULocal(&X);
|
|
TASSERT(fabs((X.v[0])-( 2.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"L:Entry A_a11 failed!");
|
|
TASSERT(fabs((X.v[4])-( -0.500000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"U:Entry B_a12 failed!");
|
|
TASSERT(fabs((X.v[8])-( -0.500000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"U:Entry B_a13 failed!");
|
|
TASSERT(fabs((X.v[12])-( 0.500000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"U:Entry B_a14 failed!");
|
|
TASSERT(fabs((X.v[1])-( 1.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"L:Entry A_a21 failed!");
|
|
TASSERT(fabs((X.v[5])-( 0.500000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"L:Entry A_a22 failed!");
|
|
TASSERT(fabs((X.v[9])-( -1.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"U:Entry B_a23 failed!");
|
|
TASSERT(fabs((X.v[13])-( 3.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"U:Entry B_a24 failed!");
|
|
TASSERT(fabs((X.v[2])-( 0.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"L:Entry A_a31 failed!");
|
|
TASSERT(fabs((X.v[6])-( 2.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"L:Entry A_a32 failed!");
|
|
TASSERT(fabs((X.v[10])-( 3.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"L:Entry A_a33 failed!");
|
|
TASSERT(fabs((X.v[14])-( -1.666666666666670)) <=100*DBL_EPSILON /* yes this is bad */,"U:Entry B_a34 failed!");
|
|
TASSERT(fabs((X.v[3])-( 4.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"L:Entry A_a41 failed!");
|
|
TASSERT(fabs((X.v[7])-( 4.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"L:Entry A_a42 failed!");
|
|
TASSERT(fabs((X.v[11])-( 6.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"L:Entry A_a43 failed!");
|
|
TASSERT(fabs((X.v[15])-( -4.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"L:Entry A_a44 failed!");
|
|
return ZTEST_SUCCESS;
|
|
}
|
|
static const char* testSST_Math_Mat44dApplyLUMat(){
|
|
SST_Mat44d X; /* 4 x 4 matrix */
|
|
SST_Mat44d LU; /* 4 x 4 matrix */
|
|
SST_Mat44d I; /* 4 x 4 matrix */
|
|
X.v[0] = 2.000000000000000;
|
|
X.v[1] = 1.000000000000000;
|
|
X.v[2] = 0.000000000000000;
|
|
X.v[3] = 4.000000000000000;
|
|
X.v[4] = -1.000000000000000;
|
|
X.v[5] = 0.000000000000000;
|
|
X.v[6] = 2.000000000000000;
|
|
X.v[7] = 2.000000000000000;
|
|
X.v[8] = -1.000000000000000;
|
|
X.v[9] = -1.000000000000000;
|
|
X.v[10] = 1.000000000000000;
|
|
X.v[11] = 0.000000000000000;
|
|
X.v[12] = 1.000000000000000;
|
|
X.v[13] = 2.000000000000000;
|
|
X.v[14] = 1.000000000000000;
|
|
X.v[15] = 0.000000000000000;
|
|
SST_Math_Mat44dCreateLU(&X,&LU);
|
|
/*
|
|
[[ 2 -1 -1 1]
|
|
[ 1 0 -1 2]
|
|
[ 0 2 1 1]
|
|
[ 4 2 0 0]]
|
|
*/
|
|
/*
|
|
[[ 2. 0. 0. 0. ]
|
|
[ 1. 0.5 0. 0. ]
|
|
[ 0. 2. 3. 0. ]
|
|
[ 4. 4. 6. -4. ]]
|
|
*/
|
|
/*
|
|
[[ 1. -0.5 -0.5 0.5 ]
|
|
[ 0. 1. -1. 3. ]
|
|
[ 0. 0. 1. -1.66666667]
|
|
[ 0. 0. 0. 1. ]]
|
|
*/
|
|
TASSERT(fabs((LU.v[0])-( 2.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"L:Entry A_a11 failed!");
|
|
TASSERT(fabs((LU.v[4])-( -0.500000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"U:Entry B_a12 failed!");
|
|
TASSERT(fabs((LU.v[8])-( -0.500000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"U:Entry B_a13 failed!");
|
|
TASSERT(fabs((LU.v[12])-( 0.500000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"U:Entry B_a14 failed!");
|
|
TASSERT(fabs((LU.v[1])-( 1.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"L:Entry A_a21 failed!");
|
|
TASSERT(fabs((LU.v[5])-( 0.500000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"L:Entry A_a22 failed!");
|
|
TASSERT(fabs((LU.v[9])-( -1.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"U:Entry B_a23 failed!");
|
|
TASSERT(fabs((LU.v[13])-( 3.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"U:Entry B_a24 failed!");
|
|
TASSERT(fabs((LU.v[2])-( 0.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"L:Entry A_a31 failed!");
|
|
TASSERT(fabs((LU.v[6])-( 2.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"L:Entry A_a32 failed!");
|
|
TASSERT(fabs((LU.v[10])-( 3.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"L:Entry A_a33 failed!");
|
|
TASSERT(fabs((LU.v[14])-( -1.666666666666670)) <=100*DBL_EPSILON /* yes this is bad */,"U:Entry B_a34 failed!");
|
|
TASSERT(fabs((LU.v[3])-( 4.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"L:Entry A_a41 failed!");
|
|
TASSERT(fabs((LU.v[7])-( 4.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"L:Entry A_a42 failed!");
|
|
TASSERT(fabs((LU.v[11])-( 6.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"L:Entry A_a43 failed!");
|
|
TASSERT(fabs((LU.v[15])-( -4.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"L:Entry A_a44 failed!");
|
|
SST_Math_Mat44dApplyLUMat(&LU,&X,&I);
|
|
TASSERT(fabs((I.v[0])-( 1.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"I:Entry I_a11 failed!");
|
|
TASSERT(fabs((I.v[1])-( 0.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"I:Entry I_a21 failed!");
|
|
TASSERT(fabs((I.v[2])-( 0.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"I:Entry I_a31 failed!");
|
|
TASSERT(fabs((I.v[3])-( 0.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"I:Entry I_a41 failed!");
|
|
TASSERT(fabs((I.v[4])-( 0.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"I:Entry I_a12 failed!");
|
|
TASSERT(fabs((I.v[5])-( 1.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"I:Entry I_a22 failed!");
|
|
TASSERT(fabs((I.v[6])-( 0.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"I:Entry I_a32 failed!");
|
|
TASSERT(fabs((I.v[7])-( 0.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"I:Entry I_a42 failed!");
|
|
TASSERT(fabs((I.v[8])-( 0.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"I:Entry I_a13 failed!");
|
|
TASSERT(fabs((I.v[9])-( 0.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"I:Entry I_a23 failed!");
|
|
TASSERT(fabs((I.v[10])-( 1.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"I:Entry I_a33 failed!");
|
|
TASSERT(fabs((I.v[11])-( 0.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"I:Entry I_a43 failed!");
|
|
TASSERT(fabs((I.v[12])-( 0.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"I:Entry I_a14 failed!");
|
|
TASSERT(fabs((I.v[13])-( 0.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"I:Entry I_a24 failed!");
|
|
TASSERT(fabs((I.v[14])-( 0.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"I:Entry I_a34 failed!");
|
|
TASSERT(fabs((I.v[15])-( 1.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"I:Entry I_a44 failed!");
|
|
return ZTEST_SUCCESS;
|
|
}
|
|
static const char* testSST_Math_Mat44dApplyLUMatLocal(){
|
|
SST_Mat44d X; /* 4 x 4 matrix */
|
|
SST_Mat44d Xinv; /* 4 x 4 matrix */
|
|
X.v[0] = 2.000000000000000;
|
|
X.v[1] = 1.000000000000000;
|
|
X.v[2] = 0.000000000000000;
|
|
X.v[3] = 4.000000000000000;
|
|
X.v[4] = -1.000000000000000;
|
|
X.v[5] = 0.000000000000000;
|
|
X.v[6] = 2.000000000000000;
|
|
X.v[7] = 2.000000000000000;
|
|
X.v[8] = -1.000000000000000;
|
|
X.v[9] = -1.000000000000000;
|
|
X.v[10] = 1.000000000000000;
|
|
X.v[11] = 0.000000000000000;
|
|
X.v[12] = 1.000000000000000;
|
|
X.v[13] = 2.000000000000000;
|
|
X.v[14] = 1.000000000000000;
|
|
X.v[15] = 0.000000000000000;
|
|
Xinv.v[0] = 2.000000000000000;
|
|
Xinv.v[1] = 1.000000000000000;
|
|
Xinv.v[2] = 0.000000000000000;
|
|
Xinv.v[3] = 4.000000000000000;
|
|
Xinv.v[4] = -1.000000000000000;
|
|
Xinv.v[5] = 0.000000000000000;
|
|
Xinv.v[6] = 2.000000000000000;
|
|
Xinv.v[7] = 2.000000000000000;
|
|
Xinv.v[8] = -1.000000000000000;
|
|
Xinv.v[9] = -1.000000000000000;
|
|
Xinv.v[10] = 1.000000000000000;
|
|
Xinv.v[11] = 0.000000000000000;
|
|
Xinv.v[12] = 1.000000000000000;
|
|
Xinv.v[13] = 2.000000000000000;
|
|
Xinv.v[14] = 1.000000000000000;
|
|
Xinv.v[15] = 0.000000000000000;
|
|
SST_Math_Mat44dCreateLULocal(&X);
|
|
TASSERT(fabs((X.v[0])-( 2.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"L:Entry A_a11 failed!");
|
|
TASSERT(fabs((X.v[4])-( -0.500000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"U:Entry B_a12 failed!");
|
|
TASSERT(fabs((X.v[8])-( -0.500000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"U:Entry B_a13 failed!");
|
|
TASSERT(fabs((X.v[12])-( 0.500000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"U:Entry B_a14 failed!");
|
|
TASSERT(fabs((X.v[1])-( 1.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"L:Entry A_a21 failed!");
|
|
TASSERT(fabs((X.v[5])-( 0.500000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"L:Entry A_a22 failed!");
|
|
TASSERT(fabs((X.v[9])-( -1.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"U:Entry B_a23 failed!");
|
|
TASSERT(fabs((X.v[13])-( 3.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"U:Entry B_a24 failed!");
|
|
TASSERT(fabs((X.v[2])-( 0.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"L:Entry A_a31 failed!");
|
|
TASSERT(fabs((X.v[6])-( 2.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"L:Entry A_a32 failed!");
|
|
TASSERT(fabs((X.v[10])-( 3.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"L:Entry A_a33 failed!");
|
|
TASSERT(fabs((X.v[14])-( -1.666666666666670)) <=100*DBL_EPSILON /* yes this is bad */,"U:Entry B_a34 failed!");
|
|
TASSERT(fabs((X.v[3])-( 4.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"L:Entry A_a41 failed!");
|
|
TASSERT(fabs((X.v[7])-( 4.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"L:Entry A_a42 failed!");
|
|
TASSERT(fabs((X.v[11])-( 6.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"L:Entry A_a43 failed!");
|
|
TASSERT(fabs((X.v[15])-( -4.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"L:Entry A_a44 failed!");
|
|
SST_Math_Mat44dApplyLUMatLocal(&X,&Xinv);
|
|
TASSERT(fabs((Xinv.v[0])-( 1.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Xinv:Entry Xinv_a11 failed!");
|
|
TASSERT(fabs((Xinv.v[1])-( 0.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Xinv:Entry Xinv_a21 failed!");
|
|
TASSERT(fabs((Xinv.v[2])-( 0.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Xinv:Entry Xinv_a31 failed!");
|
|
TASSERT(fabs((Xinv.v[3])-( 0.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Xinv:Entry Xinv_a41 failed!");
|
|
TASSERT(fabs((Xinv.v[4])-( 0.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Xinv:Entry Xinv_a12 failed!");
|
|
TASSERT(fabs((Xinv.v[5])-( 1.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Xinv:Entry Xinv_a22 failed!");
|
|
TASSERT(fabs((Xinv.v[6])-( 0.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Xinv:Entry Xinv_a32 failed!");
|
|
TASSERT(fabs((Xinv.v[7])-( 0.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Xinv:Entry Xinv_a42 failed!");
|
|
TASSERT(fabs((Xinv.v[8])-( 0.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Xinv:Entry Xinv_a13 failed!");
|
|
TASSERT(fabs((Xinv.v[9])-( 0.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Xinv:Entry Xinv_a23 failed!");
|
|
TASSERT(fabs((Xinv.v[10])-( 1.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Xinv:Entry Xinv_a33 failed!");
|
|
TASSERT(fabs((Xinv.v[11])-( 0.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Xinv:Entry Xinv_a43 failed!");
|
|
TASSERT(fabs((Xinv.v[12])-( 0.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Xinv:Entry Xinv_a14 failed!");
|
|
TASSERT(fabs((Xinv.v[13])-( 0.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Xinv:Entry Xinv_a24 failed!");
|
|
TASSERT(fabs((Xinv.v[14])-( 0.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Xinv:Entry Xinv_a34 failed!");
|
|
TASSERT(fabs((Xinv.v[15])-( 1.000000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"Xinv:Entry Xinv_a44 failed!");
|
|
return ZTEST_SUCCESS;
|
|
}
|
|
static const char* testSST_Math_Mat44dApplyLUVec(){
|
|
SST_Mat44d X; /* 4 x 4 matrix */
|
|
SST_Mat44d LU; /* 4 x 4 matrix */
|
|
SST_Vec4d b; /* 4 x 4 vector */
|
|
SST_Vec4d x; /* 4 x 4 vector */
|
|
X.v[0] = 2.000000000000000;
|
|
X.v[1] = 1.000000000000000;
|
|
X.v[2] = 0.000000000000000;
|
|
X.v[3] = 4.000000000000000;
|
|
X.v[4] = -1.000000000000000;
|
|
X.v[5] = 0.000000000000000;
|
|
X.v[6] = 2.000000000000000;
|
|
X.v[7] = 2.000000000000000;
|
|
X.v[8] = -1.000000000000000;
|
|
X.v[9] = -1.000000000000000;
|
|
X.v[10] = 1.000000000000000;
|
|
X.v[11] = 0.000000000000000;
|
|
X.v[12] = 1.000000000000000;
|
|
X.v[13] = 2.000000000000000;
|
|
X.v[14] = 1.000000000000000;
|
|
X.v[15] = 0.000000000000000;
|
|
b.v[0] = 2.000000000000000;
|
|
b.v[1] = -1.000000000000000;
|
|
b.v[2] = 1.000000000000000;
|
|
b.v[3] = 1.000000000000000;
|
|
SST_Math_Mat44dCreateLU(&X,&LU);
|
|
SST_Math_Mat44dApplyLUVec(&LU,&b,&x);
|
|
TASSERT(fabs((x.v[0])-( 1.583333333333333)) <=100*DBL_EPSILON /* yes this is bad */,"x:Entry x_a1 failed!");
|
|
TASSERT(fabs((x.v[1])-( -2.666666666666667)) <=100*DBL_EPSILON /* yes this is bad */,"x:Entry x_a2 failed!");
|
|
TASSERT(fabs((x.v[2])-( 5.083333333333333)) <=100*DBL_EPSILON /* yes this is bad */,"x:Entry x_a3 failed!");
|
|
TASSERT(fabs((x.v[3])-( 1.250000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"x:Entry x_a4 failed!");
|
|
return ZTEST_SUCCESS;
|
|
}
|
|
static const char* testSST_Math_Mat44dApplyLUVecLocal(){
|
|
SST_Mat44d X; /* 4 x 4 matrix */
|
|
SST_Mat44d LU; /* 4 x 4 matrix */
|
|
SST_Vec4d b; /* 4 x 4 vector */
|
|
X.v[0] = 2.000000000000000;
|
|
X.v[1] = 1.000000000000000;
|
|
X.v[2] = 0.000000000000000;
|
|
X.v[3] = 4.000000000000000;
|
|
X.v[4] = -1.000000000000000;
|
|
X.v[5] = 0.000000000000000;
|
|
X.v[6] = 2.000000000000000;
|
|
X.v[7] = 2.000000000000000;
|
|
X.v[8] = -1.000000000000000;
|
|
X.v[9] = -1.000000000000000;
|
|
X.v[10] = 1.000000000000000;
|
|
X.v[11] = 0.000000000000000;
|
|
X.v[12] = 1.000000000000000;
|
|
X.v[13] = 2.000000000000000;
|
|
X.v[14] = 1.000000000000000;
|
|
X.v[15] = 0.000000000000000;
|
|
b.v[0] = 2.000000000000000;
|
|
b.v[1] = -1.000000000000000;
|
|
b.v[2] = 1.000000000000000;
|
|
b.v[3] = 1.000000000000000;
|
|
SST_Math_Mat44dCreateLU(&X,&LU);
|
|
SST_Math_Mat44dApplyLUVecLocal(&LU,&b);
|
|
TASSERT(fabs((b.v[0])-( 1.583333333333333)) <=100*DBL_EPSILON /* yes this is bad */,"x:Entry x_a1 failed!");
|
|
TASSERT(fabs((b.v[1])-( -2.666666666666667)) <=100*DBL_EPSILON /* yes this is bad */,"x:Entry x_a2 failed!");
|
|
TASSERT(fabs((b.v[2])-( 5.083333333333333)) <=100*DBL_EPSILON /* yes this is bad */,"x:Entry x_a3 failed!");
|
|
TASSERT(fabs((b.v[3])-( 1.250000000000000)) <=100*DBL_EPSILON /* yes this is bad */,"x:Entry x_a4 failed!");
|
|
return ZTEST_SUCCESS;
|
|
}
|