/* 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 #include #include #include #include #include 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; }