Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/qhull/src/qhulltest/QhullRidge_test.cpp')
-rw-r--r--src/qhull/src/qhulltest/QhullRidge_test.cpp159
1 files changed, 159 insertions, 0 deletions
diff --git a/src/qhull/src/qhulltest/QhullRidge_test.cpp b/src/qhull/src/qhulltest/QhullRidge_test.cpp
new file mode 100644
index 000000000..420a7f06d
--- /dev/null
+++ b/src/qhull/src/qhulltest/QhullRidge_test.cpp
@@ -0,0 +1,159 @@
+/****************************************************************************
+**
+** Copyright (c) 2008-2015 C.B. Barber. All rights reserved.
+** $Id: //main/2015/qhull/src/qhulltest/QhullRidge_test.cpp#3 $$Change: 2062 $
+** $DateTime: 2016/01/17 13:13:18 $$Author: bbarber $
+**
+****************************************************************************/
+
+//pre-compiled headers
+#include <iostream>
+#include "RoadTest.h" // QT_VERSION
+
+#include "libqhullcpp/QhullRidge.h"
+#include "libqhullcpp/QhullError.h"
+#include "libqhullcpp/RboxPoints.h"
+#include "libqhullcpp/QhullFacet.h"
+#include "libqhullcpp/Qhull.h"
+
+using std::cout;
+using std::endl;
+using std::ostringstream;
+using std::ostream;
+using std::string;
+
+namespace orgQhull {
+
+class QhullRidge_test : public RoadTest
+{
+ Q_OBJECT
+
+#//!\name Test slots
+private slots:
+ void cleanup();
+ void t_construct();
+ void t_getSet();
+ void t_foreach();
+ void t_io();
+};//QhullRidge_test
+
+void
+add_QhullRidge_test()
+{
+ new QhullRidge_test(); // RoadTest::s_testcases
+}
+
+//Executed after each testcase
+void QhullRidge_test::
+cleanup()
+{
+ RoadTest::cleanup();
+}
+
+void QhullRidge_test::
+t_construct()
+{
+ // Qhull.runQhull() constructs QhullFacets as facetT
+ RboxPoints rcube("c");
+ Qhull q(rcube,"QR0"); // triangulation of rotated unit cube
+ QhullRidge r(q);
+ QVERIFY(!r.isValid());
+ QCOMPARE(r.dimension(),2);
+ QhullFacet f(q.firstFacet());
+ QhullRidgeSet rs(f.ridges());
+ QVERIFY(!rs.isEmpty()); // Simplicial facets do not have ridges()
+ QhullRidge r2(rs.first());
+ QCOMPARE(r2.dimension(), 2); // One dimension lower than the facet
+ r= r2;
+ QVERIFY(r.isValid());
+ QCOMPARE(r.dimension(), 2);
+ QhullRidge r3(q, r2.getRidgeT());
+ QCOMPARE(r,r3);
+ QhullRidge r4(q, r2.getBaseT());
+ QCOMPARE(r,r4);
+ QhullRidge r5= r2; // copy constructor
+ QVERIFY(r5==r2);
+ QVERIFY(r5==r);
+}//t_construct
+
+void QhullRidge_test::
+t_getSet()
+{
+ RboxPoints rcube("c");
+ {
+ Qhull q(rcube,"QR0"); // triangulation of rotated unit cube
+ QCOMPARE(q.facetCount(), 6);
+ QCOMPARE(q.vertexCount(), 8);
+ QhullFacet f(q.firstFacet());
+ QhullRidgeSet rs= f.ridges();
+ QhullRidgeSetIterator i(rs);
+ while(i.hasNext()){
+ const QhullRidge r= i.next();
+ cout << r.id() << endl;
+ QVERIFY(r.bottomFacet()!=r.topFacet());
+ QCOMPARE(r.dimension(), 2); // Ridge one-dimension less than facet
+ QVERIFY(r.id()>=0 && r.id()<9*27);
+ QVERIFY(r.isValid());
+ QVERIFY(r==r);
+ QVERIFY(r==i.peekPrevious());
+ QCOMPARE(r.otherFacet(r.bottomFacet()),r.topFacet());
+ QCOMPARE(r.otherFacet(r.topFacet()),r.bottomFacet());
+ }
+ }
+}//t_getSet
+
+void QhullRidge_test::
+t_foreach()
+{
+ RboxPoints rcube("c"); // cube
+ {
+ Qhull q(rcube, "QR0"); // rotated cube
+ QhullFacet f(q.firstFacet());
+ foreach (const QhullRidge &r, f.ridges()){ // Qt only
+ QhullVertexSet vs= r.vertices();
+ QCOMPARE(vs.count(), 2);
+ foreach (const QhullVertex &v, vs){ // Qt only
+ QVERIFY(f.vertices().contains(v));
+ }
+ }
+ QhullRidgeSet rs= f.ridges();
+ QhullRidge r= rs.first();
+ QhullRidge r2= r;
+ QList<QhullVertex> vs;
+ int count= 0;
+ while(!count || r2!=r){
+ ++count;
+ QhullVertex v(q);
+ QVERIFY2(r2.hasNextRidge3d(f),"A cube should only have non-simplicial facets.");
+ QhullRidge r3= r2.nextRidge3d(f, &v);
+ QVERIFY(!vs.contains(v));
+ vs << v;
+ r2= r2.nextRidge3d(f);
+ QCOMPARE(r3, r2);
+ }
+ QCOMPARE(vs.count(), rs.count());
+ QCOMPARE(count, rs.count());
+ }
+}//t_foreach
+
+void QhullRidge_test::
+t_io()
+{
+ RboxPoints rcube("c");
+ {
+ Qhull q(rcube, "");
+ QhullFacet f(q.firstFacet());
+ QhullRidgeSet rs= f.ridges();
+ QhullRidge r= rs.first();
+ ostringstream os;
+ os << "Ridges\n" << rs << "Ridge\n" << r;
+ os << r.print("\nRidge with message");
+ cout << os.str();
+ QString s= QString::fromStdString(os.str());
+ QCOMPARE(s.count(" r"), 6);
+ }
+}//t_io
+
+}//orgQhull
+
+#include "moc/QhullRidge_test.moc"