void tst_QContiguousCache::complexType() { RefCountingClass original; QContiguousCache<RefCountingClass> contiguousCache(10); contiguousCache.append(original); QCOMPARE(original.refCount(), 3); contiguousCache.removeFirst(); QCOMPARE(original.refCount(), 2); // shared null, 'original'. contiguousCache.append(original); QCOMPARE(original.refCount(), 3); contiguousCache.clear(); QCOMPARE(original.refCount(), 2); for(int i = 0; i < 100; ++i) contiguousCache.insert(i, original); QCOMPARE(original.refCount(), 12); // shared null, 'original', + 10 in contiguousCache. contiguousCache.clear(); QCOMPARE(original.refCount(), 2); for (int i = 0; i < 100; i++) contiguousCache.append(original); QCOMPARE(original.refCount(), 12); // shared null, 'original', + 10 in contiguousCache. contiguousCache.clear(); QCOMPARE(original.refCount(), 2); for (int i = 0; i < 100; i++) contiguousCache.prepend(original); QCOMPARE(original.refCount(), 12); // shared null, 'original', + 10 in contiguousCache. contiguousCache.clear(); QCOMPARE(original.refCount(), 2); for (int i = 0; i < 100; i++) contiguousCache.append(original); contiguousCache.takeLast(); QCOMPARE(original.refCount(), 11); contiguousCache.takeFirst(); QCOMPARE(original.refCount(), 10); }
void tst_QContiguousCache::operatorAt() { RefCountingClass original; QContiguousCache<RefCountingClass> contiguousCache(10); for (int i = 25; i < 35; ++i) contiguousCache[i] = original; QCOMPARE(original.refCount(), 12); // shared null, orig, items in cache // verify const access does not copy items. const QContiguousCache<RefCountingClass> copy(contiguousCache); for (int i = 25; i < 35; ++i) QCOMPARE(copy[i].refCount(), 12); // verify modifying the original increments ref count (e.g. does a detach) contiguousCache[25] = original; QCOMPARE(original.refCount(), 22); }
void tst_QContiguousCache::setCapacity() { int i; QContiguousCache<int> contiguousCache(100); for (i = 280; i < 310; ++i) contiguousCache.insert(i, i); QCOMPARE(contiguousCache.capacity(), 100); QCOMPARE(contiguousCache.count(), 30); QCOMPARE(contiguousCache.firstIndex(), 280); QCOMPARE(contiguousCache.lastIndex(), 309); for (i = contiguousCache.firstIndex(); i <= contiguousCache.lastIndex(); ++i) { QVERIFY(contiguousCache.containsIndex(i)); QCOMPARE(contiguousCache.at(i), i); } contiguousCache.setCapacity(150); QCOMPARE(contiguousCache.capacity(), 150); QCOMPARE(contiguousCache.count(), 30); QCOMPARE(contiguousCache.firstIndex(), 280); QCOMPARE(contiguousCache.lastIndex(), 309); for (i = contiguousCache.firstIndex(); i <= contiguousCache.lastIndex(); ++i) { QVERIFY(contiguousCache.containsIndex(i)); QCOMPARE(contiguousCache.at(i), i); } contiguousCache.setCapacity(20); QCOMPARE(contiguousCache.capacity(), 20); QCOMPARE(contiguousCache.count(), 20); QCOMPARE(contiguousCache.firstIndex(), 290); QCOMPARE(contiguousCache.lastIndex(), 309); for (i = contiguousCache.firstIndex(); i <= contiguousCache.lastIndex(); ++i) { QVERIFY(contiguousCache.containsIndex(i)); QCOMPARE(contiguousCache.at(i), i); } }