tests/auto/qvarlengtharray/tst_qvarlengtharray.cpp
changeset 30 5dc02b23752f
parent 29 b72c6db6890b
child 33 3e2da88830cd
--- a/tests/auto/qvarlengtharray/tst_qvarlengtharray.cpp	Wed Jun 23 19:07:03 2010 +0300
+++ b/tests/auto/qvarlengtharray/tst_qvarlengtharray.cpp	Tue Jul 06 15:10:48 2010 +0300
@@ -63,7 +63,6 @@
     void oldTests();
     void task214223();
     void QTBUG6718_resize();
-    void QTBUG10978_realloc();
 };
 
 int fooCtor = 0;
@@ -134,6 +133,12 @@
 	QVERIFY(sa.data() == &sa[0]);
 	QVERIFY(sa[0] == 0xfee);
 	QVERIFY(sa[10] == 0xff);
+        QVERIFY(sa.at(0) == 0xfee);
+        QVERIFY(sa.at(10) == 0xff);
+        QVERIFY(sa.value(0) == 0xfee);
+        QVERIFY(sa.value(10) == 0xff);
+        QVERIFY(sa.value(1000) == 0);
+        QVERIFY(sa.value(1000, 12) == 12);
 	QVERIFY(sa.size() == 512);
 	sa.reserve(1024);
 	QVERIFY(sa.capacity() == 1024);
@@ -169,6 +174,13 @@
         QCOMPARE(sa.size(), 12);
         QCOMPARE(sa[10], QString("hello"));
         QCOMPARE(sa[11], QString("world"));
+        QCOMPARE(sa.at(10), QString("hello"));
+        QCOMPARE(sa.at(11), QString("world"));
+        QCOMPARE(sa.value(10), QString("hello"));
+        QCOMPARE(sa.value(11), QString("world"));
+        QCOMPARE(sa.value(10000), QString());
+        QCOMPARE(sa.value(1212112, QString("none")), QString("none"));
+        QCOMPARE(sa.value(-12, QString("neg")), QString("neg"));
 
         sa.append(arr, 1);
         QCOMPARE(sa.size(), 13);
@@ -292,302 +304,5 @@
     }
 }
 
-struct MyBase
-{
-    MyBase()
-        : data(this)
-        , isCopy(false)
-    {
-        ++liveCount;
-    }
-
-    MyBase(MyBase const &)
-        : data(this)
-        , isCopy(true)
-    {
-        ++copyCount;
-        ++liveCount;
-    }
-
-    MyBase & operator=(MyBase const &)
-    {
-        if (!isCopy) {
-            isCopy = true;
-            ++copyCount;
-        } else {
-            ++errorCount;
-        }
-
-        return *this;
-    }
-
-    ~MyBase()
-    {
-        if (isCopy) {
-            if (!copyCount)
-                ++errorCount;
-            else
-                --copyCount;
-        }
-
-        if (!liveCount)
-            ++errorCount;
-        else
-            --liveCount;
-    }
-
-    bool hasMoved() const
-    {
-        return this != data;
-    }
-
-protected:
-    MyBase const * const data;
-    bool isCopy;
-
-public:
-    static int errorCount;
-    static int liveCount;
-    static int copyCount;
-};
-
-int MyBase::errorCount = 0;
-int MyBase::liveCount = 0;
-int MyBase::copyCount = 0;
-
-struct MyPrimitive
-    : MyBase
-{
-    MyPrimitive()
-    {
-        ++errorCount;
-    }
-
-    ~MyPrimitive()
-    {
-        ++errorCount;
-    }
-
-    MyPrimitive(MyPrimitive const &other)
-        : MyBase(other)
-    {
-        ++errorCount;
-    }
-};
-
-struct MyMovable
-    : MyBase
-{
-};
-
-struct MyComplex
-    : MyBase
-{
-};
-
-QT_BEGIN_NAMESPACE
-
-Q_DECLARE_TYPEINFO(MyPrimitive, Q_PRIMITIVE_TYPE);
-Q_DECLARE_TYPEINFO(MyMovable, Q_MOVABLE_TYPE);
-Q_DECLARE_TYPEINFO(MyComplex, Q_COMPLEX_TYPE);
-
-QT_END_NAMESPACE
-
-bool QTBUG10978_proceed = true;
-
-template <class T, int PreAlloc>
-int countMoved(QVarLengthArray<T, PreAlloc> const &c)
-{
-    int result = 0;
-    for (int i = 0; i < c.size(); ++i)
-        if (c[i].hasMoved())
-            ++result;
-
-    return result;
-}
-
-template <class T>
-void QTBUG10978_test()
-{
-    QTBUG10978_proceed = false;
-
-    typedef QVarLengthArray<T, 16> Container;
-    enum {
-        isStatic = QTypeInfo<T>::isStatic,
-        isComplex = QTypeInfo<T>::isComplex,
-
-        isPrimitive = !isComplex && !isStatic,
-        isMovable = !isStatic
-    };
-
-    // Constructors
-    Container a;
-    QCOMPARE( MyBase::liveCount, 0 );
-    QCOMPARE( MyBase::copyCount, 0 );
-
-    QVERIFY( a.capacity() >= 16 );
-    QCOMPARE( a.size(), 0 );
-
-    Container b_real(8);
-    Container const &b = b_real;
-    QCOMPARE( MyBase::liveCount, isPrimitive ? 0 : 8 );
-    QCOMPARE( MyBase::copyCount, 0 );
-
-    QVERIFY( b.capacity() >= 16 );
-    QCOMPARE( b.size(), 8 );
-
-    // Assignment
-    a = b;
-    QCOMPARE( MyBase::liveCount, isPrimitive ? 0 : 16 );
-    QCOMPARE( MyBase::copyCount, isComplex ? 8 : 0 );
-    QVERIFY( a.capacity() >= 16 );
-    QCOMPARE( a.size(), 8 );
-
-    QVERIFY( b.capacity() >= 16 );
-    QCOMPARE( b.size(), 8 );
-
-    // append
-    a.append(b.data(), b.size());
-    QCOMPARE( MyBase::liveCount, isPrimitive ? 0 : 24 );
-    QCOMPARE( MyBase::copyCount, isComplex ? 16 : 0 );
-
-    QVERIFY( a.capacity() >= 16 );
-    QCOMPARE( a.size(), 16 );
-
-    QVERIFY( b.capacity() >= 16 );
-    QCOMPARE( b.size(), 8 );
-
-    // removeLast
-    a.removeLast();
-    QCOMPARE( MyBase::liveCount, isPrimitive ? 0 : 23 );
-    QCOMPARE( MyBase::copyCount, isComplex ? 15 : 0 );
-
-    QVERIFY( a.capacity() >= 16 );
-    QCOMPARE( a.size(), 15 );
-
-    QVERIFY( b.capacity() >= 16 );
-    QCOMPARE( b.size(), 8 );
-
-    // Movable types
-    const int capacity = a.capacity();
-    if (!isPrimitive)
-        QCOMPARE( countMoved(a), 0 );
-
-    // Reserve, no re-allocation
-    a.reserve(capacity);
-    if (!isPrimitive)
-        QCOMPARE( countMoved(a), 0 );
-    QCOMPARE( MyBase::liveCount, isPrimitive ? 0 : 23 );
-    QCOMPARE( MyBase::copyCount, isComplex ? 15 : 0 );
-
-    QCOMPARE( a.capacity(), capacity );
-    QCOMPARE( a.size(), 15 );
-
-    QVERIFY( b.capacity() >= 16 );
-    QCOMPARE( b.size(), 8 );
-
-    // Reserve, force re-allocation
-    a.reserve(capacity * 2);
-    if (!isPrimitive)
-        QCOMPARE( countMoved(a), isMovable ? 15 : 0 );
-    QCOMPARE( MyBase::liveCount, isPrimitive ? 0 : 23 );
-    QCOMPARE( MyBase::copyCount, isComplex ? 15 : 0 );
-
-    QVERIFY( a.capacity() >= capacity * 2 );
-    QCOMPARE( a.size(), 15 );
-
-    QVERIFY( b.capacity() >= 16 );
-    QCOMPARE( b.size(), 8 );
-
-    // resize, grow
-    a.resize(40);
-    if (!isPrimitive)
-        QCOMPARE( countMoved(a), isMovable ? 15 : 0 );
-    QCOMPARE( MyBase::liveCount, isPrimitive ? 0 : 48 );
-    QCOMPARE( MyBase::copyCount, isComplex ? 15 : 0 );
-
-    QVERIFY( a.capacity() >= a.size() );
-    QCOMPARE( a.size(), 40 );
-
-    QVERIFY( b.capacity() >= 16 );
-    QCOMPARE( b.size(), 8 );
-
-    // Copy constructor, allocate
-    {
-        Container c(a);
-        if (!isPrimitive)
-            QCOMPARE( countMoved(c), 0 );
-        QCOMPARE( MyBase::liveCount, isPrimitive ? 0 : 88 );
-        QCOMPARE( MyBase::copyCount, isComplex ? 55 : 0 );
-
-        QVERIFY( a.capacity() >= a.size() );
-        QCOMPARE( a.size(), 40 );
-
-        QVERIFY( b.capacity() >= 16 );
-        QCOMPARE( b.size(), 8 );
-
-        QVERIFY( c.capacity() >= 40 );
-        QCOMPARE( c.size(), 40 );
-    }
-
-    // resize, shrink
-    a.resize(10);
-    if (!isPrimitive)
-        QCOMPARE( countMoved(a), isMovable ? 10 : 0 );
-    QCOMPARE( MyBase::liveCount, isPrimitive ? 0 : 18 );
-    QCOMPARE( MyBase::copyCount, isComplex ? 10 : 0 );
-
-    QVERIFY( a.capacity() >= a.size() );
-    QCOMPARE( a.size(), 10 );
-
-    QVERIFY( b.capacity() >= 16 );
-    QCOMPARE( b.size(), 8 );
-
-    // Copy constructor, don't allocate
-    {
-        Container c(a);
-        if (!isPrimitive)
-            QCOMPARE( countMoved(c), 0 );
-        QCOMPARE( MyBase::liveCount, isPrimitive ? 0 : 28 );
-        QCOMPARE( MyBase::copyCount, isComplex ? 20 : 0 );
-
-        QVERIFY( a.capacity() >= a.size() );
-        QCOMPARE( a.size(), 10 );
-
-        QVERIFY( b.capacity() >= 16 );
-        QCOMPARE( b.size(), 8 );
-
-        QVERIFY( c.capacity() >= 16 );
-        QCOMPARE( c.size(), 10 );
-    }
-
-    a.clear();
-    QCOMPARE( a.size(), 0 );
-
-    b_real.clear();
-    QCOMPARE( b.size(), 0 );
-
-    QCOMPARE(MyBase::errorCount, 0);
-    QCOMPARE(MyBase::liveCount, 0);
-
-    // All done
-    QTBUG10978_proceed = true;
-}
-
-void tst_QVarLengthArray::QTBUG10978_realloc()
-{
-    QTBUG10978_test<MyBase>();
-    QVERIFY(QTBUG10978_proceed);
-
-    QTBUG10978_test<MyPrimitive>();
-    QVERIFY(QTBUG10978_proceed);
-
-    QTBUG10978_test<MyMovable>();
-    QVERIFY(QTBUG10978_proceed);
-
-    QTBUG10978_test<MyComplex>();
-    QVERIFY(QTBUG10978_proceed);
-}
-
 QTEST_APPLESS_MAIN(tst_QVarLengthArray)
 #include "tst_qvarlengtharray.moc"