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