X-Git-Url: https://git.sthu.org/?p=libstick.git;a=blobdiff_plain;f=tests%2Fpersistence.h;h=27b01f2f18c73aa0dbfc3ef79e85bc8d583f1419;hp=1a6600c50139cbcf7641602990bfb9452eb2bee5;hb=b3a9951228b854b44c507b32a61e9d36e74709d9;hpb=754ba359b3f87df0d42f8706549b6eda32d3373d diff --git a/tests/persistence.h b/tests/persistence.h index 1a6600c..27b01f2 100644 --- a/tests/persistence.h +++ b/tests/persistence.h @@ -30,6 +30,7 @@ class persistence_TestSuite: public Test::Suite { { TEST_ADD(persistence_TestSuite::test_matrix_reduction); TEST_ADD(persistence_TestSuite::test_betti_numbers); + TEST_ADD(persistence_TestSuite::test_lowestones); } protected: @@ -194,7 +195,6 @@ class persistence_TestSuite: public Test::Suite { torusrbme.set_all(torusrbme_coords, sizeof(torusrbme_coords)/(2*sizeof(uint32_t)), true); TEST_ASSERT(torusrbme == torusrbm); - pers ballp(oball); ballp.compute_matrices(); const bm &ballbm = ballp.get_boundary_matrix(); @@ -283,6 +283,36 @@ class persistence_TestSuite: public Test::Suite { TEST_ASSERT(ballp.get_persistence_diagram(2).persistent_betti(oball.size()-3, oball.size()-3) == 2); TEST_ASSERT(ballp.get_persistence_diagram(3).persistent_betti(oball.size()-3, oball.size()-3) == 0); } + + void test_lowestones() { + test_lowestones_impl(oring); + test_lowestones_impl(otorus); + test_lowestones_impl(oball); + } + + void test_lowestones_impl(const scomplex::simplex_order& so) { + pers p(so); + p.compute_matrices(); + const bm &lowestones = p.get_lowestones_matrix(); + + for (unsigned c=0; c < lowestones.size(); ++c) + assert(lowestones.get_column(c).size() <= 1); + for (unsigned r=0; r < lowestones.size(); ++r) + assert(lowestones.get_row(r).size() <= 1); + for (unsigned c=0; c < lowestones.size(); ++c) { + // If (r,c) is a one then + // (i) a cycle dies with c --> row c is zero + // (ii) a cycle is born with r --> column r is zero + //Hence + // (i) the column r is a zero-column + // (i) the row c is a zero-column + if (lowestones.get_column(c).size() > 0) { + const uint32_t r = lowestones.get_column(c).back(); + assert(lowestones.get_column(r).size() == 0); + assert(lowestones.get_row(c).size() == 0); + } + } + } }; #endif