mirror of https://github.com/CGAL/cgal
Added the tests for the Extended_cartesian_kernel
This commit is contained in:
parent
015fa6e617
commit
74c73c4815
|
|
@ -1,8 +1,8 @@
|
|||
#include <CGAL/basic.h>
|
||||
#include <CGAL/test_macros.h>
|
||||
#include <CGAL/Nef_2/redefine_MSC.h>
|
||||
#include <CGAL/Extended_homogeneous.h>
|
||||
#include <CGAL/Filtered_extended_homogeneous.h>
|
||||
#include <CGAL/Extended_cartesian.h>
|
||||
#include <CGAL/Nef_polyhedron_2.h>
|
||||
|
||||
#ifdef CGAL_USE_LEDA
|
||||
|
|
@ -275,6 +275,139 @@ int main()
|
|||
|
||||
Nef_polyhedron::EK.print_statistics();
|
||||
}
|
||||
|
||||
{
|
||||
typedef double Rational;
|
||||
typedef CGAL::Extended_cartesian<Rational> EKernel;
|
||||
typedef CGAL::Nef_polyhedron_2<EKernel> Nef_polyhedron;
|
||||
typedef Nef_polyhedron::Point Point;
|
||||
typedef Nef_polyhedron::Direction Direction;
|
||||
typedef Nef_polyhedron::Line Line;
|
||||
|
||||
typedef Nef_polyhedron::Object_handle Object_handle;
|
||||
typedef Nef_polyhedron::Explorer Explorer;
|
||||
typedef Explorer::Vertex_const_handle Vertex_const_handle;
|
||||
typedef Explorer::Halfedge_const_handle Halfedge_const_handle;
|
||||
typedef Explorer::Face_const_handle Face_const_handle;
|
||||
typedef Explorer::Vertex_const_iterator Vertex_const_iterator;
|
||||
typedef Explorer::Halfedge_const_iterator Halfedge_const_iterator;
|
||||
typedef Explorer::Face_const_iterator Face_const_iterator;
|
||||
|
||||
typedef Explorer::Ray Ray;
|
||||
|
||||
Point p1(0,0), p2(0,1), p3(1,0), p4(-1,-1), p5(0,-1), p6(-1,0), p7(1,1);
|
||||
Line l1(p2,p1); // neg y-axis
|
||||
Line l2(p1,p3); // pos x-axis
|
||||
Nef_polyhedron N1(l1), N2(l2, Nef_polyhedron::EXCLUDED),
|
||||
EMPTY(Nef_polyhedron::EMPTY),PLANE(Nef_polyhedron::COMPLETE);
|
||||
CGAL_TEST((N1*N1) == N1);
|
||||
CGAL_TEST((N1*!N1) == EMPTY);
|
||||
Nef_polyhedron negN1 = ! N1;
|
||||
Nef_polyhedron N1pnegN1 = N1 + negN1;
|
||||
CGAL_TEST(N1pnegN1 == PLANE);
|
||||
CGAL_TEST((N1^N2) == ((N1-N2)+(N2-N1)));
|
||||
Nef_polyhedron N1tN2 = N1 * N2;
|
||||
Nef_polyhedron negN1tN2 = !N1tN2;
|
||||
Nef_polyhedron negN1pnegP2 = !N1+!N2;
|
||||
CGAL_TEST((!(N1*N2)) == (!N1+!N2));
|
||||
|
||||
Nef_polyhedron N3 = N1.intersection(N2);
|
||||
/* N3 is the first quadrant including the positive y-axis
|
||||
but excluding the origin and the positive x-axis */
|
||||
|
||||
CGAL_TEST(N3 < N1 && N3 < N2);
|
||||
CGAL_TEST(N3 <= N1 && N3 <= N2);
|
||||
CGAL_TEST(N1 > N3 && N2 > N3);
|
||||
CGAL_TEST(N1 >= N3 && N2 >= N3);
|
||||
|
||||
Explorer E = N3.explorer();
|
||||
Vertex_const_iterator v = E.vertices_begin();
|
||||
CGAL_TEST( !E.is_standard(v) && E.ray(v) == Ray(p1,p4) );
|
||||
Halfedge_const_handle e = E.first_out_edge(v);
|
||||
CGAL_TEST( E.is_frame_edge(e) );
|
||||
++(++v); // third vertex
|
||||
CGAL_TEST( E.is_standard(v) && E.point(v) == p1 );
|
||||
|
||||
Vertex_const_handle v1,v2;
|
||||
Halfedge_const_handle e1,e2;
|
||||
Face_const_handle f1,f2;
|
||||
Object_handle h1,h2,h3;
|
||||
h1 = N3.locate(p1);
|
||||
h2 = N3.locate(p1,Nef_polyhedron::NAIVE);
|
||||
CGAL_TEST( CGAL::assign(v1,h1) && CGAL::assign(v2,h2) && v1 == v2 );
|
||||
CGAL_TEST( E.is_standard(v1) && E.point(v1) == p1 );
|
||||
h1 = N3.locate(p2);
|
||||
h2 = N3.locate(p2,Nef_polyhedron::NAIVE);
|
||||
CGAL_TEST( CGAL::assign(e1,h1) && CGAL::assign(e2,h2) );
|
||||
CGAL_TEST( (e1==e2 || e1==E.twin(e2)) && E.mark(e1) );
|
||||
h1 = N3.locate(p4);
|
||||
h2 = N3.locate(p4,Nef_polyhedron::NAIVE);
|
||||
CGAL_TEST( CGAL::assign(f1,h1) && CGAL::assign(f2,h2) &&
|
||||
f1 == f2 && !E.mark(f1) );
|
||||
// shooting along angular bisector:
|
||||
h1 = N3.ray_shoot(p4,Direction(1,1));
|
||||
h2 = N3.ray_shoot(p4,Direction(1,1),Nef_polyhedron::NAIVE);
|
||||
CGAL_TEST( CGAL::assign(f1,h1) && CGAL::assign(f2,h2) &&
|
||||
f1 == f2 && E.mark(f1) );
|
||||
// shooting along x-axis:
|
||||
h1 = N3.ray_shoot(p6,Direction(1,0));
|
||||
h2 = N3.ray_shoot(p6,Direction(1,0),Nef_polyhedron::NAIVE);
|
||||
CGAL_TEST( h1 == NULL && h2 == NULL );
|
||||
// shooting along y-axis:
|
||||
h1 = N3.ray_shoot(p5,Direction(0,1));
|
||||
h2 = N3.ray_shoot(p5,Direction(0,1),Nef_polyhedron::NAIVE);
|
||||
e = e1;
|
||||
CGAL_TEST( CGAL::assign(e1,h1) && CGAL::assign(e2,h2) &&
|
||||
(e1==e2||e1==E.twin(e2)) && E.mark(e1) );
|
||||
h1 = N3.ray_shoot_to_boundary(p5,Direction(0,1));
|
||||
h2 = N3.ray_shoot_to_boundary(p5,Direction(0,1),Nef_polyhedron::NAIVE);
|
||||
CGAL_TEST( N3.contained_in_boundary(h1) && N3.contained_in_boundary(h2) );
|
||||
CGAL_TEST( CGAL::assign(v1,h1) && CGAL::assign(v2,h2) && v1 == v2 );
|
||||
h1 = N3.ray_shoot_to_boundary(p7,Direction(0,-1));
|
||||
h2 = N3.ray_shoot_to_boundary(p7,Direction(0,-1),Nef_polyhedron::NAIVE);
|
||||
CGAL_TEST( N3.contained_in_boundary(h1) && N3.contained_in_boundary(h2) );
|
||||
CGAL_TEST( CGAL::assign(e1,h1) && CGAL::assign(e2,h2) &&
|
||||
(e1==e2 || e1==E.twin(e2)) );
|
||||
|
||||
std::list<Point> L;
|
||||
L.push_back(p1);
|
||||
N3 = Nef_polyhedron(L.begin(), L.end(), Nef_polyhedron::INCLUDED);
|
||||
E = N3.explorer();
|
||||
h1 = N3.locate(p1);
|
||||
h2 = N3.locate(p2);
|
||||
CGAL_TEST( CGAL::assign(v1,h1) && E.point(v1)==p1 && E.mark(v1) );
|
||||
CGAL_TEST( CGAL::assign(f1,h2) && !E.mark(f1) );
|
||||
|
||||
L.push_back(p2);
|
||||
N3 = Nef_polyhedron(L.begin(), L.end(), Nef_polyhedron::INCLUDED);
|
||||
E = N3.explorer();
|
||||
h1 = N3.locate(p1);
|
||||
h2 = N3.locate(CGAL::midpoint(p1,p2));
|
||||
h3 = N3.locate(p6);
|
||||
CGAL_TEST( CGAL::assign(v1,h1) && E.point(v1)==p1 && E.mark(v1) );
|
||||
CGAL_TEST( CGAL::assign(e1,h2) && E.mark(e1) );
|
||||
CGAL_TEST( CGAL::assign(f1,h3) && !E.mark(f1) );
|
||||
|
||||
L.push_back(p3);
|
||||
N3 = Nef_polyhedron(L.begin(), L.end(), Nef_polyhedron::INCLUDED);
|
||||
E = N3.explorer();
|
||||
h1 = N3.locate(p1);
|
||||
h2 = N3.locate(CGAL::midpoint(p1,p2));
|
||||
h3 = N3.locate(p6);
|
||||
CGAL_TEST( CGAL::assign(v1,h1) && E.point(v1)==p1 && E.mark(v1) );
|
||||
CGAL_TEST( CGAL::assign(e1,h2) && E.mark(e1) );
|
||||
CGAL_TEST( CGAL::assign(f1,h3) && E.mark(f1) );
|
||||
h3 = N3.locate(Point(1,1,3));
|
||||
CGAL_TEST( CGAL::assign(f1,h3) && !E.mark(f1) );
|
||||
|
||||
CGAL_IO_TEST(N1,N2,CGAL::IO::ASCII);
|
||||
//CGAL_IO_TEST(N1,N2,CGAL::IO::PRETTY);
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
CGAL_TEST_END;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue