From 480b42e2733bbbe0b8ea15ade64d52d5d0cb1f4e Mon Sep 17 00:00:00 2001 From: Aaron Fiore Date: Tue, 23 Jul 2024 18:04:19 -0700 Subject: [PATCH] root: test: Random: assert multiple types - Add test cases for multiple types - Rewrite to include new interface/impl - Fix assertion test to not exceed error boundary --- container/src/root/test/common/random.hh | 3 +- container/src/root/test/unit/random.hh | 75 ++++++++++++++++++------ 2 files changed, 60 insertions(+), 18 deletions(-) diff --git a/container/src/root/test/common/random.hh b/container/src/root/test/common/random.hh index f67ca5c..c752248 100644 --- a/container/src/root/test/common/random.hh +++ b/container/src/root/test/common/random.hh @@ -53,7 +53,8 @@ struct RandomInterface t_random generate_impl() { static_assert( - std::is_same_v, "Random interface has changed"); + ::docker_finance::internal::type::is_real_integral::value, + "Random interface has changed"); return t_random{std::numeric_limits::max()}; } diff --git a/container/src/root/test/unit/random.hh b/container/src/root/test/unit/random.hh index bfbae30..4cda322 100644 --- a/container/src/root/test/unit/random.hh +++ b/container/src/root/test/unit/random.hh @@ -60,9 +60,24 @@ struct RandomInterface : public RandomInterfaceFixture { }; -TEST_F(RandomInterface, generate) +TEST_F(RandomInterface, generate_uint16_t) { - ASSERT_EQ(random.generate(), std::numeric_limits::max()); + ASSERT_EQ(random.generate(), std::numeric_limits::max()); +} + +TEST_F(RandomInterface, generate_uint32_t) +{ + ASSERT_EQ(random.generate(), std::numeric_limits::max()); +} + +TEST_F(RandomInterface, generate_int16_t) +{ + ASSERT_EQ(random.generate(), std::numeric_limits::max()); +} + +TEST_F(RandomInterface, generate_int32_t) +{ + ASSERT_EQ(random.generate(), std::numeric_limits::max()); } //! \brief Generic random generator fixture @@ -71,22 +86,22 @@ template struct RandomFixture : public ::testing::Test, protected t_impl { protected: + template void generate() { // NOTE: Why auto? Because no accidental type casting or under/overflow - auto one = t_impl::random.generate(); - static_assert(std::is_same_v); + auto one = t_impl::random.template generate(); + static_assert(std::is_same_v); - auto two = t_impl::random.generate(); - static_assert(std::is_same_v); + auto two = t_impl::random.template generate(); + static_assert(std::is_same_v); - ASSERT_LE(one, std::numeric_limits::max()); // 0xFFFFFFFFul - ASSERT_GE(one, 0); - - ASSERT_LE(two, std::numeric_limits::max()); - ASSERT_GE(two, 0); + // NOTE: t_random limits are implementation-specific + ASSERT_NEAR(0, one, std::numeric_limits::max()); + ASSERT_NEAR(0, two, std::numeric_limits::max()); // Exceedingly rare (tests the obvious, but is not an accurate entropy test) + // If fails, re-run tests to confirm ASSERT_NE(one, two); }; }; @@ -101,9 +116,14 @@ struct RandomBotan : public RandomFixture { }; -TEST_F(RandomBotan, generate) +TEST_F(RandomBotan, generate_uint16_t) { - ASSERT_NO_THROW(generate()); + ASSERT_NO_THROW(generate()); +} + +TEST_F(RandomBotan, generate_uint32_t) +{ + ASSERT_NO_THROW(generate()); } // @@ -116,9 +136,24 @@ struct RandomCryptoPP : public RandomFixture { }; -TEST_F(RandomCryptoPP, generate) +TEST_F(RandomCryptoPP, generate_uint16_t) { - ASSERT_NO_THROW(generate()); + ASSERT_NO_THROW(generate()); +} + +TEST_F(RandomCryptoPP, generate_uint32_t) +{ + ASSERT_NO_THROW(generate()); +} + +TEST_F(RandomCryptoPP, generate_int16_t) +{ + ASSERT_NO_THROW(generate()); +} + +TEST_F(RandomCryptoPP, generate_int32_t) +{ + ASSERT_NO_THROW(generate()); } // @@ -131,10 +166,16 @@ struct RandomLibsodium : public RandomFixture { }; -TEST_F(RandomLibsodium, generate) +TEST_F(RandomLibsodium, generate_uint16_t) { - ASSERT_NO_THROW(generate()); + ASSERT_NO_THROW(generate()); } + +TEST_F(RandomLibsodium, generate_uint32_t) +{ + ASSERT_NO_THROW(generate()); +} + } // namespace unit } // namespace tests } // namespace docker_finance