aboutsummaryrefslogtreecommitdiffstats
path: root/tests/manual/v4/auto/executableallocator/tst_executableallocator.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/manual/v4/auto/executableallocator/tst_executableallocator.cpp')
-rw-r--r--tests/manual/v4/auto/executableallocator/tst_executableallocator.cpp97
1 files changed, 97 insertions, 0 deletions
diff --git a/tests/manual/v4/auto/executableallocator/tst_executableallocator.cpp b/tests/manual/v4/auto/executableallocator/tst_executableallocator.cpp
new file mode 100644
index 0000000000..1d8617e4a2
--- /dev/null
+++ b/tests/manual/v4/auto/executableallocator/tst_executableallocator.cpp
@@ -0,0 +1,97 @@
+
+#include <QtTest>
+#include <QtCore>
+#include <stdlib.h>
+#include <assert.h>
+
+#include <private/qv4executableallocator.h>
+
+using namespace QQmlJS::VM;
+
+class tst_ExecutableAllocator : public QObject
+{
+ Q_OBJECT
+private slots:
+ void singleAlloc();
+ void mergeNext();
+ void mergePrev();
+ void multipleChunks();
+};
+
+void tst_ExecutableAllocator::singleAlloc()
+{
+ ExecutableAllocator allocator;
+ ExecutableAllocator::Allocation *p = allocator.allocate(256);
+ QCOMPARE(allocator.freeAllocationCount(), 1);
+ QCOMPARE(allocator.chunkCount(), 1);
+ allocator.free(p);
+ QCOMPARE(allocator.freeAllocationCount(), 0);
+ QCOMPARE(allocator.chunkCount(), 0);
+}
+
+void tst_ExecutableAllocator::mergeNext()
+{
+ ExecutableAllocator allocator;
+
+ ExecutableAllocator::Allocation *first = allocator.allocate(10);
+ QCOMPARE(allocator.freeAllocationCount(), 1);
+ QCOMPARE(allocator.chunkCount(), 1);
+
+ ExecutableAllocator::Allocation *second = allocator.allocate(10);
+ QCOMPARE(allocator.freeAllocationCount(), 1);
+ QCOMPARE(allocator.chunkCount(), 1);
+
+ allocator.free(second);
+ QCOMPARE(allocator.freeAllocationCount(), 1);
+ QCOMPARE(allocator.chunkCount(), 1);
+
+ allocator.free(first);
+ QCOMPARE(allocator.freeAllocationCount(), 0);
+ QCOMPARE(allocator.chunkCount(), 0);
+}
+
+void tst_ExecutableAllocator::mergePrev()
+{
+ ExecutableAllocator allocator;
+
+ ExecutableAllocator::Allocation *first = allocator.allocate(10);
+ QCOMPARE(allocator.freeAllocationCount(), 1);
+
+ ExecutableAllocator::Allocation *second = allocator.allocate(10);
+ QCOMPARE(allocator.freeAllocationCount(), 1);
+
+ ExecutableAllocator::Allocation *third = allocator.allocate(10);
+ QCOMPARE(allocator.freeAllocationCount(), 1);
+
+ allocator.free(first);
+ QCOMPARE(allocator.freeAllocationCount(), 2);
+
+ allocator.free(second);
+ QCOMPARE(allocator.freeAllocationCount(), 2);
+
+ allocator.free(third);
+ QCOMPARE(allocator.freeAllocationCount(), 0);
+}
+
+void tst_ExecutableAllocator::multipleChunks()
+{
+ ExecutableAllocator allocator;
+
+ ExecutableAllocator::Allocation *first = allocator.allocate(10);
+ QCOMPARE(allocator.chunkCount(), 1);
+
+ ExecutableAllocator::Allocation *second = allocator.allocate(8 * 1024 * 1024);
+ QCOMPARE(allocator.chunkCount(), 2);
+
+ ExecutableAllocator::Allocation *third = allocator.allocate(1024);
+ QCOMPARE(allocator.chunkCount(), 2);
+
+ allocator.free(first);
+ allocator.free(second);
+ allocator.free(third);
+ QCOMPARE(allocator.chunkCount(), 0);
+ QCOMPARE(allocator.freeAllocationCount(), 0);
+}
+
+QTEST_MAIN(tst_ExecutableAllocator)
+#include "tst_executableallocator.moc"