28 TEST_CASE(
"MAVSubnet's are comparable.",
"[MAVSubnet]")
75 TEST_CASE(
"MAVSubnet's can be constructed from a MAVLink address " 76 "and a numeric mask.",
"[MAVSubnet]")
84 SECTION(
"And ensures the mask is within range (0x0000 - 0xFFFF).")
88 static_cast<unsigned int>(0x0000 - 1)),
96 TEST_CASE(
"MAVSubnet's can be constructed from a MAVLink address, " 97 "system mask, and component mask.",
"[MAVSubnet]")
111 SECTION(
"And ensures the system and component masks are within range " 117 MAVSubnet(addr, static_cast<unsigned int>(-1), 0),
120 MAVSubnet(addr, 0, static_cast<unsigned int>(-1)),
124 static_cast<unsigned int>(-1),
125 static_cast<unsigned int>(-1)),
127 REQUIRE_THROWS_AS(
MAVSubnet(addr, 256, 255), std::out_of_range);
128 REQUIRE_THROWS_AS(
MAVSubnet(addr, 255, 256), std::out_of_range);
129 REQUIRE_THROWS_AS(
MAVSubnet(addr, 256, 256), std::out_of_range);
133 "System mask (0x100) is outside of the allowed range " 137 "Component mask (0x100) is outside of the allowed range " 143 TEST_CASE(
"MAVSubnet's can be constructed from strings.",
"[MAVSubnet]")
146 SECTION(
"Using no mask (exact address).")
150 SECTION(
"Using long notation.")
158 SECTION(
"Using forward slash notation.")
178 SECTION(
"Using backslash notation.")
190 SECTION(
"And ensures the subnet string is valid.")
193 REQUIRE_THROWS_AS(
MAVSubnet(
"255.16 255.256"), std::invalid_argument);
194 REQUIRE_THROWS_AS(
MAVSubnet(
"255.16-256.255"), std::invalid_argument);
195 REQUIRE_THROWS_AS(
MAVSubnet(
"255.16+256.255"), std::invalid_argument);
196 REQUIRE_THROWS_AS(
MAVSubnet(
"255.16:1"), std::invalid_argument);
197 REQUIRE_THROWS_AS(
MAVSubnet(
"255.16:1."), std::invalid_argument);
198 REQUIRE_THROWS_AS(
MAVSubnet(
"255.16:1.2."), std::invalid_argument);
199 REQUIRE_THROWS_AS(
MAVSubnet(
"255.16:1.2.3"), std::invalid_argument);
200 REQUIRE_THROWS_AS(
MAVSubnet(
"255.16:a.2.3"), std::invalid_argument);
201 REQUIRE_THROWS_AS(
MAVSubnet(
"255.16:1.b.3"), std::invalid_argument);
202 REQUIRE_THROWS_AS(
MAVSubnet(
"255.16:1.2.c"), std::invalid_argument);
203 REQUIRE_THROWS_AS(
MAVSubnet(
"255.16:+1.0"), std::invalid_argument);
204 REQUIRE_THROWS_AS(
MAVSubnet(
"255.16:0.+1"), std::invalid_argument);
205 REQUIRE_THROWS_AS(
MAVSubnet(
"255.16:-1.0"), std::invalid_argument);
206 REQUIRE_THROWS_AS(
MAVSubnet(
"255.16:0.-1"), std::invalid_argument);
210 "Invalid MAVLink subnet: \"255.16 255.256\".");
213 "Invalid MAVLink subnet: \"255.16-256.255\".");
216 "Invalid MAVLink subnet: \"255.16+256.255\".");
218 MAVSubnet(
"255.16:1"),
"Invalid MAVLink subnet: \"255.16:1\".");
220 MAVSubnet(
"255.16:1."),
"Invalid MAVLink subnet: \"255.16:1.\".");
223 "Invalid MAVLink subnet: \"255.16:1.2.\".");
226 "Invalid MAVLink subnet: \"255.16:1.2.3\".");
229 "Invalid MAVLink subnet: \"255.16:a.2.3\".");
232 "Invalid MAVLink subnet: \"255.16:1.b.3\".");
235 "Invalid MAVLink subnet: \"255.16:1.2.c\".");
238 "Invalid MAVLink subnet: \"255.16:+1.0\".");
241 "Invalid MAVLink subnet: \"255.16:0.+1\".");
244 "Invalid MAVLink subnet: \"255.16:-1.0\".");
247 "Invalid MAVLink subnet: \"255.16:0.-1\".");
249 SECTION(
"And ensures mask is within range.")
252 REQUIRE_THROWS_AS(
MAVSubnet(
"255.16:256.255"), std::out_of_range);
253 REQUIRE_THROWS_AS(
MAVSubnet(
"255.16:255.256"), std::out_of_range);
257 "System ID (256) is outside of the allowed range (0 - 255).");
260 "Component ID (256) is outside of the allowed range (0 - 255).");
262 SECTION(
"And ensures forward slash mask is within range.")
265 REQUIRE_THROWS_AS(
MAVSubnet(
"255.16/-1"), std::out_of_range);
266 REQUIRE_THROWS_AS(
MAVSubnet(
"255.16/17"), std::out_of_range);
270 "Forward slash mask (17) is outside of allowed range (0 - 16).");
272 SECTION(
"And ensures backslash mask is within range.")
275 REQUIRE_THROWS_AS(
MAVSubnet(
"255.16/-1"), std::out_of_range);
276 REQUIRE_THROWS_AS(
MAVSubnet(
"255.16\\-1"), std::out_of_range);
280 "Backslash mask (9) is outside of allowed range (0 - 8).");
291 REQUIRE(&
subnet_a != &subnet_a_copy);
293 REQUIRE(&
subnet_b != &subnet_b_copy);
319 TEST_CASE(
"MAVSubnet's are assignable (by move semantics).",
"[MAVSubnet]")
332 REQUIRE(
str(
MAVSubnet(addr, 123, 234)) ==
"255.16:123.234");
333 REQUIRE(
str(
MAVSubnet(addr, 128, 240)) ==
"255.16:128.240");
334 REQUIRE(
str(
MAVSubnet(addr, 0b0000000000000000)) ==
"255.16/0");
335 REQUIRE(
str(
MAVSubnet(addr, 0b1000000000000000)) ==
"255.16/1");
336 REQUIRE(
str(
MAVSubnet(addr, 0b1100000000000000)) ==
"255.16/2");
337 REQUIRE(
str(
MAVSubnet(addr, 0b1110000000000000)) ==
"255.16/3");
338 REQUIRE(
str(
MAVSubnet(addr, 0b1111000000000000)) ==
"255.16/4");
339 REQUIRE(
str(
MAVSubnet(addr, 0b1111100000000000)) ==
"255.16/5");
340 REQUIRE(
str(
MAVSubnet(addr, 0b1111110000000000)) ==
"255.16/6");
341 REQUIRE(
str(
MAVSubnet(addr, 0b1111111000000000)) ==
"255.16/7");
342 REQUIRE(
str(
MAVSubnet(addr, 0b1111111100000000)) ==
"255.16/8");
343 REQUIRE(
str(
MAVSubnet(addr, 0b1111111110000000)) ==
"255.16/9");
344 REQUIRE(
str(
MAVSubnet(addr, 0b1111111111000000)) ==
"255.16/10");
345 REQUIRE(
str(
MAVSubnet(addr, 0b1111111111100000)) ==
"255.16/11");
346 REQUIRE(
str(
MAVSubnet(addr, 0b1111111111110000)) ==
"255.16/12");
347 REQUIRE(
str(
MAVSubnet(addr, 0b1111111111111000)) ==
"255.16/13");
348 REQUIRE(
str(
MAVSubnet(addr, 0b1111111111111100)) ==
"255.16/14");
349 REQUIRE(
str(
MAVSubnet(addr, 0b1111111111111110)) ==
"255.16/15");
350 REQUIRE(
str(
MAVSubnet(addr, 0b1111111111111111)) ==
"255.16");
351 REQUIRE(
str(
MAVSubnet(addr, 0b0000000010000000)) ==
"255.16\\1");
352 REQUIRE(
str(
MAVSubnet(addr, 0b0000000011000000)) ==
"255.16\\2");
353 REQUIRE(
str(
MAVSubnet(addr, 0b0000000011100000)) ==
"255.16\\3");
354 REQUIRE(
str(
MAVSubnet(addr, 0b0000000011110000)) ==
"255.16\\4");
355 REQUIRE(
str(
MAVSubnet(addr, 0b0000000011111000)) ==
"255.16\\5");
356 REQUIRE(
str(
MAVSubnet(addr, 0b0000000011111100)) ==
"255.16\\6");
357 REQUIRE(
str(
MAVSubnet(addr, 0b0000000011111110)) ==
"255.16\\7");
358 REQUIRE(
str(
MAVSubnet(addr, 0b0000000011111111)) ==
"255.16\\8");
362 TEST_CASE(
"The 'contains' method determines if a MAVLink address " 371 SECTION(
"With subnet 192.0/14")
386 SECTION(
"With subnet 192.0\\6")
std::string str(const T &object)
TEST_CASE("MAVSubnet's are comparable.", "[MAVSubnet]")
MAVSubnet subnet_b(MAVAddress(0xFFFF), 255, 255)
bool contains(const MAVAddress &address) const