$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r76675 - in sandbox/gtl: boost/polygon/detail libs/polygon/test
From: sydorchuk.andriy_at_[hidden]
Date: 2012-01-24 17:23:54
Author: asydorchuk
Date: 2012-01-24 17:23:51 EST (Tue, 24 Jan 2012)
New Revision: 76675
URL: http://svn.boost.org/trac/boost/changeset/76675
Log:
voronoi_structures test update.
added initial site direction flag to the site_event data structure (allows to skip circle events outside of the polyline).
Text files modified: 
   sandbox/gtl/boost/polygon/detail/voronoi_ctypes.hpp       |     4                                         
   sandbox/gtl/boost/polygon/detail/voronoi_predicates.hpp   |     8 +-                                      
   sandbox/gtl/boost/polygon/detail/voronoi_structures.hpp   |    23 +++++++++-                              
   sandbox/gtl/libs/polygon/test/voronoi_structures_test.cpp |    84 ++++++++++++++++++++++++--------------- 
   4 files changed, 77 insertions(+), 42 deletions(-)
Modified: sandbox/gtl/boost/polygon/detail/voronoi_ctypes.hpp
==============================================================================
--- sandbox/gtl/boost/polygon/detail/voronoi_ctypes.hpp	(original)
+++ sandbox/gtl/boost/polygon/detail/voronoi_ctypes.hpp	2012-01-24 17:23:51 EST (Tue, 24 Jan 2012)
@@ -469,7 +469,7 @@
             return;
         }
         if ((e1.count() > 0) ^ (e2.count() > 0)) {
-            dif(e1.chunks(), e1.size(), e2.chunks(), e2.size());    
+            dif(e1.chunks(), e1.size(), e2.chunks(), e2.size());
         } else {
             add(e1.chunks(), e1.size(), e2.chunks(), e2.size());
         }
@@ -502,7 +502,7 @@
             dif(e1.chunks(), e1.size(), e2.chunks(), e2.size());
         }
         if (e1.count() < 0) {
-            this->count_ = -this->count_;               
+            this->count_ = -this->count_;
         }
     }
 
Modified: sandbox/gtl/boost/polygon/detail/voronoi_predicates.hpp
==============================================================================
--- sandbox/gtl/boost/polygon/detail/voronoi_predicates.hpp	(original)
+++ sandbox/gtl/boost/polygon/detail/voronoi_predicates.hpp	2012-01-24 17:23:51 EST (Tue, 24 Jan 2012)
@@ -52,7 +52,7 @@
     // with epsilon relative error equal to 1EPS.
     template <typename T>
     static fpt_type robust_cross_product(T a1_, T b1_, T a2_, T b2_) {
-        static to_fpt_converter to_fpt; 
+        static to_fpt_converter to_fpt;
         uint_x2_type a1 = static_cast<uint_x2_type>(is_neg(a1_) ? -a1_ : a1_);
         uint_x2_type b1 = static_cast<uint_x2_type>(is_neg(b1_) ? -b1_ : b1_);
         uint_x2_type a2 = static_cast<uint_x2_type>(is_neg(a2_) ? -a2_ : a2_);
@@ -117,12 +117,12 @@
     class point_comparison_predicate {
     public:
         typedef Point point_type;
-        
+
         bool operator()(const point_type &lhs, const point_type &rhs) const {
             if (lhs.x() == rhs.x()) {
                 return lhs.y() < rhs.y();
             }
-            return lhs.x() < rhs.x(); 
+            return lhs.x() < rhs.x();
         }
     };
 
@@ -225,7 +225,7 @@
             }
         }
 
-    private:    
+    private:
         // Represents the result of the epsilon robust predicate. If the
         // result is undefined some further processing is usually required.
         enum kPredicateResult {
Modified: sandbox/gtl/boost/polygon/detail/voronoi_structures.hpp
==============================================================================
--- sandbox/gtl/boost/polygon/detail/voronoi_structures.hpp	(original)
+++ sandbox/gtl/boost/polygon/detail/voronoi_structures.hpp	2012-01-24 17:23:51 EST (Tue, 24 Jan 2012)
@@ -77,6 +77,7 @@
     // Variables: point0_ - point site or segment's startpoint;
     //            point1_ - segment's endpoint if site is a segment;
     //            index_ - the last bit encodes if the site is inverse,
+    //                     the last-1 bit encodes initial site direction,
     //                     all the other bits encode site event index among
     //                     the other site events.
     // Note: for all the sites is_inverse_ flag is equal to false by default.
@@ -170,7 +171,7 @@
         }
 
         site_event& index(int index) {
-            site_index_ = index << 1;
+            site_index_ = index << 2;
             return *this;
         }
 
@@ -179,8 +180,13 @@
             return *this;
         }
 
+        site_event& change_initial_direction() {
+            site_index_ ^= IS_INITIAL_DIRECTION;
+            return *this;
+        }
+
         size_t index() const {
-            return site_index_ >> 1;
+            return site_index_ >> 2;
         }
 
         bool is_point() const {
@@ -192,12 +198,21 @@
         }
 
         bool is_inverse() const {
-            return site_index_ & IS_INVERSE;
+            return (site_index_ & IS_INVERSE) ? true : false;
+        }
+
+        bool is_initial() const {
+            return (site_index_ & IS_INITIAL_DIRECTION) ? false : true;
+        }
+
+        bool has_initial_direction() const {
+            return is_inverse() ^ is_initial();
         }
 
     private:
         enum kBits {
-            IS_INVERSE = 1
+            IS_INVERSE = 1,
+            IS_INITIAL_DIRECTION = 2,
         };
 
         point_type point0_;
Modified: sandbox/gtl/libs/polygon/test/voronoi_structures_test.cpp
==============================================================================
--- sandbox/gtl/libs/polygon/test/voronoi_structures_test.cpp	(original)
+++ sandbox/gtl/libs/polygon/test/voronoi_structures_test.cpp	2012-01-24 17:23:51 EST (Tue, 24 Jan 2012)
@@ -1,6 +1,6 @@
 // Boost.Polygon library voronoi_structures_test.cpp file
 
-//          Copyright Andrii Sydorchuk 2010-2011.
+//          Copyright Andrii Sydorchuk 2010-2012.
 // Distributed under the Boost Software License, Version 1.0.
 //    (See accompanying file LICENSE_1_0.txt or copy at
 //          http://www.boost.org/LICENSE_1_0.txt)
@@ -20,7 +20,7 @@
 typedef beach_line_node_key<int> node_key_type;
 typedef beach_line_node_data<int, int> node_data_type;
 
-BOOST_AUTO_TEST_CASE(point_2d_test) {
+BOOST_AUTO_TEST_CASE(point_2d_test1) {
     point_type p(1, 2);
     BOOST_CHECK_EQUAL(p.x(), 1);
     BOOST_CHECK_EQUAL(p.y(), 2);
@@ -30,30 +30,49 @@
     BOOST_CHECK_EQUAL(p.y(), 4);
 }
 
-BOOST_AUTO_TEST_CASE(site_event_test1) {
+BOOST_AUTO_TEST_CASE(site_event_test2) {
     site_type s(1, 2);
-    BOOST_CHECK_EQUAL(s.x0() == s.x1() && s.x1() == 1, true);
-    BOOST_CHECK_EQUAL(s.y0() == s.y1() && s.y1() == 2, true);
-    BOOST_CHECK_EQUAL(s.index() == 0, true);
-    BOOST_CHECK_EQUAL(s.is_segment(), false);
-    BOOST_CHECK_EQUAL(s.is_inverse(), false);
+    BOOST_CHECK(s.x0() == s.x1() && s.x1() == 1);
+    BOOST_CHECK(s.y0() == s.y1() && s.y1() == 2);
+    BOOST_CHECK(s.index() == 0);
+    BOOST_CHECK(!s.is_segment());
+    BOOST_CHECK(!s.is_inverse());
+    s.index(1);
+    BOOST_CHECK(s.index() == 1);
+    BOOST_CHECK(!s.is_inverse());
 }
 
-BOOST_AUTO_TEST_CASE(site_event_test2) {
+BOOST_AUTO_TEST_CASE(site_event_test3) {
+    site_type s(1, 2, 3, 4);
+    BOOST_CHECK(s.x0(true) == 1 && s.x0() == 1);
+    BOOST_CHECK(s.y0(true) == 2 && s.y0() == 2);
+    BOOST_CHECK(s.x1(true) == 3 && s.x1() == 3);
+    BOOST_CHECK(s.y1(true) == 4 && s.y1() == 4);
+    BOOST_CHECK(s.index() == 0);
+    BOOST_CHECK(s.is_segment());
+    BOOST_CHECK(!s.is_inverse());
+    s.inverse();
+    BOOST_CHECK(s.x1(true) == 1 && s.x0() == 1);
+    BOOST_CHECK(s.y1(true) == 2 && s.y0() == 2);
+    BOOST_CHECK(s.x0(true) == 3 && s.x1() == 3);
+    BOOST_CHECK(s.y0(true) == 4 && s.y1() == 4);
+    BOOST_CHECK(s.is_inverse());
+}
+
+BOOST_AUTO_TEST_CASE(site_event_test4) {
     site_type s(1, 2, 3, 4);
-    BOOST_CHECK_EQUAL(s.x0(true) == 1 && s.x0() == 1, true);
-    BOOST_CHECK_EQUAL(s.y0(true) == 2 && s.y0() == 2, true);
-    BOOST_CHECK_EQUAL(s.x1(true) == 3 && s.x1() == 3, true);
-    BOOST_CHECK_EQUAL(s.y1(true) == 4 && s.y1() == 4, true);
-    BOOST_CHECK_EQUAL(s.index() == 0, true);
-    BOOST_CHECK_EQUAL(s.is_segment(), true);
-    BOOST_CHECK_EQUAL(s.is_inverse(), false);
+    s.index(27);
+    BOOST_CHECK(s.is_initial());
+    BOOST_CHECK(s.has_initial_direction());
+    BOOST_CHECK_EQUAL(s.index(), 27);
     s.inverse();
-    BOOST_CHECK_EQUAL(s.x1(true) == 1 && s.x0() == 1, true);
-    BOOST_CHECK_EQUAL(s.y1(true) == 2 && s.y0() == 2, true);
-    BOOST_CHECK_EQUAL(s.x0(true) == 3 && s.x1() == 3, true);
-    BOOST_CHECK_EQUAL(s.y0(true) == 4 && s.y1() == 4, true);
-    BOOST_CHECK_EQUAL(s.is_inverse(), true);   
+    BOOST_CHECK(!s.has_initial_direction());
+    BOOST_CHECK(s.is_initial());
+    BOOST_CHECK_EQUAL(s.index(), 27);
+    s.change_initial_direction();
+    BOOST_CHECK(s.has_initial_direction());
+    BOOST_CHECK(!s.is_initial());
+    BOOST_CHECK_EQUAL(s.index(), 27);
 }
 
 BOOST_AUTO_TEST_CASE(circle_event_test) {
@@ -62,29 +81,30 @@
     BOOST_CHECK_EQUAL(c.y(), 1);
     BOOST_CHECK_EQUAL(c.lower_x(), 2);
     BOOST_CHECK_EQUAL(c.lower_y(), 1);
-    BOOST_CHECK_EQUAL(c.is_active(), true);
+    BOOST_CHECK(c.is_active());
     c.x(3);
-    BOOST_CHECK_EQUAL(c.x(), 3);
     c.y(4);
-    BOOST_CHECK_EQUAL(c.y(), 4);
     c.lower_x(5);
+    BOOST_CHECK_EQUAL(c.x(), 3);
+    BOOST_CHECK_EQUAL(c.y(), 4);
     BOOST_CHECK_EQUAL(c.lower_x(), 5);
+    BOOST_CHECK_EQUAL(c.lower_y(), 4);
     c.deactivate();
-    BOOST_CHECK_EQUAL(c.is_active(), false);
+    BOOST_CHECK(!c.is_active());
 }
 
 BOOST_AUTO_TEST_CASE(ordered_queue_test) {
     ordered_queue_type q;
-    BOOST_CHECK_EQUAL(q.empty(), true);
+    BOOST_CHECK(q.empty());
     std::vector<int*> vi;
     for (int i = 0; i < 20; ++i)
         vi.push_back(&q.push(i));
     for (int i = 0; i < 20; ++i)
         *vi[i] <<= 1;
-    BOOST_CHECK_EQUAL(q.empty(), false);
+    BOOST_CHECK(!q.empty());
     for (int i = 0; i < 20; ++i, q.pop())
         BOOST_CHECK_EQUAL(q.top(), i << 1);
-    BOOST_CHECK_EQUAL(q.empty(), true);
+    BOOST_CHECK(q.empty());
 }
 
 BOOST_AUTO_TEST_CASE(beach_line_node_key_test) {
@@ -92,11 +112,11 @@
     BOOST_CHECK_EQUAL(key.left_site(), 1);
     BOOST_CHECK_EQUAL(key.right_site(), 1);
     key.left_site(2);
-    BOOST_CHECK_EQUAL(key.left_site() == 2, true);
-    BOOST_CHECK_EQUAL(key.right_site() == 1, true);
+    BOOST_CHECK_EQUAL(key.left_site(), 2);
+    BOOST_CHECK_EQUAL(key.right_site(), 1);
     key.right_site(3);
-    BOOST_CHECK_EQUAL(key.left_site() == 2, true);
-    BOOST_CHECK_EQUAL(key.right_site() == 3, true);
+    BOOST_CHECK_EQUAL(key.left_site(), 2);
+    BOOST_CHECK_EQUAL(key.right_site(), 3);
 }
 
 BOOST_AUTO_TEST_CASE(beach_line_node_data_test) {