summaryrefslogtreecommitdiff
path: root/src/Collapse/test/collapse_unit_test.cpp
diff options
context:
space:
mode:
authorROUVREAU Vincent <vincent.rouvreau@inria.fr>2020-04-04 10:11:13 +0200
committerROUVREAU Vincent <vincent.rouvreau@inria.fr>2020-04-04 10:11:13 +0200
commitc23490a73bca4208af68f741d1e3e0a505f22411 (patch)
tree4dead00f8e941ea44889497fbe74df034f9fd8a8 /src/Collapse/test/collapse_unit_test.cpp
parent9a42ecf2f7134ff46cabd7775eea1cbf62fdef63 (diff)
Test basic examples
Diffstat (limited to 'src/Collapse/test/collapse_unit_test.cpp')
-rw-r--r--src/Collapse/test/collapse_unit_test.cpp149
1 files changed, 104 insertions, 45 deletions
diff --git a/src/Collapse/test/collapse_unit_test.cpp b/src/Collapse/test/collapse_unit_test.cpp
index 508d5aa9..b4bc0fc0 100644
--- a/src/Collapse/test/collapse_unit_test.cpp
+++ b/src/Collapse/test/collapse_unit_test.cpp
@@ -30,66 +30,125 @@
#include "gudhi/graph_simplicial_complex.h"
#include "gudhi/distance_functions.h"
-using namespace Gudhi;
+//using namespace Gudhi;
// Types definition
-using Vector_of_points = std::vector<std::vector<double>>;
+//using Vector_of_points = std::vector<std::vector<double>>;
//using Simplex_tree = Gudhi::Simplex_tree<Gudhi::Simplex_tree_options_fast_persistence>;
-using Filtration_value = double;
-using Rips_edge_list = Gudhi::rips_edge_list::Rips_edge_list<double>;
+//using Filtration_value = double;
+//using Rips_edge_list = Gudhi::rips_edge_list::Rips_edge_list<double>;
/*using Rips_complex = Gudhi::rips_complex::Rips_complex<Filtration_value>;
using Field_Zp = Gudhi::persistent_cohomology::Field_Zp;
using Persistent_cohomology = Gudhi::persistent_cohomology::Persistent_cohomology<Simplex_tree, Field_Zp>;
*/
-using Distance_matrix = std::vector<std::vector<double>>;
-
-
-BOOST_AUTO_TEST_CASE(collapse) {
- typedef size_t Vertex_handle;
- typedef std::vector<std::tuple<Filtration_value, Vertex_handle, Vertex_handle>> Filtered_sorted_edge_list;
-
- std::size_t number_of_points;
- std::string off_file_points;
- std::string filediag;
+//using Distance_matrix = std::vector<std::vector<double>>;
- Map map_empty;
-
- Distance_matrix sparse_distances;
+using Filtration_value = double;
+using Vertex_handle = size_t;
+using Filtered_edge = std::tuple<Filtration_value, Vertex_handle, Vertex_handle>;
+using Filtered_sorted_edge_list = std::vector<std::tuple<Filtration_value, Vertex_handle, Vertex_handle>>;
+
+bool find_edge_in_list(const Filtered_edge& edge, const Filtered_sorted_edge_list& edge_list) {
+ for (auto edge_from_list : edge_list) {
+ if (edge_from_list == edge)
+ return true;
+ }
+ return false;
+}
+void trace_and_check_collapse(const Filtered_sorted_edge_list& edges, const Filtered_sorted_edge_list& removed_edges) {
+ std::cout << "BEFORE COLLAPSE - Total number of edges: " << edges.size() << std::endl;
+ BOOST_CHECK(edges.size() > 0);
+ for (auto edge : edges) {
+ std::cout << "f[" << std::get<1>(edge) << ", " << std::get<2>(edge) << "] = " << std::get<0>(edge) << std::endl;
+ }
- Vector_of_points point_vector {{0., 0.},{0., 1.},{1., 0.},{1., 1.}};
+ FlagComplexSpMatrix flag_complex_sparse_matrix(5, edges);
+ auto collapse_edges = flag_complex_sparse_matrix.filtered_edge_collapse();
+ std::cout << "AFTER COLLAPSE - Total number of edges: " << collapse_edges.size() << std::endl;
+ BOOST_CHECK(collapse_edges.size() <= edges.size());
+ for (auto edge_from_collapse : collapse_edges) {
+ std::cout << "f[" << std::get<1>(edge_from_collapse) << ", " << std::get<2>(edge_from_collapse) << "] = "
+ << std::get<0>(edge_from_collapse) << std::endl;
+ // Check each edge from collapse is in the input
+ BOOST_CHECK(find_edge_in_list(edge_from_collapse, edges));
+ }
- int dimension = point_vector[0].size();
- number_of_points = point_vector.size();
- std::cout << "Successfully read " << number_of_points << " point_vector.\n";
- std::cout << "Ambient dimension is " << dimension << ".\n";
+ for (auto removed_edge : removed_edges) {
+ std::cout << "f[" << std::get<1>(removed_edge) << ", " << std::get<2>(removed_edge) << "] = "
+ << std::get<0>(removed_edge) << std::endl;
+ // Check each removed edge from collapse is in the input
+ BOOST_CHECK(!find_edge_in_list(removed_edge, collapse_edges));
+ }
- std::cout << "Point Set Generated." << std::endl;
+}
- for (double threshold = 1. ; threshold <= 2.; threshold +=1.) {
- Filtered_sorted_edge_list edge_t;
- std::cout << "Computing the one-skeleton for threshold: " << threshold << std::endl;
-
- Rips_edge_list Rips_edge_list_from_file(point_vector, threshold, Gudhi::Euclidean_distance());
- Rips_edge_list_from_file.create_edges(edge_t);
-
- std::cout << "Sorted edge list computed" << std::endl;
- std::cout << "Total number of edges before collapse are: " << edge_t.size() << std::endl;
-
- if (edge_t.size() <= 0) {
- std::cerr << "Total number of egdes are zero." << std::endl;
- exit(-1);
- }
+BOOST_AUTO_TEST_CASE(collapse) {
+ /*
+ 1 2
+ o---o
+ | |
+ | |
+ | |
+ o---o
+ 0 3
+ */
+ Filtered_sorted_edge_list edges {{1., 0, 1}, {1., 1, 2}, {1., 2, 3}, {1., 3, 0}};
+ trace_and_check_collapse(edges, {});
- // Now we will perform filtered edge collapse to sparsify the edge list edge_t.
- std::cout << "Filtered edge collapse begins" << std::endl;
- FlagComplexSpMatrix mat_filt_edge_coll(number_of_points, edge_t);
- std::cout << "Matrix instansiated" << std::endl;
- Filtered_sorted_edge_list collapse_edges;
- collapse_edges = mat_filt_edge_coll.filtered_edge_collapse();
- }
-
+ /*
+ 1 2
+ o---o
+ |\ /|
+ | x |
+ |/ \|
+ o---o
+ 0 3
+ */
+ edges.push_back({2., 0, 2});
+ edges.push_back({2., 1, 3});
+ trace_and_check_collapse(edges, {{2., 1, 3}});
+
+ /*
+ 1 2 4
+ o---o---o
+ |\ /| |
+ | x | |
+ |/ \| |
+ o---o---o
+ 0 3 5
+ */
+ edges.push_back({3., 2, 4});
+ edges.push_back({3., 4, 5});
+ edges.push_back({3., 5, 3});
+ trace_and_check_collapse(edges, {{2., 1, 3}});
+
+ /*
+ 1 2 4
+ o---o---o
+ |\ /|\ /|
+ | x | x |
+ |/ \|/ \|
+ o---o---o
+ 0 3 5
+ */
+ edges.push_back({4., 2, 5});
+ edges.push_back({4., 4, 3});
+ trace_and_check_collapse(edges, {{2., 1, 3}, {4., 2, 5}, {4., 4, 3}});
+
+ /*
+ 1 2 4
+ o---o---o
+ |\ /|\ /|
+ | x | x | + [0,4] and [1,5]
+ |/ \|/ \|
+ o---o---o
+ 0 3 5
+ */
+ edges.push_back({5., 1, 5});
+ edges.push_back({5., 0, 4});
+ trace_and_check_collapse(edges, {{2., 1, 3}, {4., 2, 5}, {4., 4, 3}, {5., 0, 4}});
}