Fix x86 preprocessor check in testlib selftests

When deciding whether to run benchlibcallbrind, the code only tested
_i386; it now tests __x86_64 as well, to match a recent change in the
test itself. As there, reverse the test to reduce negations, flipping
the stanzas it selects between. Also tidy up the code that tests for
valgrind being present - and actually return true, to skip the test,
when it claims to be skipping the test.

Updated test results, now that the test can actually be run and
produce sensible output. Added an _2.txt that matches the results
presently seen in Coin on RHEL 8.4 (despite the fact that a local
build on such a VM produces output matching the _1.txt results).

Change-Id: Ibce09dca06a1eeb73e90fb1345834998683df9d8
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
This commit is contained in:
Edward Welbourne 2021-12-08 20:49:58 +01:00
parent e42fe5c775
commit 93830d9ed3
4 changed files with 20 additions and 10 deletions

View File

@ -1,6 +1,8 @@
********* Start testing of tst_BenchlibCallgrind *********
Config: Using QtTest library
PASS : tst_BenchlibCallgrind::initTestCase()
FAIL! : tst_BenchlibCallgrind::failInChildProcess() Running under valgrind!
Loc: [qtbase/tests/auto/testlib/selftests/benchlibcallgrind/tst_benchlibcallgrind.cpp(0)]
SKIP : tst_BenchlibCallgrind::twoHundredMillionInstructions() This test is only defined for gcc and x86.
Loc: [qtbase/tests/auto/testlib/selftests/benchlibcallgrind/tst_benchlibcallgrind.cpp(0)]
PASS : tst_BenchlibCallgrind::cleanupTestCase()

View File

@ -1,9 +1,11 @@
********* Start testing of tst_BenchlibCallgrind *********
Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
Config: Using QtTest library
PASS : tst_BenchlibCallgrind::initTestCase()
FAIL! : tst_BenchlibCallgrind::failInChildProcess() Running under valgrind!
Loc: [qtbase/tests/auto/testlib/selftests/benchlibcallgrind/tst_benchlibcallgrind.cpp(0)]
PASS : tst_BenchlibCallgrind::twoHundredMillionInstructions()
RESULT : tst_BenchlibCallgrind::twoHundredMillionInstructions():
200,000,158 instruction reads per iteration (total: 200,000,158, iterations: 1)
200,000,144 instruction reads per iteration (total: 200,000,144, iterations: 1)
PASS : tst_BenchlibCallgrind::cleanupTestCase()
Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted
Totals: 3 passed, 1 failed, 0 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_BenchlibCallgrind *********

View File

@ -0,0 +1,5 @@
********* Start testing of tst_BenchlibCallgrind *********
Config: Using QtTest library
PASS : tst_BenchlibCallgrind::initTestCase()
FAIL! : tst_BenchlibCallgrind::failInChildProcess() Running under valgrind!
Loc: [qtbase/tests/auto/testlib/selftests/benchlibcallgrind/tst_benchlibcallgrind.cpp(0)]

View File

@ -692,17 +692,18 @@ bool TestLogger::shouldIgnoreTest(const QString &test) const
#endif
if (test == "benchlibcallgrind") {
#if !(defined(__GNUC__) && defined(__i386) && defined(Q_OS_LINUX))
// Skip on platforms where callgrind is not available
return true;
#else
#if defined(__GNUC__) && (defined(__i386) || defined(__x86_64)) && defined(Q_OS_LINUX)
// Check that it's actually available
QProcess checkProcess;
QStringList args;
args << "--version";
QStringList args{u"--version"_qs};
checkProcess.start("valgrind", args);
if (!checkProcess.waitForFinished(-1))
if (!checkProcess.waitForFinished(-1)) {
WARN("Valgrind broken or not available. Not running benchlibcallgrind test!");
return true;
}
#else
// Skip on platforms where callgrind is not available
return true;
#endif
}