diff --git a/tests/test_jacobi.cpp b/tests/test_jacobi.cpp index 2c43374..22319d3 100644 --- a/tests/test_jacobi.cpp +++ b/tests/test_jacobi.cpp @@ -38,20 +38,26 @@ const int NF=5; //(the array size must be known at compile time) // @brief Are two numbers "similar"? template inline static bool Similar(Scalar a, Scalar b, - Scalar eps=1.0e-06, Scalar ratio=1.0e-06) + Scalar eps=1.0e-06, + Scalar ratio=1.0e-06, + Scalar ratio_denom=1.0) { return ((std::abs(a-b)<=std::abs(eps)) || - (std::abs(a-b)<=std::abs(ratio)*0.5*(std::abs(a)+std::abs(b)))); + (std::abs(ratio_denom)*std::abs(a-b) + <= + std::abs(ratio)*0.5*(std::abs(a)+std::abs(b)))); } /// @brief Are two vectors (containing n numbers) similar? template inline static bool SimilarVec(Vector a, Vector b, int n, - Scalar eps=1.0e-06, Scalar ratio=1.0e-06) + Scalar eps=1.0e-06, + Scalar ratio=1.0e-06, + Scalar ratio_denom=1.0) { for (int i = 0; i < n; i++) - if (not Similar(a[i], b[i], eps, ratio)) + if (not Similar(a[i], b[i], eps, ratio, ratio_denom)) return false; return true; } @@ -59,13 +65,15 @@ inline static bool SimilarVec(Vector a, Vector b, int n, /// @brief Are two vectors (or their reflections) similar? template inline static bool SimilarVecUnsigned(Vector a, Vector b, int n, - Scalar eps=1.0e-06, Scalar ratio=1.0e-06) + Scalar eps=1.0e-06, + Scalar ratio=1.0e-06, + Scalar ratio_denom=1.0) { if (SimilarVec(a, b, n, eps)) return true; else { for (int i = 0; i < n; i++) - if (not Similar(a[i], -b[i], eps, ratio)) + if (not Similar(a[i], -b[i], eps, ratio, ratio_denom)) return false; return true; } @@ -322,7 +330,8 @@ void TestJacobi(int n, // Σ_b M[a][b]*evecs[i][b] = evals[i]*evecs[i][b] (for all a) @@ -574,7 +582,12 @@ void TestJacobi(int n, // 7) seed = std::stoi(argv[7]); + double eps = 1.0e-06; + if (argc > 8) + eps = std::stof(argv[8]); - TestJacobi(n_size, n_matr, emin, emax, n_tests, n_degeneracy, seed); + TestJacobi(n_size, n_matr, emin, emax, n_tests, n_degeneracy, seed, eps); cout << "test passed\n" << endl; return EXIT_SUCCESS;