Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F102573681
QhullHyperplane_test.cpp
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Sat, Feb 22, 03:34
Size
10 KB
Mime Type
text/x-c
Expires
Mon, Feb 24, 03:34 (2 d)
Engine
blob
Format
Raw Data
Handle
24366839
Attached To
rCADDMESH CADD_mesher
QhullHyperplane_test.cpp
View Options
/****************************************************************************
**
** Copyright (c) 2009-2012 C.B. Barber. All rights reserved.
** $Id: //main/2011/qhull/src/qhullrtest/QhullHyperplane_test.cpp#1 $$Change: 1640 $
** $DateTime: 2014/01/15 09:12:08 $$Author: bbarber $
**
****************************************************************************/
//pre-compiled headers
#include <iostream>
#include <vector>
#include "RoadTest.h"
#include "QhullHyperplane.h"
#include "QhullError.h"
#include "RboxPoints.h"
#include "QhullFacet.h"
#include "QhullFacetList.h"
#include "Qhull.h"
#include <numeric>
using
std
::
cout
;
using
std
::
endl
;
using
std
::
ostringstream
;
using
std
::
ostream
;
using
std
::
string
;
namespace
orgQhull
{
class
QhullHyperplane_test
:
public
RoadTest
{
Q_OBJECT
#
//Test slots
private
slots:
void
cleanup
();
void
t_construct
();
void
t_convert
();
void
t_readonly
();
void
t_define
();
void
t_value
();
void
t_operator
();
void
t_iterator
();
void
t_const_iterator
();
void
t_qhullHyperplane_iterator
();
void
t_io
();
};
//QhullHyperplane_test
void
add_QhullHyperplane_test
()
{
new
QhullHyperplane_test
();
}
//Executed after each testcase
void
QhullHyperplane_test
::
cleanup
()
{
UsingLibQhull
::
checkQhullMemoryEmpty
();
RoadTest
::
cleanup
();
}
void
QhullHyperplane_test
::
t_construct
()
{
// Qhull.runQhull() constructs QhullFacets as facetT
QhullHyperplane
h
;
QVERIFY
(
!
h
.
isDefined
());
QCOMPARE
(
h
.
dimension
(),
0
);
QCOMPARE
(
h
.
coordinates
(),
static_cast
<
double
*>
(
0
));
RboxPoints
rcube
(
"c"
);
Qhull
q
(
rcube
,
"Qt QR0"
);
// triangulation of rotated unit cube
QhullFacet
f
=
q
.
firstFacet
();
QhullHyperplane
h2
(
f
.
hyperplane
());
QVERIFY
(
h2
.
isDefined
());
QCOMPARE
(
h2
.
dimension
(),
3
);
// h= h2; // copy assignment disabled, ambiguous
QhullHyperplane
h3
(
h2
.
dimension
(),
h2
.
coordinates
(),
h2
.
offset
());
QCOMPARE
(
h2
,
h3
);
QhullHyperplane
h5
=
h2
;
// copy constructor
QVERIFY
(
h5
==
h2
);
}
//t_construct
void
QhullHyperplane_test
::
t_convert
()
{
RboxPoints
rcube
(
"c"
);
Qhull
q
(
rcube
,
"Qt QR0"
);
// triangulation of rotated unit cube
QhullHyperplane
h
=
q
.
firstFacet
().
hyperplane
();
std
::
vector
<
double
>
fs
=
h
.
toStdVector
();
QCOMPARE
(
fs
.
size
(),
4u
);
double
offset
=
fs
.
back
();
fs
.
pop_back
();
QCOMPARE
(
offset
,
-
0.5
);
double
squareNorm
=
inner_product
(
fs
.
begin
(),
fs
.
end
(),
fs
.
begin
(),
0.0
);
QCOMPARE
(
squareNorm
,
1.0
);
QList
<
double
>
qs
=
h
.
toQList
();
QCOMPARE
(
qs
.
size
(),
4
);
double
offset2
=
qs
.
takeLast
();
QCOMPARE
(
offset2
,
-
0.5
);
double
squareNorm2
=
std
::
inner_product
(
qs
.
begin
(),
qs
.
end
(),
qs
.
begin
(),
0.0
);
QCOMPARE
(
squareNorm2
,
1.0
);
}
//t_convert
void
QhullHyperplane_test
::
t_readonly
()
{
RboxPoints
rcube
(
"c"
);
{
Qhull
q
(
rcube
,
"Qt QR0"
);
// triangulation of rotated unit cube
QhullFacetList
fs
=
q
.
facetList
();
QhullFacetListIterator
i
(
fs
);
while
(
i
.
hasNext
()){
QhullFacet
f
=
i
.
next
();
QhullHyperplane
h
=
f
.
hyperplane
();
int
id
=
f
.
id
();
cout
<<
"h"
<<
id
<<
endl
;
QVERIFY
(
h
.
isDefined
());
QCOMPARE
(
h
.
dimension
(),
3
);
const
coordT
*
c
=
h
.
coordinates
();
coordT
*
c2
=
h
.
coordinates
();
QCOMPARE
(
c
,
c2
);
const
coordT
*
c3
=
h
.
begin
();
QCOMPARE
(
c
,
c3
);
QCOMPARE
(
h
.
offset
(),
-
0.5
);
int
j
=
h
.
end
()
-
h
.
begin
();
QCOMPARE
(
j
,
3
);
double
squareNorm
=
std
::
inner_product
(
h
.
begin
(),
h
.
end
(),
h
.
begin
(),
0.0
);
QCOMPARE
(
squareNorm
,
1.0
);
}
QhullHyperplane
h2
=
fs
.
first
().
hyperplane
();
QhullHyperplane
h3
=
fs
.
last
().
hyperplane
();
QVERIFY
(
h2
!=
h3
);
QVERIFY
(
h3
.
coordinates
()
!=
h2
.
coordinates
());
}
}
//t_readonly
void
QhullHyperplane_test
::
t_define
()
{
RboxPoints
rcube
(
"c"
);
{
Qhull
q
(
rcube
,
"Qt QR0"
);
// triangulation of rotated unit cube
QhullFacetList
fs
=
q
.
facetList
();
QhullHyperplane
h
=
fs
.
first
().
hyperplane
();
QhullHyperplane
h2
=
h
;
QVERIFY
(
h
==
h2
);
QhullHyperplane
h3
=
fs
.
last
().
hyperplane
();
QVERIFY
(
h2
!=
h3
);
QhullHyperplane
h4
=
h3
;
h4
.
defineAs
(
h2
);
QVERIFY
(
h2
==
h4
);
QhullHyperplane
p5
=
h3
;
p5
.
defineAs
(
h2
.
dimension
(),
h2
.
coordinates
(),
h2
.
offset
());
QVERIFY
(
h2
==
p5
);
QhullHyperplane
h6
=
h3
;
h6
.
setCoordinates
(
h2
.
coordinates
());
QCOMPARE
(
h2
.
coordinates
(),
h6
.
coordinates
());
h6
.
setOffset
(
h2
.
offset
());
QCOMPARE
(
h2
.
offset
(),
h6
.
offset
());
QVERIFY
(
h2
==
h6
);
h6
.
setDimension
(
2
);
QCOMPARE
(
h6
.
dimension
(),
2
);
QVERIFY
(
h2
!=
h6
);
}
}
//t_define
void
QhullHyperplane_test
::
t_value
()
{
RboxPoints
rcube
(
"c G1"
);
Qhull
q
(
rcube
,
"Qt QR0"
);
// triangulation of rotated unit cube
const
QhullHyperplane
h
=
q
.
firstFacet
().
hyperplane
();
double
dist
=
h
.
distance
(
q
.
origin
());
QCOMPARE
(
dist
,
-
1.0
);
double
norm
=
h
.
norm
();
QCOMPARE
(
norm
,
1.0
);
}
//t_value
void
QhullHyperplane_test
::
t_operator
()
{
RboxPoints
rcube
(
"c"
);
Qhull
q
(
rcube
,
"Qt QR0"
);
// triangulation of rotated unit cube
const
QhullHyperplane
h
=
q
.
firstFacet
().
hyperplane
();
//operator== and operator!= tested elsewhere
const
coordT
*
c
=
h
.
coordinates
();
for
(
int
k
=
h
.
dimension
();
k
--
;
){
QCOMPARE
(
c
[
k
],
h
[
k
]);
}
//h[0]= 10.0; // compiler error, const
QhullHyperplane
h2
=
q
.
firstFacet
().
hyperplane
();
h2
[
0
]
=
10.0
;
// Overwrites Hyperplane coordinate!
QCOMPARE
(
h2
[
0
],
10.0
);
}
//t_operator
void
QhullHyperplane_test
::
t_iterator
()
{
RboxPoints
rcube
(
"c"
);
{
QhullHyperplane
h2
;
QCOMPARE
(
h2
.
begin
(),
h2
.
end
());
QCOMPARE
(
h2
.
count
(),
0
);
QCOMPARE
(
h2
.
size
(),
0u
);
Qhull
q
(
rcube
,
"QR0"
);
// rotated unit cube
QhullHyperplane
h
=
q
.
firstFacet
().
hyperplane
();
QCOMPARE
(
h
.
count
(),
3
);
QCOMPARE
(
h
.
size
(),
3u
);
QhullHyperplane
::
Iterator
i
=
h
.
begin
();
QhullHyperplane
::
iterator
i2
=
h
.
begin
();
QVERIFY
(
i
==
i2
);
QVERIFY
(
i
>=
i2
);
QVERIFY
(
i
<=
i2
);
i
=
h
.
begin
();
QVERIFY
(
i
==
i2
);
i2
=
h
.
end
();
QVERIFY
(
i
!=
i2
);
double
d3
=
*
i
;
i2
--
;
double
d2
=
*
i2
;
QCOMPARE
(
d3
,
h
[
0
]);
QCOMPARE
(
d2
,
h
[
2
]);
QhullHyperplane
::
Iterator
i3
(
i2
);
QCOMPARE
(
*
i2
,
*
i3
);
(
i3
=
i
)
++
;
QCOMPARE
((
*
i3
),
h
[
1
]);
QVERIFY
(
i
==
i
);
QVERIFY
(
i
!=
i2
);
QVERIFY
(
i
<
i2
);
QVERIFY
(
i
<=
i2
);
QVERIFY
(
i2
>
i
);
QVERIFY
(
i2
>=
i
);
QhullHyperplane
::
ConstIterator
i4
=
h
.
begin
();
QVERIFY
(
i
==
i4
);
// iterator COMP const_iterator
QVERIFY
(
i
<=
i4
);
QVERIFY
(
i
>=
i4
);
QVERIFY
(
i4
==
i
);
// const_iterator COMP iterator
QVERIFY
(
i4
<=
i
);
QVERIFY
(
i4
>=
i
);
QVERIFY
(
i
>=
i4
);
QVERIFY
(
i4
<=
i
);
QVERIFY
(
i2
!=
i4
);
QVERIFY
(
i2
>
i4
);
QVERIFY
(
i2
>=
i4
);
QVERIFY
(
i4
!=
i2
);
QVERIFY
(
i4
<
i2
);
QVERIFY
(
i4
<=
i2
);
++
i4
;
QVERIFY
(
i
<
i4
);
QVERIFY
(
i
<=
i4
);
QVERIFY
(
i4
>
i
);
QVERIFY
(
i4
>=
i
);
i
=
h
.
begin
();
i2
=
h
.
begin
();
QCOMPARE
(
i
,
i2
++
);
QCOMPARE
(
*
i2
,
h
[
1
]);
QCOMPARE
(
++
i
,
i2
);
QCOMPARE
(
i
,
i2
--
);
QCOMPARE
(
i2
,
h
.
begin
());
QCOMPARE
(
--
i
,
i2
);
QCOMPARE
(
i2
+=
3
,
h
.
end
());
QCOMPARE
(
i2
-=
3
,
h
.
begin
());
QCOMPARE
(
i2
+
0
,
h
.
begin
());
QCOMPARE
(
i2
+
3
,
h
.
end
());
i2
+=
3
;
i
=
i2
-
0
;
QCOMPARE
(
i
,
i2
);
i
=
i2
-
3
;
QCOMPARE
(
i
,
h
.
begin
());
QCOMPARE
(
i2
-
i
,
3
);
//h.begin end tested above
// QhullHyperplane is const-only
}
}
//t_iterator
void
QhullHyperplane_test
::
t_const_iterator
()
{
RboxPoints
rcube
(
"c"
);
{
Qhull
q
(
rcube
,
"QR0"
);
// rotated unit cube
QhullHyperplane
h
=
q
.
firstFacet
().
hyperplane
();
QhullHyperplane
::
ConstIterator
i
=
h
.
begin
();
QhullHyperplane
::
const_iterator
i2
=
h
.
begin
();
QVERIFY
(
i
==
i2
);
QVERIFY
(
i
>=
i2
);
QVERIFY
(
i
<=
i2
);
i
=
h
.
begin
();
QVERIFY
(
i
==
i2
);
i2
=
h
.
end
();
QVERIFY
(
i
!=
i2
);
double
d3
=
*
i
;
i2
--
;
double
d2
=
*
i2
;
QCOMPARE
(
d3
,
h
[
0
]);
QCOMPARE
(
d2
,
h
[
2
]);
QhullHyperplane
::
ConstIterator
i3
(
i2
);
QCOMPARE
(
*
i2
,
*
i3
);
(
i3
=
i
)
++
;
QCOMPARE
((
*
i3
),
h
[
1
]);
QVERIFY
(
i
==
i
);
QVERIFY
(
i
!=
i2
);
QVERIFY
(
i
<
i2
);
QVERIFY
(
i
<=
i2
);
QVERIFY
(
i2
>
i
);
QVERIFY
(
i2
>=
i
);
// See t_iterator for const_iterator COMP iterator
i
=
h
.
begin
();
i2
=
h
.
constBegin
();
QCOMPARE
(
i
,
i2
++
);
QCOMPARE
(
*
i2
,
h
[
1
]);
QCOMPARE
(
++
i
,
i2
);
QCOMPARE
(
i
,
i2
--
);
QCOMPARE
(
i2
,
h
.
constBegin
());
QCOMPARE
(
--
i
,
i2
);
QCOMPARE
(
i2
+=
3
,
h
.
constEnd
());
QCOMPARE
(
i2
-=
3
,
h
.
constBegin
());
QCOMPARE
(
i2
+
0
,
h
.
constBegin
());
QCOMPARE
(
i2
+
3
,
h
.
constEnd
());
i2
+=
3
;
i
=
i2
-
0
;
QCOMPARE
(
i
,
i2
);
i
=
i2
-
3
;
QCOMPARE
(
i
,
h
.
constBegin
());
QCOMPARE
(
i2
-
i
,
3
);
// QhullHyperplane is const-only
}
}
//t_const_iterator
void
QhullHyperplane_test
::
t_qhullHyperplane_iterator
()
{
QhullHyperplane
h2
;
QhullHyperplaneIterator
i
=
h2
;
QCOMPARE
(
h2
.
dimension
(),
0
);
QVERIFY
(
!
i
.
hasNext
());
QVERIFY
(
!
i
.
hasPrevious
());
i
.
toBack
();
QVERIFY
(
!
i
.
hasNext
());
QVERIFY
(
!
i
.
hasPrevious
());
RboxPoints
rcube
(
"c"
);
Qhull
q
(
rcube
,
"QR0"
);
// rotated unit cube
QhullHyperplane
h
=
q
.
firstFacet
().
hyperplane
();
QhullHyperplaneIterator
i2
(
h
);
QCOMPARE
(
h
.
dimension
(),
3
);
i
=
h
;
QVERIFY
(
i2
.
hasNext
());
QVERIFY
(
!
i2
.
hasPrevious
());
QVERIFY
(
i
.
hasNext
());
QVERIFY
(
!
i
.
hasPrevious
());
i2
.
toBack
();
i
.
toFront
();
QVERIFY
(
!
i2
.
hasNext
());
QVERIFY
(
i2
.
hasPrevious
());
QVERIFY
(
i
.
hasNext
());
QVERIFY
(
!
i
.
hasPrevious
());
// i at front, i2 at end/back, 3 coordinates
QCOMPARE
(
i
.
peekNext
(),
h
[
0
]);
QCOMPARE
(
i2
.
peekPrevious
(),
h
[
2
]);
QCOMPARE
(
i2
.
previous
(),
h
[
2
]);
QCOMPARE
(
i2
.
previous
(),
h
[
1
]);
QCOMPARE
(
i2
.
previous
(),
h
[
0
]);
QVERIFY
(
!
i2
.
hasPrevious
());
QCOMPARE
(
i
.
peekNext
(),
h
[
0
]);
// i.peekNext()= 1.0; // compiler error, i is const
QCOMPARE
(
i
.
next
(),
h
[
0
]);
QCOMPARE
(
i
.
peekNext
(),
h
[
1
]);
QCOMPARE
(
i
.
next
(),
h
[
1
]);
QCOMPARE
(
i
.
next
(),
h
[
2
]);
QVERIFY
(
!
i
.
hasNext
());
i
.
toFront
();
QCOMPARE
(
i
.
next
(),
h
[
0
]);
}
//t_qhullHyperplane_iterator
void
QhullHyperplane_test
::
t_io
()
{
RboxPoints
rcube
(
"c"
);
{
Qhull
q
(
rcube
,
""
);
QhullHyperplane
h
=
q
.
firstFacet
().
hyperplane
();
ostringstream
os
;
os
<<
"Hyperplane:
\n
"
;
os
<<
h
;
os
<<
"Hyperplane w/ runId:
\n
"
;
os
<<
h
.
print
();
os
<<
h
.
print
(
" and a message "
,
" offset "
);
cout
<<
os
.
str
();
QString
s
=
QString
::
fromStdString
(
os
.
str
());
QCOMPARE
(
s
.
count
(
"1"
),
3
);
// QCOMPARE(s.count(QRegExp("f\\d")), 3*7 + 13*3*2);
}
}
//t_io
}
//orgQhull
#include "moc/QhullHyperplane_test.moc"
Event Timeline
Log In to Comment