Graph_test.cpp
Go to the documentation of this file.
1 //=============================================================================
2 // Copyright (C) 2021-2024 Wageningen University - All Rights Reserved
3 // Author: Gonzalo Mier
4 // BSD-3 License
5 //=============================================================================
6 
7 #include <gtest/gtest.h>
9 
10 TEST(fields2cover_types_graph, addEdges) {
11  size_t p1 {1}, p2 {3}, p3 {2}, p4 {4};
13  g.addDirectedEdge(p1, p4, 1);
14  g.addDirectedEdge(p1, p3, 2);
15  g.addEdge(p3, p2, 6);
16  g.addEdge(p2, p1, 6);
17  g.addEdge(p4, p1, 6);
18 
19  EXPECT_EQ(g.numNodes(), 4);
20  EXPECT_EQ(g.numEdges(), 7);
21 }
22 
23 TEST(fields2cover_types_graph, allPathsBetween) {
24  size_t p1 {1}, p2 {2}, p3 {3}, p4 {4};
25  std::vector<size_t> ps {p1, p2, p3, p4};
26 
28  g.addDirectedEdge(p1, p4, 1);
29  g.addDirectedEdge(p1, p3, 2);
30  g.addEdge(p3, p2, 6);
31  g.addEdge(p2, p1, 6);
32  g.addEdge(p4, p1, 6);
33 
34  auto dfs = g.allPathsBetween(p4, p2);
35  EXPECT_EQ(dfs.size(), 2);
36  for (auto r : dfs) {
37  EXPECT_EQ(r[0], p4);
38  EXPECT_EQ(r.back(), p2);
39  }
40 
41  for (auto pi : ps) {
42  for (auto pj : ps) {
43  auto dfs = g.allPathsBetween(pi, pj);
44  EXPECT_GT(dfs.size(), 0);
45  for (auto r : dfs) {
46  EXPECT_EQ(r[0], pi);
47  EXPECT_EQ(r.back(), pj);
48  }
49  }
50  }
51 }
52 
53 TEST(fields2cover_types_graph, shortestPaths) {
54  size_t p1 {0}, p2 {1}, p3 {2}, p4 {3};
55  std::vector<size_t> ps {p1, p2, p3, p4};
56 
58  g.addEdge(p1, p2, 6);
59  g.addDirectedEdge(p3, p4, 1);
60  g.addDirectedEdge(p1, p3, 2);
61  g.addEdge(p3, p2, 20);
62  g.addEdge(p4, p1, 5);
63 
64  auto paths = g.shortestPathsAndCosts();
65 
66  EXPECT_EQ(paths.size(), 4);
67  for (auto& path : paths) {
68  EXPECT_EQ(path.size(), 4);
69  }
70  EXPECT_EQ(paths[0][1].first.size(), 2);
71  EXPECT_EQ(paths[0][1].second, 6);
72  EXPECT_EQ(paths[0][3].first.size(), 3);
73 
74  EXPECT_EQ(paths[0][3].second, 3);
75 
76  for (int i = 0; i < paths.size(); ++i) {
77  EXPECT_EQ(paths[i][i].first.size(), 0);
78  EXPECT_EQ(paths[i][i].second, 0);
79  }
80  for (int i = 0; i < paths.size(); ++i) {
81  for (int j = 0; j < paths[i].size(); ++j) {
82  if (i != j) {
83  EXPECT_GT(paths[i][j].first.size(), 0);
84  EXPECT_EQ(paths[i][j].first[0], i);
85  EXPECT_EQ(paths[i][j].first.back(), j);
86  }
87  }
88  }
89 
90  size_t p_far1 {4}, p_far2 {5};
91  g.addEdge(p_far1, p_far2, 3);
92  paths = g.shortestPathsAndCosts();
93  EXPECT_EQ(paths.size(), 6);
94  for (auto& path : paths) {
95  EXPECT_EQ(path.size(), 6);
96  }
97  EXPECT_EQ(paths[5][4].second, 3);
98  EXPECT_GT(paths[0][5].second, 1e5);
99  EXPECT_GT(paths[5][0].second, 1e5);
100  EXPECT_GT(paths[0][4].second, 1e5);
101  EXPECT_GT(paths[4][0].second, 1e5);
102 }
103 
104 
1_basic_types.p1
p1
Definition: 1_basic_types.py:11
2_objective_functions.path
path
Definition: 2_objective_functions.py:88
1_basic_types.p3
p3
Definition: 1_basic_types.py:22
f2c::types::Graph::shortestPathsAndCosts
std::vector< std::vector< pair_vec_size__int > > shortestPathsAndCosts(int64_t INF=1e15)
Definition: Graph.cpp:101
1_basic_types.p4
p4
Definition: 1_basic_types.py:28
1_basic_types.p2
p2
Definition: 1_basic_types.py:15
f2c::types::Graph::addDirectedEdge
Graph & addDirectedEdge(size_t from, size_t to, int64_t cost)
Definition: Graph.cpp:13
f2c::types::Graph::allPathsBetween
std::vector< std::vector< size_t > > allPathsBetween(size_t from, size_t to) const
Definition: Graph.cpp:68
8_complete_flow.ps
list ps
Definition: 8_complete_flow.py:43
f2c::types::Graph
Definition: Graph.h:23
Graph.h
f2c::types::Graph::numNodes
size_t numNodes() const
Definition: Graph.cpp:37
f2c::types::Graph::addEdge
Graph & addEdge(size_t i, size_t j, int64_t cost)
Definition: Graph.cpp:21
f2c::types::Graph::numEdges
size_t numEdges() const
Definition: Graph.cpp:41
TEST
TEST(fields2cover_types_graph, addEdges)
Definition: Graph_test.cpp:10


fields2cover
Author(s):
autogenerated on Fri Apr 25 2025 02:18:31