37#include <gtest/gtest.h>
65 return static_cast<long long>(
_getpid());
67 return static_cast<long long>(
getpid());
103 const auto *
test_info = ::testing::UnitTest::GetInstance()->current_test_info();
104 std::string base = std::string(
"aleph_io_graph_test_") +
test_info->name() +
"_" +
105 std::to_string(process_id());
106 for (
auto &
ch : base)
110 binary_file = (std::filesystem::temp_directory_path() / (base +
".bin")).string();
111 text_file = (std::filesystem::temp_directory_path() / (base +
".txt")).string();
123 std::vector<int> values;
124 for (
typename Graph::Node_Iterator it(graph); it.has_curr(); it.next())
125 values.push_back(it.get_curr()->get_info());
126 std::sort(values.begin(), values.end());
133 std::vector<double> values;
134 for (
typename Graph::Arc_Iterator it(graph); it.has_curr(); it.next())
135 values.push_back(it.get_curr()->get_info());
136 std::sort(values.begin(), values.end());
168 io.set_verbose(
true);
171 io.set_verbose(
false);
185 std::ofstream
out(binary_file, std::ios::binary);
195 std::ifstream
in(binary_file, std::ios::binary);
211 std::ofstream
out(binary_file, std::ios::binary);
220 std::ifstream
in(binary_file, std::ios::binary);
224 EXPECT_EQ(get_node_values(g), get_node_values(
g2));
233 std::ofstream
out(binary_file, std::ios::binary);
242 std::ifstream
in(binary_file, std::ios::binary);
259 std::ofstream
out(text_file);
261 io.save_in_text_mode(
out);
269 std::ifstream
in(text_file);
271 io2.load_in_text_mode(
in);
285 std::ofstream
out(text_file);
286 io.save_in_text_mode(
out);
294 std::ifstream
in(text_file);
295 io2.load_in_text_mode(
in);
298 EXPECT_EQ(get_node_values(g), get_node_values(
g2));
305 std::ostringstream
out;
306 io.save_in_text_mode(
out);
308 std::string content =
out.str();
311 EXPECT_TRUE(content.find(
"4") != std::string::npos);
312 EXPECT_TRUE(content.find(
"3") != std::string::npos);
326 std::ofstream
out(binary_file, std::ios::binary);
335 std::ifstream
in(binary_file, std::ios::binary);
350 std::ofstream
out(text_file);
351 io.save_in_text_mode(
out);
359 std::ifstream
in(text_file);
360 io2.load_in_text_mode(
in);
380 std::ofstream
out(binary_file, std::ios::binary);
389 std::ifstream
in(binary_file, std::ios::binary);
396 typename Graph::Node_Iterator it(
g2);
397 EXPECT_EQ(it.get_curr()->get_info(), 42);
413 n0 =
dg.insert_node(10);
414 n1 =
dg.insert_node(20);
415 n2 =
dg.insert_node(30);
423 const auto *
test_info = ::testing::UnitTest::GetInstance()->current_test_info();
424 std::string base = std::string(
"aleph_io_digraph_test_") +
test_info->name() +
"_" +
425 std::to_string(process_id());
426 for (
auto &
ch : base)
430 binary_file = (std::filesystem::temp_directory_path() / (base +
".bin")).string();
431 text_file = (std::filesystem::temp_directory_path() / (base +
".txt")).string();
452 std::ofstream
out(binary_file, std::ios::binary);
461 std::ifstream
in(binary_file, std::ios::binary);
475 std::ofstream
out(text_file);
476 io.save_in_text_mode(
out);
484 std::ifstream
in(text_file);
485 io2.load_in_text_mode(
in);
504 std::ostringstream
ss;
520 std::ostringstream
ss;
534 std::istringstream
ss(
"999");
550 std::istringstream
ss(
"2.718");
564 io.set_load_node(
ln);
572 io.set_store_node(sn);
588 io.set_store_arc(sa);
601 std::ifstream
bad_file(
"/nonexistent_file_12345.bin", std::ios::binary);
612 std::ifstream
bad_file(
"/nonexistent_file_12345.txt");
626 std::ofstream
out(binary_file, std::ios::binary);
634 std::ifstream
in(binary_file, std::ios::binary);
667 std::ofstream
out(text_file);
668 io.save_in_text_mode(
out);
675 std::ifstream
in(text_file);
676 io.load_in_text_mode(
in);
689 ::testing::InitGoogleTest(&
argc,
argv);
size_t size_t int32_t * out
Generic directed graph (digraph) wrapper template.
typename BaseGraph::Arc Arc
typename BaseGraph::Node Node
Graph serialization and deserialization class.
virtual Node * insert_node(Node *node) noexcept
Insertion of a node already allocated.
Graph_Node< int > Node
The graph type.
Graph_Arc< double > Arc
The node class type.
Arc * insert_arc(Node *src_node, Node *tgt_node, void *a)
std::vector< int > get_node_values(Graph &graph)
std::vector< double > get_arc_values(Graph &graph)
size_t blossom_maximum_cardinality_matching(const GT &g, DynDlist< typename GT::Arc * > &matching, SA sa=SA())
Alias of compute_maximum_cardinality_general_matching().
Graph serialization and deserialization utilities.
TEST_F(IOGraphTest, ConstructFromReference)
Main namespace for Aleph-w library functions.
Default arc loading functor for binary and text modes.
Default node loading functor for binary and text modes.
Default arc storage functor for binary and text modes.
Default node storage functor for binary and text modes.
Arc of graph implemented with double-linked adjacency lists.
Generic graph and digraph implementations.