updated build system
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
All checks were successful
BlockStorage/repertory/pipeline/head This commit looks good
This commit is contained in:
parent
fa0f648a0b
commit
60b89c5c08
@ -18,11 +18,6 @@ if(HAS_SETXATTR)
|
|||||||
add_definitions(-DHAS_SETXATTR)
|
add_definitions(-DHAS_SETXATTR)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
check_include_files("wordexp.h" HAS_WORDEXP_H)
|
|
||||||
if(HAS_WORDEXP_H)
|
|
||||||
add_definitions(-DHAS_WORDEXP_H)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
include(cmake/versions.cmake)
|
include(cmake/versions.cmake)
|
||||||
include(cmake/arch.cmake)
|
include(cmake/arch.cmake)
|
||||||
include(cmake/os.cmake)
|
include(cmake/os.cmake)
|
||||||
|
@ -66,11 +66,13 @@ template <typename data_t>
|
|||||||
|
|
||||||
template <typename data_t>
|
template <typename data_t>
|
||||||
[[nodiscard]] inline auto generate_random(std::size_t size) -> data_t;
|
[[nodiscard]] inline auto generate_random(std::size_t size) -> data_t;
|
||||||
|
#endif // defined(PROJECT_ENABLE_LIBSODIUM)
|
||||||
|
|
||||||
template <typename data_t>
|
template <typename data_t>
|
||||||
[[nodiscard]] inline auto generate_random_between(data_t begin,
|
[[nodiscard]] inline auto generate_random_between(data_t begin,
|
||||||
data_t end) -> data_t;
|
data_t end) -> data_t;
|
||||||
|
|
||||||
|
#if defined(PROJECT_ENABLE_LIBSODIUM)
|
||||||
[[nodiscard]] auto generate_random_string(std::size_t length) -> std::string;
|
[[nodiscard]] auto generate_random_string(std::size_t length) -> std::string;
|
||||||
|
|
||||||
[[nodiscard]] auto generate_random_wstring(std::size_t length) -> std::wstring;
|
[[nodiscard]] auto generate_random_wstring(std::size_t length) -> std::wstring;
|
||||||
@ -121,12 +123,20 @@ inline auto generate_random(std::size_t size) -> data_t {
|
|||||||
randombytes_buf(ret.data(), ret.size() * sizeof(typename data_t::value_type));
|
randombytes_buf(ret.data(), ret.size() * sizeof(typename data_t::value_type));
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
#endif // defined(PROJECT_ENABLE_LIBSODIUM)
|
||||||
|
|
||||||
template <typename data_t>
|
template <typename data_t>
|
||||||
inline auto generate_random_between(data_t begin, data_t end) -> data_t {
|
inline auto generate_random_between(data_t begin, data_t end) -> data_t {
|
||||||
return begin + generate_random<data_t>() % ((end + data_t{1}) - begin);
|
static_assert(std::is_integral_v<std::remove_cv_t<data_t>>,
|
||||||
|
"data_t must be an integral type");
|
||||||
|
if (end <= begin) {
|
||||||
|
throw std::range_error("end must be greater than begin");
|
||||||
|
}
|
||||||
|
|
||||||
|
static std::mt19937 gen(std::random_device{}());
|
||||||
|
std::uniform_int_distribution<data_t> dis(begin, end);
|
||||||
|
return dis(gen);
|
||||||
}
|
}
|
||||||
#endif // defined(PROJECT_ENABLE_LIBSODIUM)
|
|
||||||
} // namespace repertory::utils
|
} // namespace repertory::utils
|
||||||
|
|
||||||
#endif // REPERTORY_INCLUDE_UTILS_COMMON_HPP_
|
#endif // REPERTORY_INCLUDE_UTILS_COMMON_HPP_
|
||||||
|
@ -184,4 +184,54 @@ TEST(utils_common, divide_with_ceiling) {
|
|||||||
r = utils::divide_with_ceiling(0, 2);
|
r = utils::divide_with_ceiling(0, 2);
|
||||||
EXPECT_EQ(0, r);
|
EXPECT_EQ(0, r);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(utils_common, generate_random_between_for_signed_integers) {
|
||||||
|
static constexpr const auto max_iterations{1000000UL};
|
||||||
|
|
||||||
|
for (std::size_t idx = 0U; idx < max_iterations; ++idx) {
|
||||||
|
auto res = utils::generate_random_between(5, 12);
|
||||||
|
EXPECT_GE(res, 5);
|
||||||
|
EXPECT_LE(res, 12);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (std::size_t idx = 0U; idx < max_iterations; ++idx) {
|
||||||
|
auto res = utils::generate_random_between(-5, 12);
|
||||||
|
EXPECT_GE(res, -5);
|
||||||
|
EXPECT_LE(res, 12);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(utils_common, generate_random_between_for_unsigned_integers) {
|
||||||
|
static constexpr const auto max_iterations{1000000UL};
|
||||||
|
|
||||||
|
for (std::size_t idx = 0U; idx < max_iterations; ++idx) {
|
||||||
|
auto res = utils::generate_random_between(5U, 12U);
|
||||||
|
EXPECT_GE(res, 5);
|
||||||
|
EXPECT_LE(res, 12);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(utils_common, generate_random_between_throws_error_on_invalid_range) {
|
||||||
|
EXPECT_THROW(
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
[[maybe_unused]] auto res = utils::generate_random_between(12, 5);
|
||||||
|
} catch (const std::range_error &e) {
|
||||||
|
EXPECT_STREQ("end must be greater than begin", e.what());
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
std::range_error);
|
||||||
|
|
||||||
|
EXPECT_THROW(
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
[[maybe_unused]] auto res = utils::generate_random_between(12, 12);
|
||||||
|
} catch (const std::range_error &e) {
|
||||||
|
EXPECT_STREQ("end must be greater than begin", e.what());
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
std::range_error);
|
||||||
|
}
|
||||||
} // namespace repertory
|
} // namespace repertory
|
||||||
|
Loading…
x
Reference in New Issue
Block a user