1
/****************************************************************************
3
** Copyright (c) 2009-2012 C.B. Barber. All rights reserved.
4
** $Id: //main/2011/qhull/src/qhulltest/QhullLinkedList_test.cpp#4 $$Change: 1490 $
5
** $DateTime: 2012/02/19 20:27:01 $$Author: bbarber $
7
****************************************************************************/
10
#include <QtCore/QList>
13
#include "QhullLinkedList.h"
18
class QhullLinkedList_test : public RoadTest
30
void t_const_iterator();
31
void t_QhullLinkedList_iterator();
33
};//QhullLinkedList_test
36
add_QhullLinkedList_test()
38
new QhullLinkedList_test();
41
//Executed after each testcase
42
void QhullLinkedList_test::
45
UsingLibQhull::checkQhullMemoryEmpty();
49
void QhullLinkedList_test::
52
// QhullLinkedList vs; //private (compiler error). No memory allocation
53
RboxPoints rcube("c");
55
Qhull q(rcube,"Qt QR0"); // triangulation of rotated unit cube
56
QCOMPARE(q.facetCount(), 12);
57
QhullVertexList vs = QhullVertexList(q.beginVertex(), q.endVertex());
58
QCOMPARE(vs.count(), 8);
59
QCOMPARE(vs.size(), 8u);
60
QVERIFY(!vs.isEmpty());
61
QhullVertexList vs2 = q.vertexList();
62
QCOMPARE(vs2.count(), 8);
63
QCOMPARE(vs2.size(),8u);
64
QVERIFY(!vs2.isEmpty());
65
QVERIFY(!vs2.empty());
67
// vs= vs2; // disabled. Would not copy the vertices
68
QhullVertexList vs3= vs2; // copy constructor
73
void QhullLinkedList_test::
76
RboxPoints rcube("c");
78
Qhull q(rcube,"Qt QR0"); // triangulation of rotated unit cube
79
QCOMPARE(q.facetCount(), 12);
80
QhullVertexList vs = q.vertexList();
81
QCOMPARE(vs.size(), 8u);
82
QVERIFY(!vs.isEmpty());
84
std::vector<QhullVertex> vs2= vs.toStdVector();
85
QCOMPARE(vs2.size(), vs.size());
86
QhullVertexList::Iterator i= vs.begin();
87
for(int k= 0; k<(int)vs2.size(); k++){
88
QCOMPARE(vs2[k], *i++);
90
QList<QhullVertex> vs3= vs.toQList();
91
QCOMPARE(vs3.count(), vs.count());
93
for(int k= 0; k<vs3.count(); k++){
94
QCOMPARE(vs3[k], *i++);
96
QhullVertexList vs4(q.endVertex(), q.endVertex());
97
QVERIFY(vs4.isEmpty());
104
//ReadOnly tested by t_convert
106
void QhullLinkedList_test::
109
RboxPoints rcube("c");
110
Qhull q(rcube,"QR0"); // rotated unit cube
111
QhullVertexList vs = q.vertexList();
112
QhullVertex v= vs.first();
113
QCOMPARE(v.previous(), QhullVertex(NULL));
114
QCOMPARE(vs.front(), vs.first());
115
QhullVertex v2= vs.last();
116
QCOMPARE(v2.next().next(), QhullVertex(NULL)); // sentinel has NULL next
117
QCOMPARE(vs.back(), vs.last());
120
void QhullLinkedList_test::
123
RboxPoints rcube("c");
124
Qhull q(rcube,"QR0"); // rotated unit cube
125
QhullVertexList vs = q.vertexList();
127
QVERIFY(!vs.contains(v));
128
QCOMPARE(vs.count(v), 0);
129
QhullVertex v2= *vs.begin();
130
QhullVertex v3= vs.last();
131
QVERIFY(vs.contains(v2));
132
QCOMPARE(vs.count(v2), 1);
133
QVERIFY(vs.contains(v3));
134
QCOMPARE(vs.count(v3), 1);
137
void QhullLinkedList_test::
140
RboxPoints rcube("c");
142
Qhull q(rcube,"QR0"); // rotated unit cube
143
QhullVertexList vs = q.vertexList();
144
QhullVertexList::Iterator i= vs.begin();
145
QhullVertexList::iterator i2= vs.begin();
155
QhullVertex v= vs.first();
156
QhullVertex v2= v.next();
157
QCOMPARE(v3.id(), v.id());
158
QCOMPARE(v8.id(), vs.last().id());
159
QhullVertexList::Iterator i3(i2);
163
QCOMPARE((*i3).id(), v2.id());
167
QhullVertexList::ConstIterator i4= vs.begin();
168
QVERIFY(i==i4); // iterator COMP const_iterator
169
QVERIFY(i4==i); // const_iterator COMP iterator
180
QCOMPARE(i2, vs.begin());
182
QCOMPARE(i2 += 8, vs.end());
183
QCOMPARE(i2 -= 8, vs.begin());
184
QCOMPARE(i2+0, vs.begin());
185
QCOMPARE(i2+8, vs.end());
190
QCOMPARE(i, vs.begin());
192
//vs.begin end tested above
194
// QhullVertexList is const-only
198
void QhullLinkedList_test::
201
RboxPoints rcube("c");
203
Qhull q(rcube,"QR0"); // rotated unit cube
204
QhullVertexList vs = q.vertexList();
205
QhullVertexList::ConstIterator i= vs.begin();
206
QhullVertexList::const_iterator i2= vs.begin();
215
QhullVertex v= vs.first();
216
QhullVertex v2= v.next();
217
QCOMPARE(v3.id(), v.id());
218
QCOMPARE(v8.id(), vs.last().id());
219
QhullVertexList::ConstIterator i3(i2);
223
QCOMPARE((*i3).id(), v2.id());
227
// See t_iterator for const_iterator COMP iterator
235
QCOMPARE(i2, vs.constBegin());
237
QCOMPARE(i2 += 8, vs.constEnd());
238
QCOMPARE(i2 -= 8, vs.constBegin());
239
QCOMPARE(i2+0, vs.constBegin());
240
QCOMPARE(i2+8, vs.constEnd());
245
QCOMPARE(i, vs.constBegin());
247
// QhullVertexList is const-only
251
void QhullLinkedList_test::
252
t_QhullLinkedList_iterator()
254
RboxPoints rcube("c");
255
Qhull q(rcube,"QR0"); // rotated unit cube
256
QhullVertexList vs(q.endVertex(), q.endVertex());
257
QhullVertexListIterator i= vs;
258
QCOMPARE(vs.count(), 0);
259
QVERIFY(!i.hasNext());
260
QVERIFY(!i.hasPrevious());
262
QVERIFY(!i.hasNext());
263
QVERIFY(!i.hasPrevious());
265
QhullVertexList vs2 = q.vertexList();
266
QhullVertexListIterator i2(vs2);
267
QCOMPARE(vs2.count(), 8);
269
QVERIFY(i2.hasNext());
270
QVERIFY(!i2.hasPrevious());
271
QVERIFY(i.hasNext());
272
QVERIFY(!i.hasPrevious());
275
QVERIFY(!i2.hasNext());
276
QVERIFY(i2.hasPrevious());
277
QVERIFY(i.hasNext());
278
QVERIFY(!i.hasPrevious());
280
// i at front, i2 at end/back, 4 neighbors
281
QhullVertexList vs3 = q.vertexList(); // same as vs2
282
QhullVertex v3(vs3.first());
283
QhullVertex v4= vs3.first();
286
QhullVertex v5(v4.next());
288
QhullVertex v6(v5.next());
289
QhullVertex v7(v6.next());
290
QhullVertex v8(vs3.last());
291
QCOMPARE(i2.peekPrevious(), v8);
296
QCOMPARE(i2.previous(), v7);
297
QCOMPARE(i2.previous(), v6);
298
QCOMPARE(i2.previous(), v5);
299
QCOMPARE(i2.previous(), v4);
300
QVERIFY(!i2.hasPrevious());
301
QCOMPARE(i.peekNext(), v4);
302
// i.peekNext()= 1.0; // compiler error
303
QCOMPARE(i.next(), v4);
304
QCOMPARE(i.peekNext(), v5);
305
QCOMPARE(i.next(), v5);
306
QCOMPARE(i.next(), v6);
307
QCOMPARE(i.next(), v7);
311
QCOMPARE(i.next(), v8);
312
QVERIFY(!i.hasNext());
314
QCOMPARE(i.next(), v4);
315
}//t_QhullLinkedList_iterator
317
void QhullLinkedList_test::
320
RboxPoints rcube("c");
321
Qhull q(rcube,"QR0"); // rotated unit cube
322
QhullVertexList vs(q.endVertex(), q.endVertex());
323
std::cout << "INFO: empty QhullVertextList" << vs << std::endl;
324
QhullVertexList vs2= q.vertexList();
325
std::cout << "INFO: " << vs2 << std::endl;
328
}//namespace orgQhull
330
#include "moc/QhullLinkedList_test.moc"