summaryrefslogtreecommitdiff
path: root/src/Toplex_map
diff options
context:
space:
mode:
authorvrouvrea <vrouvrea@636b058d-ea47-450e-bf9e-a15bfbe3eedb>2018-10-12 14:06:01 +0000
committervrouvrea <vrouvrea@636b058d-ea47-450e-bf9e-a15bfbe3eedb>2018-10-12 14:06:01 +0000
commit0b903a02242c935e7621006818e9f9dc442f0e79 (patch)
tree1a4ad46cbfcee4fec88c6bd5b7105bc5d8eadbd3 /src/Toplex_map
parent05b163f41a8b2ee0b10b862b0c7497d3f6e9b4b3 (diff)
Add some unitary tests
num_maximum_simplices results are a bit strange git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/toplex_map@3950 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 86c7a4607f9d774c89c79dcc6d95f1ce2f5951d5
Diffstat (limited to 'src/Toplex_map')
-rw-r--r--src/Toplex_map/benchmark/chrono.cpp56
-rw-r--r--src/Toplex_map/include/gudhi/Toplex_map.h4
-rw-r--r--src/Toplex_map/test/toplex_map_unit_test.cpp81
3 files changed, 96 insertions, 45 deletions
diff --git a/src/Toplex_map/benchmark/chrono.cpp b/src/Toplex_map/benchmark/chrono.cpp
index a745f099..db87e217 100644
--- a/src/Toplex_map/benchmark/chrono.cpp
+++ b/src/Toplex_map/benchmark/chrono.cpp
@@ -15,48 +15,40 @@ typedef std::pair< Simplex_tree<>::Simplex_handle, bool > typePairSimplexBool;
class ST_wrapper {
public:
- void insert_simplex(const Simplex& tau);
- bool membership(const Simplex& tau);
- Vertex contraction(const Vertex x, const Vertex y);
- std::size_t num_simplices();
-
-private:
- Simplex_tree<> simplexTree;
- void erase_max(const Simplex& sigma);
-};
-
-void ST_wrapper::insert_simplex(const Simplex& tau){
+ void insert_simplex(const Simplex& tau) {
simplexTree.insert_simplex_and_subfaces(tau);
-}
+ }
-bool ST_wrapper::membership(const Simplex& tau) {
+ bool membership(const Simplex& tau) {
return simplexTree.find(tau) != simplexTree.null_simplex();
-}
-
-void ST_wrapper::erase_max(const Simplex& sigma){
- if(membership(sigma))
- simplexTree.remove_maximal_simplex(simplexTree.find(sigma));
-}
+ }
-Vertex ST_wrapper::contraction(const Vertex x, const Vertex y){
+ Vertex contraction(const Vertex x, const Vertex y) {
Simplex sx; sx.insert(x);
auto hx = simplexTree.find(sx);
if(hx != simplexTree.null_simplex())
- for(auto h : simplexTree.cofaces_simplex_range(hx,0)){
- auto sr = simplexTree.simplex_vertex_range(h);
- Simplex sigma(sr.begin(),sr.end());
- erase_max(sigma);
- sigma.erase(x);
- sigma.insert(y);
- insert_simplex(sigma);
- }
+ for(auto h : simplexTree.cofaces_simplex_range(hx,0)){
+ auto sr = simplexTree.simplex_vertex_range(h);
+ Simplex sigma(sr.begin(),sr.end());
+ erase_max(sigma);
+ sigma.erase(x);
+ sigma.insert(y);
+ insert_simplex(sigma);
+ }
return y;
-}
+ }
-std::size_t ST_wrapper::num_simplices(){
+ std::size_t num_maximal_simplices() {
return simplexTree.num_simplices();
-}
+ }
+private:
+ Simplex_tree<> simplexTree;
+ void erase_max(const Simplex& sigma) {
+ if(membership(sigma))
+ simplexTree.remove_maximal_simplex(simplexTree.find(sigma));
+ }
+};
int n = 300;
@@ -120,7 +112,7 @@ void chrono(int n, int d){
end = std::chrono::system_clock::now();
auto c2 = std::chrono::duration_cast<std::chrono::milliseconds>(end-start).count();
- std::cout << c1 << "\t \t" << c2 << "\t \t" << c3 << "\t \t" << K.num_simplices() << std::endl;
+ std::cout << c1 << "\t \t" << c2 << "\t \t" << c3 << "\t \t" << K.num_maximal_simplices() << std::endl;
}
int main(){
diff --git a/src/Toplex_map/include/gudhi/Toplex_map.h b/src/Toplex_map/include/gudhi/Toplex_map.h
index 271d0970..4c6c4b02 100644
--- a/src/Toplex_map/include/gudhi/Toplex_map.h
+++ b/src/Toplex_map/include/gudhi/Toplex_map.h
@@ -8,8 +8,6 @@
#include <memory>
#include <limits>
-#define vertex_upper_bound std::numeric_limits<Toplex_map::Vertex>::max()
-
namespace Gudhi {
/** A Toplex_map represents the simplicial complex.
@@ -85,6 +83,8 @@ protected:
/** \internal The map from vertices to toplices */
std::unordered_map<Toplex_map::Vertex, Toplex_map::Simplex_ptr_set> t0;
+
+ const Toplex_map::Vertex vertex_upper_bound = std::numeric_limits<Toplex_map::Vertex>::max();
};
// Pointers are also used as key in the hash sets.
diff --git a/src/Toplex_map/test/toplex_map_unit_test.cpp b/src/Toplex_map/test/toplex_map_unit_test.cpp
index c1540eb5..9ee5dff2 100644
--- a/src/Toplex_map/test/toplex_map_unit_test.cpp
+++ b/src/Toplex_map/test/toplex_map_unit_test.cpp
@@ -29,21 +29,21 @@ BOOST_AUTO_TEST_CASE_TEMPLATE(common_toplex_map_functionnalities, Toplex_map, li
K.insert_simplex(sigma6);
K.insert_simplex(sigma7);
- std::cout << K.num_maximal_simplices();
+ std::cout << "num_maximal_simplices" << K.num_maximal_simplices() << std::endl;
BOOST_CHECK(K.membership(sigma4));
//BOOST_CHECK(!K.maximality(sigma3));
BOOST_CHECK(!K.membership(sigma5));
K.insert_simplex(sigma5);
- std::cout << K.num_maximal_simplices();
+ std::cout << "num_maximal_simplices" << K.num_maximal_simplices() << std::endl;
BOOST_CHECK(K.membership(sigma5));
std::vector<Vertex> sigma9 = {1, 2, 3};
std::vector<Vertex> sigma10 = {2, 7};
auto r = K.contraction(4,5);
- std::cout << K.num_maximal_simplices();
+ std::cout << "num_maximal_simplices" << K.num_maximal_simplices() << std::endl;
sigma9.emplace_back(r);
sigma10.emplace_back(r);
@@ -59,24 +59,83 @@ BOOST_AUTO_TEST_CASE(toplex_map_num_maximal_simplices) {
using Vertex = Gudhi::Toplex_map::Vertex;
Gudhi::Toplex_map K;
- K.insert_simplex({1, 2, 3, 4});
- K.insert_simplex({5, 2, 3, 6});
- K.insert_simplex({4, 5, 3});
- K.insert_simplex({4, 5, 9});
+ std::vector<Vertex> sigma1 = {1, 2, 3, 4};
+ std::vector<Vertex> sigma2 = {5, 2, 3, 6};
+ std::vector<Vertex> sigma3 = {4, 5, 3};
+ std::vector<Vertex> sigma4 = {4, 5, 9};
+ K.insert_simplex(sigma1);
+ K.insert_simplex(sigma2);
+ K.insert_simplex(sigma3);
+ K.insert_simplex(sigma4);
- std::cout << K.num_maximal_simplices();
+ std::cout << "num_maximal_simplices" << K.num_maximal_simplices() << std::endl;
BOOST_CHECK(K.num_maximal_simplices() == 4);
- K.insert_simplex({5, 2, 7});
+ std::vector<Vertex> sigma5 = {5, 2, 7};
+ K.insert_simplex(sigma5);
- std::cout << K.num_maximal_simplices();
+ std::cout << "num_maximal_simplices" << K.num_maximal_simplices() << std::endl;
BOOST_CHECK(K.num_maximal_simplices() == 5);
auto r = K.contraction(4,5);
+ std::cout << "r=" << r << std::endl;
+ BOOST_CHECK(r == 5);
- std::cout << K.num_maximal_simplices();
+ std::cout << "num_maximal_simplices" << K.num_maximal_simplices() << std::endl;
BOOST_CHECK(K.num_maximal_simplices() == 4);
+ std::vector<Vertex> sigma6 = {2, 7};
+ K.remove_simplex(sigma6);
+
+ std::cout << "num_maximal_simplices" << K.num_maximal_simplices() << std::endl;
+ BOOST_CHECK(K.num_maximal_simplices() == 4);
+
+ K.remove_simplex(sigma2);
+
+ std::cout << "num_maximal_simplices" << K.num_maximal_simplices() << std::endl;
+ BOOST_CHECK(K.num_maximal_simplices() == 6);
+}
+
+BOOST_AUTO_TEST_CASE(lazy_toplex_map_num_maximal_simplices) {
+ using Vertex = Gudhi::Lazy_Toplex_map::Vertex;
+
+ Gudhi::Lazy_Toplex_map K;
+ std::vector<Vertex> sigma1 = {1, 2, 3, 4};
+ std::vector<Vertex> sigma2 = {5, 2, 3, 6};
+ std::vector<Vertex> sigma3 = {4, 5, 3};
+ std::vector<Vertex> sigma4 = {4, 5, 9};
+ K.insert_simplex(sigma1);
+ K.insert_simplex(sigma2);
+ K.insert_simplex(sigma3);
+ K.insert_simplex(sigma4);
+
+ std::cout << "num_maximal_simplices" << K.num_maximal_simplices() << std::endl;
+ BOOST_CHECK(K.num_maximal_simplices() == 4);
+
+ std::vector<Vertex> sigma5 = {5, 2, 7};
+ K.insert_simplex(sigma5);
+
+ std::cout << "num_maximal_simplices" << K.num_maximal_simplices() << std::endl;
+ BOOST_CHECK(K.num_maximal_simplices() == 5);
+
+ auto r = K.contraction(4,5);
+ std::cout << "r=" << r << std::endl;
+ BOOST_CHECK(r == 5);
+
+ std::cout << "num_maximal_simplices" << K.num_maximal_simplices() << std::endl;
+ BOOST_CHECK(K.num_maximal_simplices() == 5);
+
+ std::vector<Vertex> sigma6 = {2, 7};
+ K.remove_simplex(sigma6);
+
+ std::cout << "num_maximal_simplices" << K.num_maximal_simplices() << std::endl;
+ BOOST_CHECK(K.num_maximal_simplices() == 6);
+
+ K.remove_simplex(sigma2);
+
+ std::cout << "num_maximal_simplices" << K.num_maximal_simplices() << std::endl;
+ BOOST_CHECK(K.num_maximal_simplices() == 9);
+
}
BOOST_AUTO_TEST_CASE(toplex_map_maximality) {