diff --git a/include/boost/uuid/max_generator.hpp b/include/boost/uuid/max_generator.hpp new file mode 100644 index 0000000..d82166e --- /dev/null +++ b/include/boost/uuid/max_generator.hpp @@ -0,0 +1,39 @@ +#ifndef BOOST_UUID_MAX_GENERATOR_HPP_INCLUDED +#define BOOST_UUID_MAX_GENERATOR_HPP_INCLUDED + +// Copyright 2025 James E. King III +// Distributed under the Boost Software License, Version 1.0. +// https://www.boost.org/LICENSE_1_0.txt + +// RFC 9562 section 5.10 + +#include + +namespace boost { +namespace uuids { + +// generate a max uuid +struct max_generator +{ + using result_type = uuid; + + uuid operator()() const noexcept + { + return {{ + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF + }}; + } +}; + +inline uuid max_uuid() noexcept +{ + return {{ + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF + }}; +} + +}} // namespace boost::uuids + +#endif // BOOST_UUID_MAX_GENERATOR_HPP_INCLUDED diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index fca0c7d..a0d3baa 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -36,6 +36,7 @@ boost_test(TYPE run SOURCES test_to_chars_2.cpp) boost_test(TYPE run SOURCES test_uuid_clock.cpp) +boost_test(TYPE run SOURCES test_max_generator.cpp) boost_test(TYPE run SOURCES test_nil_generator.cpp) boost_test(TYPE run SOURCES test_string_generator.cpp) boost_test(TYPE run SOURCES test_random_generator.cpp LINK_LIBRARIES Boost::random Boost::predef) diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index 6964591..b4ad5ba 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -100,6 +100,7 @@ run test_uuid_clock.cpp ; # test generators +run test_max_generator.cpp ; run test_nil_generator.cpp ; run test_string_generator.cpp ; diff --git a/test/test_max_generator.cpp b/test/test_max_generator.cpp new file mode 100644 index 0000000..8b2939c --- /dev/null +++ b/test/test_max_generator.cpp @@ -0,0 +1,31 @@ +// Copyright (C) 2025 James E. King III +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// https://www.boost.org/LICENSE_1_0.txt) + +// libs/uuid/test/test_max_generator.cpp -------------------------------// + +#include +#include +#include +#include +#include + +int main(int, char*[]) +{ + using namespace boost::uuids; + + uuid uunil = nil_generator()(); + uuid uumax = max_generator()(); + uuid expected = {{ + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF + }}; + BOOST_TEST_EQ(uumax, expected); + BOOST_TEST_LT(uunil, uumax); + + uuid u3 = max_uuid(); + BOOST_TEST_EQ(u3, expected); + + return boost::report_errors(); +}