Fix flaky tests: add iteration guards, yield in busy-waits, cap thread count

libeigen/eigen!2208

Co-authored-by: Rasmus Munk Larsen <rmlarsen@gmail.com>
This commit is contained in:
Rasmus Munk Larsen
2026-02-24 18:29:07 -08:00
parent 28d090a49c
commit 34092d2788
10 changed files with 92 additions and 61 deletions

View File

@@ -26,16 +26,24 @@ void signed_integer_type_tests(const MatrixType& m) {
MatrixType m1(rows, cols), m2 = MatrixType::Random(rows, cols), mzero = MatrixType::Zero(rows, cols);
do {
m1 = MatrixType::Random(rows, cols);
} while (m1 == mzero || m1 == m2);
{
int guard = 0;
do {
m1 = MatrixType::Random(rows, cols);
} while ((m1 == mzero || m1 == m2) && (++guard) < 100);
VERIFY(guard < 100);
}
// check linear structure
Scalar s1;
do {
s1 = internal::random<Scalar>();
} while (s1 == 0);
{
int guard = 0;
do {
s1 = internal::random<Scalar>();
} while (s1 == 0 && (++guard) < 100);
VERIFY(guard < 100);
}
VERIFY_IS_EQUAL(-(-m1), m1);
VERIFY_IS_EQUAL(-m2 + m1 + m2, m1);
@@ -63,13 +71,21 @@ void integer_type_tests(const MatrixType& m) {
SquareMatrixType identity = SquareMatrixType::Identity(rows, rows), square = SquareMatrixType::Random(rows, rows);
VectorType v1(rows), v2 = VectorType::Random(rows), vzero = VectorType::Zero(rows);
do {
m1 = MatrixType::Random(rows, cols);
} while (m1 == mzero || m1 == m2);
{
int guard = 0;
do {
m1 = MatrixType::Random(rows, cols);
} while ((m1 == mzero || m1 == m2) && (++guard) < 100);
VERIFY(guard < 100);
}
do {
v1 = VectorType::Random(rows);
} while (v1 == vzero || v1 == v2);
{
int guard = 0;
do {
v1 = VectorType::Random(rows);
} while ((v1 == vzero || v1 == v2) && (++guard) < 100);
VERIFY(guard < 100);
}
VERIFY_IS_APPROX(v1, v1);
VERIFY_IS_NOT_APPROX(v1, 2 * v1);