Ticket #10642: boostbug.cc

File boostbug.cc, 1.3 KB (added by lopresti@…, 8 years ago)

Small test case demonstrating bug in Boost.Polygon polygon_set_data

Line 
1#include <boost/polygon/polygon.hpp>
2
3#include <iostream>
4#include <cstdlib>
5
6namespace bp = boost::polygon;
7using namespace bp::operators;
8
9typedef bp::polygon_set_data<int> PolygonSet;
10typedef bp::polygon_data<PolygonSet::coordinate_type> Polygon;
11typedef bp::polygon_traits<Polygon>::point_type Point;
12
13int
14main(int argc, char *argv[])
15{
16 // Small figure with a little hole. Area should be 32.
17 const Point points[] = {
18 Point(0,0),
19 Point(6,0),
20 Point(6,4),
21 Point(4,6),
22 Point(0,6),
23 Point(0,0),
24 Point(4,4),
25 Point(5,4)
26 };
27
28 Polygon poly1(&points[0], &points[sizeof(points)/sizeof(points[0])]);
29 PolygonSet ps1;
30 ps1 += poly1;
31
32 // Boost.Polygon says the area is 30. That is because its internal
33 // representation is wrong, as you can confirm by manually
34 // examining the result of get() or get_trapezoids().
35 std::cout << "poly1 area == " << area(poly1) << "\n";
36 std::cout << "ps1 area == " << area(ps1) << "\n";
37
38 // Doubling the coordinates avoids the bug.
39 Polygon poly2(poly1);
40 scale_up(poly2, 2);
41 PolygonSet ps2;
42 ps2 += poly2;
43 std::cout << "poly2 area == " << area(poly2) << "\n";
44 std::cout << "ps2 area == " << area(ps2) << "\n";
45
46 assert(area(poly2) == area(ps2));
47 assert(area(poly1) == area(ps1));
48}