summaryrefslogtreecommitdiff
path: root/src/Persistent_cohomology/test
diff options
context:
space:
mode:
Diffstat (limited to 'src/Persistent_cohomology/test')
-rw-r--r--src/Persistent_cohomology/test/betti_numbers_unit_test.cpp30
-rw-r--r--src/Persistent_cohomology/test/persistent_cohomology_unit_test.cpp196
-rw-r--r--src/Persistent_cohomology/test/persistent_cohomology_unit_test_multi_field.cpp88
3 files changed, 159 insertions, 155 deletions
diff --git a/src/Persistent_cohomology/test/betti_numbers_unit_test.cpp b/src/Persistent_cohomology/test/betti_numbers_unit_test.cpp
index b9f11607..7a2feeff 100644
--- a/src/Persistent_cohomology/test/betti_numbers_unit_test.cpp
+++ b/src/Persistent_cohomology/test/betti_numbers_unit_test.cpp
@@ -82,7 +82,7 @@ BOOST_AUTO_TEST_CASE( plain_homology_betti_numbers )
// 2 1 0 inf
// means that in Z/2Z-homology, the Betti numbers are b0=2 and b1=1.
- std::cout << "BETTI NUMBERS" << std::endl;
+ std::clog << "BETTI NUMBERS" << std::endl;
BOOST_CHECK(pcoh.betti_number(0) == 2);
BOOST_CHECK(pcoh.betti_number(1) == 1);
@@ -94,7 +94,7 @@ BOOST_AUTO_TEST_CASE( plain_homology_betti_numbers )
BOOST_CHECK(bns[1] == 1);
BOOST_CHECK(bns[2] == 0);
- std::cout << "GET PERSISTENT PAIRS" << std::endl;
+ std::clog << "GET PERSISTENT PAIRS" << std::endl;
// Custom sort and output persistence
cmp_intervals_by_dim_then_length<Mini_simplex_tree> cmp(&st);
@@ -118,12 +118,12 @@ BOOST_AUTO_TEST_CASE( plain_homology_betti_numbers )
BOOST_CHECK(st.filtration(get<0>(persistent_pairs[2])) == 0);
BOOST_CHECK(get<1>(persistent_pairs[2]) == st.null_simplex());
- std::cout << "INTERVALS IN DIMENSION" << std::endl;
+ std::clog << "INTERVALS IN DIMENSION" << std::endl;
auto intervals_in_dimension_0 = pcoh.intervals_in_dimension(0);
- std::cout << "intervals_in_dimension_0.size() = " << intervals_in_dimension_0.size() << std::endl;
+ std::clog << "intervals_in_dimension_0.size() = " << intervals_in_dimension_0.size() << std::endl;
for (std::size_t i = 0; i < intervals_in_dimension_0.size(); i++)
- std::cout << "intervals_in_dimension_0[" << i << "] = [" << intervals_in_dimension_0[i].first << "," <<
+ std::clog << "intervals_in_dimension_0[" << i << "] = [" << intervals_in_dimension_0[i].first << "," <<
intervals_in_dimension_0[i].second << "]" << std::endl;
BOOST_CHECK(intervals_in_dimension_0.size() == 2);
BOOST_CHECK(intervals_in_dimension_0[0].first == 0);
@@ -133,16 +133,16 @@ BOOST_AUTO_TEST_CASE( plain_homology_betti_numbers )
auto intervals_in_dimension_1 = pcoh.intervals_in_dimension(1);
- std::cout << "intervals_in_dimension_1.size() = " << intervals_in_dimension_1.size() << std::endl;
+ std::clog << "intervals_in_dimension_1.size() = " << intervals_in_dimension_1.size() << std::endl;
for (std::size_t i = 0; i < intervals_in_dimension_1.size(); i++)
- std::cout << "intervals_in_dimension_1[" << i << "] = [" << intervals_in_dimension_1[i].first << "," <<
+ std::clog << "intervals_in_dimension_1[" << i << "] = [" << intervals_in_dimension_1[i].first << "," <<
intervals_in_dimension_1[i].second << "]" << std::endl;
BOOST_CHECK(intervals_in_dimension_1.size() == 1);
BOOST_CHECK(intervals_in_dimension_1[0].first == 0);
BOOST_CHECK(intervals_in_dimension_1[0].second == std::numeric_limits<Mini_simplex_tree::Filtration_value>::infinity());
auto intervals_in_dimension_2 = pcoh.intervals_in_dimension(2);
- std::cout << "intervals_in_dimension_2.size() = " << intervals_in_dimension_2.size() << std::endl;
+ std::clog << "intervals_in_dimension_2.size() = " << intervals_in_dimension_2.size() << std::endl;
BOOST_CHECK(intervals_in_dimension_2.size() == 0);
}
@@ -259,12 +259,12 @@ BOOST_AUTO_TEST_CASE( betti_numbers )
BOOST_CHECK(st.filtration(get<0>(persistent_pairs[2])) == 1);
BOOST_CHECK(get<1>(persistent_pairs[2]) == st.null_simplex());
- std::cout << "INTERVALS IN DIMENSION" << std::endl;
+ std::clog << "INTERVALS IN DIMENSION" << std::endl;
auto intervals_in_dimension_0 = pcoh.intervals_in_dimension(0);
- std::cout << "intervals_in_dimension_0.size() = " << intervals_in_dimension_0.size() << std::endl;
+ std::clog << "intervals_in_dimension_0.size() = " << intervals_in_dimension_0.size() << std::endl;
for (std::size_t i = 0; i < intervals_in_dimension_0.size(); i++)
- std::cout << "intervals_in_dimension_0[" << i << "] = [" << intervals_in_dimension_0[i].first << "," <<
+ std::clog << "intervals_in_dimension_0[" << i << "] = [" << intervals_in_dimension_0[i].first << "," <<
intervals_in_dimension_0[i].second << "]" << std::endl;
BOOST_CHECK(intervals_in_dimension_0.size() == 2);
BOOST_CHECK(intervals_in_dimension_0[0].first == 2);
@@ -273,19 +273,19 @@ BOOST_AUTO_TEST_CASE( betti_numbers )
BOOST_CHECK(intervals_in_dimension_0[1].second == std::numeric_limits<Mini_simplex_tree::Filtration_value>::infinity());
auto intervals_in_dimension_1 = pcoh.intervals_in_dimension(1);
- std::cout << "intervals_in_dimension_1.size() = " << intervals_in_dimension_1.size() << std::endl;
+ std::clog << "intervals_in_dimension_1.size() = " << intervals_in_dimension_1.size() << std::endl;
for (std::size_t i = 0; i < intervals_in_dimension_1.size(); i++)
- std::cout << "intervals_in_dimension_1[" << i << "] = [" << intervals_in_dimension_1[i].first << "," <<
+ std::clog << "intervals_in_dimension_1[" << i << "] = [" << intervals_in_dimension_1[i].first << "," <<
intervals_in_dimension_1[i].second << "]" << std::endl;
BOOST_CHECK(intervals_in_dimension_1.size() == 1);
BOOST_CHECK(intervals_in_dimension_1[0].first == 4);
BOOST_CHECK(intervals_in_dimension_1[0].second == std::numeric_limits<Mini_simplex_tree::Filtration_value>::infinity());
auto intervals_in_dimension_2 = pcoh.intervals_in_dimension(2);
- std::cout << "intervals_in_dimension_2.size() = " << intervals_in_dimension_2.size() << std::endl;
+ std::clog << "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;
+ std::clog << "EMPTY COMPLEX" << std::endl;
Simplex_tree empty;
empty.initialize_filtration();
St_persistence pcoh_empty(empty, false);
diff --git a/src/Persistent_cohomology/test/persistent_cohomology_unit_test.cpp b/src/Persistent_cohomology/test/persistent_cohomology_unit_test.cpp
index a1c106d5..ea41a8aa 100644
--- a/src/Persistent_cohomology/test/persistent_cohomology_unit_test.cpp
+++ b/src/Persistent_cohomology/test/persistent_cohomology_unit_test.cpp
@@ -21,7 +21,7 @@ using namespace boost::unit_test;
typedef Simplex_tree<> typeST;
-std::string test_rips_persistence(int coefficient, int min_persistence) {
+std::string test_persistence(int coefficient, int min_persistence) {
// file is copied in CMakeLists.txt
std::ifstream simplex_tree_stream;
simplex_tree_stream.open("simplex_tree_file_for_unit_test.txt");
@@ -30,7 +30,7 @@ std::string test_rips_persistence(int coefficient, int min_persistence) {
simplex_tree_stream.close();
// Display the Simplex_tree
- std::cout << "The complex contains " << st.num_simplices() << " simplices" << " - dimension= " << st.dimension()
+ std::clog << "The complex contains " << st.num_simplices() << " simplices" << " - dimension= " << st.dimension()
<< std::endl;
// Check
@@ -44,16 +44,16 @@ std::string test_rips_persistence(int coefficient, int min_persistence) {
Persistent_cohomology<Simplex_tree<>, Field_Zp> pcoh(st);
pcoh.init_coefficients( coefficient ); // initializes the coefficient field for homology
- // Check infinite rips
+ // Compute the persistent homology of the complex
pcoh.compute_persistent_cohomology( min_persistence ); // Minimal lifetime of homology feature to be recorded.
- std::ostringstream ossInfinite;
+ std::ostringstream ossPers;
- pcoh.output_diagram(ossInfinite);
- std::string strInfinite = ossInfinite.str();
- return strInfinite;
+ pcoh.output_diagram(ossPers);
+ std::string strPers = ossPers.str();
+ return strPers;
}
-void test_rips_persistence_in_dimension(int dimension) {
+void test_persistence_with_coeff_field(int coeff_field) {
std::string value0(" 0 0.02 1.12");
std::string value1(" 0 0.03 1.13");
std::string value2(" 0 0.04 1.14");
@@ -65,112 +65,104 @@ void test_rips_persistence_in_dimension(int dimension) {
std::string value8(" 0 0 inf" );
std::string value9(" 0 0.01 inf" );
- value0.insert(0,std::to_string(dimension));
- value1.insert(0,std::to_string(dimension));
- value2.insert(0,std::to_string(dimension));
- value3.insert(0,std::to_string(dimension));
- value4.insert(0,std::to_string(dimension));
- value5.insert(0,std::to_string(dimension));
- value6.insert(0,std::to_string(dimension));
- value7.insert(0,std::to_string(dimension));
- value8.insert(0,std::to_string(dimension));
- value9.insert(0,std::to_string(dimension));
-
- std::cout << "********************************************************************" << std::endl;
- std::cout << "TEST OF RIPS_PERSISTENT_COHOMOLOGY_SINGLE_FIELD DIM=" << dimension << " MIN_PERS=0" << std::endl;
-
- std::string str_rips_persistence = test_rips_persistence(dimension, 0);
- std::cout << str_rips_persistence << std::endl;
+ value0.insert(0,std::to_string(coeff_field));
+ value1.insert(0,std::to_string(coeff_field));
+ value2.insert(0,std::to_string(coeff_field));
+ value3.insert(0,std::to_string(coeff_field));
+ value4.insert(0,std::to_string(coeff_field));
+ value5.insert(0,std::to_string(coeff_field));
+ value6.insert(0,std::to_string(coeff_field));
+ value7.insert(0,std::to_string(coeff_field));
+ value8.insert(0,std::to_string(coeff_field));
+ value9.insert(0,std::to_string(coeff_field));
+
+ std::clog << "********************************************************************" << std::endl;
+ std::clog << "TEST OF PERSISTENT_COHOMOLOGY_SINGLE_FIELD COEFF_FIELD=" << coeff_field << " MIN_PERS=0" << std::endl;
+
+ std::string str_persistence = test_persistence(coeff_field, 0);
+ std::clog << str_persistence << std::endl;
- BOOST_CHECK(str_rips_persistence.find(value0) != std::string::npos); // Check found
- BOOST_CHECK(str_rips_persistence.find(value1) != std::string::npos); // Check found
- BOOST_CHECK(str_rips_persistence.find(value2) != std::string::npos); // Check found
- BOOST_CHECK(str_rips_persistence.find(value3) != std::string::npos); // Check found
- BOOST_CHECK(str_rips_persistence.find(value4) != std::string::npos); // Check found
- BOOST_CHECK(str_rips_persistence.find(value5) != std::string::npos); // Check found
- BOOST_CHECK(str_rips_persistence.find(value6) != std::string::npos); // Check found
- BOOST_CHECK(str_rips_persistence.find(value7) != std::string::npos); // Check found
- BOOST_CHECK(str_rips_persistence.find(value8) != std::string::npos); // Check found
- BOOST_CHECK(str_rips_persistence.find(value9) != std::string::npos); // Check found
- std::cout << "str_rips_persistence=" << str_rips_persistence << std::endl;
-
- std::cout << "********************************************************************" << std::endl;
- std::cout << "TEST OF RIPS_PERSISTENT_COHOMOLOGY_SINGLE_FIELD DIM=" << dimension << " MIN_PERS=1" << std::endl;
-
- str_rips_persistence = test_rips_persistence(dimension, 1);
-
- BOOST_CHECK(str_rips_persistence.find(value0) != std::string::npos); // Check found
- BOOST_CHECK(str_rips_persistence.find(value1) != std::string::npos); // Check found
- BOOST_CHECK(str_rips_persistence.find(value2) != std::string::npos); // Check found
- BOOST_CHECK(str_rips_persistence.find(value3) != std::string::npos); // Check found
- BOOST_CHECK(str_rips_persistence.find(value4) != std::string::npos); // Check found
- BOOST_CHECK(str_rips_persistence.find(value5) != std::string::npos); // Check found
- BOOST_CHECK(str_rips_persistence.find(value6) != std::string::npos); // Check found
- BOOST_CHECK(str_rips_persistence.find(value7) != std::string::npos); // Check found
- BOOST_CHECK(str_rips_persistence.find(value8) != std::string::npos); // Check found
- BOOST_CHECK(str_rips_persistence.find(value9) != std::string::npos); // Check found
- std::cout << "str_rips_persistence=" << str_rips_persistence << std::endl;
-
- std::cout << "********************************************************************" << std::endl;
- std::cout << "TEST OF RIPS_PERSISTENT_COHOMOLOGY_SINGLE_FIELD DIM=" << dimension << " MIN_PERS=2" << std::endl;
-
- str_rips_persistence = test_rips_persistence(dimension, 2);
-
- BOOST_CHECK(str_rips_persistence.find(value0) == std::string::npos); // Check not found
- BOOST_CHECK(str_rips_persistence.find(value1) == std::string::npos); // Check not found
- BOOST_CHECK(str_rips_persistence.find(value2) == std::string::npos); // Check not found
- BOOST_CHECK(str_rips_persistence.find(value3) == std::string::npos); // Check not found
- BOOST_CHECK(str_rips_persistence.find(value4) == std::string::npos); // Check not found
- BOOST_CHECK(str_rips_persistence.find(value5) == std::string::npos); // Check not found
- BOOST_CHECK(str_rips_persistence.find(value6) == std::string::npos); // Check not found
- BOOST_CHECK(str_rips_persistence.find(value7) == std::string::npos); // Check not found
- BOOST_CHECK(str_rips_persistence.find(value8) != std::string::npos); // Check found
- BOOST_CHECK(str_rips_persistence.find(value9) != std::string::npos); // Check found
- std::cout << "str_rips_persistence=" << str_rips_persistence << std::endl;
-
- std::cout << "********************************************************************" << std::endl;
- std::cout << "TEST OF RIPS_PERSISTENT_COHOMOLOGY_SINGLE_FIELD DIM=" << dimension << " MIN_PERS=Inf" << std::endl;
-
- str_rips_persistence = test_rips_persistence(dimension, (std::numeric_limits<int>::max)());
-
- BOOST_CHECK(str_rips_persistence.find(value0) == std::string::npos); // Check not found
- BOOST_CHECK(str_rips_persistence.find(value1) == std::string::npos); // Check not found
- BOOST_CHECK(str_rips_persistence.find(value2) == std::string::npos); // Check not found
- BOOST_CHECK(str_rips_persistence.find(value3) == std::string::npos); // Check not found
- BOOST_CHECK(str_rips_persistence.find(value4) == std::string::npos); // Check not found
- BOOST_CHECK(str_rips_persistence.find(value5) == std::string::npos); // Check not found
- BOOST_CHECK(str_rips_persistence.find(value6) == std::string::npos); // Check not found
- BOOST_CHECK(str_rips_persistence.find(value7) == std::string::npos); // Check not found
- BOOST_CHECK(str_rips_persistence.find(value8) != std::string::npos); // Check found
- BOOST_CHECK(str_rips_persistence.find(value9) != std::string::npos); // Check found
- std::cout << "str_rips_persistence=" << str_rips_persistence << std::endl;
+ BOOST_CHECK(str_persistence.find(value0) != std::string::npos); // Check found
+ BOOST_CHECK(str_persistence.find(value1) != std::string::npos); // Check found
+ BOOST_CHECK(str_persistence.find(value2) != std::string::npos); // Check found
+ BOOST_CHECK(str_persistence.find(value3) != std::string::npos); // Check found
+ BOOST_CHECK(str_persistence.find(value4) != std::string::npos); // Check found
+ BOOST_CHECK(str_persistence.find(value5) != std::string::npos); // Check found
+ BOOST_CHECK(str_persistence.find(value6) != std::string::npos); // Check found
+ BOOST_CHECK(str_persistence.find(value7) != std::string::npos); // Check found
+ BOOST_CHECK(str_persistence.find(value8) != std::string::npos); // Check found
+ BOOST_CHECK(str_persistence.find(value9) != std::string::npos); // Check found
+ std::clog << "str_persistence=" << str_persistence << std::endl;
+
+ std::clog << "********************************************************************" << std::endl;
+ std::clog << "TEST OF PERSISTENT_COHOMOLOGY_SINGLE_FIELD COEFF_FIELD=" << coeff_field << " MIN_PERS=1" << std::endl;
+
+ str_persistence = test_persistence(coeff_field, 1);
+
+ BOOST_CHECK(str_persistence.find(value0) != std::string::npos); // Check found
+ BOOST_CHECK(str_persistence.find(value1) != std::string::npos); // Check found
+ BOOST_CHECK(str_persistence.find(value2) != std::string::npos); // Check found
+ BOOST_CHECK(str_persistence.find(value3) != std::string::npos); // Check found
+ BOOST_CHECK(str_persistence.find(value4) != std::string::npos); // Check found
+ BOOST_CHECK(str_persistence.find(value5) != std::string::npos); // Check found
+ BOOST_CHECK(str_persistence.find(value6) != std::string::npos); // Check found
+ BOOST_CHECK(str_persistence.find(value7) != std::string::npos); // Check found
+ BOOST_CHECK(str_persistence.find(value8) != std::string::npos); // Check found
+ BOOST_CHECK(str_persistence.find(value9) != std::string::npos); // Check found
+ std::clog << "str_persistence=" << str_persistence << std::endl;
+
+ std::clog << "********************************************************************" << std::endl;
+ std::clog << "TEST OF PERSISTENT_COHOMOLOGY_SINGLE_FIELD COEFF_FIELD=" << coeff_field << " MIN_PERS=2" << std::endl;
+
+ str_persistence = test_persistence(coeff_field, 2);
+
+ BOOST_CHECK(str_persistence.find(value0) == std::string::npos); // Check not found
+ BOOST_CHECK(str_persistence.find(value1) == std::string::npos); // Check not found
+ BOOST_CHECK(str_persistence.find(value2) == std::string::npos); // Check not found
+ BOOST_CHECK(str_persistence.find(value3) == std::string::npos); // Check not found
+ BOOST_CHECK(str_persistence.find(value4) == std::string::npos); // Check not found
+ BOOST_CHECK(str_persistence.find(value5) == std::string::npos); // Check not found
+ BOOST_CHECK(str_persistence.find(value6) == std::string::npos); // Check not found
+ BOOST_CHECK(str_persistence.find(value7) == std::string::npos); // Check not found
+ BOOST_CHECK(str_persistence.find(value8) != std::string::npos); // Check found
+ BOOST_CHECK(str_persistence.find(value9) != std::string::npos); // Check found
+ std::clog << "str_persistence=" << str_persistence << std::endl;
+
+ std::clog << "********************************************************************" << std::endl;
+ std::clog << "TEST OF PERSISTENT_COHOMOLOGY_SINGLE_FIELD COEFF_FIELD=" << coeff_field << " MIN_PERS=Inf" << std::endl;
+
+ str_persistence = test_persistence(coeff_field, (std::numeric_limits<int>::max)());
+
+ BOOST_CHECK(str_persistence.find(value0) == std::string::npos); // Check not found
+ BOOST_CHECK(str_persistence.find(value1) == std::string::npos); // Check not found
+ BOOST_CHECK(str_persistence.find(value2) == std::string::npos); // Check not found
+ BOOST_CHECK(str_persistence.find(value3) == std::string::npos); // Check not found
+ BOOST_CHECK(str_persistence.find(value4) == std::string::npos); // Check not found
+ BOOST_CHECK(str_persistence.find(value5) == std::string::npos); // Check not found
+ BOOST_CHECK(str_persistence.find(value6) == std::string::npos); // Check not found
+ BOOST_CHECK(str_persistence.find(value7) == std::string::npos); // Check not found
+ BOOST_CHECK(str_persistence.find(value8) != std::string::npos); // Check found
+ BOOST_CHECK(str_persistence.find(value9) != std::string::npos); // Check found
+ std::clog << "str_persistence=" << str_persistence << std::endl;
}
-BOOST_AUTO_TEST_CASE( rips_persistent_cohomology_single_field_dim_1 )
+BOOST_AUTO_TEST_CASE( persistent_cohomology_single_field_coeff_not_prime )
{
- test_rips_persistence_in_dimension(1);
+ for (auto non_prime : {0, 1, 4, 6})
+ BOOST_CHECK_THROW(test_persistence_with_coeff_field(non_prime), std::invalid_argument);
}
-BOOST_AUTO_TEST_CASE( rips_persistent_cohomology_single_field_dim_2 )
+BOOST_AUTO_TEST_CASE( persistent_cohomology_single_field_coeff_prime )
{
- test_rips_persistence_in_dimension(2);
+ for (auto prime : {2, 3, 5, 11, 13})
+ test_persistence_with_coeff_field(prime);
}
-BOOST_AUTO_TEST_CASE( rips_persistent_cohomology_single_field_dim_3 )
+BOOST_AUTO_TEST_CASE( persistent_cohomology_single_field_coeff_limit )
{
- test_rips_persistence_in_dimension(3);
+ BOOST_CHECK_THROW(test_persistence_with_coeff_field(46349), std::invalid_argument);
}
-BOOST_AUTO_TEST_CASE( rips_persistent_cohomology_single_field_dim_5 )
-{
- test_rips_persistence_in_dimension(5);
-}
-
-// TODO(VR): not working from 6
-// std::string str_rips_persistence = test_rips_persistence(6, 0);
-// TODO(VR): division by zero
-// std::string str_rips_persistence = test_rips_persistence(0, 0);
-
/** SimplexTree minimal options to test the limits.
*
* Maximum number of simplices to compute persistence is <CODE>std::numeric_limits<std::uint8_t>::max()<\CODE> = 256.*/
diff --git a/src/Persistent_cohomology/test/persistent_cohomology_unit_test_multi_field.cpp b/src/Persistent_cohomology/test/persistent_cohomology_unit_test_multi_field.cpp
index 9e767943..c6c0bfaf 100644
--- a/src/Persistent_cohomology/test/persistent_cohomology_unit_test_multi_field.cpp
+++ b/src/Persistent_cohomology/test/persistent_cohomology_unit_test_multi_field.cpp
@@ -21,7 +21,7 @@ using namespace boost::unit_test;
typedef Simplex_tree<> typeST;
-std::string test_rips_persistence(int min_coefficient, int max_coefficient, double min_persistence) {
+std::string test_persistence(int min_coefficient, int max_coefficient, double min_persistence) {
// file is copied in CMakeLists.txt
std::ifstream simplex_tree_stream;
simplex_tree_stream.open("simplex_tree_file_for_multi_field_unit_test.txt");
@@ -30,7 +30,7 @@ std::string test_rips_persistence(int min_coefficient, int max_coefficient, doub
simplex_tree_stream.close();
// Display the Simplex_tree
- std::cout << "The complex contains " << st.num_simplices() << " simplices" << " - dimension= " << st.dimension()
+ std::clog << "The complex contains " << st.num_simplices() << " simplices" << " - dimension= " << st.dimension()
<< std::endl;
// Check
@@ -44,17 +44,17 @@ std::string test_rips_persistence(int min_coefficient, int max_coefficient, doub
Persistent_cohomology<Simplex_tree<>, Multi_field> pcoh(st);
pcoh.init_coefficients(min_coefficient, max_coefficient); // initializes the coefficient field for homology
- // Check infinite rips
+ // Compute the persistent homology of the complex
pcoh.compute_persistent_cohomology(min_persistence); // Minimal lifetime of homology feature to be recorded.
- std::ostringstream ossRips;
- pcoh.output_diagram(ossRips);
+ std::ostringstream ossPers;
+ pcoh.output_diagram(ossPers);
- std::string strRips = ossRips.str();
- return strRips;
+ std::string strPers = ossPers.str();
+ return strPers;
}
-void test_rips_persistence_in_dimension(int min_dimension, int max_dimension) {
+void test_persistence_with_coeff_field(int min_coefficient, int max_coefficient) {
// there are 2 discontinued ensembles
std::string value0(" 0 0.25 inf");
std::string value1(" 1 0.4 inf");
@@ -68,48 +68,60 @@ void test_rips_persistence_in_dimension(int min_dimension, int max_dimension) {
std::string value6(" 2 0.3 inf");
std::string value7(" 2 0.4 inf");
- std::cout << "********************************************************************" << std::endl;
- std::cout << "TEST OF RIPS_PERSISTENT_COHOMOLOGY_MULTI_FIELD MIN_DIM=" << min_dimension << " MAX_DIM=" << max_dimension << " MIN_PERS=0" << std::endl;
+ std::clog << "********************************************************************" << std::endl;
+ std::clog << "TEST OF PERSISTENT_COHOMOLOGY_MULTI_FIELD MIN_COEFF=" << min_coefficient << " MAX_COEFF=" << max_coefficient << " MIN_PERS=0" << std::endl;
- std::string str_rips_persistence = test_rips_persistence(min_dimension, max_dimension, 0.0);
- std::cout << "str_rips_persistence=" << str_rips_persistence << std::endl;
+ std::string str_persistence = test_persistence(min_coefficient, max_coefficient, 0.0);
+ std::clog << "str_persistence=" << str_persistence << std::endl;
- BOOST_CHECK(str_rips_persistence.find(value0) != std::string::npos); // Check found
- BOOST_CHECK(str_rips_persistence.find(value1) != std::string::npos); // Check found
- BOOST_CHECK(str_rips_persistence.find(value2) != std::string::npos); // Check found
+ BOOST_CHECK(str_persistence.find(value0) != std::string::npos); // Check found
+ BOOST_CHECK(str_persistence.find(value1) != std::string::npos); // Check found
+ BOOST_CHECK(str_persistence.find(value2) != std::string::npos); // Check found
- if ((min_dimension < 2) && (max_dimension < 2)) {
- BOOST_CHECK(str_rips_persistence.find(value3) != std::string::npos); // Check found
- BOOST_CHECK(str_rips_persistence.find(value4) != std::string::npos); // Check found
- BOOST_CHECK(str_rips_persistence.find(value5) != std::string::npos); // Check found
- BOOST_CHECK(str_rips_persistence.find(value6) != std::string::npos); // Check found
- BOOST_CHECK(str_rips_persistence.find(value7) != std::string::npos); // Check found
+ if ((min_coefficient < 2) && (max_coefficient < 2)) {
+ BOOST_CHECK(str_persistence.find(value3) != std::string::npos); // Check found
+ BOOST_CHECK(str_persistence.find(value4) != std::string::npos); // Check found
+ BOOST_CHECK(str_persistence.find(value5) != std::string::npos); // Check found
+ BOOST_CHECK(str_persistence.find(value6) != std::string::npos); // Check found
+ BOOST_CHECK(str_persistence.find(value7) != std::string::npos); // Check found
} else {
- BOOST_CHECK(str_rips_persistence.find(value3) == std::string::npos); // Check not found
- BOOST_CHECK(str_rips_persistence.find(value4) == std::string::npos); // Check not found
- BOOST_CHECK(str_rips_persistence.find(value5) == std::string::npos); // Check not found
- BOOST_CHECK(str_rips_persistence.find(value6) == std::string::npos); // Check not found
- BOOST_CHECK(str_rips_persistence.find(value7) == std::string::npos); // Check not found
+ BOOST_CHECK(str_persistence.find(value3) == std::string::npos); // Check not found
+ BOOST_CHECK(str_persistence.find(value4) == std::string::npos); // Check not found
+ BOOST_CHECK(str_persistence.find(value5) == std::string::npos); // Check not found
+ BOOST_CHECK(str_persistence.find(value6) == std::string::npos); // Check not found
+ BOOST_CHECK(str_persistence.find(value7) == std::string::npos); // Check not found
}
}
-BOOST_AUTO_TEST_CASE(rips_persistent_cohomology_multi_field_dim_1_2) {
- test_rips_persistence_in_dimension(0, 1);
+BOOST_AUTO_TEST_CASE(persistent_cohomology_multi_field_coeff_0_0) {
+ test_persistence_with_coeff_field(0, 0);
}
-BOOST_AUTO_TEST_CASE(rips_persistent_cohomology_multi_field_dim_2_3) {
- test_rips_persistence_in_dimension(1, 3);
+BOOST_AUTO_TEST_CASE(persistent_cohomology_multi_field_coeff_0_1) {
+ test_persistence_with_coeff_field(0, 1);
}
-BOOST_AUTO_TEST_CASE(rips_persistent_cohomology_multi_field_dim_1_5) {
- test_rips_persistence_in_dimension(1, 5);
+BOOST_AUTO_TEST_CASE(persistent_cohomology_multi_field_coeff_0_6) {
+ test_persistence_with_coeff_field(0, 6);
}
-// TODO(VR): not working from 6
-// std::string str_rips_persistence = test_rips_persistence(6, 0);
-// TODO(VR): division by zero
-// std::string str_rips_persistence = test_rips_persistence(0, 0);
-// TODO(VR): is result OK of :
-// test_rips_persistence_in_dimension(3, 4);
+BOOST_AUTO_TEST_CASE(persistent_cohomology_multi_field_coeff_1_2) {
+ test_persistence_with_coeff_field(1, 2);
+}
+
+BOOST_AUTO_TEST_CASE(persistent_cohomology_multi_field_coeff_1_3) {
+ test_persistence_with_coeff_field(1, 3);
+}
+
+BOOST_AUTO_TEST_CASE(persistent_cohomology_multi_field_coeff_1_5) {
+ test_persistence_with_coeff_field(1, 5);
+}
+
+BOOST_AUTO_TEST_CASE(persistent_cohomology_multi_field_coeff_2_3) {
+ test_persistence_with_coeff_field(2, 3);
+}
+BOOST_AUTO_TEST_CASE(persistent_cohomology_multi_field_coeff_3_4) {
+ test_persistence_with_coeff_field(3, 4);
+}