Skip to content

Commit c7053d5

Browse files
committed
new vertex getters tests (graph)
1 parent 14b9a1d commit c7053d5

1 file changed

Lines changed: 65 additions & 0 deletions

File tree

tests/source/gl/test_graph.cpp

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include "testing/gl/functional.hpp"
44
#include "testing/gl/types.hpp"
55

6+
#include <gl/attributes/diagnostics.hpp>
67
#include <gl/directional_tags.hpp>
78
#include <gl/graph.hpp>
89
#include <gl/graph_traits.hpp>
@@ -329,6 +330,70 @@ TEST_CASE_TEMPLATE_DEFINE("common graph structure tests", TraitsType, common_gra
329330
CHECK(std::ranges::equal(sut.vertex_ids(), constants::vertex_id_view));
330331
}
331332

333+
GL_SUPPRESS_WARNING_BEGIN("-Warray-bounds");
334+
SUBCASE("neighbor/predecessor/successor_ids should throw out_of_range if vertex does not exist"
335+
) {
336+
sut_type sut{};
337+
CHECK_THROWS_AS(
338+
discard_result(sut.neighbor_ids(constants::out_of_rng_idx)), std::out_of_range
339+
);
340+
CHECK_THROWS_AS(
341+
discard_result(sut.predecessor_ids(constants::out_of_rng_idx)), std::out_of_range
342+
);
343+
CHECK_THROWS_AS(
344+
discard_result(sut.successor_ids(constants::out_of_rng_idx)), std::out_of_range
345+
);
346+
}
347+
GL_SUPPRESS_WARNING_END;
348+
349+
SUBCASE("neighbor/predecessor/successor_ids should return valid ranges of ids") {
350+
sut_type sut{constants::n_elements};
351+
sut.add_edge(constants::v1_id, constants::v2_id);
352+
sut.add_edge(constants::v3_id, constants::v1_id);
353+
354+
CHECK_FALSE(std::ranges::empty(sut.neighbor_ids(constants::v1_id)));
355+
CHECK_FALSE(std::ranges::empty(sut.predecessor_ids(constants::v1_id)));
356+
CHECK_FALSE(std::ranges::empty(sut.successor_ids(constants::v1_id)));
357+
}
358+
359+
GL_SUPPRESS_WARNING_BEGIN("-Warray-bounds");
360+
SUBCASE("neighbors/predecessors/successors should throw out_of_range if vertex does not exist"
361+
) {
362+
sut_type sut{};
363+
CHECK_THROWS_AS(
364+
discard_result(sut.neighbors(constants::out_of_rng_idx)), std::out_of_range
365+
);
366+
CHECK_THROWS_AS(
367+
discard_result(sut.predecessors(constants::out_of_rng_idx)), std::out_of_range
368+
);
369+
CHECK_THROWS_AS(
370+
discard_result(sut.successors(constants::out_of_rng_idx)), std::out_of_range
371+
);
372+
}
373+
GL_SUPPRESS_WARNING_END;
374+
375+
SUBCASE("neighbor/predecessors/successors should return valid ranges of vertex descriptors") {
376+
sut_type sut{constants::n_elements};
377+
sut.add_edge(constants::v1_id, constants::v2_id);
378+
sut.add_edge(constants::v3_id, constants::v1_id);
379+
380+
const auto neighbors = sut.neighbors(constants::v1_id) | std::ranges::to<std::vector>();
381+
const auto predecessors =
382+
sut.predecessors(constants::v1_id) | std::ranges::to<std::vector>();
383+
const auto successors = sut.successors(constants::v1_id) | std::ranges::to<std::vector>();
384+
385+
CHECK_FALSE(neighbors.empty());
386+
CHECK_FALSE(predecessors.empty());
387+
CHECK_FALSE(successors.empty());
388+
389+
for (const auto& v : neighbors)
390+
CHECK(v.is_valid());
391+
for (const auto& v : predecessors)
392+
CHECK(v.is_valid());
393+
for (const auto& v : successors)
394+
CHECK(v.is_valid());
395+
}
396+
332397
SUBCASE("has_vertex(id) should return true when a vertex with the given id is present in "
333398
"the graph") {
334399
sut_type sut{constants::n_elements};

0 commit comments

Comments
 (0)