summaryrefslogtreecommitdiff
path: root/src/Alpha_complex
diff options
context:
space:
mode:
Diffstat (limited to 'src/Alpha_complex')
-rw-r--r--src/Alpha_complex/example/Alpha_complex_3d_from_points.cpp29
-rw-r--r--src/Alpha_complex/example/Weighted_alpha_complex_3d_from_points.cpp29
-rw-r--r--src/Alpha_complex/include/gudhi/Alpha_complex_3d.h19
-rw-r--r--src/Alpha_complex/test/Alpha_complex_3d_unit_test.cpp30
-rw-r--r--src/Alpha_complex/test/Weighted_alpha_complex_unit_test.cpp2
5 files changed, 42 insertions, 67 deletions
diff --git a/src/Alpha_complex/example/Alpha_complex_3d_from_points.cpp b/src/Alpha_complex/example/Alpha_complex_3d_from_points.cpp
index dd3c0225..a2c85138 100644
--- a/src/Alpha_complex/example/Alpha_complex_3d_from_points.cpp
+++ b/src/Alpha_complex/example/Alpha_complex_3d_from_points.cpp
@@ -34,22 +34,23 @@ int main(int argc, char **argv) {
Alpha_complex_3d alpha_complex_from_points(points);
Gudhi::Simplex_tree<> simplex;
- alpha_complex_from_points.create_complex(simplex);
- // ----------------------------------------------------------------------------
- // Display information about the alpha complex
- // ----------------------------------------------------------------------------
- std::clog << "Alpha complex is of dimension " << simplex.dimension() << " - " << simplex.num_simplices()
- << " simplices - " << simplex.num_vertices() << " vertices." << std::endl;
+ if (alpha_complex_from_points.create_complex(simplex)) {
+ // ----------------------------------------------------------------------------
+ // Display information about the alpha complex
+ // ----------------------------------------------------------------------------
+ std::clog << "Alpha complex is of dimension " << simplex.dimension() << " - " << simplex.num_simplices()
+ << " simplices - " << simplex.num_vertices() << " vertices." << std::endl;
- std::clog << "Iterator on alpha complex simplices in the filtration order, with [filtration value]:" << std::endl;
- for (auto f_simplex : simplex.filtration_simplex_range()) {
- std::clog << " ( ";
- for (auto vertex : simplex.simplex_vertex_range(f_simplex)) {
- std::clog << vertex << " ";
+ std::clog << "Iterator on alpha complex simplices in the filtration order, with [filtration value]:" << std::endl;
+ for (auto f_simplex : simplex.filtration_simplex_range()) {
+ std::clog << " ( ";
+ for (auto vertex : simplex.simplex_vertex_range(f_simplex)) {
+ std::clog << vertex << " ";
+ }
+ std::clog << ") -> "
+ << "[" << simplex.filtration(f_simplex) << "] ";
+ std::clog << std::endl;
}
- std::clog << ") -> "
- << "[" << simplex.filtration(f_simplex) << "] ";
- std::clog << std::endl;
}
return 0;
}
diff --git a/src/Alpha_complex/example/Weighted_alpha_complex_3d_from_points.cpp b/src/Alpha_complex/example/Weighted_alpha_complex_3d_from_points.cpp
index 507d6413..ee12d418 100644
--- a/src/Alpha_complex/example/Weighted_alpha_complex_3d_from_points.cpp
+++ b/src/Alpha_complex/example/Weighted_alpha_complex_3d_from_points.cpp
@@ -30,22 +30,23 @@ int main(int argc, char **argv) {
Weighted_alpha_complex_3d alpha_complex_from_points(weighted_points);
Gudhi::Simplex_tree<> simplex;
- alpha_complex_from_points.create_complex(simplex);
- // ----------------------------------------------------------------------------
- // Display information about the alpha complex
- // ----------------------------------------------------------------------------
- std::clog << "Weighted alpha complex is of dimension " << simplex.dimension() << " - " << simplex.num_simplices()
- << " simplices - " << simplex.num_vertices() << " vertices." << std::endl;
+ if (alpha_complex_from_points.create_complex(simplex)) {
+ // ----------------------------------------------------------------------------
+ // Display information about the alpha complex
+ // ----------------------------------------------------------------------------
+ std::clog << "Weighted alpha complex is of dimension " << simplex.dimension() << " - " << simplex.num_simplices()
+ << " simplices - " << simplex.num_vertices() << " vertices." << std::endl;
- std::clog << "Iterator on weighted alpha complex simplices in the filtration order, with [filtration value]:" << std::endl;
- for (auto f_simplex : simplex.filtration_simplex_range()) {
- std::clog << " ( ";
- for (auto vertex : simplex.simplex_vertex_range(f_simplex)) {
- std::clog << vertex << " ";
+ std::clog << "Iterator on weighted alpha complex simplices in the filtration order, with [filtration value]:" << std::endl;
+ for (auto f_simplex : simplex.filtration_simplex_range()) {
+ std::clog << " ( ";
+ for (auto vertex : simplex.simplex_vertex_range(f_simplex)) {
+ std::clog << vertex << " ";
+ }
+ std::clog << ") -> "
+ << "[" << simplex.filtration(f_simplex) << "] ";
+ std::clog << std::endl;
}
- std::clog << ") -> "
- << "[" << simplex.filtration(f_simplex) << "] ";
- std::clog << std::endl;
}
return 0;
}
diff --git a/src/Alpha_complex/include/gudhi/Alpha_complex_3d.h b/src/Alpha_complex/include/gudhi/Alpha_complex_3d.h
index 73f9dd41..4e5fc933 100644
--- a/src/Alpha_complex/include/gudhi/Alpha_complex_3d.h
+++ b/src/Alpha_complex/include/gudhi/Alpha_complex_3d.h
@@ -48,7 +48,6 @@
#include <memory> // for std::unique_ptr
#include <type_traits> // for std::conditional and std::enable_if
#include <limits> // for numeric_limits<>
-#include <exception> // for domain_error and invalid_argument
// Make compilation fail - required for external projects - https://github.com/GUDHI/gudhi-devel/issues/10
#if CGAL_VERSION_NR < 1041101000
@@ -429,18 +428,19 @@ Weighted_alpha_complex_3d::Weighted_point_3 wp0(Weighted_alpha_complex_3d::Bare_
* @param[in] max_alpha_square maximum for alpha square value. Default value is +\f$\infty\f$, and there is very
* little point using anything else since it does not save time.
*
- * @exception invalid_argument In debug mode, if `complex` given as argument is not empty.
- * @exception domain_error If `points` given in the constructor are on a 2d plane.
+ * @return true if creation succeeds, false otherwise.
*
* @pre The simplicial complex must be empty (no vertices).
*
*/
template <typename SimplicialComplexForAlpha3d,
typename Filtration_value = typename SimplicialComplexForAlpha3d::Filtration_value>
- void create_complex(SimplicialComplexForAlpha3d& complex,
+ bool create_complex(SimplicialComplexForAlpha3d& complex,
Filtration_value max_alpha_square = std::numeric_limits<Filtration_value>::infinity()) {
- GUDHI_CHECK(complex.num_vertices() == 0,
- std::invalid_argument("Alpha_complex_3d create_complex - The complex given as argument is not empty"));
+ if (complex.num_vertices() > 0) {
+ std::cerr << "Alpha_complex_3d create_complex - complex is not empty\n";
+ return false; // ----- >>
+ }
using Complex_vertex_handle = typename SimplicialComplexForAlpha3d::Vertex_handle;
using Simplex_tree_vector_vertex = std::vector<Complex_vertex_handle>;
@@ -461,8 +461,10 @@ Weighted_alpha_complex_3d::Weighted_point_3 wp0(Weighted_alpha_complex_3d::Bare_
#ifdef DEBUG_TRACES
std::clog << "filtration_with_alpha_values returns : " << objects.size() << " objects" << std::endl;
#endif // DEBUG_TRACES
- if (objects.size() == 0)
- throw std::domain_error("Alpha_complex_3d create_complex - no triangulation as points are on a 2d plane");
+ if (objects.size() == 0) {
+ std::cerr << "Alpha_complex_3d create_complex - no triangulation as points are on a 2d plane\n";
+ return false; // ----- >>
+ }
using Alpha_value_iterator = typename std::vector<FT>::const_iterator;
Alpha_value_iterator alpha_value_iterator = alpha_values.begin();
@@ -557,6 +559,7 @@ Weighted_alpha_complex_3d::Weighted_point_3 wp0(Weighted_alpha_complex_3d::Bare_
// Remove all simplices that have a filtration value greater than max_alpha_square
complex.prune_above_filtration(max_alpha_square);
// --------------------------------------------------------------------------------------------
+ return true;
}
/** \brief get_point returns the point corresponding to the vertex given as parameter.
diff --git a/src/Alpha_complex/test/Alpha_complex_3d_unit_test.cpp b/src/Alpha_complex/test/Alpha_complex_3d_unit_test.cpp
index 94021954..a4ecb6ad 100644
--- a/src/Alpha_complex/test/Alpha_complex_3d_unit_test.cpp
+++ b/src/Alpha_complex/test/Alpha_complex_3d_unit_test.cpp
@@ -11,7 +11,6 @@
#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MODULE "alpha_complex_3d"
#include <boost/test/unit_test.hpp>
-#include <boost/mpl/list.hpp>
#include <cmath> // float comparison
#include <limits>
@@ -37,7 +36,6 @@ using Safe_alpha_complex_3d =
using Exact_alpha_complex_3d =
Gudhi::alpha_complex::Alpha_complex_3d<Gudhi::alpha_complex::complexity::EXACT, false, false>;
-
template <typename Point>
std::vector<Point> get_points() {
std::vector<Point> points;
@@ -199,31 +197,3 @@ BOOST_AUTO_TEST_CASE(Alpha_complex_3d_from_points) {
++safe_sh;
}
}
-
-typedef boost::mpl::list<Fast_alpha_complex_3d, Safe_alpha_complex_3d, Exact_alpha_complex_3d> list_of_alpha_variants;
-
-BOOST_AUTO_TEST_CASE_TEMPLATE(Alpha_complex_3d_exceptions_points_on_plane, Alpha, list_of_alpha_variants) {
- std::vector<typename Alpha::Bare_point_3> points_on_plane;
- points_on_plane.emplace_back(1.0, 1.0 , 0.0);
- points_on_plane.emplace_back(7.0, 0.0 , 0.0);
- points_on_plane.emplace_back(4.0, 6.0 , 0.0);
- points_on_plane.emplace_back(9.0, 6.0 , 0.0);
- points_on_plane.emplace_back(0.0, 14.0, 0.0);
- points_on_plane.emplace_back(2.0, 19.0, 0.0);
- points_on_plane.emplace_back(9.0, 17.0, 0.0);
-
- Alpha alpha_complex(points_on_plane);
- Gudhi::Simplex_tree<> stree;
-
- BOOST_CHECK_THROW(alpha_complex.create_complex(stree), std::domain_error);
-}
-
-BOOST_AUTO_TEST_CASE_TEMPLATE(Alpha_complex_3d_exceptions_non_empty_simplex_tree, Alpha, list_of_alpha_variants) {
- Alpha alpha_complex(get_points<typename Alpha::Bare_point_3>());
- Gudhi::Simplex_tree<> stree;
- stree.insert_simplex_and_subfaces({2,1,0}, 3.0);
-
-#ifdef GUDHI_DEBUG
- BOOST_CHECK_THROW(alpha_complex.create_complex(stree), std::invalid_argument);
-#endif // GUDHI_DEBUG
-} \ No newline at end of file
diff --git a/src/Alpha_complex/test/Weighted_alpha_complex_unit_test.cpp b/src/Alpha_complex/test/Weighted_alpha_complex_unit_test.cpp
index 4e1a38df..875704ee 100644
--- a/src/Alpha_complex/test/Weighted_alpha_complex_unit_test.cpp
+++ b/src/Alpha_complex/test/Weighted_alpha_complex_unit_test.cpp
@@ -83,7 +83,7 @@ BOOST_AUTO_TEST_CASE(Weighted_alpha_complex_3d_comparison) {
// Weighted alpha complex for 3D version
Exact_weighted_alpha_complex_3d alpha_complex_3D_from_weighted_points(w_points_3);
Gudhi::Simplex_tree<> w_simplex_3;
- alpha_complex_3D_from_weighted_points.create_complex(w_simplex_3);
+ BOOST_CHECK(alpha_complex_3D_from_weighted_points.create_complex(w_simplex_3));
std::clog << "Iterator on weighted alpha complex 3D simplices in the filtration order, with [filtration value]:"
<< std::endl;