summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorVincent Rouvreau <10407034+VincentRouvreau@users.noreply.github.com>2019-11-16 23:48:04 +0100
committerGitHub <noreply@github.com>2019-11-16 23:48:04 +0100
commit2ed1a86fa21d136cd7fe6fedbfc796799903038a (patch)
tree21629ee8e9af8fec2346ebce8d9e657fdf6dfa85 /src
parent6c341ffd5500f6393467fce3f5e091afc354d25b (diff)
parent1e5d0ca3f84f1e5c132014d3cfc96bfe0aa3d7ee (diff)
Merge pull request #138 from mglisse/empty_complex
Empty complexes have 0 (not -1) Betti numbers
Diffstat (limited to 'src')
-rw-r--r--src/Persistent_cohomology/include/gudhi/Persistent_cohomology.h8
-rw-r--r--src/Persistent_cohomology/test/betti_numbers_unit_test.cpp9
2 files changed, 15 insertions, 2 deletions
diff --git a/src/Persistent_cohomology/include/gudhi/Persistent_cohomology.h b/src/Persistent_cohomology/include/gudhi/Persistent_cohomology.h
index 944b6d35..0f1876d0 100644
--- a/src/Persistent_cohomology/include/gudhi/Persistent_cohomology.h
+++ b/src/Persistent_cohomology/include/gudhi/Persistent_cohomology.h
@@ -600,8 +600,10 @@ class Persistent_cohomology {
* @return A vector of Betti numbers.
*/
std::vector<int> betti_numbers() const {
+ // Don't allocate a vector of negative size for an empty complex
+ int siz = std::max(dim_max_, 0);
// Init Betti numbers vector with zeros until Simplicial complex dimension
- std::vector<int> betti_numbers(dim_max_, 0);
+ std::vector<int> betti_numbers(siz);
for (auto pair : persistent_pairs_) {
// Count never ended persistence intervals
@@ -639,8 +641,10 @@ class Persistent_cohomology {
* @return A vector of persistent Betti numbers.
*/
std::vector<int> persistent_betti_numbers(Filtration_value from, Filtration_value to) const {
+ // Don't allocate a vector of negative size for an empty complex
+ int siz = std::max(dim_max_, 0);
// Init Betti numbers vector with zeros until Simplicial complex dimension
- std::vector<int> betti_numbers(dim_max_, 0);
+ std::vector<int> betti_numbers(siz);
for (auto pair : persistent_pairs_) {
// Count persistence intervals that covers the given interval
// null_simplex test : if the function is called with to=+infinity, we still get something useful. And it will
diff --git a/src/Persistent_cohomology/test/betti_numbers_unit_test.cpp b/src/Persistent_cohomology/test/betti_numbers_unit_test.cpp
index 0a08d200..b9f11607 100644
--- a/src/Persistent_cohomology/test/betti_numbers_unit_test.cpp
+++ b/src/Persistent_cohomology/test/betti_numbers_unit_test.cpp
@@ -284,4 +284,13 @@ BOOST_AUTO_TEST_CASE( betti_numbers )
auto intervals_in_dimension_2 = pcoh.intervals_in_dimension(2);
std::cout << "intervals_in_dimension_2.size() = " << intervals_in_dimension_2.size() << std::endl;
BOOST_CHECK(intervals_in_dimension_2.size() == 0);
+
+ std::cout << "EMPTY COMPLEX" << std::endl;
+ Simplex_tree empty;
+ empty.initialize_filtration();
+ St_persistence pcoh_empty(empty, false);
+ pcoh_empty.init_coefficients(2);
+ pcoh_empty.compute_persistent_cohomology();
+ BOOST_CHECK(pcoh_empty.betti_numbers().size() == 0);
+ BOOST_CHECK(pcoh_empty.persistent_betti_numbers(0,1).size() == 0);
}