tst_QQuaternion: compile with QT_NO_FOREACH

The size of the container is fixed, so use std::array.

QQuaternion is basically four floats, so make the range-for var a value
rather than a reference.

Task-number: QTBUG-115839
Change-Id: I50b5aaa7daa6a4f10ff55c55ae54259c9aea03e9
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
This commit is contained in:
Ahmad Samir 2023-08-14 15:37:27 +03:00
parent a13bfec63d
commit 3928d53003

View File

@ -1,8 +1,6 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
#include <QTest>
#include <QtCore/qmath.h>
#include <QtGui/qquaternion.h>
@ -970,19 +968,23 @@ void tst_QQuaternion::fromDirection_data()
QTest::addColumn<QVector3D>("direction");
QTest::addColumn<QVector3D>("up");
QList<QQuaternion> orientations;
orientations << QQuaternion();
// 1 default constructed element + 360/45 loops, each adding 4 elements
constexpr int size = 1 + (360 / 45) * 4;
std::array<QQuaternion, size> orientations;
orientations[0] = {};
int n = 0;
for (int angle = 45; angle <= 360; angle += 45) {
orientations << QQuaternion::fromAxisAndAngle(QVector3D(1, 0, 0), angle)
<< QQuaternion::fromAxisAndAngle(QVector3D(0, 1, 0), angle)
<< QQuaternion::fromAxisAndAngle(QVector3D(0, 0, 1), angle)
<< QQuaternion::fromAxisAndAngle(QVector3D(1, 0, 0), angle)
* QQuaternion::fromAxisAndAngle(QVector3D(0, 1, 0), angle)
* QQuaternion::fromAxisAndAngle(QVector3D(0, 0, 1), angle);
orientations[++n] = QQuaternion::fromAxisAndAngle(QVector3D(1, 0, 0), angle);
orientations[++n] = QQuaternion::fromAxisAndAngle(QVector3D(0, 1, 0), angle);
orientations[++n] = QQuaternion::fromAxisAndAngle(QVector3D(0, 0, 1), angle);
orientations[++n] = QQuaternion::fromAxisAndAngle(QVector3D(1, 0, 0), angle)
* QQuaternion::fromAxisAndAngle(QVector3D(0, 1, 0), angle)
* QQuaternion::fromAxisAndAngle(QVector3D(0, 0, 1), angle);
}
QCOMPARE(n, size - 1);
// othonormal up and dir
foreach (const QQuaternion &q, orientations) {
for (QQuaternion q : orientations) {
QVector3D xAxis, yAxis, zAxis;
q.getAxes(&xAxis, &yAxis, &zAxis);
@ -1004,7 +1006,7 @@ void tst_QQuaternion::fromDirection_data()
QTest::newRow("dir: +X+Y+Z, up: -X-Y-Z") << QVector3D(10.0f, 10.0f, 10.0f) << QVector3D(-10.0f, -10.0f, -10.0f);
// invalid up
foreach (const QQuaternion &q, orientations) {
for (QQuaternion q : orientations) {
QVector3D xAxis, yAxis, zAxis;
q.getAxes(&xAxis, &yAxis, &zAxis);