diff --git a/test/gtx/gtx_pca.cpp b/test/gtx/gtx_pca.cpp index 4e3bb720..120e277e 100644 --- a/test/gtx/gtx_pca.cpp +++ b/test/gtx/gtx_pca.cpp @@ -52,6 +52,12 @@ bool matrixEpsilonEqual(glm::mat const& a, glm::mat cons return true; } +template +GLM_INLINE bool sameSign(T const& a, T const& b) +{ + return ((a >= 0) && (b >= 0)) || ((a < 0) && (b < 0)); +} + template T failReport(T line) { @@ -518,7 +524,7 @@ int testEigenvectors(T epsilon) { vec act = glm::normalize(eigenvectors[i]); vec exp = glm::normalize(_1aga::expectedEigenvectors()[i]); - if (glm::sign(act[0]) != glm::sign(exp[0])) exp = -exp; + if (!sameSign(act[0], exp[0])) exp = -exp; if (!vectorEpsilonEqual(act, exp, epsilon)) return failReport(__LINE__); } @@ -631,13 +637,13 @@ int rndTest(unsigned int randomEngineSeed) return failReport(__LINE__); glm::sortEigenvalues(evals, evecs); - if (glm::sign(evecs[0][0]) != glm::sign(x[0])) evecs[0] = -evecs[0]; + if (!sameSign(evecs[0][0], x[0])) evecs[0] = -evecs[0]; if(!vectorEpsilonEqual(x, evecs[0], myEpsilon())) return failReport(__LINE__); - if (glm::sign(evecs[2][0]) != glm::sign(y[0])) evecs[2] = -evecs[2]; + if (!sameSign(evecs[2][0], y[0])) evecs[2] = -evecs[2]; if (!vectorEpsilonEqual(y, evecs[2], myEpsilon())) return failReport(__LINE__); - if (glm::sign(evecs[1][0]) != glm::sign(z[0])) evecs[1] = -evecs[1]; + if (!sameSign(evecs[1][0], z[0])) evecs[1] = -evecs[1]; if (!vectorEpsilonEqual(z, evecs[1], myEpsilon())) return failReport(__LINE__);