1 // Boost.Polygon library voronoi_diagram_test.cpp file
2 
3 //          Copyright Andrii Sydorchuk 2010-2012.
4 // Distributed under the Boost Software License, Version 1.0.
5 //    (See accompanying file LICENSE_1_0.txt or copy at
6 //          http://www.boost.org/LICENSE_1_0.txt)
7 
8 // See http://www.boost.org for updates, documentation, and revision history.
9 
10 #include <boost/core/lightweight_test.hpp>
11 #include <boost/polygon/voronoi_diagram.hpp>
12 #include <boost/polygon/voronoi_geometry_type.hpp>
13 
14 using namespace boost::polygon;
15 
16 typedef voronoi_cell<double> voronoi_cell_type;
17 typedef voronoi_vertex<double> voronoi_vertex_type;
18 typedef voronoi_edge<double> voronoi_edge_type;
19 typedef voronoi_diagram<double> voronoi_diagram_type;
20 
voronoi_cell_test()21 void voronoi_cell_test()
22 {
23   voronoi_cell_type cell(1, SOURCE_CATEGORY_INITIAL_SEGMENT);
24   cell.color(27);
25   BOOST_TEST(!cell.contains_point());
26   BOOST_TEST(cell.contains_segment());
27   BOOST_TEST(cell.is_degenerate());
28   BOOST_TEST(cell.source_index() == 1);
29   BOOST_TEST(cell.source_category() == SOURCE_CATEGORY_INITIAL_SEGMENT);
30   BOOST_TEST(cell.incident_edge() == NULL);
31   BOOST_TEST(cell.color() == 27);
32 
33   voronoi_edge_type edge(true, true);
34   cell.incident_edge(&edge);
35   BOOST_TEST(!cell.is_degenerate());
36   BOOST_TEST(cell.incident_edge() == &edge);
37 }
38 
voronoi_vertex_test()39 void voronoi_vertex_test()
40 {
41   voronoi_vertex_type vertex(1, 2);
42   vertex.color(27);
43   BOOST_TEST(vertex.is_degenerate());
44   BOOST_TEST(vertex.x() == 1);
45   BOOST_TEST(vertex.y() == 2);
46   BOOST_TEST(vertex.incident_edge() == NULL);
47   BOOST_TEST(vertex.color() == 27);
48 
49   voronoi_edge_type edge(true, true);
50   vertex.incident_edge(&edge);
51   BOOST_TEST(!vertex.is_degenerate());
52   BOOST_TEST(vertex.incident_edge() == &edge);
53 }
54 
voronoi_edge_test()55 void voronoi_edge_test()
56 {
57   voronoi_edge_type edge1(false, false);
58   edge1.color(13);
59   BOOST_TEST(!edge1.is_primary());
60   BOOST_TEST(edge1.is_secondary());
61   BOOST_TEST(!edge1.is_linear());
62   BOOST_TEST(edge1.is_curved());
63   BOOST_TEST(!edge1.is_finite());
64   BOOST_TEST(edge1.is_infinite());
65   BOOST_TEST(edge1.color() == 13);
66 
67   voronoi_edge_type edge2(true, true);
68   edge2.color(14);
69   BOOST_TEST(edge2.is_primary());
70   BOOST_TEST(!edge2.is_secondary());
71   BOOST_TEST(edge2.is_linear());
72   BOOST_TEST(!edge2.is_curved());
73   BOOST_TEST(!edge2.is_finite());
74   BOOST_TEST(edge2.is_infinite());
75   BOOST_TEST(edge2.color() == 14);
76 
77   edge1.twin(&edge2);
78   edge2.twin(&edge1);
79   BOOST_TEST(edge1.twin() == &edge2);
80   BOOST_TEST(edge2.twin() == &edge1);
81 
82   edge1.next(&edge2);
83   edge1.prev(&edge2);
84   edge2.next(&edge1);
85   edge2.prev(&edge1);
86   BOOST_TEST(edge1.next() == &edge2);
87   BOOST_TEST(edge1.prev() == &edge2);
88   BOOST_TEST(edge1.rot_next() == &edge1);
89   BOOST_TEST(edge1.rot_prev() == &edge1);
90 
91   voronoi_cell_type cell(1, SOURCE_CATEGORY_INITIAL_SEGMENT);
92   edge1.cell(&cell);
93   BOOST_TEST(edge1.cell() == &cell);
94 
95   voronoi_vertex_type vertex0(1, 2);
96   edge1.vertex0(&vertex0);
97   BOOST_TEST(edge1.vertex0() == &vertex0);
98   BOOST_TEST(edge2.vertex1() == &vertex0);
99 
100   voronoi_vertex_type vertex1(2, 1);
101   edge2.vertex0(&vertex1);
102   BOOST_TEST(edge1.vertex1() == &vertex1);
103   BOOST_TEST(edge2.vertex0() == &vertex1);
104 
105   BOOST_TEST(edge1.is_finite());
106   BOOST_TEST(edge2.is_finite());
107 }
108 
voronoi_diagram_test()109 void voronoi_diagram_test()
110 {
111   voronoi_diagram_type vd;
112   BOOST_TEST(vd.num_cells() == 0);
113   BOOST_TEST(vd.num_vertices() == 0);
114   BOOST_TEST(vd.num_edges() == 0);
115   vd.clear();
116 }
117 
main()118 int main()
119 {
120     voronoi_cell_test();
121     voronoi_vertex_test();
122     voronoi_edge_test();
123     voronoi_diagram_test();
124     return boost::report_errors();
125 }
126