Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
Add robust cartesian side and in_circle predicates.
  • Loading branch information
tinko92 committed Aug 23, 2019
commit a39bf3ff13751add2cbcbbb69f2ba904a0c79f2e
2 changes: 1 addition & 1 deletion extensions/test/Jamfile.v2
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,4 @@ build-project algorithms ;
build-project gis ;
build-project iterators ;
build-project nsphere ;

build-project triangulation ;
12 changes: 12 additions & 0 deletions extensions/test/triangulation/Jamfile.v2
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Boost.Geometry (aka GGL, Generic Geometry Library)
#
# Use, modification and distribution is subject to 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)

test-suite boost-geometry-extensions-triangulation
:
[ run side_robust.cpp ]
[ run in_circle_robust.cpp ]
;

56 changes: 56 additions & 0 deletions extensions/test/triangulation/in_circle_robust.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
// Boost.Geometry (aka GGL, Generic Geometry Library)
// Unit Test

// Copyright (c) 2019 Tinko Bartels, Berlin, Germany.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

// Use, modification and distribution is subject to 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)

#include <geometry_test_common.hpp>

#include <boost/geometry/geometries/point_xy.hpp>
#include <boost/geometry/extensions/triangulation/strategies/cartesian/in_circle_robust.hpp>

template <typename P>
void test_all()
{
typedef bg::strategy::in_circle::in_circle_robust<double, 2> inc2;
typedef bg::strategy::in_circle::in_circle_robust<double, 1> inc1;
typedef bg::strategy::in_circle::in_circle_robust<double, 0> inc0;

P col1(0.0, 0.0), col2(1.0, 0.0), col3(0.0, 1.0);
P in(0.5,0.5) , on(1.0, 0.0), out(-0.5, -0.5);
int in2 = inc2::apply(col1, col2, col3, in);
BOOST_CHECK_GT(in2, 0);
int in1 = inc1::apply(col1, col2, col3, in);
BOOST_CHECK_GT(in1, 0);
int in0 = inc0::apply(col1, col2, col3, in);
BOOST_CHECK_GT(in0, 0);

int on2 = inc2::apply(col1, col2, col3, on);
BOOST_CHECK_EQUAL(on2, 0);
int on1 = inc1::apply(col1, col2, col3, on);
BOOST_CHECK_EQUAL(on1, 0);
int on0 = inc0::apply(col1, col2, col3, on);
BOOST_CHECK_EQUAL(on0, 0);

int out2 = inc2::apply(col1, col2, col3, out);
BOOST_CHECK_GT(0, out2);
int out1 = inc1::apply(col1, col2, col3, out);
BOOST_CHECK_GT(0, out1);
int out0 = inc0::apply(col1, col2, col3, out);
BOOST_CHECK_GT(0, out0);

P hard1(0, 0), hard2(1e20, 0), hard3(0, 1e20);
P inhard(0.5, 0.5);
int hardr = inc2::apply(hard1, hard2, hard3, inhard);
BOOST_CHECK_GT(hardr, 0);
}


int test_main(int, char* [])
{
test_all<bg::model::d2::point_xy<double> >();
return 0;
}
59 changes: 59 additions & 0 deletions extensions/test/triangulation/side_robust.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
// Boost.Geometry (aka GGL, Generic Geometry Library)
// Unit Test

// Copyright (c) 2019 Tinko Bartels, Berlin, Germany.

// Use, modification and distribution is subject to 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)

#include <geometry_test_common.hpp>

#include <boost/geometry/geometries/point_xy.hpp>
#include <boost/geometry/extensions/triangulation/strategies/cartesian/side_robust.hpp>

template <typename P>
void test_all()
{
typedef bg::strategy::side::side_robust<double, 3> side3;
typedef bg::strategy::side::side_robust<double, 2> side2;
typedef bg::strategy::side::side_robust<double, 1> side1;
typedef bg::strategy::side::side_robust<double, 0> side0;

P col1(1.0, 1.0), col2(2.0, 2.0), col3(3.0, 3.0);
int col3r = side3::apply(col1, col2, col3);
BOOST_CHECK_EQUAL(0, col3r);
int col2r = side2::apply(col1, col2, col3);
BOOST_CHECK_EQUAL(0, col2r);
int col1r = side1::apply(col1, col2, col3);
BOOST_CHECK_EQUAL(0, col1r);
int col0r = side0::apply(col1, col2, col3);
BOOST_CHECK_EQUAL(0, col0r);

P easy1(0.0, 0.0), easy2(1.0, 1.0), easy3(0.0, 1.0);
int easy3r = side3::apply(easy1, easy2, easy3);
BOOST_CHECK_GT(easy3r, 0);
int easy2r = side2::apply(easy1, easy2, easy3);
BOOST_CHECK_GT(easy2r, 0);
int easy1r = side1::apply(easy1, easy2, easy3);
BOOST_CHECK_GT(easy1r, 0);
int easy0r = side0::apply(easy1, easy2, easy3);
BOOST_CHECK_GT(easy0r, 0);

P medium1(1.0, 1.0), medium2(1.0e20, 1.0e20), medium3(1.0, 2.0);
int medium3r = side3::apply(medium1, medium2, medium3);
BOOST_CHECK_GT(medium3r, 0);
int medium2r = side2::apply(medium1, medium2, medium3);
BOOST_CHECK_GT(medium2r, 0);

P hard1(1.0e-20, 1.0e-20), hard2(1.0e20, 1.0e20), hard3(1.0, 2.0);
int hard3r = side3::apply(hard1, hard2, hard3);
BOOST_CHECK_GT(hard3r, 0);
}


int test_main(int, char* [])
{
test_all<bg::model::d2::point_xy<double> >();
return 0;
}
Loading