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