equal
deleted
inserted
replaced
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 } |