summaryrefslogtreecommitdiff
path: root/src/Bottleneck/test/bottleneck_unit_test.cpp
diff options
context:
space:
mode:
authorfgodi <fgodi@636b058d-ea47-450e-bf9e-a15bfbe3eedb>2015-03-29 22:37:12 +0000
committerfgodi <fgodi@636b058d-ea47-450e-bf9e-a15bfbe3eedb>2015-03-29 22:37:12 +0000
commiteaae83fc6b471bb05891addd35863fe00c351565 (patch)
treedc1d4c0c08afcf1ea714b45306d781aea68ea611 /src/Bottleneck/test/bottleneck_unit_test.cpp
parent8c820ca8f9da625084f94dc9b80bb936f2c7aa8a (diff)
Copyrigth Sophia + tests
git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/gudhi/branches/bottleneckDistance@512 636b058d-ea47-450e-bf9e-a15bfbe3eedb Former-commit-id: 353baa0c191df44a3bc420efd4424de2f5c6859e
Diffstat (limited to 'src/Bottleneck/test/bottleneck_unit_test.cpp')
-rw-r--r--src/Bottleneck/test/bottleneck_unit_test.cpp122
1 files changed, 104 insertions, 18 deletions
diff --git a/src/Bottleneck/test/bottleneck_unit_test.cpp b/src/Bottleneck/test/bottleneck_unit_test.cpp
index 068b8690..ea7f51f2 100644
--- a/src/Bottleneck/test/bottleneck_unit_test.cpp
+++ b/src/Bottleneck/test/bottleneck_unit_test.cpp
@@ -1,26 +1,112 @@
#define BOOST_TEST_MODULE bottleneck test
#include <boost/test/included/unit_test.hpp>
-
+#include <random>
#include "gudhi/Graph_matching.h"
-#include <iostream>
using namespace Gudhi::bottleneck;
-BOOST_AUTO_TEST_CASE(random_diagrams) {
- int n = 100;
- // Random construction
- std::vector< std::pair<double, double> > v1, v2;
- for (int i = 0; i < n; i++) {
- int a = rand() % n;
- v1.emplace_back(a, a + rand() % (n - a));
- int b = rand() % n;
- v2.emplace_back(b, b + rand() % (n - b));
- }
- // v1 and v2 are persistence diagrams containing each 100 randoms points.
- double b = bottleneck_distance(v1, v2, 0);
- //
- std::cout << b << std::endl;
- const double EXPECTED_DISTANCE = 98.5;
- BOOST_CHECK(b == EXPECTED_DISTANCE);
+Persistence_diagrams_graph* random_graph_generator(){
+ int n1 = 100;
+ int n2 = 120;
+ double upper_bound = 80;
+ // Random construction
+ std::uniform_real_distribution<double> unif(0.,upper_bound);
+ std::default_random_engine re;
+ std::vector< std::pair<double, double> > v1, v2;
+ for (int i = 0; i < n1; i++) {
+ double a = unif(re);
+ double b = unif(re);
+ v1.emplace_back(std::min(a,b), std::max(a,b));
+ }
+ for (int i = 0; i < n2; i++) {
+ double a = unif(re);
+ double b = unif(re);
+ v2.emplace_back(std::min(a,b), std::max(a,b));
+ }
+ return new Persistence_diagrams_graph(v1, v2, 0.);
+}
+
+BOOST_AUTO_TEST_CASE(global){
+ int n = 100;
+ // Random construction
+ std::vector< std::pair<double, double> > v1, v2;
+ for (int i = 0; i < n; i++) {
+ int a = rand() % n;
+ v1.emplace_back(a, a + rand() % (n - a));
+ int b = rand() % n;
+ v2.emplace_back(b, b + rand() % (n - b));
+ }
+ //
+ BOOST_CHECK(bottleneck_distance(v1, v2, 1.) == 98);
}
+
+
+BOOST_AUTO_TEST_CASE(persistence_diagrams_graph) {
+ Persistence_diagrams_graph* g = random_graph_generator();
+ std::vector<double>* d = g->sorted_distances();
+ //
+ BOOST_CHECK(!g->on_the_u_diagonal(99));
+ BOOST_CHECK(!g->on_the_u_diagonal(100));
+ BOOST_CHECK(!g->on_the_u_diagonal(119));
+ BOOST_CHECK(g->on_the_u_diagonal(120));
+ BOOST_CHECK(!g->on_the_v_diagonal(99));
+ BOOST_CHECK(g->on_the_v_diagonal(100));
+ BOOST_CHECK(g->on_the_v_diagonal(119));
+ BOOST_CHECK(g->on_the_v_diagonal(120));
+ //
+ BOOST_CHECK(g->corresponding_point_in_u(0)==120);
+ BOOST_CHECK(g->corresponding_point_in_u(100)==0);
+ BOOST_CHECK(g->corresponding_point_in_v(0)==100);
+ BOOST_CHECK(g->corresponding_point_in_v(120)==0);
+ //
+ BOOST_CHECK(g->size()==220);
+ //
+ BOOST_CHECK((int) d->size() <= 220*220 - 100*120 + 1); // could be more strict
+ BOOST_CHECK(std::count(d->begin(), d->end(), g->distance(0,0))==1);
+ BOOST_CHECK(std::count(d->begin(), d->end(), g->distance(0,99))==1);
+ BOOST_CHECK(std::count(d->begin(), d->end(), g->distance(0,100))==1);
+ BOOST_CHECK(std::count(d->begin(), d->end(), g->distance(0,119))==1);
+ BOOST_CHECK(std::count(d->begin(), d->end(), g->distance(0,120))==1);
+ BOOST_CHECK(std::count(d->begin(), d->end(), g->distance(0,219))==1);
+ BOOST_CHECK(std::count(d->begin(), d->end(), g->distance(100,0))==1);
+ BOOST_CHECK(std::count(d->begin(), d->end(), g->distance(100,99))==1);
+ BOOST_CHECK(std::count(d->begin(), d->end(), g->distance(100,100))==1);
+ BOOST_CHECK(std::count(d->begin(), d->end(), g->distance(100,119))==1);
+ BOOST_CHECK(std::count(d->begin(), d->end(), g->distance(100,120))==1);
+ BOOST_CHECK(std::count(d->begin(), d->end(), g->distance(100,219))==1);
+ BOOST_CHECK(std::count(d->begin(), d->end(), g->distance(219,0))==1);
+ BOOST_CHECK(std::count(d->begin(), d->end(), g->distance(219,99))==1);
+ BOOST_CHECK(std::count(d->begin(), d->end(), g->distance(219,100))==1);
+ BOOST_CHECK(std::count(d->begin(), d->end(), g->distance(219,119))==1);
+ BOOST_CHECK(std::count(d->begin(), d->end(), g->distance(219,120))==1);
+ BOOST_CHECK(std::count(d->begin(), d->end(), g->distance(219,219))==1);
+ //
+ delete g;
+ delete d;
+}
+
+BOOST_AUTO_TEST_CASE(planar_nf) {
+ Persistence_diagrams_graph* g = random_graph_generator();
+ Planar_neighbors_finder pnf = Planar_neighbors_finder(*g,1.);
+ for(int v_point_index=0; v_point_index<100; v_point_index+=2)
+ pnf.add(v_point_index);
+ pnf.remove(0);
+ pnf.remove(1);
+ //
+ BOOST_CHECK(!pnf.contains(0));
+ BOOST_CHECK(!pnf.contains(1));
+ BOOST_CHECK(pnf.contains(2));
+ BOOST_CHECK(!pnf.contains(3));
+ //
+ int v_point_index_1 = pnf.pull_near(120/2);
+ BOOST_CHECK((v_point_index_1 == -1) || (g->distance(120/2,v_point_index_1)<1.));
+ BOOST_CHECK(!pnf.contains(v_point_index_1));
+ int v_point_index_2 = pnf.pull_near(120/2);
+ BOOST_CHECK((v_point_index_2 == -1) || (g->distance(120/2,v_point_index_2)<1.));
+ BOOST_CHECK(!pnf.contains(v_point_index_2));
+ BOOST_CHECK((v_point_index_2 != -1) || (v_point_index_1 == -1));
+ pnf.add(v_point_index_1);
+ BOOST_CHECK(pnf.contains(v_point_index_1));
+}
+