1 | /****************************************************************************
|
---|
2 | **
|
---|
3 | ** Copyright (c) 2008-2012 C.B. Barber. All rights reserved.
|
---|
4 | ** $Id: //main/2011/qhull/src/qhulltest/QhullFacetSet_test.cpp#4 $$Change: 1490 $
|
---|
5 | ** $DateTime: 2012/02/19 20:27:01 $$Author: bbarber $
|
---|
6 | **
|
---|
7 | ****************************************************************************/
|
---|
8 |
|
---|
9 | //pre-compiled headers
|
---|
10 | #include <iostream>
|
---|
11 | #include "RoadTest.h"
|
---|
12 |
|
---|
13 | #include "QhullFacetSet.h"
|
---|
14 | #include "QhullError.h"
|
---|
15 | #include "QhullFacet.h"
|
---|
16 | #include "Qhull.h"
|
---|
17 |
|
---|
18 | using std::cout;
|
---|
19 | using std::endl;
|
---|
20 | using std::ostringstream;
|
---|
21 | using std::ostream;
|
---|
22 | using std::string;
|
---|
23 |
|
---|
24 | namespace orgQhull {
|
---|
25 |
|
---|
26 | class QhullFacetSet_test : public RoadTest
|
---|
27 | {
|
---|
28 | Q_OBJECT
|
---|
29 |
|
---|
30 | #//Test slots
|
---|
31 | private slots:
|
---|
32 | void cleanup();
|
---|
33 | void t_construct();
|
---|
34 | void t_convert();
|
---|
35 | void t_readonly();
|
---|
36 | void t_foreach();
|
---|
37 | void t_io();
|
---|
38 | };//QhullFacetSet_test
|
---|
39 |
|
---|
40 | void
|
---|
41 | add_QhullFacetSet_test()
|
---|
42 | {
|
---|
43 | new QhullFacetSet_test();
|
---|
44 | }
|
---|
45 |
|
---|
46 | //Executed after each testcase
|
---|
47 | void QhullFacetSet_test::
|
---|
48 | cleanup()
|
---|
49 | {
|
---|
50 | RoadTest::cleanup();
|
---|
51 | UsingLibQhull::checkQhullMemoryEmpty();
|
---|
52 | }
|
---|
53 |
|
---|
54 | void QhullFacetSet_test::
|
---|
55 | t_construct()
|
---|
56 | {
|
---|
57 | RboxPoints rcube("c");
|
---|
58 | Qhull q(rcube,"QR0"); // rotated unit cube
|
---|
59 | QhullFacet f= q.firstFacet();
|
---|
60 | QhullFacetSet fs2= f.neighborFacets();
|
---|
61 | QVERIFY(!fs2.isEmpty());
|
---|
62 | QCOMPARE(fs2.count(),4);
|
---|
63 | QhullFacetSet fs4= fs2; // copy constructor
|
---|
64 | QVERIFY(fs4==fs2);
|
---|
65 | QhullFacetSet fs3(q.qhullQh()->facet_mergeset);
|
---|
66 | QVERIFY(fs3.isEmpty());
|
---|
67 | }//t_construct
|
---|
68 |
|
---|
69 | void QhullFacetSet_test::
|
---|
70 | t_convert()
|
---|
71 | {
|
---|
72 | RboxPoints rcube("c");
|
---|
73 | Qhull q2(rcube,"QR0 QV2"); // rotated unit cube
|
---|
74 | QhullFacet f2= q2.firstFacet();
|
---|
75 | QhullFacetSet fs2= f2.neighborFacets();
|
---|
76 | QVERIFY(!fs2.isSelectAll());
|
---|
77 | QCOMPARE(fs2.count(),2);
|
---|
78 | std::vector<QhullFacet> fv= fs2.toStdVector();
|
---|
79 | QCOMPARE(fv.size(), 2u);
|
---|
80 | QList<QhullFacet> fv2= fs2.toQList();
|
---|
81 | QCOMPARE(fv2.size(), 2);
|
---|
82 | fs2.selectAll();
|
---|
83 | QVERIFY(fs2.isSelectAll());
|
---|
84 | std::vector<QhullFacet> fv3= fs2.toStdVector();
|
---|
85 | QCOMPARE(fv3.size(), 4u);
|
---|
86 | QList<QhullFacet> fv4= fs2.toQList();
|
---|
87 | QCOMPARE(fv4.size(), 4);
|
---|
88 | }//t_convert
|
---|
89 |
|
---|
90 | //! Spot check properties and read-only. See QhullSet_test
|
---|
91 | void QhullFacetSet_test::
|
---|
92 | t_readonly()
|
---|
93 | {
|
---|
94 | RboxPoints rcube("c");
|
---|
95 | Qhull q(rcube,"QV0"); // good facets are adjacent to point 0
|
---|
96 | QhullFacetSet fs= q.firstFacet().neighborFacets();
|
---|
97 | QVERIFY(!fs.isSelectAll());
|
---|
98 | QCOMPARE(fs.count(), 2);
|
---|
99 | fs.selectAll();
|
---|
100 | QVERIFY(fs.isSelectAll());
|
---|
101 | QCOMPARE(fs.count(), 4);
|
---|
102 | fs.selectGood();
|
---|
103 | QVERIFY(!fs.isSelectAll());
|
---|
104 | QCOMPARE(fs.count(), 2);
|
---|
105 | QhullFacet f= fs.first();
|
---|
106 | QhullFacet f2= fs.last();
|
---|
107 | fs.selectAll();
|
---|
108 | QVERIFY(fs.contains(f));
|
---|
109 | QVERIFY(fs.contains(f2));
|
---|
110 | QVERIFY(f.isGood());
|
---|
111 | QVERIFY(!f2.isGood());
|
---|
112 | fs.selectGood();
|
---|
113 | QVERIFY(fs.contains(f));
|
---|
114 | QVERIFY(!fs.contains(f2));
|
---|
115 | }//t_readonly
|
---|
116 |
|
---|
117 | void QhullFacetSet_test::
|
---|
118 | t_foreach()
|
---|
119 | {
|
---|
120 | RboxPoints rcube("c");
|
---|
121 | // Spot check predicates and accessors. See QhullLinkedList_test
|
---|
122 | Qhull q(rcube,"QR0"); // rotated unit cube
|
---|
123 | QhullFacetSet fs= q.firstFacet().neighborFacets();
|
---|
124 | QVERIFY(!fs.contains(q.firstFacet()));
|
---|
125 | QVERIFY(fs.contains(fs.first()));
|
---|
126 | QhullFacet f= q.firstFacet().next();
|
---|
127 | if(!fs.contains(f)){
|
---|
128 | f= f.next();
|
---|
129 | }
|
---|
130 | QVERIFY(fs.contains(f));
|
---|
131 | QCOMPARE(fs.first(), *fs.begin());
|
---|
132 | QCOMPARE(*(fs.end()-1), fs.last());
|
---|
133 | }//t_foreach
|
---|
134 |
|
---|
135 | void QhullFacetSet_test::
|
---|
136 | t_io()
|
---|
137 | {
|
---|
138 | RboxPoints rcube("c");
|
---|
139 | {
|
---|
140 | Qhull q(rcube,"QR0 QV0"); // good facets are adjacent to point 0
|
---|
141 | QhullFacetSet fs= q.firstFacet().neighborFacets();
|
---|
142 | ostringstream os;
|
---|
143 | os << fs.print(q.runId(), "Neighbors of first facet with point 0");
|
---|
144 | os << fs.printIdentifiers("\nFacet identifiers: ");
|
---|
145 | cout << os.str();
|
---|
146 | QString facets= QString::fromStdString(os.str());
|
---|
147 | QCOMPARE(facets.count(QRegExp(" f[0-9]")), 2+13*2);
|
---|
148 | }
|
---|
149 | }//t_io
|
---|
150 |
|
---|
151 | }//orgQhull
|
---|
152 |
|
---|
153 | #include "moc/QhullFacetSet_test.moc"
|
---|