comparison tests/util/main.cpp @ 114:8cbbce7b4327

Irccd: add util::toNumber function, #489
author David Demelier <markand@malikania.fr>
date Thu, 28 Apr 2016 19:39:51 +0200
parents 1125d90b3b44
children 2a63c8ec45cd
comparison
equal deleted inserted replaced
113:6a99814c2317 114:8cbbce7b4327
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 */ 17 */
18 18
19 #include <cstdint>
20
19 #include <gtest/gtest.h> 21 #include <gtest/gtest.h>
20 22
21 #include <irccd/util.hpp> 23 #include <irccd/util.hpp>
22 #include <irccd/system.hpp> 24 #include <irccd/system.hpp>
23 25
315 { 317 {
316 ASSERT_FALSE(util::isNumber("lol")); 318 ASSERT_FALSE(util::isNumber("lol"));
317 ASSERT_FALSE(util::isNumber("this is not a number")); 319 ASSERT_FALSE(util::isNumber("this is not a number"));
318 } 320 }
319 321
322 /*
323 * util::toNumber function
324 * ------------------------------------------------------------------
325 */
326
327 TEST(ToNumber, correct)
328 {
329 /* unsigned */
330 ASSERT_EQ(50u, util::toNumber<std::uint8_t>("50"));
331 ASSERT_EQ(5000u, util::toNumber<std::uint16_t>("5000"));
332 ASSERT_EQ(50000u, util::toNumber<std::uint32_t>("50000"));
333 ASSERT_EQ(500000u, util::toNumber<std::uint64_t>("500000"));
334
335 /* signed */
336 ASSERT_EQ(-50, util::toNumber<std::int8_t>("-50"));
337 ASSERT_EQ(-500, util::toNumber<std::int16_t>("-500"));
338 ASSERT_EQ(-5000, util::toNumber<std::int32_t>("-5000"));
339 ASSERT_EQ(-50000, util::toNumber<std::int64_t>("-50000"));
340 }
341
342 TEST(ToNumber, incorrect)
343 {
344 /* unsigned */
345 ASSERT_THROW(util::toNumber<std::uint8_t>("300"), std::out_of_range);
346 ASSERT_THROW(util::toNumber<std::uint16_t>("80000"), std::out_of_range);
347 ASSERT_THROW(util::toNumber<std::uint8_t>("-125"), std::out_of_range);
348 ASSERT_THROW(util::toNumber<std::uint16_t>("-25000"), std::out_of_range);
349
350 /* signed */
351 ASSERT_THROW(util::toNumber<std::int8_t>("300"), std::out_of_range);
352 ASSERT_THROW(util::toNumber<std::int16_t>("80000"), std::out_of_range);
353 ASSERT_THROW(util::toNumber<std::int8_t>("-300"), std::out_of_range);
354 ASSERT_THROW(util::toNumber<std::int16_t>("-80000"), std::out_of_range);
355
356 /* not numbers */
357 ASSERT_THROW(util::toNumber<std::uint8_t>("nonono"), std::invalid_argument);
358
359 /* custom ranges */
360 ASSERT_THROW(util::toNumber<std::uint8_t>("50", 0, 10), std::out_of_range);
361 ASSERT_THROW(util::toNumber<std::int8_t>("-50", -10, 10), std::out_of_range);
362 }
363
320 } // !irccd 364 } // !irccd
321 365
322 int main(int argc, char **argv) 366 int main(int argc, char **argv)
323 { 367 {
324 testing::InitGoogleTest(&argc, argv); 368 testing::InitGoogleTest(&argc, argv);