Page MenuHomec4science

QhullVertex_test.cpp
No OneTemporary

File Metadata

Created
Thu, Jun 6, 17:42

QhullVertex_test.cpp

/****************************************************************************
**
** Copyright (c) 2008-2015 C.B. Barber. All rights reserved.
** $Id: //main/2011/qhull/src/qhulltest/QhullVertex_test.cpp#13 $$Change: 1965 $
** $DateTime: 2015/09/22 22:38:32 $$Author: bbarber $
**
****************************************************************************/
//pre-compiled headers
#include <iostream>
#include "RoadTest.h" // QT_VERSION
#include "libqhullcpp/QhullVertex.h"
#include "libqhullcpp/Coordinates.h"
#include "libqhullcpp/QhullError.h"
#include "libqhullcpp/RboxPoints.h"
#include "libqhullcpp/QhullFacet.h"
#include "libqhullcpp/QhullFacetSet.h"
#include "libqhullcpp/QhullVertexSet.h"
#include "libqhullcpp/Qhull.h"
using std::cout;
using std::endl;
using std::ostringstream;
using std::ostream;
using std::string;
namespace orgQhull {
class QhullVertex_test : public RoadTest
{
Q_OBJECT
#//!\name Test slots
private slots:
void cleanup();
void t_constructConvert();
void t_getSet();
void t_foreach();
void t_io();
};//QhullVertex_test
void
add_QhullVertex_test()
{
new QhullVertex_test();
}
//Executed after each testcase
void QhullVertex_test::
cleanup()
{
RoadTest::cleanup();
}
void QhullVertex_test::
t_constructConvert()
{
QhullVertex v6;
QVERIFY(!v6.isValid());
QCOMPARE(v6.dimension(),0);
// Qhull.runQhull() constructs QhullFacets as facetT
RboxPoints rcube("c");
Qhull q(rcube,"Qt QR0"); // triangulation of rotated unit cube
QhullVertex v(q);
QVERIFY(!v.isValid());
QCOMPARE(v.dimension(),3);
QhullVertex v2(q.beginVertex());
QCOMPARE(v2.dimension(),3);
v= v2; // copy assignment
QVERIFY(v.isValid());
QCOMPARE(v.dimension(),3);
QhullVertex v5= v2; // copy constructor
QVERIFY(v5==v2);
QVERIFY(v5==v);
QhullVertex v3(q, v2.getVertexT());
QCOMPARE(v,v3);
QhullVertex v4(q, v2.getBaseT());
QCOMPARE(v,v4);
q.checkAndFreeQhullMemory();
}//t_constructConvert
void QhullVertex_test::
t_getSet()
{
RboxPoints rcube("c");
{
Qhull q(rcube,"Qt QR0"); // triangulation of rotated unit cube
QCOMPARE(q.facetCount(), 12);
QCOMPARE(q.vertexCount(), 8);
// Also spot-test QhullVertexList. See QhullLinkedList_test.cpp
QhullVertexList vs= q.vertexList();
QhullVertexListIterator i(vs);
while(i.hasNext()){
const QhullVertex v= i.next();
cout << v.id() << endl;
QCOMPARE(v.dimension(),3);
QVERIFY(v.id()>=0 && v.id()<9);
QVERIFY(v.isValid());
if(i.hasNext()){
QCOMPARE(v.next(), i.peekNext());
QVERIFY(v.next()!=v);
QVERIFY(v.next().previous()==v);
}
QVERIFY(i.hasPrevious());
QCOMPARE(v, i.peekPrevious());
}
// test point()
foreach (QhullVertex v, q.vertexList()){ // Qt only
QhullPoint p= v.point();
int j= p.id();
cout << "Point " << j << ":\n" << p << endl;
QVERIFY(j>=0 && j<8);
}
q.checkAndFreeQhullMemory();
}
}//t_getSet
void QhullVertex_test::
t_foreach()
{
RboxPoints rcube("c W0 300"); // 300 points on surface of cube
{
Qhull q(rcube, "QR0 Qc"); // keep coplanars, thick facet, and rotate the cube
foreach (QhullVertex v, q.vertexList()){ // Qt only
QhullFacetSet fs= v.neighborFacets();
QCOMPARE(fs.count(), 3);
foreach (QhullFacet f, fs){ // Qt only
QVERIFY(f.vertices().contains(v));
}
}
q.checkAndFreeQhullMemory();
}
}//t_foreach
void QhullVertex_test::
t_io()
{
RboxPoints rcube("c");
{
Qhull q(rcube, "");
QhullVertex v= q.beginVertex();
ostringstream os;
os << "Vertex and vertices:\n";
os << v;
QhullVertexSet vs= q.firstFacet().vertices();
os << vs;
os << "\nVertex and vertices with message:\n";
os << v.print("Vertex");
os << vs.print("\nVertices:");
cout << os.str();
QString s= QString::fromStdString(os.str());
QCOMPARE(s.count("(v"), 10);
QCOMPARE(s.count(": f"), 2);
q.checkAndFreeQhullMemory();
}
RboxPoints r10("10 D3"); // Without QhullVertex::facetNeighbors
{
Qhull q(r10, "");
QhullVertex v= q.beginVertex();
ostringstream os;
os << "\nTry again with simplicial facets. No neighboring facets listed for vertices.\n";
os << "Vertex and vertices:\n";
os << v;
q.defineVertexNeighborFacets();
os << "This time with neighborFacets() defined for all vertices:\n";
os << v;
cout << os.str();
QString s= QString::fromStdString(os.str());
QCOMPARE(s.count(": f"), 1);
Qhull q2(r10, "v"); // Voronoi diagram
QhullVertex v2= q2.beginVertex();
ostringstream os2;
os2 << "\nTry again with Voronoi diagram of simplicial facets. Neighboring facets automatically defined for vertices.\n";
os2 << "Vertex and vertices:\n";
os2 << v2;
cout << os2.str();
QString s2= QString::fromStdString(os2.str());
QCOMPARE(s2.count(": f"), 1);
q.checkAndFreeQhullMemory();
}
}//t_io
}//orgQhull
#include "moc/QhullVertex_test.moc"

Event Timeline