/* This file is part of the Gudhi Library. The Gudhi library
* (Geometric Understanding in Higher Dimensions) is a generic C++
* library for computational topology.
*
* Author(s): Vincent Rouvreau
*
* Copyright (C) 2017 INRIA
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
#include
#include
#include
#include // for pair
#include
#include // for inf
#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MODULE "persistence_intervals_reader"
#include
using Persistence_intervals_by_dimension = std::map>>;
using Persistence_intervals = std::vector>;
// Test files with only 2 parameters (persistence birth and death) per line in file
BOOST_AUTO_TEST_CASE( persistence_intervals_without_dimension )
{
Persistence_intervals_by_dimension expected_intervals_by_dimension;
expected_intervals_by_dimension[-1].push_back(std::make_pair(2.7, 3.7));
expected_intervals_by_dimension[-1].push_back(std::make_pair(9.6, 14.));
expected_intervals_by_dimension[-1].push_back(std::make_pair(34.2, 34.974));
expected_intervals_by_dimension[-1].push_back(std::make_pair(3., std::numeric_limits::infinity()));
Persistence_intervals_by_dimension persistence_intervals_by_dimension =
read_persistence_intervals_grouped_by_dimension("persistence_intervals_without_dimension.pers");
std::cout << "\nread_persistence_intervals_grouped_by_dimension - expected\n";
for (auto map_iter : expected_intervals_by_dimension) {
std::cout << "key=" << map_iter.first;
for (auto vec_iter : map_iter.second)
std::cout << " [" << vec_iter.first << " ," << vec_iter.second << "] ";
}
std::cout << "\nread_persistence_intervals_grouped_by_dimension - read\n";
for (auto map_iter : persistence_intervals_by_dimension) {
std::cout << "key=" << map_iter.first;
for (auto vec_iter : map_iter.second)
std::cout << " [" << vec_iter.first << " ," << vec_iter.second << "] ";
}
BOOST_CHECK(persistence_intervals_by_dimension == expected_intervals_by_dimension);
Persistence_intervals expected_intervals_in_dimension;
expected_intervals_in_dimension.push_back(std::make_pair(2.7, 3.7));
expected_intervals_in_dimension.push_back(std::make_pair(9.6, 14.));
expected_intervals_in_dimension.push_back(std::make_pair(34.2, 34.974));
expected_intervals_in_dimension.push_back(std::make_pair(3., std::numeric_limits::infinity()));
Persistence_intervals persistence_intervals_in_dimension =
read_persistence_intervals_in_dimension("persistence_intervals_without_dimension.pers");
std::cout << "\nread_persistence_intervals_in_dimension - expected\n";
for (auto vec_iter : expected_intervals_in_dimension)
std::cout << " [" << vec_iter.first << " ," << vec_iter.second << "] ";
std::cout << "\nread_persistence_intervals_in_dimension - read\n";
for (auto vec_iter : expected_intervals_in_dimension)
std::cout << " [" << vec_iter.first << " ," << vec_iter.second << "] ";
BOOST_CHECK(persistence_intervals_in_dimension == expected_intervals_in_dimension);
expected_intervals_in_dimension.clear();
persistence_intervals_in_dimension =
read_persistence_intervals_in_dimension("persistence_intervals_without_dimension.pers", 0);
BOOST_CHECK(persistence_intervals_in_dimension == expected_intervals_in_dimension);
expected_intervals_in_dimension.clear();
persistence_intervals_in_dimension =
read_persistence_intervals_in_dimension("persistence_intervals_without_dimension.pers", 1);
BOOST_CHECK(persistence_intervals_in_dimension == expected_intervals_in_dimension);
expected_intervals_in_dimension.clear();
persistence_intervals_in_dimension =
read_persistence_intervals_in_dimension("persistence_intervals_without_dimension.pers", 2);
BOOST_CHECK(persistence_intervals_in_dimension == expected_intervals_in_dimension);
expected_intervals_in_dimension.clear();
persistence_intervals_in_dimension =
read_persistence_intervals_in_dimension("persistence_intervals_without_dimension.pers", 3);
BOOST_CHECK(persistence_intervals_in_dimension == expected_intervals_in_dimension);
}
// Test files with 3 parameters (dimension birth death) per line in file
BOOST_AUTO_TEST_CASE( persistence_intervals_with_dimension )
{
Persistence_intervals_by_dimension expected_intervals_by_dimension;
expected_intervals_by_dimension[0].push_back(std::make_pair(2.7, 3.7));
expected_intervals_by_dimension[1].push_back(std::make_pair(9.6, 14.));
expected_intervals_by_dimension[3].push_back(std::make_pair(34.2, 34.974));
expected_intervals_by_dimension[1].push_back(std::make_pair(3., std::numeric_limits::infinity()));
Persistence_intervals_by_dimension persistence_intervals_by_dimension =
read_persistence_intervals_grouped_by_dimension("persistence_intervals_with_dimension.pers");
std::cout << "\nread_persistence_intervals_grouped_by_dimension - expected\n";
for (auto map_iter : expected_intervals_by_dimension) {
std::cout << "key=" << map_iter.first;
for (auto vec_iter : map_iter.second)
std::cout << " [" << vec_iter.first << " ," << vec_iter.second << "] ";
}
std::cout << "\nread_persistence_intervals_grouped_by_dimension - read\n";
for (auto map_iter : persistence_intervals_by_dimension) {
std::cout << "key=" << map_iter.first;
for (auto vec_iter : map_iter.second)
std::cout << " [" << vec_iter.first << " ," << vec_iter.second << "] ";
}
BOOST_CHECK(persistence_intervals_by_dimension == expected_intervals_by_dimension);
Persistence_intervals expected_intervals_in_dimension;
expected_intervals_in_dimension.push_back(std::make_pair(2.7, 3.7));
expected_intervals_in_dimension.push_back(std::make_pair(9.6, 14.));
expected_intervals_in_dimension.push_back(std::make_pair(34.2, 34.974));
expected_intervals_in_dimension.push_back(std::make_pair(3., std::numeric_limits::infinity()));
Persistence_intervals persistence_intervals_in_dimension =
read_persistence_intervals_in_dimension("persistence_intervals_with_dimension.pers");
std::cout << "\nread_persistence_intervals_in_dimension - expected\n";
for (auto vec_iter : expected_intervals_in_dimension)
std::cout << " [" << vec_iter.first << " ," << vec_iter.second << "] ";
std::cout << "\nread_persistence_intervals_in_dimension - read\n";
for (auto vec_iter : persistence_intervals_in_dimension)
std::cout << " [" << vec_iter.first << " ," << vec_iter.second << "] ";
BOOST_CHECK(persistence_intervals_in_dimension == expected_intervals_in_dimension);
expected_intervals_in_dimension.clear();
expected_intervals_in_dimension.push_back(std::make_pair(2.7, 3.7));
persistence_intervals_in_dimension =
read_persistence_intervals_in_dimension("persistence_intervals_with_dimension.pers", 0);
std::cout << "\nread_persistence_intervals_in_dimension 0 - expected\n";
for (auto vec_iter : expected_intervals_in_dimension)
std::cout << " [" << vec_iter.first << " ," << vec_iter.second << "] ";
std::cout << "\nread_persistence_intervals_in_dimension 0 - read\n";
for (auto vec_iter : persistence_intervals_in_dimension)
std::cout << " [" << vec_iter.first << " ," << vec_iter.second << "] ";
BOOST_CHECK(persistence_intervals_in_dimension == expected_intervals_in_dimension);
expected_intervals_in_dimension.clear();
expected_intervals_in_dimension.push_back(std::make_pair(9.6, 14.));
expected_intervals_in_dimension.push_back(std::make_pair(3., std::numeric_limits::infinity()));
persistence_intervals_in_dimension =
read_persistence_intervals_in_dimension("persistence_intervals_with_dimension.pers", 1);
std::cout << "\nread_persistence_intervals_in_dimension 1 - expected\n";
for (auto vec_iter : expected_intervals_in_dimension)
std::cout << " [" << vec_iter.first << " ," << vec_iter.second << "] ";
std::cout << "\nread_persistence_intervals_in_dimension 1 - read\n";
for (auto vec_iter : persistence_intervals_in_dimension)
std::cout << " [" << vec_iter.first << " ," << vec_iter.second << "] ";
BOOST_CHECK(persistence_intervals_in_dimension == expected_intervals_in_dimension);
expected_intervals_in_dimension.clear();
persistence_intervals_in_dimension =
read_persistence_intervals_in_dimension("persistence_intervals_with_dimension.pers", 2);
std::cout << "\nread_persistence_intervals_in_dimension 2 - expected\n";
for (auto vec_iter : expected_intervals_in_dimension)
std::cout << " [" << vec_iter.first << " ," << vec_iter.second << "] ";
std::cout << "\nread_persistence_intervals_in_dimension 2 - read\n";
for (auto vec_iter : persistence_intervals_in_dimension)
std::cout << " [" << vec_iter.first << " ," << vec_iter.second << "] ";
BOOST_CHECK(persistence_intervals_in_dimension == expected_intervals_in_dimension);
expected_intervals_in_dimension.clear();
expected_intervals_in_dimension.push_back(std::make_pair(34.2, 34.974));
persistence_intervals_in_dimension =
read_persistence_intervals_in_dimension("persistence_intervals_with_dimension.pers", 3);
std::cout << "\nread_persistence_intervals_in_dimension 3 - expected\n";
for (auto vec_iter : expected_intervals_in_dimension)
std::cout << " [" << vec_iter.first << " ," << vec_iter.second << "] ";
std::cout << "\nread_persistence_intervals_in_dimension 3 - read\n";
for (auto vec_iter : persistence_intervals_in_dimension)
std::cout << " [" << vec_iter.first << " ," << vec_iter.second << "] ";
BOOST_CHECK(persistence_intervals_in_dimension == expected_intervals_in_dimension);
}
// Test files with 4 parameters (field dimension birth death) per line in file
BOOST_AUTO_TEST_CASE( persistence_intervals_with_field )
{
Persistence_intervals_by_dimension expected_intervals_by_dimension;
expected_intervals_by_dimension[0].push_back(std::make_pair(2.7, 3.7));
expected_intervals_by_dimension[1].push_back(std::make_pair(9.6, 14.));
expected_intervals_by_dimension[3].push_back(std::make_pair(34.2, 34.974));
expected_intervals_by_dimension[1].push_back(std::make_pair(3., std::numeric_limits::infinity()));
Persistence_intervals_by_dimension persistence_intervals_by_dimension =
read_persistence_intervals_grouped_by_dimension("persistence_intervals_with_field.pers");
std::cout << "\nread_persistence_intervals_grouped_by_dimension - expected\n";
for (auto map_iter : expected_intervals_by_dimension) {
std::cout << "key=" << map_iter.first;
for (auto vec_iter : map_iter.second)
std::cout << " [" << vec_iter.first << " ," << vec_iter.second << "] ";
}
std::cout << "\nread_persistence_intervals_grouped_by_dimension - read\n";
for (auto map_iter : persistence_intervals_by_dimension) {
std::cout << "key=" << map_iter.first;
for (auto vec_iter : map_iter.second)
std::cout << " [" << vec_iter.first << " ," << vec_iter.second << "] ";
}
BOOST_CHECK(persistence_intervals_by_dimension == expected_intervals_by_dimension);
Persistence_intervals expected_intervals_in_dimension;
expected_intervals_in_dimension.push_back(std::make_pair(2.7, 3.7));
expected_intervals_in_dimension.push_back(std::make_pair(9.6, 14.));
expected_intervals_in_dimension.push_back(std::make_pair(34.2, 34.974));
expected_intervals_in_dimension.push_back(std::make_pair(3., std::numeric_limits::infinity()));
Persistence_intervals persistence_intervals_in_dimension =
read_persistence_intervals_in_dimension("persistence_intervals_with_field.pers");
std::cout << "\nread_persistence_intervals_in_dimension - expected\n";
for (auto vec_iter : expected_intervals_in_dimension)
std::cout << " [" << vec_iter.first << " ," << vec_iter.second << "] ";
std::cout << "\nread_persistence_intervals_in_dimension - read\n";
for (auto vec_iter : persistence_intervals_in_dimension)
std::cout << " [" << vec_iter.first << " ," << vec_iter.second << "] ";
BOOST_CHECK(persistence_intervals_in_dimension == expected_intervals_in_dimension);
expected_intervals_in_dimension.clear();
expected_intervals_in_dimension.push_back(std::make_pair(2.7, 3.7));
persistence_intervals_in_dimension =
read_persistence_intervals_in_dimension("persistence_intervals_with_field.pers", 0);
std::cout << "\nread_persistence_intervals_in_dimension 0 - expected\n";
for (auto vec_iter : expected_intervals_in_dimension)
std::cout << " [" << vec_iter.first << " ," << vec_iter.second << "] ";
std::cout << "\nread_persistence_intervals_in_dimension 0 - read\n";
for (auto vec_iter : persistence_intervals_in_dimension)
std::cout << " [" << vec_iter.first << " ," << vec_iter.second << "] ";
BOOST_CHECK(persistence_intervals_in_dimension == expected_intervals_in_dimension);
expected_intervals_in_dimension.clear();
expected_intervals_in_dimension.push_back(std::make_pair(9.6, 14.));
expected_intervals_in_dimension.push_back(std::make_pair(3., std::numeric_limits::infinity()));
persistence_intervals_in_dimension =
read_persistence_intervals_in_dimension("persistence_intervals_with_field.pers", 1);
std::cout << "\nread_persistence_intervals_in_dimension 1 - expected\n";
for (auto vec_iter : expected_intervals_in_dimension)
std::cout << " [" << vec_iter.first << " ," << vec_iter.second << "] ";
std::cout << "\nread_persistence_intervals_in_dimension 1 - read\n";
for (auto vec_iter : persistence_intervals_in_dimension)
std::cout << " [" << vec_iter.first << " ," << vec_iter.second << "] ";
BOOST_CHECK(persistence_intervals_in_dimension == expected_intervals_in_dimension);
expected_intervals_in_dimension.clear();
persistence_intervals_in_dimension =
read_persistence_intervals_in_dimension("persistence_intervals_with_field.pers", 2);
std::cout << "\nread_persistence_intervals_in_dimension 2 - expected\n";
for (auto vec_iter : expected_intervals_in_dimension)
std::cout << " [" << vec_iter.first << " ," << vec_iter.second << "] ";
std::cout << "\nread_persistence_intervals_in_dimension 2 - read\n";
for (auto vec_iter : persistence_intervals_in_dimension)
std::cout << " [" << vec_iter.first << " ," << vec_iter.second << "] ";
BOOST_CHECK(persistence_intervals_in_dimension == expected_intervals_in_dimension);
expected_intervals_in_dimension.clear();
expected_intervals_in_dimension.push_back(std::make_pair(34.2, 34.974));
persistence_intervals_in_dimension =
read_persistence_intervals_in_dimension("persistence_intervals_with_field.pers", 3);
std::cout << "\nread_persistence_intervals_in_dimension 3 - expected\n";
for (auto vec_iter : expected_intervals_in_dimension)
std::cout << " [" << vec_iter.first << " ," << vec_iter.second << "] ";
std::cout << "\nread_persistence_intervals_in_dimension 3 - read\n";
for (auto vec_iter : persistence_intervals_in_dimension)
std::cout << " [" << vec_iter.first << " ," << vec_iter.second << "] ";
BOOST_CHECK(persistence_intervals_in_dimension == expected_intervals_in_dimension);
}