diff options
Diffstat (limited to 'xs/src/qhull/src/qhulltest/QhullFacetSet_test.cpp')
-rw-r--r-- | xs/src/qhull/src/qhulltest/QhullFacetSet_test.cpp | 153 |
1 files changed, 153 insertions, 0 deletions
diff --git a/xs/src/qhull/src/qhulltest/QhullFacetSet_test.cpp b/xs/src/qhull/src/qhulltest/QhullFacetSet_test.cpp new file mode 100644 index 000000000..a7fe123a2 --- /dev/null +++ b/xs/src/qhull/src/qhulltest/QhullFacetSet_test.cpp @@ -0,0 +1,153 @@ +/**************************************************************************** +** +** Copyright (c) 2008-2015 C.B. Barber. All rights reserved. +** $Id: //main/2015/qhull/src/qhulltest/QhullFacetSet_test.cpp#3 $$Change: 2062 $ +** $DateTime: 2016/01/17 13:13:18 $$Author: bbarber $ +** +****************************************************************************/ + +//pre-compiled headers +#include <iostream> +#include "qhulltest/RoadTest.h" // QT_VERSION + +#include "libqhullcpp/QhullFacetSet.h" +#include "libqhullcpp/QhullError.h" +#include "libqhullcpp/QhullFacet.h" +#include "libqhullcpp/Qhull.h" +#include "libqhullcpp/RboxPoints.h" + +using std::cout; +using std::endl; +using std::ostringstream; +using std::ostream; +using std::string; + +namespace orgQhull { + +class QhullFacetSet_test : public RoadTest +{ + Q_OBJECT + +#//!\name Test slots +private slots: + void cleanup(); + void t_construct(); + void t_convert(); + void t_readonly(); + void t_foreach(); + void t_io(); +};//QhullFacetSet_test + +void +add_QhullFacetSet_test() +{ + new QhullFacetSet_test(); // RoadTest::s_testcases +} + +//Executed after each testcase +void QhullFacetSet_test:: +cleanup() +{ + RoadTest::cleanup(); +} + +void QhullFacetSet_test:: +t_construct() +{ + RboxPoints rcube("c"); + Qhull q(rcube,"QR0"); // rotated unit cube + QhullFacet f= q.firstFacet(); + QhullFacetSet fs2= f.neighborFacets(); + QVERIFY(!fs2.isEmpty()); + QCOMPARE(fs2.count(),4); + QhullFacetSet fs4= fs2; // copy constructor + QVERIFY(fs4==fs2); + QhullFacetSet fs3(q, q.qh()->facet_mergeset); + QVERIFY(fs3.isEmpty()); +}//t_construct + +void QhullFacetSet_test:: +t_convert() +{ + RboxPoints rcube("c"); + Qhull q2(rcube,"QR0 QV2"); // rotated unit cube + QhullFacet f2= q2.firstFacet(); + QhullFacetSet fs2= f2.neighborFacets(); + QVERIFY(!fs2.isSelectAll()); + QCOMPARE(fs2.count(),2); + std::vector<QhullFacet> fv= fs2.toStdVector(); + QCOMPARE(fv.size(), 2u); + QList<QhullFacet> fv2= fs2.toQList(); + QCOMPARE(fv2.size(), 2); + fs2.selectAll(); + QVERIFY(fs2.isSelectAll()); + std::vector<QhullFacet> fv3= fs2.toStdVector(); + QCOMPARE(fv3.size(), 4u); + QList<QhullFacet> fv4= fs2.toQList(); + QCOMPARE(fv4.size(), 4); +}//t_convert + +//! Spot check properties and read-only. See QhullSet_test +void QhullFacetSet_test:: +t_readonly() +{ + RboxPoints rcube("c"); + Qhull q(rcube,"QV0"); // good facets are adjacent to point 0 + QhullFacetSet fs= q.firstFacet().neighborFacets(); + QVERIFY(!fs.isSelectAll()); + QCOMPARE(fs.count(), 2); + fs.selectAll(); + QVERIFY(fs.isSelectAll()); + QCOMPARE(fs.count(), 4); + fs.selectGood(); + QVERIFY(!fs.isSelectAll()); + QCOMPARE(fs.count(), 2); + QhullFacet f= fs.first(); + QhullFacet f2= fs.last(); + fs.selectAll(); + QVERIFY(fs.contains(f)); + QVERIFY(fs.contains(f2)); + QVERIFY(f.isGood()); + QVERIFY(!f2.isGood()); + fs.selectGood(); + QVERIFY(fs.contains(f)); + QVERIFY(!fs.contains(f2)); +}//t_readonly + +void QhullFacetSet_test:: +t_foreach() +{ + RboxPoints rcube("c"); + // Spot check predicates and accessors. See QhullLinkedList_test + Qhull q(rcube,"QR0"); // rotated unit cube + QhullFacetSet fs= q.firstFacet().neighborFacets(); + QVERIFY(!fs.contains(q.firstFacet())); + QVERIFY(fs.contains(fs.first())); + QhullFacet f= q.firstFacet().next(); + if(!fs.contains(f)){ // check if 'f' is the facet opposite firstFacet() + f= f.next(); + } + QVERIFY(fs.contains(f)); + QCOMPARE(fs.first(), *fs.begin()); + QCOMPARE(*(fs.end()-1), fs.last()); +}//t_foreach + +void QhullFacetSet_test:: +t_io() +{ + RboxPoints rcube("c"); + { + Qhull q(rcube,"QR0 QV0"); // good facets are adjacent to point 0 + QhullFacetSet fs= q.firstFacet().neighborFacets(); + ostringstream os; + os << fs.print("Neighbors of first facet with point 0"); + os << fs.printIdentifiers("\nFacet identifiers: "); + cout << os.str(); + QString facets= QString::fromStdString(os.str()); + QCOMPARE(facets.count(QRegExp(" f[0-9]")), 2+13*2); + } +}//t_io + +}//orgQhull + +#include "moc/QhullFacetSet_test.moc" |