mirror of
https://gitlab.com/libeigen/eigen.git
synced 2026-04-10 11:34:33 +08:00
Fix three more flaky tests: igamma, tensor_random, matrix_power
libeigen/eigen!2268 Co-authored-by: Rasmus Munk Larsen <rmlarsen@gmail.com>
This commit is contained in:
@@ -1165,7 +1165,13 @@ struct igamma_generic_impl {
|
||||
}
|
||||
}
|
||||
|
||||
return igamma_series_impl<Scalar, mode>::run(a, x);
|
||||
Scalar ret = igamma_series_impl<Scalar, mode>::run(a, x);
|
||||
if (mode == VALUE) {
|
||||
// Clamp to [0,1] since accumulated series terms can slightly exceed 1.0
|
||||
// due to floating-point rounding for extreme arguments.
|
||||
return numext::mini(one, numext::maxi(zero, ret));
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -18,8 +18,19 @@ static void test_default() {
|
||||
|
||||
// Fixme: we should check that the generated numbers follow a uniform
|
||||
// distribution instead.
|
||||
for (int i = 1; i < 6; ++i) {
|
||||
VERIFY_IS_NOT_EQUAL(vec(i), vec(i - 1));
|
||||
// For low-precision types (half, bfloat16), the RNG has limited distinct
|
||||
// values (e.g. 128 for bfloat16), so adjacent collisions are statistically
|
||||
// inevitable. Only verify that not all values are identical.
|
||||
if (sizeof(Scalar) <= 2) {
|
||||
bool has_distinct = false;
|
||||
for (int i = 1; i < 6 && !has_distinct; ++i) {
|
||||
if (vec(i) != vec(i - 1)) has_distinct = true;
|
||||
}
|
||||
VERIFY(has_distinct);
|
||||
} else {
|
||||
for (int i = 1; i < 6; ++i) {
|
||||
VERIFY_IS_NOT_EQUAL(vec(i), vec(i - 1));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,8 +41,16 @@ static void test_normal() {
|
||||
|
||||
// Fixme: we should check that the generated numbers follow a gaussian
|
||||
// distribution instead.
|
||||
for (int i = 1; i < 6; ++i) {
|
||||
VERIFY_IS_NOT_EQUAL(vec(i), vec(i - 1));
|
||||
if (sizeof(Scalar) <= 2) {
|
||||
bool has_distinct = false;
|
||||
for (int i = 1; i < 6 && !has_distinct; ++i) {
|
||||
if (vec(i) != vec(i - 1)) has_distinct = true;
|
||||
}
|
||||
VERIFY(has_distinct);
|
||||
} else {
|
||||
for (int i = 1; i < 6; ++i) {
|
||||
VERIFY_IS_NOT_EQUAL(vec(i), vec(i - 1));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -152,7 +152,7 @@ EIGEN_DECLARE_TEST(matrix_power) {
|
||||
CALL_SUBTEST_1(test2dHyperbolicRotation<float>(1e-5f));
|
||||
CALL_SUBTEST_9(test2dHyperbolicRotation<long double>(1e-14L));
|
||||
|
||||
CALL_SUBTEST_10(test3dRotation<double>(1e-13));
|
||||
CALL_SUBTEST_10(test3dRotation<double>(2e-13));
|
||||
CALL_SUBTEST_11(test3dRotation<float>(1e-5f));
|
||||
CALL_SUBTEST_12(test3dRotation<long double>(1e-13L));
|
||||
|
||||
@@ -165,7 +165,7 @@ EIGEN_DECLARE_TEST(matrix_power) {
|
||||
CALL_SUBTEST_8(testGeneral(Matrix4f(), 1e-4f));
|
||||
CALL_SUBTEST_6(testGeneral(MatrixXf(2, 2), 1e-3f)); // see bug 614
|
||||
CALL_SUBTEST_9(testGeneral(MatrixXe(7, 7), 1e-12L));
|
||||
CALL_SUBTEST_10(testGeneral(Matrix3d(), 1e-13));
|
||||
CALL_SUBTEST_10(testGeneral(Matrix3d(), 2e-13));
|
||||
CALL_SUBTEST_11(testGeneral(Matrix3f(), 1e-4f));
|
||||
CALL_SUBTEST_12(testGeneral(Matrix3e(), 1e-13L));
|
||||
|
||||
@@ -178,7 +178,7 @@ EIGEN_DECLARE_TEST(matrix_power) {
|
||||
CALL_SUBTEST_8(testSingular(Matrix4f(), 1e-4f));
|
||||
CALL_SUBTEST_6(testSingular(MatrixXf(2, 2), 1e-3f));
|
||||
CALL_SUBTEST_9(testSingular(MatrixXe(7, 7), 1e-12L));
|
||||
CALL_SUBTEST_10(testSingular(Matrix3d(), 1e-13));
|
||||
CALL_SUBTEST_10(testSingular(Matrix3d(), 2e-13));
|
||||
CALL_SUBTEST_11(testSingular(Matrix3f(), 1e-4f));
|
||||
CALL_SUBTEST_12(testSingular(Matrix3e(), 1e-13L));
|
||||
|
||||
@@ -191,7 +191,7 @@ EIGEN_DECLARE_TEST(matrix_power) {
|
||||
CALL_SUBTEST_8(testLogThenExp(Matrix4f(), 1e-4f));
|
||||
CALL_SUBTEST_6(testLogThenExp(MatrixXf(2, 2), 1e-3f));
|
||||
CALL_SUBTEST_9(testLogThenExp(MatrixXe(7, 7), 1e-12L));
|
||||
CALL_SUBTEST_10(testLogThenExp(Matrix3d(), 1e-13));
|
||||
CALL_SUBTEST_10(testLogThenExp(Matrix3d(), 2e-13));
|
||||
CALL_SUBTEST_11(testLogThenExp(Matrix3f(), 1e-4f));
|
||||
CALL_SUBTEST_12(testLogThenExp(Matrix3e(), 1e-13L));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user