tests/benchmarks/containers-sequential/main.cpp
changeset 3 41300fa6a67c
parent 0 1918ee327afb
child 4 3b1da2848fc7
equal deleted inserted replaced
2:56cd8111b7f7 3:41300fa6a67c
    57     // Use case: Lookup \a size items from the vector.
    57     // Use case: Lookup \a size items from the vector.
    58     virtual void lookup(int size) = 0;
    58     virtual void lookup(int size) = 0;
    59 };
    59 };
    60 
    60 
    61 template <typename T>
    61 template <typename T>
    62 static T * f(T *ts) // dummy function to prevent code from being optimized away by the compiler
    62 T * f(T *ts) // dummy function to prevent code from being optimized away by the compiler
    63 {
    63 {
    64     return ts;
    64     return ts;
    65 }
    65 }
    66 
    66 
    67 // This subclass implements the use cases using QVector as efficiently as possible.
    67 // This subclass implements the use cases using QVector as efficiently as possible.
    79     }
    79     }
    80 
    80 
    81     void lookup(int size)
    81     void lookup(int size)
    82     {
    82     {
    83         QVector<T> v;
    83         QVector<T> v;
    84     
    84 
    85         T t;
    85         T t;
    86         for (int i = 0; i < size; ++i)
    86         for (int i = 0; i < size; ++i)
    87             v.append(t);
    87             v.append(t);
    88 
    88 
    89         T *ts = new T[size];
    89         T *ts = new T[size];
   111     }
   111     }
   112 
   112 
   113     void lookup(int size)
   113     void lookup(int size)
   114     {
   114     {
   115         std::vector<T> v;
   115         std::vector<T> v;
   116     
   116 
   117         T t;
   117         T t;
   118         for (int i = 0; i < size; ++i)
   118         for (int i = 0; i < size; ++i)
   119             v.push_back(t);
   119             v.push_back(t);
   120 
   120 
   121         T *ts = new T[size];
   121         T *ts = new T[size];
   129 };
   129 };
   130 
   130 
   131 struct Large { // A "large" item type
   131 struct Large { // A "large" item type
   132     int x[1000];
   132     int x[1000];
   133 };
   133 };
       
   134 
       
   135 // Symbian devices typically have limited memory
       
   136 #ifdef Q_OS_SYMBIAN
       
   137 #  define LARGE_MAX_SIZE 2000
       
   138 #else
       
   139 #  define LARGE_MAX_SIZE 20000
       
   140 #endif
   134 
   141 
   135 class tst_vector_vs_std : public QObject
   142 class tst_vector_vs_std : public QObject
   136 {
   143 {
   137     Q_OBJECT
   144     Q_OBJECT
   138 public:
   145 public:
   188 void tst_vector_vs_std::insert_Large_data()
   195 void tst_vector_vs_std::insert_Large_data()
   189 {
   196 {
   190     QTest::addColumn<bool>("useStd");
   197     QTest::addColumn<bool>("useStd");
   191     QTest::addColumn<int>("size");
   198     QTest::addColumn<int>("size");
   192 
   199 
   193     for (int size = 10; size < 20000; size += 100) {
   200     for (int size = 10; size < LARGE_MAX_SIZE; size += 100) {
   194         const QByteArray sizeString = QByteArray::number(size);
   201         const QByteArray sizeString = QByteArray::number(size);
   195         QTest::newRow(("std::vector-Large--" + sizeString).constData()) << true << size;
   202         QTest::newRow(("std::vector-Large--" + sizeString).constData()) << true << size;
   196         QTest::newRow(("QVector-Large--" + sizeString).constData()) << false << size;
   203         QTest::newRow(("QVector-Large--" + sizeString).constData()) << false << size;
   197     }
   204     }
   198 }
   205 }
   234 void tst_vector_vs_std::lookup_Large_data()
   241 void tst_vector_vs_std::lookup_Large_data()
   235 {
   242 {
   236     QTest::addColumn<bool>("useStd");
   243     QTest::addColumn<bool>("useStd");
   237     QTest::addColumn<int>("size");
   244     QTest::addColumn<int>("size");
   238 
   245 
   239     for (int size = 10; size < 20000; size += 100) {
   246     for (int size = 10; size < LARGE_MAX_SIZE; size += 100) {
   240         const QByteArray sizeString = QByteArray::number(size);
   247         const QByteArray sizeString = QByteArray::number(size);
   241         QTest::newRow(("std::vector-Large--" + sizeString).constData()) << true << size;
   248         QTest::newRow(("std::vector-Large--" + sizeString).constData()) << true << size;
   242         QTest::newRow(("QVector-Large--" + sizeString).constData()) << false << size;
   249         QTest::newRow(("QVector-Large--" + sizeString).constData()) << false << size;
   243     }
   250     }
   244 }
   251 }