Skip to content

Commit a986fb9

Browse files
committed
Add comparison function to linestring_t simplifying tests
1 parent 241068c commit a986fb9

File tree

2 files changed

+56
-73
lines changed

2 files changed

+56
-73
lines changed

src/geom.hpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,15 @@ class linestring_t
9393
return m_coordinates[n];
9494
}
9595

96+
friend bool operator==(linestring_t const &a,
97+
linestring_t const &b) noexcept
98+
{
99+
if (a.size() != b.size()) {
100+
return false;
101+
}
102+
return std::equal(a.cbegin(), a.cend(), b.cbegin());
103+
}
104+
96105
private:
97106
std::vector<osmium::geom::Coordinates> m_coordinates;
98107

tests/test-geom.cpp

Lines changed: 47 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111

1212
#include "geom.hpp"
1313

14+
#include <array>
15+
1416
using Coordinates = osmium::geom::Coordinates;
1517

1618
TEST_CASE("geom::distance", "[NoDB]")
@@ -72,136 +74,108 @@ TEST_CASE("geom::split_linestring w/o split", "[NoDB]")
7274
geom::split_linestring(line, 10.0, &result);
7375

7476
REQUIRE(result.size() == 1);
75-
76-
REQUIRE(result[0].size() == 3);
77-
REQUIRE(result[0][0] == Coordinates{0, 0});
78-
REQUIRE(result[0][1] == Coordinates{1, 2});
79-
REQUIRE(result[0][2] == Coordinates{2, 2});
77+
REQUIRE(result[0] == line);
8078
}
8179

8280
TEST_CASE("geom::split_linestring with split 0.5", "[NoDB]")
8381
{
8482
geom::linestring_t const line{Coordinates{0, 0}, Coordinates{1, 0}};
8583

84+
std::array<geom::linestring_t, 2> const expected{
85+
geom::linestring_t{Coordinates{0, 0}, Coordinates{0.5, 0}},
86+
geom::linestring_t{Coordinates{0.5, 0}, Coordinates{1, 0}}};
87+
8688
std::vector<geom::linestring_t> result;
8789

8890
geom::split_linestring(line, 0.5, &result);
8991

9092
REQUIRE(result.size() == 2);
91-
92-
REQUIRE(result[0].size() == 2);
93-
REQUIRE(result[0][0] == Coordinates{0, 0});
94-
REQUIRE(result[0][1] == Coordinates{0.5, 0});
95-
96-
REQUIRE(result[1].size() == 2);
97-
REQUIRE(result[1][0] == Coordinates{0.5, 0});
98-
REQUIRE(result[1][1] == Coordinates{1, 0});
93+
REQUIRE(result[0] == expected[0]);
94+
REQUIRE(result[1] == expected[1]);
9995
}
10096

10197
TEST_CASE("geom::split_linestring with split 0.4", "[NoDB]")
10298
{
10399
geom::linestring_t const line{Coordinates{0, 0}, Coordinates{1, 0}};
104100

101+
std::array<geom::linestring_t, 3> const expected{
102+
geom::linestring_t{Coordinates{0, 0}, Coordinates{0.4, 0}},
103+
geom::linestring_t{Coordinates{0.4, 0}, Coordinates{0.8, 0}},
104+
geom::linestring_t{Coordinates{0.8, 0}, Coordinates{1, 0}}};
105+
105106
std::vector<geom::linestring_t> result;
106107

107108
geom::split_linestring(line, 0.4, &result);
108109

109110
REQUIRE(result.size() == 3);
110-
111-
REQUIRE(result[0].size() == 2);
112-
REQUIRE(result[0][0] == Coordinates{0, 0});
113-
REQUIRE(result[0][1] == Coordinates{0.4, 0});
114-
115-
REQUIRE(result[1].size() == 2);
116-
REQUIRE(result[1][0] == Coordinates{0.4, 0});
117-
REQUIRE(result[1][1] == Coordinates{0.8, 0});
118-
119-
REQUIRE(result[2].size() == 2);
120-
REQUIRE(result[2][0] == Coordinates{0.8, 0});
121-
REQUIRE(result[2][1] == Coordinates{1, 0});
111+
REQUIRE(result[0] == expected[0]);
112+
REQUIRE(result[1] == expected[1]);
113+
REQUIRE(result[2] == expected[2]);
122114
}
123115

124116
TEST_CASE("geom::split_linestring with split 1.0 at start", "[NoDB]")
125117
{
126118
geom::linestring_t const line{Coordinates{0, 0}, Coordinates{2, 0},
127119
Coordinates{3, 0}, Coordinates{4, 0}};
128120

121+
std::array<geom::linestring_t, 4> const expected{
122+
geom::linestring_t{Coordinates{0, 0}, Coordinates{1, 0}},
123+
geom::linestring_t{Coordinates{1, 0}, Coordinates{2, 0}},
124+
geom::linestring_t{Coordinates{2, 0}, Coordinates{3, 0}},
125+
geom::linestring_t{Coordinates{3, 0}, Coordinates{4, 0}}};
126+
129127
std::vector<geom::linestring_t> result;
130128

131129
geom::split_linestring(line, 1.0, &result);
132130

133131
REQUIRE(result.size() == 4);
134-
135-
REQUIRE(result[0].size() == 2);
136-
REQUIRE(result[0][0] == Coordinates{0, 0});
137-
REQUIRE(result[0][1] == Coordinates{1, 0});
138-
139-
REQUIRE(result[1].size() == 2);
140-
REQUIRE(result[1][0] == Coordinates{1, 0});
141-
REQUIRE(result[1][1] == Coordinates{2, 0});
142-
143-
REQUIRE(result[2].size() == 2);
144-
REQUIRE(result[2][0] == Coordinates{2, 0});
145-
REQUIRE(result[2][1] == Coordinates{3, 0});
146-
147-
REQUIRE(result[3].size() == 2);
148-
REQUIRE(result[3][0] == Coordinates{3, 0});
149-
REQUIRE(result[3][1] == Coordinates{4, 0});
132+
REQUIRE(result[0] == expected[0]);
133+
REQUIRE(result[1] == expected[1]);
134+
REQUIRE(result[2] == expected[2]);
135+
REQUIRE(result[3] == expected[3]);
150136
}
151137

152138
TEST_CASE("geom::split_linestring with split 1.0 in middle", "[NoDB]")
153139
{
154140
geom::linestring_t const line{Coordinates{0, 0}, Coordinates{1, 0},
155141
Coordinates{3, 0}, Coordinates{4, 0}};
156142

143+
std::array<geom::linestring_t, 4> const expected{
144+
geom::linestring_t{Coordinates{0, 0}, Coordinates{1, 0}},
145+
geom::linestring_t{Coordinates{1, 0}, Coordinates{2, 0}},
146+
geom::linestring_t{Coordinates{2, 0}, Coordinates{3, 0}},
147+
geom::linestring_t{Coordinates{3, 0}, Coordinates{4, 0}}};
148+
157149
std::vector<geom::linestring_t> result;
158150

159151
geom::split_linestring(line, 1.0, &result);
160152

161153
REQUIRE(result.size() == 4);
162-
163-
REQUIRE(result[0].size() == 2);
164-
REQUIRE(result[0][0] == Coordinates{0, 0});
165-
REQUIRE(result[0][1] == Coordinates{1, 0});
166-
167-
REQUIRE(result[1].size() == 2);
168-
REQUIRE(result[1][0] == Coordinates{1, 0});
169-
REQUIRE(result[1][1] == Coordinates{2, 0});
170-
171-
REQUIRE(result[2].size() == 2);
172-
REQUIRE(result[2][0] == Coordinates{2, 0});
173-
REQUIRE(result[2][1] == Coordinates{3, 0});
174-
175-
REQUIRE(result[3].size() == 2);
176-
REQUIRE(result[3][0] == Coordinates{3, 0});
177-
REQUIRE(result[3][1] == Coordinates{4, 0});
154+
REQUIRE(result[0] == expected[0]);
155+
REQUIRE(result[1] == expected[1]);
156+
REQUIRE(result[2] == expected[2]);
157+
REQUIRE(result[3] == expected[3]);
178158
}
179159

180160
TEST_CASE("geom::split_linestring with split 1.0 at end", "[NoDB]")
181161
{
182162
geom::linestring_t const line{Coordinates{0, 0}, Coordinates{1, 0},
183163
Coordinates{2, 0}, Coordinates{4, 0}};
184164

165+
std::array<geom::linestring_t, 4> const expected{
166+
geom::linestring_t{Coordinates{0, 0}, Coordinates{1, 0}},
167+
geom::linestring_t{Coordinates{1, 0}, Coordinates{2, 0}},
168+
geom::linestring_t{Coordinates{2, 0}, Coordinates{3, 0}},
169+
geom::linestring_t{Coordinates{3, 0}, Coordinates{4, 0}}};
170+
185171
std::vector<geom::linestring_t> result;
186172

187173
geom::split_linestring(line, 1.0, &result);
188174

189175
REQUIRE(result.size() == 4);
190-
191-
REQUIRE(result[0].size() == 2);
192-
REQUIRE(result[0][0] == Coordinates{0, 0});
193-
REQUIRE(result[0][1] == Coordinates{1, 0});
194-
195-
REQUIRE(result[1].size() == 2);
196-
REQUIRE(result[1][0] == Coordinates{1, 0});
197-
REQUIRE(result[1][1] == Coordinates{2, 0});
198-
199-
REQUIRE(result[2].size() == 2);
200-
REQUIRE(result[2][0] == Coordinates{2, 0});
201-
REQUIRE(result[2][1] == Coordinates{3, 0});
202-
203-
REQUIRE(result[3].size() == 2);
204-
REQUIRE(result[3][0] == Coordinates{3, 0});
205-
REQUIRE(result[3][1] == Coordinates{4, 0});
176+
REQUIRE(result[0] == expected[0]);
177+
REQUIRE(result[1] == expected[1]);
178+
REQUIRE(result[2] == expected[2]);
179+
REQUIRE(result[3] == expected[3]);
206180
}
207181

0 commit comments

Comments
 (0)