Graph2D_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>
8 #include "fields2cover/types.h"
9 
10 TEST(fields2cover_types_graph2d, addEdges) {
11  F2CPoint p1 {1, -1}, p2 {2, -2}, p3 {-3, 3}, p4 {5, 5};
12  F2CGraph2D g;
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_graph2d, allPathsBetween) {
24  F2CPoint p1 {1, -1}, p2 {2, -2}, p3 {-3, 3}, p4 {5, 5};
25  std::vector<F2CPoint> ps {p1, p2, p3, p4};
26 
27  F2CGraph2D g;
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_graph2d, shortestPaths) {
54  F2CPoint p1 {1, -1}, p2 {2, -2}, p3 {-3, 3}, p4 {5, 5};
55  std::vector<F2CPoint> ps {p1, p2, p3, p4};
56 
57  F2CGraph2D g;
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  F2CPoint p_far1 {10, 10}, p_far2 {11, 12};
91  g.addEdge(p_far1, p_far2);
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, 2236);
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 
f2c::types::Graph2D
Definition: Graph2D.h:18
f2c::types::Graph2D::addEdge
Graph2D & addEdge(const Point &i, const Point &j, int64_t cost)
Definition: Graph2D.cpp:23
1_basic_types.p1
p1
Definition: 1_basic_types.py:11
types.h
2_objective_functions.path
path
Definition: 2_objective_functions.py:88
1_basic_types.p3
p3
Definition: 1_basic_types.py:22
TEST
TEST(fields2cover_types_graph2d, addEdges)
Definition: Graph2D_test.cpp:10
f2c::types::Graph2D::numNodes
size_t numNodes() const
Definition: Graph2D.cpp:57
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::Graph2D::addDirectedEdge
Graph2D & addDirectedEdge(const Point &from, const Point &to, int64_t cost)
Definition: Graph2D.cpp:12
8_complete_flow.ps
list ps
Definition: 8_complete_flow.py:43
f2c::types::Point
Definition: Point.h:21
f2c::types::Graph::numEdges
size_t numEdges() const
Definition: Graph.cpp:41
f2c::types::Graph2D::allPathsBetween
std::vector< std::vector< Point > > allPathsBetween(const Point &from, const Point &to) const
Definition: Graph2D.cpp:77


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