summaryrefslogtreecommitdiffstats
path: root/tests/auto/threed/qareaallocator/tst_qareaallocator.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/threed/qareaallocator/tst_qareaallocator.cpp')
-rw-r--r--tests/auto/threed/qareaallocator/tst_qareaallocator.cpp280
1 files changed, 0 insertions, 280 deletions
diff --git a/tests/auto/threed/qareaallocator/tst_qareaallocator.cpp b/tests/auto/threed/qareaallocator/tst_qareaallocator.cpp
deleted file mode 100644
index 40b76faf..00000000
--- a/tests/auto/threed/qareaallocator/tst_qareaallocator.cpp
+++ /dev/null
@@ -1,280 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** 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 "qareaallocator.h"
-
-class tst_QAreaAllocator : public QObject
-{
- Q_OBJECT
-public:
- tst_QAreaAllocator() {}
- ~tst_QAreaAllocator() {}
-
-private slots:
- void create();
- void allocateSimple();
- void allocateGeneral();
- void allocateUniform();
-};
-
-void tst_QAreaAllocator::create()
-{
- QSimpleAreaAllocator alloc1(QSize(400, 200));
- QCOMPARE(alloc1.size(), QSize(400, 200));
- QCOMPARE(alloc1.minimumAllocation(), QSize(1, 1));
- QCOMPARE(alloc1.margin(), QSize(0, 0));
-
- alloc1.setMinimumAllocation(QSize(5, 7));
- QCOMPARE(alloc1.minimumAllocation(), QSize(5, 7));
-
- alloc1.setMargin(QSize(8, 9));
- QCOMPARE(alloc1.margin(), QSize(8, 9));
-
- alloc1.expand(QSize(300, 21));
- QCOMPARE(alloc1.size(), QSize(400, 200));
-
- alloc1.expand(QSize(300, 210));
- QCOMPARE(alloc1.size(), QSize(400, 210));
-
- alloc1.expand(QSize(3000, 110));
- QCOMPARE(alloc1.size(), QSize(3000, 210));
-
- alloc1.expandBy(QSize(-1, -1000));
- QCOMPARE(alloc1.size(), QSize(3000, 210));
-
- alloc1.expandBy(QSize(1, 10));
- QCOMPARE(alloc1.size(), QSize(3001, 220));
-
- QGeneralAreaAllocator alloc2(QSize(400, 200));
- QCOMPARE(alloc2.size(), QSize(512, 256));
- QCOMPARE(alloc2.minimumAllocation(), QSize(8, 8));
- QCOMPARE(alloc2.margin(), QSize(0, 0));
-
- alloc2.expand(QSize(256, 96));
- QCOMPARE(alloc2.size(), QSize(512, 256));
-
- alloc2.expand(QSize(256, 257));
- QCOMPARE(alloc2.size(), QSize(512, 512));
-
- alloc2.expand(QSize(513, 257));
- QCOMPARE(alloc2.size(), QSize(1024, 512));
-
- alloc2.expandBy(QSize(-100, -100));
- QCOMPARE(alloc2.size(), QSize(1024, 512));
-
- alloc2.expandBy(QSize(1, 2));
- QCOMPARE(alloc2.size(), QSize(2048, 1024));
-
- QUniformAreaAllocator alloc3(QSize(400, 200), QSize(16, 16));
- QCOMPARE(alloc3.size(), QSize(400, 200));
- QCOMPARE(alloc3.minimumAllocation(), QSize(1, 1));
- QCOMPARE(alloc3.margin(), QSize(0, 0));
-
- alloc3.expand(QSize(256, 96));
- QCOMPARE(alloc3.size(), QSize(400, 200));
-
- alloc3.expand(QSize(256, 257));
- QCOMPARE(alloc3.size(), QSize(400, 257));
-
- alloc3.expand(QSize(513, 257));
- QCOMPARE(alloc3.size(), QSize(513, 257));
-
- alloc3.expandBy(QSize(-100, -100));
- QCOMPARE(alloc3.size(), QSize(513, 257));
-
- alloc3.expandBy(QSize(1, 2));
- QCOMPARE(alloc3.size(), QSize(514, 259));
-}
-
-void tst_QAreaAllocator::allocateSimple()
-{
- // The simple allocator returns regions in a left-to-right,
- // top-to-bottom order across the image extents.
- QSimpleAreaAllocator alloc1(QSize(100, 100));
- QRect rect;
- for (int y = 0; y < 10; ++y) {
- for (int x = 0; x < 10; ++x) {
- rect = alloc1.allocate(QSize(10, 10));
- QCOMPARE(rect, QRect(x * 10, y * 10, 10, 10));
- }
- }
- rect = alloc1.allocate(QSize(10, 10));
- QVERIFY(rect.isNull());
-
- // Release doesn't do anything on the simple allocator.
- alloc1.release(QRect(0, 0, 10, 10));
- rect = alloc1.allocate(QSize(10, 10));
- QVERIFY(rect.isNull());
-
- // Test minimum allocation sizes.
- QSimpleAreaAllocator alloc2(QSize(100, 100));
- alloc2.setMinimumAllocation(QSize(10, 5));
- for (int y = 0; y < 10; ++y) {
- for (int x = 0; x < 10; ++x) {
- rect = alloc2.allocate(QSize(x + 1, y + 1));
- if (y < 5)
- QCOMPARE(rect, QRect(x * 10, y * 5, x + 1, y + 1));
- else
- QCOMPARE(rect, QRect(x * 10, (y - 5) * 10 + 25, x + 1, y + 1));
- }
- }
- rect = alloc2.allocate(QSize(10, 10));
- QCOMPARE(rect, QRect(0, 75, 10, 10)); // Still some space left over.
- rect = alloc2.allocate(QSize(10, 26)); // Won't fit.
- QVERIFY(rect.isNull());
- rect = alloc2.allocate(QSize(10, 10)); // Should still fit.
- QCOMPARE(rect, QRect(10, 75, 10, 10));
-}
-
-void tst_QAreaAllocator::allocateGeneral()
-{
- QGeneralAreaAllocator alloc1(QSize(128, 128));
- QRect rect;
- QList<QRect> allocations;
- for (int y = 0; y < 16; ++y) {
- for (int x = 0; x < 16; ++x) {
- // The order in which allocations are returned is not
- // as predictable as QSimpleAreaAllocator. But we can
- // ensure that all allocations are unique and 8x8-aligned.
- rect = alloc1.allocate(QSize(8, 8));
- QVERIFY((rect.x() % 8) == 0);
- QVERIFY((rect.y() % 8) == 0);
- QVERIFY((rect.height() % 8) == 0);
- QVERIFY((rect.height() % 8) == 0);
- QVERIFY(!allocations.contains(rect));
- allocations += rect;
- }
- }
- QCOMPARE(allocations.size(), 256);
- rect = alloc1.allocate(QSize(8, 8));
- QVERIFY(rect.isNull());
-
- // Double the width and height and then do some more allocations at 16x16.
- alloc1.expandBy(QSize(1, 1));
- for (int z = 0; z < 3; ++z) {
- for (int y = 0; y < 8; ++y) {
- for (int x = 0; x < 8; ++x) {
- rect = alloc1.allocate(QSize(16, 16));
- QVERIFY((rect.x() % 8) == 0);
- QVERIFY((rect.y() % 8) == 0);
- QVERIFY((rect.height() % 16) == 0);
- QVERIFY((rect.height() % 16) == 0);
- QVERIFY(!allocations.contains(rect));
- allocations += rect;
- }
- }
- }
- QCOMPARE(allocations.size(), 256 + 3 * 8 * 8);
- rect = alloc1.allocate(QSize(8, 8));
- QVERIFY(rect.isNull());
-
- // Release the 8x8 allocations.
- for (int y = 0; y < 16; ++y)
- for (int x = 0; x < 16; ++x)
- alloc1.release(QRect(x * 8, y * 8, 8, 8));
- rect = alloc1.allocate(QSize(8, 8));
- QVERIFY(!rect.isNull());
- alloc1.release(rect);
-
- // Allocate some other sizes into the gap we've just made.
- rect = alloc1.allocate(QSize(256, 256)); // Too big.
- QVERIFY(rect.isNull());
- rect = alloc1.allocate(QSize(64, 128));
- QVERIFY(!rect.isNull());
- rect = alloc1.allocate(QSize(64, 64));
- QVERIFY(!rect.isNull());
- rect = alloc1.allocate(QSize(64, 48)); // Over-allocates to 64x64.
- QVERIFY(!rect.isNull());
- rect = alloc1.allocate(QSize(8, 8)); // Will fail.
- QVERIFY(rect.isNull());
-}
-
-void tst_QAreaAllocator::allocateUniform()
-{
- // The uniform allocator initially returns regions in a
- // left-to-right, top-to-bottom order across the image extents.
- QUniformAreaAllocator alloc1(QSize(100, 100), QSize(10, 10));
- QRect rect;
- for (int y = 0; y < 10; ++y) {
- for (int x = 0; x < 10; ++x) {
- rect = alloc1.allocate(QSize(10, 10));
- QCOMPARE(rect, QRect(x * 10, y * 10, 10, 10));
- }
- }
- rect = alloc1.allocate(QSize(10, 10));
- QVERIFY(rect.isNull());
-
- // Release some areas and then allocate again. Should act like a stack.
- rect = QRect(60, 50, 10, 10);
- QRect rect2 = QRect(50, 40, 10, 10);
- alloc1.release(rect);
- alloc1.release(rect2);
- QCOMPARE(alloc1.allocate(QSize(10, 10)), rect2);
- QCOMPARE(alloc1.allocate(QSize(10, 10)), rect);
- QVERIFY(alloc1.allocate(QSize(10, 10)).isNull());
-
- // Expand the allocation area.
- alloc1.release(rect); // Copy across at least 1 free list entry.
- alloc1.expandBy(QSize(10, 10));
- for (int count = 0; count < 22; ++count) {
- rect = alloc1.allocate(QSize(10, 10));
- QVERIFY(!rect.isNull());
- }
- rect = alloc1.allocate(QSize(10, 10));
- QVERIFY(rect.isNull());
-
- // Release everything and then reallocate.
- for (int y = 0; y < 11; ++y) {
- for (int x = 0; x < 11; ++x)
- alloc1.release(QRect(x * 10, y * 10, 10, 10));
- }
- for (int count = 0; count < (11 * 11); ++count) {
- rect = alloc1.allocate(QSize(10, 10));
- QVERIFY(!rect.isNull());
- }
- rect = alloc1.allocate(QSize(10, 10));
- QVERIFY(rect.isNull());
-}
-
-QTEST_APPLESS_MAIN(tst_QAreaAllocator)
-
-#include "tst_qareaallocator.moc"