Make QSqlRecord benchmarks non-fatuous

Because QBENCHMARK re-runs its block repeatedly, to get sensible data,
the block needs to actually do something when repeated. Since these
tests had blocks that looped while (qry.next()), they left qry at its
end state, so such repeats tested nothing. Use seek(0) at the start of
each cycle to actually do the work repeatedly when the block is
repeated. As a drive-by, split a long line.

Pick-to: 6.2 6.1 5.15
Task-number: QTBUG-91713
Change-Id: Id46f77dc5e71335871af79ff61e1980b5f636179
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
This commit is contained in:
Edward Welbourne 2021-07-20 14:45:10 +02:00
parent 346bdc6143
commit 432eab3bc0

View File

@ -1,6 +1,6 @@
/****************************************************************************
**
** Copyright (C) 2018 The Qt Company Ltd.
** Copyright (C) 2021 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the test suite of the Qt Toolkit.
@ -178,7 +178,8 @@ void tst_QSqlRecord::benchmarkRecord()
const auto tableName = qTableName("record", __FILE__, db);
{
QSqlQuery qry(db);
QVERIFY_SQL(qry, exec("create table " + tableName + " (id int NOT NULL, t_varchar varchar(20), "
QVERIFY_SQL(qry, exec("create table " + tableName +
" (id int NOT NULL, t_varchar varchar(20), "
"t_char char(20), primary key(id))"));
// Limit to 500: at 600, the set-up takes nearly 5 minutes
for (int i = 0; i < 500; i++)
@ -188,6 +189,7 @@ void tst_QSqlRecord::benchmarkRecord()
QBENCHMARK {
while (qry.next())
qry.record();
QVERIFY(qry.seek(0));
}
}
tst_Databases::safeDropTables(db, QStringList() << tableName);
@ -203,6 +205,7 @@ void tst_QSqlRecord::benchFieldName()
QBENCHMARK {
while (qry.next())
qry.value("r");
QVERIFY(qry.seek(0));
}
}
}
@ -218,6 +221,7 @@ void tst_QSqlRecord::benchFieldIndex()
QBENCHMARK {
while (qry.next())
qry.value(0);
QVERIFY(qry.seek(0));
}
}
}