#include #include #include #include #include #include #include #include #include #include #ifdef CGAL_USE_LEDA #include #include typedef leda_integer RT; typedef leda_real FT; #else #ifdef CGAL_USE_GMP #include typedef CGAL::Gmpz RT; typedef double FT; #else typedef double RT; typedef double FT; #endif #endif int main() { CGAL::IO::set_pretty_mode ( std::cerr ); CGAL_KD_SETDTHREAD(193); CGAL_TEST_START; { typedef CGAL::Cartesian_d Kernel; typedef CGAL::Delaunay_d Delaunay_d; typedef Delaunay_d::Point_d Point_d; typedef Delaunay_d::Lifted_hyperplane_d Hyperplane_d; typedef Delaunay_d::Sphere_d Sphere_d; typedef Delaunay_d::Simplex_handle Simplex_handle; typedef Delaunay_d::Vertex_handle Vertex_handle; typedef Delaunay_d::Facet_handle Facet_handle; { Delaunay_d DT(2); CGAL_TEST(DT.empty()); Point_d p1(0,0,1); Point_d p2(1,0,1); Point_d p3(0,1,1); Point_d p4(1,1,1); Point_d p5(1,1,3); Point_d p6(3,2,1); Point_d p7(3,3,4); Vertex_handle v1,v2,v3,v4,v5; CGAL_TEST(DT.dimension()==2); v1 = DT.insert(p1); v2 = DT.insert(p2); CGAL_TEST(DT.current_dimension()==1); CGAL_TEST(DT.associated_point(v2)==p2); Simplex_handle ds = DT.simplex(v2); int di = DT.index(v2); CGAL_TEST(DT.vertex_of_simplex(ds,di)==v2); CGAL_TEST(DT.is_simplex_of_nearest(ds) && DT.is_simplex_of_furthest(ds)); v3 = DT.insert(p3); CGAL_TEST(DT.locate(p4)==Simplex_handle()); v4 = DT.insert(p4); v5 = DT.insert(p5); Simplex_handle ds2 = DT.simplex(v5); int di2 = DT.index(v5); CGAL_TEST(DT.is_simplex_of_nearest(ds2) && ! DT.is_simplex_of_furthest(ds2)); CGAL_TEST(DT.point_of_simplex(ds2,di2) == DT.associated_point(v5)); CGAL_TEST(DT.opposite_simplex(ds2,1)!=Simplex_handle()); CGAL_TEST(DT.opposite_simplex(DT.opposite_simplex(ds2,1), DT.index_of_vertex_in_opposite_simplex(ds2,1)) == ds2); std::list NL = DT.all_simplices(Delaunay_d::NEAREST); std::list FL = DT.all_simplices(Delaunay_d::FURTHEST); std::list Facets = DT.all_facets(); std::list::iterator fit; int n_num(0), f_num(0); for(fit = Facets.begin(); fit != Facets.end(); ++fit) { Hyperplane_d h = DT.base_facet_plane(*fit); if ( h.orthogonal_vector().homogeneous(h.dimension()-1)>0 ) ++f_num; if ( h.orthogonal_vector().homogeneous(h.dimension()-1)<0 ) ++n_num; } CGAL_TEST(NL.size()==unsigned(n_num)); CGAL_TEST(FL.size()==unsigned(f_num)); Point_d q1 = DT.point_of_simplex(ds,0); Point_d q2 = DT.point_of_simplex(ds,1); CGAL_TEST(DT.contains(ds,CGAL::midpoint(q1,q2))); CGAL_TEST(DT.locate(p6)==Simplex_handle()); CGAL_TEST(DT.locate(p7)!=Simplex_handle()); CGAL_TEST(DT.lookup(p6)==Vertex_handle()); CGAL_TEST(DT.associated_point(DT.lookup(p4))==p4); CGAL_TEST(DT.associated_point(DT.nearest_neighbor(p6))==p4); std::vector V = make_vector(p1,p2,p5); Sphere_d K(2,V.begin(),V.end()); std::list RL = DT.range_search(K); std::list::iterator it = RL.begin(); CGAL_TEST(*it++==v1 && *it++==v2 && *it++==v5); RL = DT.range_search(make_vector(p1,p2,p3)); CGAL_TEST(RL.size()==4); std::list L = DT.all_points(); CGAL_TEST(*L.begin()==p1); // show and graphrep in demos DT.clear(); DT.insert(p5); CGAL_TEST(DT.current_dimension()==0); } } { typedef CGAL::Homogeneous_d Kernel; typedef CGAL::Delaunay_d Delaunay_d; typedef Delaunay_d::Point_d Point_d; typedef Delaunay_d::Lifted_hyperplane_d Hyperplane_d; typedef Delaunay_d::Sphere_d Sphere_d; typedef Delaunay_d::Simplex_handle Simplex_handle; typedef Delaunay_d::Vertex_handle Vertex_handle; typedef Delaunay_d::Facet_handle Facet_handle; { Delaunay_d DT(2); CGAL_TEST(DT.empty()); Point_d p1(0,0,1); Point_d p2(1,0,1); Point_d p3(0,1,1); Point_d p4(1,1,1); Point_d p5(1,1,3); Point_d p6(3,2,1); Point_d p7(3,3,4); Vertex_handle v1,v2,v3,v4,v5; CGAL_TEST(DT.dimension()==2); v1 = DT.insert(p1); v2 = DT.insert(p2); CGAL_TEST(DT.current_dimension()==1); CGAL_TEST(DT.associated_point(v2)==p2); Simplex_handle ds = DT.simplex(v2); int di = DT.index(v2); CGAL_TEST(DT.vertex_of_simplex(ds,di)==v2); CGAL_TEST(DT.is_simplex_of_nearest(ds) && DT.is_simplex_of_furthest(ds)); v3 = DT.insert(p3); CGAL_TEST(DT.locate(p4)==Simplex_handle()); v4 = DT.insert(p4); v5 = DT.insert(p5); Simplex_handle ds2 = DT.simplex(v5); int di2 = DT.index(v5); CGAL_TEST(DT.is_simplex_of_nearest(ds2) && ! DT.is_simplex_of_furthest(ds2)); CGAL_TEST(DT.point_of_simplex(ds2,di2) == DT.associated_point(v5)); CGAL_TEST(DT.opposite_simplex(ds2,1)!=Simplex_handle()); CGAL_TEST(DT.opposite_simplex(DT.opposite_simplex(ds2,1), DT.index_of_vertex_in_opposite_simplex(ds2,1)) == ds2); std::list NL = DT.all_simplices(Delaunay_d::NEAREST); std::list FL = DT.all_simplices(Delaunay_d::FURTHEST); std::list Facets = DT.all_facets(); std::list::iterator fit; int n_num(0), f_num(0); for(fit = Facets.begin(); fit != Facets.end(); ++fit) { Hyperplane_d h = DT.base_facet_plane(*fit); if ( h.orthogonal_vector().homogeneous(h.dimension()-1)>0 ) ++f_num; if ( h.orthogonal_vector().homogeneous(h.dimension()-1)<0 ) ++n_num; } CGAL_TEST(NL.size()==unsigned(n_num)); CGAL_TEST(FL.size()==unsigned(f_num)); Point_d q1 = DT.point_of_simplex(ds,0); Point_d q2 = DT.point_of_simplex(ds,1); CGAL_TEST(DT.contains(ds,CGAL::midpoint(q1,q2))); CGAL_TEST(DT.locate(p6)==Simplex_handle()); CGAL_TEST(DT.locate(p7)!=Simplex_handle()); CGAL_TEST(DT.lookup(p6)==Vertex_handle()); CGAL_TEST(DT.associated_point(DT.lookup(p4))==p4); CGAL_TEST(DT.associated_point(DT.nearest_neighbor(p6))==p4); std::vector V = make_vector(p1,p2,p5); Sphere_d K(2,V.begin(),V.end()); std::list RL = DT.range_search(K); std::list::iterator it = RL.begin(); CGAL_TEST(*it++==v1 && *it++==v2 && *it++==v5); RL = DT.range_search(make_vector(p1,p2,p3)); CGAL_TEST(RL.size()==4); std::list L = DT.all_points(); CGAL_TEST(*L.begin()==p1); // show and graphrep in demos DT.clear(); DT.insert(p5); CGAL_TEST(DT.current_dimension()==0); } } CGAL_TEST_END; }