summaryrefslogtreecommitdiff
path: root/src/Collapse/test
diff options
context:
space:
mode:
authorROUVREAU Vincent <vincent.rouvreau@inria.fr>2020-04-12 10:33:38 +0200
committerROUVREAU Vincent <vincent.rouvreau@inria.fr>2020-04-12 10:33:38 +0200
commit1ce5d0d19e13a14e8a67442aec7bc40eae68dc8e (patch)
tree4e4c148cfd7935e8a686a7cafaaaacba2db432b9 /src/Collapse/test
parentf000725296c1962155e2ec331a3db6244d7c9f9e (diff)
Modify interface and utils
Diffstat (limited to 'src/Collapse/test')
-rw-r--r--src/Collapse/test/collapse_unit_test.cpp129
1 files changed, 82 insertions, 47 deletions
diff --git a/src/Collapse/test/collapse_unit_test.cpp b/src/Collapse/test/collapse_unit_test.cpp
index 38adfa8a..3a07e088 100644
--- a/src/Collapse/test/collapse_unit_test.cpp
+++ b/src/Collapse/test/collapse_unit_test.cpp
@@ -11,6 +11,7 @@
#include <iostream>
#include <tuple>
#include <vector>
+#include <array>
#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MODULE "collapse"
@@ -32,7 +33,7 @@ bool find_edge_in_list(const Filtered_edge& edge, const Filtered_sorted_edge_lis
}
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);
@@ -68,70 +69,104 @@ void trace_and_check_collapse(const Filtered_sorted_edge_list& edges, const Filt
}
BOOST_AUTO_TEST_CASE(collapse) {
- /*
- 1 2
- o---o
- | |
- | |
- | |
- o---o
- 0 3
- */
+ // 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, {});
- /*
- 1 2
- o---o
- |\ /|
- | x |
- |/ \|
- o---o
- 0 3
- */
+ // 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
- */
+ // 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
- */
+ // 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., 4, 3}});
- /*
- 1 2 4
- o---o---o
- |\ /|\ /|
- | x | x | + [0,4] and [1,5]
- |/ \|/ \|
- o---o---o
- 0 3 5
- */
+ // 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., 4, 3}, {5., 0, 4}});
-}
+}*/
+
+
+BOOST_AUTO_TEST_CASE(collapse_from_distance_matrix) {
+ // 1 2
+ // o---o
+ // |\ /|
+ // | x |
+ // |/ \|
+ // o---o
+ // 0 3
+ // Lower diagonal distance matrix
+ std::array<std::array<double, 4>, 4> distance_matrix = {{{0., 0., 0., 0.},
+ {1., 0., 0., 0.},
+ {2., 1., 0., 0.},
+ {1., 2., 1., 0.} }};
+
+ std::cout << "COLLAPSE - keep edges: " << std::endl;
+ Flag_complex_sparse_matrix flag_complex_sparse_matrix(distance_matrix);
+ Filtered_sorted_edge_list collapse_edges;
+ flag_complex_sparse_matrix.filtered_edge_collapse(
+ [&collapse_edges](std::pair<Vertex_handle, Vertex_handle> edge, Filtration_value filtration) {
+ std::cout << "f[" << std::get<0>(edge) << ", " << std::get<1>(edge) << "] = " << filtration << std::endl;
+ collapse_edges.push_back({filtration, std::get<0>(edge), std::get<1>(edge)});
+ });
+ std::cout << "AFTER COLLAPSE - Total number of edges: " << collapse_edges.size() << std::endl;
+ BOOST_CHECK(collapse_edges.size() == 5);
+ Filtered_sorted_edge_list edges {{1., 0, 1}, {1., 1, 2}, {1., 2, 3}, {1., 0, 3}, {2., 0, 2}, {2., 1, 3}};
+
+ 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));
+ }
+ Filtered_sorted_edge_list removed_edges {{2., 1, 3}};
+
+ std::cout << "CHECK COLLAPSE - Total number of removed edges: " << removed_edges.size() << std::endl;
+ 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));
+ }
+} \ No newline at end of file