@@ -58,75 +58,72 @@ TEST_CASE_FIXTURE(
5858 CHECK_EQ (storage (sut).size (), constants::n_hyperedges - 1uz);
5959}
6060
61- TEST_CASE_FIXTURE (test_undirected_hyperedge_list, " hyperedge_size should return 0 by default" ) {
61+ TEST_CASE_FIXTURE (
62+ test_undirected_hyperedge_list, " incident_vertices should remove an empty view by default"
63+ ) {
6264 sut_type sut{constants::n_vertices, constants::n_hyperedges};
6365 CHECK (std::ranges::all_of (constants::hyperedge_ids_view, [&sut](const auto hyperedge_id) {
64- return sut.hyperedge_size (hyperedge_id) == 0uz ;
66+ return std::ranges::empty ( sut.incident_vertices (hyperedge_id)) ;
6567 }));
6668}
6769
68- TEST_CASE_FIXTURE (
69- test_undirected_hyperedge_list, " hyperedge_vertices should remove an empty view by default"
70- ) {
70+ TEST_CASE_FIXTURE (test_undirected_hyperedge_list, " hyperedge_size should return 0 by default" ) {
7171 sut_type sut{constants::n_vertices, constants::n_hyperedges};
7272 CHECK (std::ranges::all_of (constants::hyperedge_ids_view, [&sut](const auto hyperedge_id) {
73- return std::ranges::empty ( sut.hyperedge_vertices (hyperedge_id)) ;
73+ return sut.hyperedge_size (hyperedge_id) == 0uz ;
7474 }));
7575}
7676
7777TEST_CASE_FIXTURE (
7878 test_undirected_hyperedge_list,
79- " bind(hyperedge, vertex) should add the vertex to the given hyperedge's storage only if the "
80- " they are not bound"
79+ " bind should add the vertex to the given hyperedge's storage only if the they are not bound"
8180) {
8281 sut_type sut{constants::n_vertices, constants::n_hyperedges};
83- REQUIRE (std::ranges::empty (sut.hyperedge_vertices (constants::id1)));
82+ REQUIRE (std::ranges::empty (sut.incident_vertices (constants::id1)));
8483
8584 sut.bind (constants::id1, constants::id1);
86- const auto vertices1 = sut.hyperedge_vertices (constants::id1) | std::ranges::to<std::vector>();
85+ const auto vertices1 = sut.incident_vertices (constants::id1) | std::ranges::to<std::vector>();
8786 CHECK_EQ (sut.hyperedge_size (constants::id1), 1uz);
8887 CHECK_EQ (std::ranges::size (vertices1), 1uz);
8988 CHECK (std::ranges::contains (vertices1, constants::id1));
9089 CHECK (std::ranges::equal (vertices1, storage (sut)[constants::id1]));
9190
9291 sut.bind (constants::id1, constants::id1);
93- const auto vertices2 = sut.hyperedge_vertices (constants::id1) | std::ranges::to<std::vector>();
92+ const auto vertices2 = sut.incident_vertices (constants::id1) | std::ranges::to<std::vector>();
9493 CHECK_EQ (std::ranges::size (vertices2), 1uz);
9594 CHECK (std::ranges::equal (vertices2, vertices1));
9695}
9796
9897TEST_CASE_FIXTURE (
9998 test_undirected_hyperedge_list,
100- " unbind(hyperedge, vertex) should remove the vertex from the given hyperedge's storage only if "
101- " the they are bound"
99+ " unbind should remove the vertex from the given hyperedge's storage only if the they are bound"
102100) {
103101 sut_type sut{constants::n_vertices, constants::n_hyperedges};
104- REQUIRE (std::ranges::empty (sut.hyperedge_vertices (constants::id1)));
102+ REQUIRE (std::ranges::empty (sut.incident_vertices (constants::id1)));
105103
106104 sut.bind (constants::id1, constants::id1);
107- const auto vertices1 = sut.hyperedge_vertices (constants::id1) | std::ranges::to<std::vector>();
105+ const auto vertices1 = sut.incident_vertices (constants::id1) | std::ranges::to<std::vector>();
108106 REQUIRE_EQ (sut.hyperedge_size (constants::id1), 1uz);
109107 REQUIRE (std::ranges::contains (vertices1, constants::id1));
110108
111109 sut.unbind (constants::id1, constants::id2);
112- const auto vertices2 = sut.hyperedge_vertices (constants::id1) | std::ranges::to<std::vector>();
110+ const auto vertices2 = sut.incident_vertices (constants::id1) | std::ranges::to<std::vector>();
113111 REQUIRE_EQ (std::ranges::size (vertices2), 1uz);
114112 REQUIRE (std::ranges::equal (vertices2, vertices1));
115113
116114 sut.unbind (constants::id1, constants::id1);
117- CHECK (std::ranges::empty (sut.hyperedge_vertices (constants::id1)));
115+ CHECK (std::ranges::empty (sut.incident_vertices (constants::id1)));
118116}
119117
120118TEST_CASE_FIXTURE (
121119 test_undirected_hyperedge_list,
122- " are_bound(hyperedge, vertex) should return true only when the given vertex is present in the "
123- " hyperedge's storage"
120+ " are_bound should return true only when the given vertex is present in the hyperedge's storage"
124121) {
125122 sut_type sut{constants::n_vertices, constants::n_hyperedges};
126- REQUIRE (std::ranges::empty (sut.hyperedge_vertices (constants::id1)));
123+ REQUIRE (std::ranges::empty (sut.incident_vertices (constants::id1)));
127124
128125 sut.bind (constants::id1, constants::id1);
129- const auto vertices1 = sut.hyperedge_vertices (constants::id1) | std::ranges::to<std::vector>();
126+ const auto vertices1 = sut.incident_vertices (constants::id1) | std::ranges::to<std::vector>();
130127 REQUIRE_EQ (sut.hyperedge_size (constants::id1), 1uz);
131128 REQUIRE (std::ranges::contains (vertices1, constants::id1));
132129
@@ -135,6 +132,12 @@ TEST_CASE_FIXTURE(
135132 CHECK_FALSE (sut.are_bound (constants::id2, constants::id1));
136133}
137134
135+ TEST_CASE_FIXTURE (test_undirected_hyperedge_list, " add_vertices should do nothing" ) {
136+ sut_type sut{};
137+ sut.add_vertices (constants::n_vertices);
138+ CHECK (storage (sut).empty ());
139+ }
140+
138141TEST_CASE_FIXTURE (
139142 test_undirected_hyperedge_list,
140143 " remove_vertex should unbind the given vertex from all hyperedges"
@@ -148,10 +151,38 @@ TEST_CASE_FIXTURE(
148151
149152 sut.remove_vertex (constants::id1);
150153 CHECK (std::ranges::all_of (constants::hyperedge_ids_view, [&sut](const auto hyperedge_id) {
151- return std::ranges::empty (sut.hyperedge_vertices (hyperedge_id));
154+ return std::ranges::empty (sut.incident_vertices (hyperedge_id));
152155 }));
153156}
154157
158+ TEST_CASE_FIXTURE (
159+ test_undirected_hyperedge_list,
160+ " incident_hyperedges should return a view of the vertex's incident hyperedge ids"
161+ ) {
162+ sut_type sut{constants::n_vertices, constants::n_hyperedges};
163+
164+ constexpr auto vertex_id = constants::id1;
165+ REQUIRE (std::ranges::empty (sut.incident_hyperedges (vertex_id)));
166+
167+ for (const auto hyperedge_id : constants::hyperedge_ids_view)
168+ sut.bind (hyperedge_id, vertex_id);
169+ CHECK (std::ranges::equal (sut.incident_hyperedges (vertex_id), constants::hyperedge_ids_view));
170+ }
171+
172+ TEST_CASE_FIXTURE (
173+ test_undirected_hyperedge_list,
174+ " degree should return the number of the vertex's incident hyperedges"
175+ ) {
176+ sut_type sut{constants::n_vertices, constants::n_hyperedges};
177+
178+ constexpr auto vertex_id = constants::id1;
179+ REQUIRE_EQ (sut.degree (vertex_id), 0uz);
180+
181+ for (const auto hyperedge_id : constants::hyperedge_ids_view)
182+ sut.bind (hyperedge_id, vertex_id);
183+ CHECK_EQ (sut.degree (vertex_id), constants::n_hyperedges);
184+ }
185+
155186TEST_SUITE_END (); // test_hyperedge_list
156187
157188} // namespace hgl_testing
0 commit comments