diff options
Diffstat (limited to 'tests/auto/threed/qbox3d/tst_qbox3d.cpp')
-rw-r--r-- | tests/auto/threed/qbox3d/tst_qbox3d.cpp | 1302 |
1 files changed, 0 insertions, 1302 deletions
diff --git a/tests/auto/threed/qbox3d/tst_qbox3d.cpp b/tests/auto/threed/qbox3d/tst_qbox3d.cpp deleted file mode 100644 index 65c1cd44..00000000 --- a/tests/auto/threed/qbox3d/tst_qbox3d.cpp +++ /dev/null @@ -1,1302 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation ([email protected]) -** -** This file is part of the QtQuick3D module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include <QtTest/QtTest> -#include "qbox3d.h" -#include <QtGui/qmatrix4x4.h> - -class tst_QBox3D : public QObject -{ - Q_OBJECT -public: - tst_QBox3D() {} - ~tst_QBox3D() {} - -private slots: - void create(); - void modify(); - void compare(); - void fuzzyCompare(); - void size_data(); - void size(); - void center_data(); - void center(); - void containsPoint_data(); - void containsPoint(); - void containsBox_data(); - void containsBox(); - void intersects_data(); - void intersects(); - void intersect_data(); - void intersect(); - void intersected_data(); - void intersected(); - void intersectRay_data(); - void intersectRay(); - void unitePoint_data(); - void unitePoint(); - void uniteBox_data(); - void uniteBox(); - void unitedPoint_data(); - void unitedPoint(); - void unitedBox_data(); - void unitedBox(); - void transform(); - void transformed(); - void dataStream(); - void properties(); - void metaTypes(); -}; - -void tst_QBox3D::create() -{ - QBox3D box1; - QVERIFY(box1.isNull()); - QVERIFY(!box1.isFinite()); - QVERIFY(!box1.isInfinite()); - QVERIFY(box1.minimum() == QVector3D(0, 0, 0)); - QVERIFY(box1.maximum() == QVector3D(0, 0, 0)); - - QBox3D box2; - box2.setToInfinite(); - QVERIFY(!box2.isNull()); - QVERIFY(!box2.isFinite()); - QVERIFY(box2.isInfinite()); - QVERIFY(box2.minimum() == QVector3D(0, 0, 0)); - QVERIFY(box2.maximum() == QVector3D(0, 0, 0)); - - QBox3D box3(QVector3D(1, 2, 3), QVector3D(4, 5, 6)); - QVERIFY(!box3.isNull()); - QVERIFY(box3.isFinite()); - QVERIFY(!box3.isInfinite()); - QVERIFY(box3.minimum() == QVector3D(1, 2, 3)); - QVERIFY(box3.maximum() == QVector3D(4, 5, 6)); - - QBox3D box4(QVector3D(4, 5, 6), QVector3D(1, 2, 3)); - QVERIFY(!box4.isNull()); - QVERIFY(box4.isFinite()); - QVERIFY(!box4.isInfinite()); - QVERIFY(box4.minimum() == QVector3D(1, 2, 3)); - QVERIFY(box4.maximum() == QVector3D(4, 5, 6)); - - QBox3D box5(box4); - QVERIFY(!box5.isNull()); - QVERIFY(box5.isFinite()); - QVERIFY(!box5.isInfinite()); - QVERIFY(box5.minimum() == QVector3D(1, 2, 3)); - QVERIFY(box5.maximum() == QVector3D(4, 5, 6)); - - box5 = box2; - QVERIFY(!box5.isNull()); - QVERIFY(!box5.isFinite()); - QVERIFY(box5.isInfinite()); - QVERIFY(box5.minimum() == QVector3D(0, 0, 0)); - QVERIFY(box5.maximum() == QVector3D(0, 0, 0)); -} - -void tst_QBox3D::modify() -{ - // Use setExtents, which will swap minimum and maximum. - QBox3D box; - box.setExtents(QVector3D(-1, -2, -3), QVector3D(-5, -6, -7)); - QVERIFY(!box.isNull()); - QVERIFY(box.isFinite()); - QVERIFY(!box.isInfinite()); - QVERIFY(box.minimum() == QVector3D(-5, -6, -7)); - QVERIFY(box.maximum() == QVector3D(-1, -2, -3)); - - box.setExtents(QVector3D(1, 2, 3), QVector3D(4, 5, 6)); - QVERIFY(!box.isNull()); - QVERIFY(box.isFinite()); - QVERIFY(!box.isInfinite()); - QVERIFY(box.minimum() == QVector3D(1, 2, 3)); - QVERIFY(box.maximum() == QVector3D(4, 5, 6)); - - box.setToNull(); - QVERIFY(box.isNull()); - QVERIFY(!box.isFinite()); - QVERIFY(!box.isInfinite()); - QVERIFY(box.minimum() == QVector3D(0, 0, 0)); - QVERIFY(box.maximum() == QVector3D(0, 0, 0)); - - // Using setExtents will turn a null box into a finite box. - box.setExtents(QVector3D(-1, -2, -3), QVector3D(-5, -6, -7)); - QVERIFY(!box.isNull()); - QVERIFY(box.isFinite()); - QVERIFY(!box.isInfinite()); - QVERIFY(box.minimum() == QVector3D(-5, -6, -7)); - QVERIFY(box.maximum() == QVector3D(-1, -2, -3)); - - box.setToInfinite(); - QVERIFY(!box.isNull()); - QVERIFY(!box.isFinite()); - QVERIFY(box.isInfinite()); - QVERIFY(box.minimum() == QVector3D(0, 0, 0)); - QVERIFY(box.maximum() == QVector3D(0, 0, 0)); - - // Using setExtents will turn an infinite box into a finite box. - box.setExtents(QVector3D(-1, -2, -3), QVector3D(-5, -6, -7)); - QVERIFY(!box.isNull()); - QVERIFY(box.isFinite()); - QVERIFY(!box.isInfinite()); - QVERIFY(box.minimum() == QVector3D(-5, -6, -7)); - QVERIFY(box.maximum() == QVector3D(-1, -2, -3)); -} - -void tst_QBox3D::compare() -{ - QBox3D box1(QVector3D(-1, -2, -3), QVector3D(-5, -6, -7)); - QBox3D box2(QVector3D(-1, -2, -3), QVector3D(-5, -6, -7)); - QBox3D box3(QVector3D(0, -2, -3), QVector3D(-5, -6, -7)); - QBox3D null1, null2; - QBox3D infinite1, infinite2; - infinite1.setToInfinite(); - infinite2.setToInfinite(); - - QVERIFY(box1 == box2); - QVERIFY(box1 != box3); - QVERIFY(box1 != null1); - QVERIFY(box1 != infinite1); - - QVERIFY(null1 == null2); - QVERIFY(null1 != box1); - QVERIFY(null1 != infinite1); - - QVERIFY(infinite1 == infinite2); - QVERIFY(infinite1 != box1); - QVERIFY(infinite1 != null1); -} - -void tst_QBox3D::fuzzyCompare() -{ - QBox3D box1(QVector3D(-1, -2, -3), QVector3D(-5, -6, -7)); - QBox3D box2(QVector3D(-1, -2, -3), QVector3D(-5, -6, -7)); - QBox3D box3(QVector3D(0, -2, -3), QVector3D(-5, -6, -7)); - QBox3D null1, null2; - QBox3D infinite1, infinite2; - infinite1.setToInfinite(); - infinite2.setToInfinite(); - - QVERIFY(qFuzzyCompare(box1, box2)); - QVERIFY(!qFuzzyCompare(box1, box3)); - QVERIFY(!qFuzzyCompare(box1, null1)); - QVERIFY(!qFuzzyCompare(box1, infinite1)); - - QVERIFY(qFuzzyCompare(null1, null2)); - QVERIFY(!qFuzzyCompare(null1, box1)); - QVERIFY(!qFuzzyCompare(null1, infinite1)); - - QVERIFY(qFuzzyCompare(infinite1, infinite2)); - QVERIFY(!qFuzzyCompare(infinite1, box1)); - QVERIFY(!qFuzzyCompare(infinite1, null1)); -} - -void tst_QBox3D::size_data() -{ - QTest::addColumn<qreal>("x1"); - QTest::addColumn<qreal>("y1"); - QTest::addColumn<qreal>("z1"); - QTest::addColumn<qreal>("x2"); - QTest::addColumn<qreal>("y2"); - QTest::addColumn<qreal>("z2"); - - QTest::newRow("zero") - << (qreal)0.0 << (qreal)0.0 << (qreal)0.0 - << (qreal)0.0 << (qreal)0.0 << (qreal)0.0; - - QTest::newRow("one") - << (qreal)0.0 << (qreal)0.0 << (qreal)0.0 - << (qreal)1.0 << (qreal)1.0 << (qreal)1.0; - - QTest::newRow("empty") - << (qreal)1.0 << (qreal)1.0 << (qreal)1.0 - << (qreal)1.0 << (qreal)1.0 << (qreal)1.0; - - QTest::newRow("complex") - << (qreal)-1.0 << (qreal)-2.0 << (qreal)-3.0 - << (qreal)4.0 << (qreal)5.0 << (qreal)6.0; -} -void tst_QBox3D::size() -{ - QFETCH(qreal, x1); - QFETCH(qreal, y1); - QFETCH(qreal, z1); - QFETCH(qreal, x2); - QFETCH(qreal, y2); - QFETCH(qreal, z2); - - qreal sizex = (x1 < x2) ? (x2 - x1) : (x1 - x2); - qreal sizey = (y1 < y2) ? (y2 - y1) : (y1 - y2); - qreal sizez = (z1 < z2) ? (z2 - z1) : (z1 - z2); - - QBox3D box(QVector3D(x1, y1, z1), QVector3D(x2, y2, z2)); - QVERIFY(box.size() == QVector3D(sizex, sizey, sizez)); - - box.setToNull(); - QVERIFY(box.size() == QVector3D(0, 0, 0)); - - box.setToInfinite(); - QVERIFY(box.size() == QVector3D(0, 0, 0)); -} - -void tst_QBox3D::center_data() -{ - // Use the same test data as the size tests. - size_data(); -} -void tst_QBox3D::center() -{ - QFETCH(qreal, x1); - QFETCH(qreal, y1); - QFETCH(qreal, z1); - QFETCH(qreal, x2); - QFETCH(qreal, y2); - QFETCH(qreal, z2); - - qreal centerx = (x1 + x2) / 2; - qreal centery = (y1 + y2) / 2; - qreal centerz = (z1 + z2) / 2; - - QBox3D box(QVector3D(x1, y1, z1), QVector3D(x2, y2, z2)); - QVERIFY(box.center() == QVector3D(centerx, centery, centerz)); - - box.setToNull(); - QVERIFY(box.center() == QVector3D(0, 0, 0)); - - box.setToInfinite(); - QVERIFY(box.center() == QVector3D(0, 0, 0)); -} - -void tst_QBox3D::containsPoint_data() -{ - QTest::addColumn<qreal>("x"); - QTest::addColumn<qreal>("y"); - QTest::addColumn<qreal>("z"); - QTest::addColumn<bool>("contained"); - - QTest::newRow("zero") - << (qreal)0.0 << (qreal)0.0 << (qreal)0.0 << true; - - QTest::newRow("boundary1") - << (qreal)-1 << (qreal)-2 << (qreal)-3 << true; - QTest::newRow("boundary2") - << (qreal)-1 << (qreal)5 << (qreal)-3 << true; - QTest::newRow("boundary3") - << (qreal)-1 << (qreal)-2 << (qreal)6 << true; - QTest::newRow("boundary4") - << (qreal)-1 << (qreal)5 << (qreal)6 << true; - QTest::newRow("boundary5") - << (qreal)4 << (qreal)-2 << (qreal)-3 << true; - QTest::newRow("boundary6") - << (qreal)4 << (qreal)5 << (qreal)-3 << true; - QTest::newRow("boundary7") - << (qreal)4 << (qreal)-2 << (qreal)6 << true; - QTest::newRow("boundary8") - << (qreal)4 << (qreal)5 << (qreal)6 << true; - - QTest::newRow("outside1") - << (qreal)-2 << (qreal)-2 << (qreal)-3 << false; - QTest::newRow("outside2") - << (qreal)-1 << (qreal)6 << (qreal)-3 << false; - QTest::newRow("outside3") - << (qreal)-1 << (qreal)-2 << (qreal)7 << false; - QTest::newRow("outside4") - << (qreal)-1 << (qreal)-3 << (qreal)6 << false; - QTest::newRow("outside5") - << (qreal)5 << (qreal)-2 << (qreal)-3 << false; - QTest::newRow("outside6") - << (qreal)4 << (qreal)6 << (qreal)-3 << false; - QTest::newRow("outside7") - << (qreal)4 << (qreal)-2 << (qreal)7 << false; - QTest::newRow("outside8") - << (qreal)4 << (qreal)-3 << (qreal)6 << false; -} -void tst_QBox3D::containsPoint() -{ - QFETCH(qreal, x); - QFETCH(qreal, y); - QFETCH(qreal, z); - QFETCH(bool, contained); - - QBox3D box(QVector3D(-1, -2, -3), QVector3D(4, 5, 6)); - - if (contained) - QVERIFY(box.contains(QVector3D(x, y, z))); - else - QVERIFY(!box.contains(QVector3D(x, y, z))); - - QBox3D null; - QVERIFY(!null.contains(QVector3D(x, y, z))); - - QBox3D infinite; - infinite.setToInfinite(); - QVERIFY(infinite.contains(QVector3D(x, y, z))); -} - -void tst_QBox3D::containsBox_data() -{ - QTest::addColumn<qreal>("x1"); - QTest::addColumn<qreal>("y1"); - QTest::addColumn<qreal>("z1"); - QTest::addColumn<qreal>("x2"); - QTest::addColumn<qreal>("y2"); - QTest::addColumn<qreal>("z2"); - QTest::addColumn<bool>("contained"); - QTest::addColumn<bool>("intersects"); - QTest::addColumn<qreal>("ix1"); // Intersection box - QTest::addColumn<qreal>("iy1"); - QTest::addColumn<qreal>("iz1"); - QTest::addColumn<qreal>("ix2"); - QTest::addColumn<qreal>("iy2"); - QTest::addColumn<qreal>("iz2"); - QTest::addColumn<qreal>("ex1"); // Expanded box - QTest::addColumn<qreal>("ey1"); - QTest::addColumn<qreal>("ez1"); - QTest::addColumn<qreal>("ex2"); - QTest::addColumn<qreal>("ey2"); - QTest::addColumn<qreal>("ez2"); - - QTest::newRow("zero") - << (qreal)0.0 << (qreal)0.0 << (qreal)0.0 - << (qreal)0.0 << (qreal)0.0 << (qreal)0.0 - << true << true - << (qreal)0.0 << (qreal)0.0 << (qreal)0.0 - << (qreal)0.0 << (qreal)0.0 << (qreal)0.0 - << (qreal)-1.0 << (qreal)-2.0 << (qreal)-3.0 - << (qreal)1.0 << (qreal)2.0 << (qreal)3.0; - - QTest::newRow("side1") - << (qreal)-1.0 << (qreal)-2.0 << (qreal)-3.0 - << (qreal)1.0 << (qreal)-2.0 << (qreal)3.0 - << true << true - << (qreal)-1.0 << (qreal)-2.0 << (qreal)-3.0 - << (qreal)1.0 << (qreal)-2.0 << (qreal)3.0 - << (qreal)-1.0 << (qreal)-2.0 << (qreal)-3.0 - << (qreal)1.0 << (qreal)2.0 << (qreal)3.0; - QTest::newRow("side2") - << (qreal)-1.0 << (qreal)-2.0 << (qreal)-3.0 - << (qreal)1.0 << (qreal)2.0 << (qreal)-3.0 - << true << true - << (qreal)-1.0 << (qreal)-2.0 << (qreal)-3.0 - << (qreal)1.0 << (qreal)2.0 << (qreal)-3.0 - << (qreal)-1.0 << (qreal)-2.0 << (qreal)-3.0 - << (qreal)1.0 << (qreal)2.0 << (qreal)3.0; - QTest::newRow("side3") - << (qreal)-1.0 << (qreal)-2.0 << (qreal)-3.0 - << (qreal)-1.0 << (qreal)2.0 << (qreal)3.0 - << true << true - << (qreal)-1.0 << (qreal)-2.0 << (qreal)-3.0 - << (qreal)-1.0 << (qreal)2.0 << (qreal)3.0 - << (qreal)-1.0 << (qreal)-2.0 << (qreal)-3.0 - << (qreal)1.0 << (qreal)2.0 << (qreal)3.0; - QTest::newRow("side4") - << (qreal)-1.0 << (qreal)2.0 << (qreal)-3.0 - << (qreal)1.0 << (qreal)2.0 << (qreal)3.0 - << true << true - << (qreal)-1.0 << (qreal)2.0 << (qreal)-3.0 - << (qreal)1.0 << (qreal)2.0 << (qreal)3.0 - << (qreal)-1.0 << (qreal)-2.0 << (qreal)-3.0 - << (qreal)1.0 << (qreal)2.0 << (qreal)3.0; - QTest::newRow("side5") - << (qreal)1.0 << (qreal)-2.0 << (qreal)-3.0 - << (qreal)1.0 << (qreal)2.0 << (qreal)3.0 - << true << true - << (qreal)1.0 << (qreal)-2.0 << (qreal)-3.0 - << (qreal)1.0 << (qreal)2.0 << (qreal)3.0 - << (qreal)-1.0 << (qreal)-2.0 << (qreal)-3.0 - << (qreal)1.0 << (qreal)2.0 << (qreal)3.0; - QTest::newRow("side6") - << (qreal)-1.0 << (qreal)-2.0 << (qreal)3.0 - << (qreal)1.0 << (qreal)2.0 << (qreal)3.0 - << true << true - << (qreal)-1.0 << (qreal)-2.0 << (qreal)3.0 - << (qreal)1.0 << (qreal)2.0 << (qreal)3.0 - << (qreal)-1.0 << (qreal)-2.0 << (qreal)-3.0 - << (qreal)1.0 << (qreal)2.0 << (qreal)3.0; - - QTest::newRow("outside1") - << (qreal)-1.0 << (qreal)-2.5 << (qreal)-3.0 - << (qreal)1.0 << (qreal)-2.5 << (qreal)3.0 - << false << false - << (qreal)0.0 << (qreal)0.0 << (qreal)0.0 - << (qreal)0.0 << (qreal)0.0 << (qreal)0.0 - << (qreal)-1.0 << (qreal)-2.5 << (qreal)-3.0 - << (qreal)1.0 << (qreal)2.0 << (qreal)3.0; - QTest::newRow("outside2") - << (qreal)-1.0 << (qreal)-2.0 << (qreal)-3.5 - << (qreal)1.0 << (qreal)2.0 << (qreal)-3.5 - << false << false - << (qreal)0.0 << (qreal)0.0 << (qreal)0.0 - << (qreal)0.0 << (qreal)0.0 << (qreal)0.0 - << (qreal)-1.0 << (qreal)-2.0 << (qreal)-3.5 - << (qreal)1.0 << (qreal)2.0 << (qreal)3.0; - QTest::newRow("outside3") - << (qreal)-1.5 << (qreal)-2.0 << (qreal)-3.0 - << (qreal)-1.5 << (qreal)2.0 << (qreal)3.0 - << false << false - << (qreal)0.0 << (qreal)0.0 << (qreal)0.0 - << (qreal)0.0 << (qreal)0.0 << (qreal)0.0 - << (qreal)-1.5 << (qreal)-2.0 << (qreal)-3.0 - << (qreal)1.0 << (qreal)2.0 << (qreal)3.0; - QTest::newRow("outside4") - << (qreal)-1.0 << (qreal)2.5 << (qreal)-3.0 - << (qreal)1.0 << (qreal)2.5 << (qreal)3.0 - << false << false - << (qreal)0.0 << (qreal)0.0 << (qreal)0.0 - << (qreal)0.0 << (qreal)0.0 << (qreal)0.0 - << (qreal)-1.0 << (qreal)-2.0 << (qreal)-3.0 - << (qreal)1.0 << (qreal)2.5 << (qreal)3.0; - QTest::newRow("outside5") - << (qreal)1.5 << (qreal)-2.0 << (qreal)-3.0 - << (qreal)1.5 << (qreal)2.0 << (qreal)3.0 - << false << false - << (qreal)0.0 << (qreal)0.0 << (qreal)0.0 - << (qreal)0.0 << (qreal)0.0 << (qreal)0.0 - << (qreal)-1.0 << (qreal)-2.0 << (qreal)-3.0 - << (qreal)1.5 << (qreal)2.0 << (qreal)3.0; - QTest::newRow("outside6") - << (qreal)-1.0 << (qreal)-2.0 << (qreal)3.5 - << (qreal)1.0 << (qreal)2.0 << (qreal)3.5 - << false << false - << (qreal)0.0 << (qreal)0.0 << (qreal)0.0 - << (qreal)0.0 << (qreal)0.0 << (qreal)0.0 - << (qreal)-1.0 << (qreal)-2.0 << (qreal)-3.0 - << (qreal)1.0 << (qreal)2.0 << (qreal)3.5; - - QTest::newRow("overlap1") - << (qreal)-1.0 << (qreal)-2.5 << (qreal)-3.0 - << (qreal)1.0 << (qreal)-1.5 << (qreal)3.0 - << false << true - << (qreal)-1.0 << (qreal)-2.0 << (qreal)-3.0 - << (qreal)1.0 << (qreal)-1.5 << (qreal)3.0 - << (qreal)-1.0 << (qreal)-2.5 << (qreal)-3.0 - << (qreal)1.0 << (qreal)2.0 << (qreal)3.0; - QTest::newRow("overlap2") - << (qreal)-1.0 << (qreal)-2.0 << (qreal)-3.5 - << (qreal)1.0 << (qreal)2.0 << (qreal)-2.5 - << false << true - << (qreal)-1.0 << (qreal)-2.0 << (qreal)-3.0 - << (qreal)1.0 << (qreal)2.0 << (qreal)-2.5 - << (qreal)-1.0 << (qreal)-2.0 << (qreal)-3.5 - << (qreal)1.0 << (qreal)2.0 << (qreal)3.0; - QTest::newRow("overlap3") - << (qreal)-1.5 << (qreal)-2.0 << (qreal)-3.0 - << (qreal)-0.5 << (qreal)2.0 << (qreal)3.0 - << false << true - << (qreal)-1.0 << (qreal)-2.0 << (qreal)-3.0 - << (qreal)-0.5 << (qreal)2.0 << (qreal)3.0 - << (qreal)-1.5 << (qreal)-2.0 << (qreal)-3.0 - << (qreal)1.0 << (qreal)2.0 << (qreal)3.0; - QTest::newRow("overlap4") - << (qreal)-1.0 << (qreal)2.5 << (qreal)-3.0 - << (qreal)1.0 << (qreal)1.5 << (qreal)3.0 - << false << true - << (qreal)-1.0 << (qreal)2.0 << (qreal)-3.0 - << (qreal)1.0 << (qreal)1.5 << (qreal)3.0 - << (qreal)-1.0 << (qreal)-2.0 << (qreal)-3.0 - << (qreal)1.0 << (qreal)2.5 << (qreal)3.0; - QTest::newRow("overlap5") - << (qreal)1.5 << (qreal)-2.0 << (qreal)-3.0 - << (qreal)0.5 << (qreal)2.0 << (qreal)3.0 - << false << true - << (qreal)1.0 << (qreal)-2.0 << (qreal)-3.0 - << (qreal)0.5 << (qreal)2.0 << (qreal)3.0 - << (qreal)-1.0 << (qreal)-2.0 << (qreal)-3.0 - << (qreal)1.5 << (qreal)2.0 << (qreal)3.0; - QTest::newRow("overlap6") - << (qreal)-1.0 << (qreal)-2.0 << (qreal)3.5 - << (qreal)1.0 << (qreal)2.0 << (qreal)2.5 - << false << true - << (qreal)-1.0 << (qreal)-2.0 << (qreal)3.0 - << (qreal)1.0 << (qreal)2.0 << (qreal)2.5 - << (qreal)-1.0 << (qreal)-2.0 << (qreal)-3.0 - << (qreal)1.0 << (qreal)2.0 << (qreal)3.5; - - QTest::newRow("surround") - << (qreal)-2.0 << (qreal)-3.0 << (qreal)-4.0 - << (qreal)2.0 << (qreal)3.0 << (qreal)4.0 - << false << true - << (qreal)-1.0 << (qreal)-2.0 << (qreal)-3.0 - << (qreal)1.0 << (qreal)2.0 << (qreal)3.0 - << (qreal)-2.0 << (qreal)-3.0 << (qreal)-4.0 - << (qreal)2.0 << (qreal)3.0 << (qreal)4.0; -} -void tst_QBox3D::containsBox() -{ - QFETCH(qreal, x1); - QFETCH(qreal, y1); - QFETCH(qreal, z1); - QFETCH(qreal, x2); - QFETCH(qreal, y2); - QFETCH(qreal, z2); - QFETCH(bool, contained); - - QBox3D box(QVector3D(-1, -2, -3), QVector3D(1, 2, 3)); - QBox3D other(QVector3D(x1, y1, z1), QVector3D(x2, y2, z2)); - - if (contained) - QVERIFY(box.contains(other)); - else - QVERIFY(!box.contains(other)); - - QBox3D null; - QVERIFY(!null.contains(other)); - - QBox3D infinite; - infinite.setToInfinite(); - QVERIFY(infinite.contains(other)); - - QVERIFY(!box.contains(null)); - QVERIFY(!box.contains(infinite)); -} - -void tst_QBox3D::intersects_data() -{ - // Use the same test data as containsBox(). - containsBox_data(); -} -void tst_QBox3D::intersects() -{ - QFETCH(qreal, x1); - QFETCH(qreal, y1); - QFETCH(qreal, z1); - QFETCH(qreal, x2); - QFETCH(qreal, y2); - QFETCH(qreal, z2); - QFETCH(bool, contained); - QFETCH(bool, intersects); - - Q_UNUSED(contained); - - QBox3D box(QVector3D(-1, -2, -3), QVector3D(1, 2, 3)); - QBox3D other(QVector3D(x1, y1, z1), QVector3D(x2, y2, z2)); - - if (intersects) - QVERIFY(box.intersects(other)); - else - QVERIFY(!box.intersects(other)); - - QBox3D null; - QVERIFY(!null.intersects(other)); - - QBox3D infinite; - infinite.setToInfinite(); - QVERIFY(infinite.intersects(other)); - - QVERIFY(!box.intersects(null)); - QVERIFY(box.intersects(infinite)); -} - -void tst_QBox3D::intersect_data() -{ - // Use the same test data as containsBox(). - containsBox_data(); -} -void tst_QBox3D::intersect() -{ - QFETCH(qreal, x1); - QFETCH(qreal, y1); - QFETCH(qreal, z1); - QFETCH(qreal, x2); - QFETCH(qreal, y2); - QFETCH(qreal, z2); - QFETCH(bool, contained); - QFETCH(bool, intersects); - QFETCH(qreal, ix1); - QFETCH(qreal, iy1); - QFETCH(qreal, iz1); - QFETCH(qreal, ix2); - QFETCH(qreal, iy2); - QFETCH(qreal, iz2); - - Q_UNUSED(contained); - - QBox3D box(QVector3D(-1, -2, -3), QVector3D(1, 2, 3)); - QBox3D other(QVector3D(x1, y1, z1), QVector3D(x2, y2, z2)); - QBox3D result(QVector3D(ix1, iy1, iz1), QVector3D(ix2, iy2, iz2)); - - QBox3D ibox(box); - ibox.intersect(other); - if (intersects) - QVERIFY(ibox == result); - else - QVERIFY(ibox.isNull()); - - QBox3D null; - null.intersect(other); - QVERIFY(null.isNull()); - - QBox3D infinite; - infinite.setToInfinite(); - infinite.intersect(other); - QVERIFY(infinite == other); - - QBox3D ibox2(box); - QBox3D null2; - ibox2.intersect(null2); - QVERIFY(ibox2.isNull()); - - QBox3D ibox3(box); - QBox3D infinite2; - infinite2.setToInfinite(); - ibox3.intersect(infinite2); - QVERIFY(ibox3 == box); -} - -void tst_QBox3D::intersected_data() -{ - // Use the same test data as containsBox(). - containsBox_data(); -} -void tst_QBox3D::intersected() -{ - QFETCH(qreal, x1); - QFETCH(qreal, y1); - QFETCH(qreal, z1); - QFETCH(qreal, x2); - QFETCH(qreal, y2); - QFETCH(qreal, z2); - QFETCH(bool, contained); - QFETCH(bool, intersects); - QFETCH(qreal, ix1); - QFETCH(qreal, iy1); - QFETCH(qreal, iz1); - QFETCH(qreal, ix2); - QFETCH(qreal, iy2); - QFETCH(qreal, iz2); - - Q_UNUSED(contained); - - QBox3D box(QVector3D(-1, -2, -3), QVector3D(1, 2, 3)); - QBox3D other(QVector3D(x1, y1, z1), QVector3D(x2, y2, z2)); - QBox3D result(QVector3D(ix1, iy1, iz1), QVector3D(ix2, iy2, iz2)); - - QBox3D ibox = box.intersected(other); - if (intersects) - QVERIFY(ibox == result); - else - QVERIFY(ibox.isNull()); - - QBox3D null; - ibox = null.intersected(other); - QVERIFY(ibox.isNull()); - - QBox3D infinite; - infinite.setToInfinite(); - ibox = infinite.intersected(other); - QVERIFY(ibox == other); - - QVERIFY(box.intersected(null).isNull()); - QVERIFY(box.intersected(infinite) == box); -} - -void tst_QBox3D::intersectRay_data() -{ - QTest::addColumn<qreal>("x1"); - QTest::addColumn<qreal>("y1"); - QTest::addColumn<qreal>("z1"); - QTest::addColumn<qreal>("x2"); - QTest::addColumn<qreal>("y2"); - QTest::addColumn<qreal>("z2"); - QTest::addColumn<bool>("intersects"); - QTest::addColumn<qreal>("mint"); - QTest::addColumn<qreal>("maxt"); - QTest::addColumn<qreal>("originx"); - QTest::addColumn<qreal>("originy"); - QTest::addColumn<qreal>("originz"); - QTest::addColumn<qreal>("directionx"); - QTest::addColumn<qreal>("directiony"); - QTest::addColumn<qreal>("directionz"); - - QTest::newRow("zero") - << qreal(0.0) << qreal(0.0) << qreal(0.0) - << qreal(0.0) << qreal(0.0) << qreal(0.0) - << false << qreal(0.0) << qreal(0.0) - << qreal(0.0) << qreal(0.0) << qreal(0.0) - << qreal(0.0) << qreal(0.0) << qreal(0.0); - - QTest::newRow("zero-x") - << qreal(0.0) << qreal(0.0) << qreal(0.0) - << qreal(0.0) << qreal(0.0) << qreal(0.0) - << true << qreal(1.0) << qreal(1.0) - << qreal(-1.0) << qreal(0.0) << qreal(0.0) - << qreal(1.0) << qreal(0.0) << qreal(0.0); - - QTest::newRow("zero-neg-x") - << qreal(0.0) << qreal(0.0) << qreal(0.0) - << qreal(0.0) << qreal(0.0) << qreal(0.0) - << true << qreal(-1.0) << qreal(-1.0) - << qreal(-1.0) << qreal(0.0) << qreal(0.0) - << qreal(-1.0) << qreal(0.0) << qreal(0.0); - - QTest::newRow("zero-x-miss") - << qreal(0.0) << qreal(0.0) << qreal(0.0) - << qreal(0.0) << qreal(0.0) << qreal(0.0) - << false << qreal(0.0) << qreal(0.0) - << qreal(0.0) << qreal(1.0) << qreal(0.0) - << qreal(1.0) << qreal(0.0) << qreal(0.0); - - QTest::newRow("zero-y") - << qreal(0.0) << qreal(0.0) << qreal(0.0) - << qreal(0.0) << qreal(0.0) << qreal(0.0) - << true << qreal(1.0) << qreal(1.0) - << qreal(0.0) << qreal(-1.0) << qreal(0.0) - << qreal(0.0) << qreal(1.0) << qreal(0.0); - - QTest::newRow("zero-neg-y") - << qreal(0.0) << qreal(0.0) << qreal(0.0) - << qreal(0.0) << qreal(0.0) << qreal(0.0) - << true << qreal(-1.0) << qreal(-1.0) - << qreal(0.0) << qreal(-1.0) << qreal(0.0) - << qreal(0.0) << qreal(-1.0) << qreal(0.0); - - QTest::newRow("zero-y-miss") - << qreal(0.0) << qreal(0.0) << qreal(0.0) - << qreal(0.0) << qreal(0.0) << qreal(0.0) - << false << qreal(0.0) << qreal(0.0) - << qreal(1.0) << qreal(0.0) << qreal(0.0) - << qreal(0.0) << qreal(-1.0) << qreal(0.0); - - QTest::newRow("zero-z") - << qreal(0.0) << qreal(0.0) << qreal(0.0) - << qreal(0.0) << qreal(0.0) << qreal(0.0) - << true << qreal(1.0) << qreal(1.0) - << qreal(0.0) << qreal(0.0) << qreal(1.0) - << qreal(0.0) << qreal(0.0) << qreal(-1.0); - - QTest::newRow("zero-neg-z") - << qreal(0.0) << qreal(0.0) << qreal(0.0) - << qreal(0.0) << qreal(0.0) << qreal(0.0) - << true << qreal(-1.0) << qreal(-1.0) - << qreal(0.0) << qreal(0.0) << qreal(1.0) - << qreal(0.0) << qreal(0.0) << qreal(1.0); - - QTest::newRow("zero-z-miss") - << qreal(0.0) << qreal(0.0) << qreal(0.0) - << qreal(0.0) << qreal(0.0) << qreal(0.0) - << false << qreal(0.0) << qreal(0.0) - << qreal(0.0) << qreal(1.0) << qreal(0.0) - << qreal(0.0) << qreal(0.0) << qreal(1.0); - - QTest::newRow("normal-no-ray") - << qreal(-1.0) << qreal(-2.0) << qreal(-3.0) - << qreal(1.0) << qreal(2.0) << qreal(3.0) - << false << qreal(0.0) << qreal(0.0) - << qreal(0.0) << qreal(0.0) << qreal(0.0) - << qreal(0.0) << qreal(0.0) << qreal(0.0); - - QTest::newRow("normal-from-inside-x") - << qreal(-1.0) << qreal(-2.0) << qreal(-3.0) - << qreal(1.0) << qreal(2.0) << qreal(3.0) - << true << qreal(-1.0) << qreal(1.0) - << qreal(0.0) << qreal(0.0) << qreal(0.0) - << qreal(1.0) << qreal(0.0) << qreal(0.0); - - QTest::newRow("normal-from-inside-neg-x") - << qreal(-1.0) << qreal(-2.0) << qreal(-3.0) - << qreal(1.0) << qreal(2.0) << qreal(3.0) - << true << qreal(-2.0) << qreal(2.0) - << qreal(0.0) << qreal(0.0) << qreal(0.0) - << qreal(-0.5) << qreal(0.0) << qreal(0.0); - - QTest::newRow("normal-from-inside-y") - << qreal(-1.0) << qreal(-2.0) << qreal(-3.0) - << qreal(1.0) << qreal(2.0) << qreal(3.0) - << true << qreal(-2.0) << qreal(2.0) - << qreal(0.0) << qreal(0.0) << qreal(0.0) - << qreal(0.0) << qreal(1.0) << qreal(0.0); - - QTest::newRow("normal-from-inside-neg-y") - << qreal(-1.0) << qreal(-2.0) << qreal(-3.0) - << qreal(1.0) << qreal(2.0) << qreal(3.0) - << true << qreal(-4.0) << qreal(4.0) - << qreal(0.0) << qreal(0.0) << qreal(0.0) - << qreal(0.0) << qreal(-0.5) << qreal(0.0); - - QTest::newRow("normal-from-inside-z") - << qreal(-1.0) << qreal(-2.0) << qreal(-3.0) - << qreal(1.0) << qreal(2.0) << qreal(3.0) - << true << qreal(-3.0) << qreal(3.0) - << qreal(0.0) << qreal(0.0) << qreal(0.0) - << qreal(0.0) << qreal(0.0) << qreal(1.0); - - QTest::newRow("normal-from-inside-neg-z") - << qreal(-1.0) << qreal(-2.0) << qreal(-3.0) - << qreal(1.0) << qreal(2.0) << qreal(3.0) - << true << qreal(-6.0) << qreal(6.0) - << qreal(0.0) << qreal(0.0) << qreal(0.0) - << qreal(0.0) << qreal(0.0) << qreal(-0.5); - - QTest::newRow("normal-from-outside-x") - << qreal(-1.0) << qreal(-2.0) << qreal(-3.0) - << qreal(1.0) << qreal(2.0) << qreal(3.0) - << true << qreal(1.0) << qreal(3.0) - << qreal(-2.0) << qreal(0.0) << qreal(0.0) - << qreal(1.0) << qreal(0.0) << qreal(0.0); - - QTest::newRow("normal-from-outside-neg-x") - << qreal(-1.0) << qreal(-2.0) << qreal(-3.0) - << qreal(1.0) << qreal(2.0) << qreal(3.0) - << true << qreal(-6.0) << qreal(-2.0) - << qreal(-2.0) << qreal(0.0) << qreal(0.0) - << qreal(-0.5) << qreal(0.0) << qreal(0.0); - - QTest::newRow("normal-from-outside-miss-x") - << qreal(-1.0) << qreal(-2.0) << qreal(-3.0) - << qreal(1.0) << qreal(2.0) << qreal(3.0) - << false << qreal(0.0) << qreal(0.0) - << qreal(-2.0) << qreal(3.0) << qreal(0.0) - << qreal(1.0) << qreal(0.0) << qreal(0.0); - - QTest::newRow("normal-from-outside-y") - << qreal(-1.0) << qreal(-2.0) << qreal(-3.0) - << qreal(1.0) << qreal(2.0) << qreal(3.0) - << true << qreal(1.0) << qreal(5.0) - << qreal(0.0) << qreal(-3.0) << qreal(0.0) - << qreal(0.0) << qreal(1.0) << qreal(0.0); - - QTest::newRow("normal-from-outside-neg-y") - << qreal(-1.0) << qreal(-2.0) << qreal(-3.0) - << qreal(1.0) << qreal(2.0) << qreal(3.0) - << true << qreal(-10.0) << qreal(-2.0) - << qreal(0.0) << qreal(-3.0) << qreal(0.0) - << qreal(0.0) << qreal(-0.5) << qreal(0.0); - - QTest::newRow("normal-from-outside-miss-y") - << qreal(-1.0) << qreal(-2.0) << qreal(-3.0) - << qreal(1.0) << qreal(2.0) << qreal(3.0) - << false << qreal(0.0) << qreal(0.0) - << qreal(2.0) << qreal(-3.0) << qreal(0.0) - << qreal(0.0) << qreal(1.5) << qreal(0.0); - - QTest::newRow("normal-from-outside-z") - << qreal(-1.0) << qreal(-2.0) << qreal(-3.0) - << qreal(1.0) << qreal(2.0) << qreal(3.0) - << true << qreal(1.0) << qreal(7.0) - << qreal(0.0) << qreal(0.0) << qreal(-4.0) - << qreal(0.0) << qreal(0.0) << qreal(1.0); - - QTest::newRow("normal-from-outside-neg-z") - << qreal(-1.0) << qreal(-2.0) << qreal(-3.0) - << qreal(1.0) << qreal(2.0) << qreal(3.0) - << true << qreal(-14.0) << qreal(-2.0) - << qreal(0.0) << qreal(0.0) << qreal(-4.0) - << qreal(0.0) << qreal(0.0) << qreal(-0.5); - - QTest::newRow("normal-from-outside-miss-z") - << qreal(-1.0) << qreal(-2.0) << qreal(-3.0) - << qreal(1.0) << qreal(2.0) << qreal(3.0) - << false << qreal(0.0) << qreal(0.0) - << qreal(0.0) << qreal(3.0) << qreal(-4.0) - << qreal(0.0) << qreal(0.0) << qreal(1.5); -} - -void tst_QBox3D::intersectRay() -{ - QFETCH(qreal, x1); - QFETCH(qreal, y1); - QFETCH(qreal, z1); - QFETCH(qreal, x2); - QFETCH(qreal, y2); - QFETCH(qreal, z2); - QFETCH(bool, intersects); - QFETCH(qreal, mint); - QFETCH(qreal, maxt); - QFETCH(qreal, originx); - QFETCH(qreal, originy); - QFETCH(qreal, originz); - QFETCH(qreal, directionx); - QFETCH(qreal, directiony); - QFETCH(qreal, directionz); - - QBox3D box(QVector3D(x1, y1, z1), QVector3D(x2, y2, z2)); - QRay3D ray(QVector3D(originx, originy, originz), - QVector3D(directionx, directiony, directionz)); - - qreal minimum_t = -1.0f, maximum_t = -1.0f; - if (intersects) { - QVERIFY(box.intersection(ray, &minimum_t, &maximum_t)); - QCOMPARE(minimum_t, mint); - QCOMPARE(maximum_t, maxt); - QVERIFY(box.intersects(ray)); - qreal t = box.intersection(ray); - if (mint >= 0.0f) - QCOMPARE(t, mint); - else if (maxt >= 0.0f) - QCOMPARE(t, maxt); - else - QVERIFY(qIsNaN(t)); - } else { - QVERIFY(!box.intersection(ray, &minimum_t, &maximum_t)); - QVERIFY(qIsNaN(minimum_t)); - QVERIFY(qIsNaN(maximum_t)); - QVERIFY(!box.intersects(ray)); - QVERIFY(qIsNaN(box.intersection(ray))); - } -} - -void tst_QBox3D::unitePoint_data() -{ - // Use the same test data as containsPoint(). - containsPoint_data(); -} -void tst_QBox3D::unitePoint() -{ - QFETCH(qreal, x); - QFETCH(qreal, y); - QFETCH(qreal, z); - QFETCH(bool, contained); - - QBox3D box(QVector3D(-1, -2, -3), QVector3D(4, 5, 6)); - - QBox3D result(box); - result.unite(QVector3D(x, y, z)); - - if (contained) { - QVERIFY(result == box); - } else { - qreal minx = (x < -1) ? x : -1; - qreal miny = (y < -2) ? y : -2; - qreal minz = (z < -3) ? z : -3; - qreal maxx = (x > 4) ? x : 4; - qreal maxy = (y > 5) ? y : 5; - qreal maxz = (z > 6) ? z : 6; - QBox3D expected(QVector3D(minx, miny, minz), QVector3D(maxx, maxy, maxz)); - QVERIFY(result == expected); - } - - QBox3D null; - null.unite(QVector3D(x, y, z)); - QVERIFY(null == QBox3D(QVector3D(x, y, z), QVector3D(x, y, z))); - - QBox3D infinite; - infinite.setToInfinite(); - infinite.unite(QVector3D(x, y, z)); - QVERIFY(infinite.isInfinite()); -} - -void tst_QBox3D::uniteBox_data() -{ - // Use the same test data as containsBox(). - containsBox_data(); -} -void tst_QBox3D::uniteBox() -{ - QFETCH(qreal, x1); - QFETCH(qreal, y1); - QFETCH(qreal, z1); - QFETCH(qreal, x2); - QFETCH(qreal, y2); - QFETCH(qreal, z2); - QFETCH(bool, contained); - QFETCH(bool, intersects); - QFETCH(qreal, ix1); - QFETCH(qreal, iy1); - QFETCH(qreal, iz1); - QFETCH(qreal, ix2); - QFETCH(qreal, iy2); - QFETCH(qreal, iz2); - QFETCH(qreal, ex1); - QFETCH(qreal, ey1); - QFETCH(qreal, ez1); - QFETCH(qreal, ex2); - QFETCH(qreal, ey2); - QFETCH(qreal, ez2); - - Q_UNUSED(contained); - Q_UNUSED(intersects); - Q_UNUSED(ix1); - Q_UNUSED(iy1); - Q_UNUSED(iz1); - Q_UNUSED(ix2); - Q_UNUSED(iy2); - Q_UNUSED(iz2); - - QBox3D box(QVector3D(-1, -2, -3), QVector3D(1, 2, 3)); - QBox3D other(QVector3D(x1, y1, z1), QVector3D(x2, y2, z2)); - QBox3D result(QVector3D(ex1, ey1, ez1), QVector3D(ex2, ey2, ez2)); - - QBox3D ibox(box); - ibox.unite(other); - QVERIFY(ibox == result); - - QBox3D null; - null.unite(other); - QVERIFY(null == other); - - QBox3D infinite; - infinite.setToInfinite(); - infinite.unite(other); - QVERIFY(infinite.isInfinite()); - - QBox3D ibox2(box); - QBox3D null2; - ibox2.unite(null2); - QVERIFY(ibox2 == box); - - QBox3D ibox3(box); - QBox3D infinite2; - infinite2.setToInfinite(); - ibox3.unite(infinite2); - QVERIFY(ibox3.isInfinite()); -} - -void tst_QBox3D::unitedPoint_data() -{ - // Use the same test data as containsPoint(). - containsPoint_data(); -} -void tst_QBox3D::unitedPoint() -{ - QFETCH(qreal, x); - QFETCH(qreal, y); - QFETCH(qreal, z); - QFETCH(bool, contained); - - QBox3D box(QVector3D(-1, -2, -3), QVector3D(4, 5, 6)); - - QBox3D result = box.united(QVector3D(x, y, z)); - - if (contained) { - QVERIFY(result == box); - } else { - qreal minx = (x < -1) ? x : -1; - qreal miny = (y < -2) ? y : -2; - qreal minz = (z < -3) ? z : -3; - qreal maxx = (x > 4) ? x : 4; - qreal maxy = (y > 5) ? y : 5; - qreal maxz = (z > 6) ? z : 6; - QBox3D expected(QVector3D(minx, miny, minz), QVector3D(maxx, maxy, maxz)); - QVERIFY(result == expected); - } - - QBox3D null; - result = null.united(QVector3D(x, y, z)); - QVERIFY(result == QBox3D(QVector3D(x, y, z), QVector3D(x, y, z))); - - QBox3D infinite; - infinite.setToInfinite(); - result = infinite.united(QVector3D(x, y, z)); - QVERIFY(result.isInfinite()); -} - -void tst_QBox3D::unitedBox_data() -{ - // Use the same test data as containsBox(). - containsBox_data(); -} -void tst_QBox3D::unitedBox() -{ - QFETCH(qreal, x1); - QFETCH(qreal, y1); - QFETCH(qreal, z1); - QFETCH(qreal, x2); - QFETCH(qreal, y2); - QFETCH(qreal, z2); - QFETCH(bool, contained); - QFETCH(bool, intersects); - QFETCH(qreal, ix1); - QFETCH(qreal, iy1); - QFETCH(qreal, iz1); - QFETCH(qreal, ix2); - QFETCH(qreal, iy2); - QFETCH(qreal, iz2); - QFETCH(qreal, ex1); - QFETCH(qreal, ey1); - QFETCH(qreal, ez1); - QFETCH(qreal, ex2); - QFETCH(qreal, ey2); - QFETCH(qreal, ez2); - - Q_UNUSED(contained); - Q_UNUSED(intersects); - Q_UNUSED(ix1); - Q_UNUSED(iy1); - Q_UNUSED(iz1); - Q_UNUSED(ix2); - Q_UNUSED(iy2); - Q_UNUSED(iz2); - - QBox3D box(QVector3D(-1, -2, -3), QVector3D(1, 2, 3)); - QBox3D other(QVector3D(x1, y1, z1), QVector3D(x2, y2, z2)); - QBox3D result(QVector3D(ex1, ey1, ez1), QVector3D(ex2, ey2, ez2)); - - QBox3D ibox = box.united(other); - QVERIFY(ibox == result); - - QBox3D null; - ibox = null.united(other); - QVERIFY(ibox == other); - - QBox3D infinite; - infinite.setToInfinite(); - ibox = infinite.united(other); - QVERIFY(ibox.isInfinite()); - - QBox3D ibox2(box); - QBox3D null2; - ibox = ibox2.united(null2); - QVERIFY(ibox == box); - - QBox3D ibox3(box); - QBox3D infinite2; - infinite2.setToInfinite(); - ibox = ibox3.united(infinite2); - QVERIFY(ibox.isInfinite()); -} - -void tst_QBox3D::transform() -{ - QBox3D box(QVector3D(-1, -2, -3), QVector3D(1, 2, 3)); - QMatrix4x4 m; - m.rotate(90, 0, 1, 0); - box.transform(m); - QVERIFY(box.minimum() == QVector3D(-3, -2, -1)); - QVERIFY(box.maximum() == QVector3D(3, 2, 1)); - - QBox3D null; - null.transform(m); - QVERIFY(null.isNull()); - - QBox3D infinite; - infinite.setToInfinite(); - infinite.transform(m); - QVERIFY(infinite.isInfinite()); -} - -void tst_QBox3D::transformed() -{ - QBox3D box(QVector3D(-1, -2, -3), QVector3D(1, 2, 3)); - QMatrix4x4 m; - m.rotate(90, 0, 1, 0); - QBox3D box2 = box.transformed(m); - QVERIFY(box2.minimum() == QVector3D(-3, -2, -1)); - QVERIFY(box2.maximum() == QVector3D(3, 2, 1)); - - QBox3D null; - box2 = null.transformed(m); - QVERIFY(box2.isNull()); - - QBox3D infinite; - infinite.setToInfinite(); - box2 = infinite.transformed(m); - QVERIFY(box2.isInfinite()); -} - -void tst_QBox3D::dataStream() -{ -#ifndef QT_NO_DATASTREAM - QBox3D box1(QVector3D(1.0f, 2.0f, 3.0f), QVector3D(4.0f, 5.0f, 6.0f)); - QBox3D box2; // null - QBox3D box3; - box3.setToInfinite(); - - QByteArray data; - { - QDataStream stream(&data, QIODevice::WriteOnly); - stream << box1; - stream << box2; - stream << box3; - } - - QBox3D rbox1; - QBox3D rbox2; - QBox3D rbox3; - { - QDataStream stream2(data); - stream2 >> rbox1; - stream2 >> rbox2; - stream2 >> rbox3; - } - - QVERIFY(box1 == rbox1); - QVERIFY(box2 == rbox2); - QVERIFY(box3 == rbox3); -#endif -} - -class tst_QBox3DProperties : public QObject -{ - Q_OBJECT - Q_PROPERTY(QBox3D box READ box WRITE setBox) -public: - tst_QBox3DProperties(QObject *parent = 0) : QObject(parent) {} - - QBox3D box() const { return b; } - void setBox(const QBox3D& value) { b = value; } - -private: - QBox3D b; -}; - -// Test getting and setting properties via the metaobject system. -void tst_QBox3D::properties() -{ - tst_QBox3DProperties obj; - - qRegisterMetaType<QBox3D>(); - - obj.setBox(QBox3D(QVector3D(1, 2, 3), QVector3D(4, 5, 6))); - - QBox3D b = qVariantValue<QBox3D>(obj.property("box")); - QCOMPARE(b.minimum(), QVector3D(1, 2, 3)); - QCOMPARE(b.maximum(), QVector3D(4, 5, 6)); - - obj.setProperty("box", - qVariantFromValue - (QBox3D(QVector3D(-1, -2, -3), QVector3D(-4, -5, -6)))); - - b = qVariantValue<QBox3D>(obj.property("box")); - QCOMPARE(b.minimum(), QVector3D(-4, -5, -6)); - QCOMPARE(b.maximum(), QVector3D(-1, -2, -3)); -} - -void tst_QBox3D::metaTypes() -{ - int id = qMetaTypeId<QBox3D>(); - QVERIFY(QMetaType::type("QBox3D") == id); - QCOMPARE(QByteArray(QMetaType::typeName(id)), QByteArray("QBox3D")); - QVERIFY(QMetaType::isRegistered(id)); -} - -QTEST_APPLESS_MAIN(tst_QBox3D) - -#include "tst_qbox3d.moc" |