diff options
Diffstat (limited to 'tests/auto/corelib/tools')
-rw-r--r-- | tests/auto/corelib/tools/qarraydata/simplevector.h | 2 | ||||
-rw-r--r-- | tests/auto/corelib/tools/qarraydata/tst_qarraydata.cpp | 63 |
2 files changed, 60 insertions, 5 deletions
diff --git a/tests/auto/corelib/tools/qarraydata/simplevector.h b/tests/auto/corelib/tools/qarraydata/simplevector.h index 38f61189da..c5e19f3c55 100644 --- a/tests/auto/corelib/tools/qarraydata/simplevector.h +++ b/tests/auto/corelib/tools/qarraydata/simplevector.h @@ -86,6 +86,8 @@ public: bool isNull() const { return d.isNull(); } bool isEmpty() const { return this->empty(); } + bool isStatic() const { return d->ref.isStatic(); } + bool isShared() const { return d->ref.isShared(); } bool isSharedWith(const SimpleVector &other) const { return d == other.d; } size_t size() const { return d->size; } diff --git a/tests/auto/corelib/tools/qarraydata/tst_qarraydata.cpp b/tests/auto/corelib/tools/qarraydata/tst_qarraydata.cpp index 241ef3b3e0..89a1f8bc75 100644 --- a/tests/auto/corelib/tools/qarraydata/tst_qarraydata.cpp +++ b/tests/auto/corelib/tools/qarraydata/tst_qarraydata.cpp @@ -72,13 +72,16 @@ void tst_QArrayData::referenceCounting() QCOMPARE(int(array.ref), 1); - array.ref.ref(); + QVERIFY(!array.ref.isStatic()); + QVERIFY(array.ref.isSharable()); + + QVERIFY(array.ref.ref()); QCOMPARE(int(array.ref), 2); QVERIFY(array.ref.deref()); QCOMPARE(int(array.ref), 1); - array.ref.ref(); + QVERIFY(array.ref.ref()); QCOMPARE(int(array.ref), 2); QVERIFY(array.ref.deref()); @@ -91,12 +94,34 @@ void tst_QArrayData::referenceCounting() } { + // Reference counting initialized to 0 (non-sharable) + QArrayData array = { { Q_BASIC_ATOMIC_INITIALIZER(0) }, 0, 0, 0, 0 }; + + QCOMPARE(int(array.ref), 0); + + QVERIFY(!array.ref.isStatic()); + QVERIFY(!array.ref.isSharable()); + + QVERIFY(!array.ref.ref()); + // Reference counting fails, data should be copied + QCOMPARE(int(array.ref), 0); + + QVERIFY(!array.ref.deref()); + QCOMPARE(int(array.ref), 0); + + // Free/release data + } + + { // Reference counting initialized to -1 (static read-only data) QArrayData array = { Q_REFCOUNT_INITIALIZE_STATIC, 0, 0, 0, 0 }; QCOMPARE(int(array.ref), -1); - array.ref.ref(); + QVERIFY(array.ref.isStatic()); + QVERIFY(array.ref.isSharable()); + + QVERIFY(array.ref.ref()); QCOMPARE(int(array.ref), -1); QVERIFY(array.ref.deref()); @@ -109,11 +134,19 @@ void tst_QArrayData::sharedNullEmpty() QArrayData *null = const_cast<QArrayData *>(&QArrayData::shared_null); QArrayData *empty = const_cast<QArrayData *>(&QArrayData::shared_empty); + QVERIFY(null->ref.isStatic()); + QVERIFY(null->ref.isSharable()); + QVERIFY(null->ref.isShared()); + + QVERIFY(empty->ref.isStatic()); + QVERIFY(empty->ref.isSharable()); + QVERIFY(empty->ref.isShared()); + QCOMPARE(int(null->ref), -1); QCOMPARE(int(empty->ref), -1); - null->ref.ref(); - empty->ref.ref(); + QVERIFY(null->ref.ref()); + QVERIFY(empty->ref.ref()); QCOMPARE(int(null->ref), -1); QCOMPARE(int(empty->ref), -1); @@ -218,6 +251,26 @@ void tst_QArrayData::simpleVector() QVERIFY(v7.capacity() >= size_t(10)); QVERIFY(v8.capacity() >= size_t(10)); + QVERIFY(v1.isStatic()); + QVERIFY(v2.isStatic()); + QVERIFY(v3.isStatic()); + QVERIFY(v4.isStatic()); + QVERIFY(v5.isStatic()); + QVERIFY(v6.isStatic()); + QVERIFY(!v7.isStatic()); + QVERIFY(!v8.isStatic()); + + QVERIFY(v1.isShared()); + QVERIFY(v2.isShared()); + QVERIFY(v3.isShared()); + QVERIFY(v4.isShared()); + QVERIFY(v5.isShared()); + QVERIFY(v6.isShared()); + QVERIFY(!v7.isShared()); + QVERIFY((SimpleVector<int>(v7), v7.isShared())); + QVERIFY(!v7.isShared()); + QVERIFY(!v8.isShared()); + QVERIFY(v1.isSharedWith(v2)); QVERIFY(v1.isSharedWith(v3)); QVERIFY(!v1.isSharedWith(v4)); |