| // (C) Copyright Andy Tompkins 2010. Permission to copy, use, modify, sell and |
| // distribute this software is granted provided this copyright notice appears |
| // in all copies. This software is provided "as is" without express or implied |
| // warranty, and with no claim as to its suitability for any purpose. |
| |
| // Distributed under the Boost Software License, Version 1.0. (See |
| // accompanying file LICENSE_1_0.txt or copy at |
| // http://www.boost.org/LICENSE_1_0.txt) |
| |
| // libs/uuid/test/test_random_generator.cpp -------------------------------// |
| |
| #include <boost/uuid/uuid.hpp> |
| #include <boost/uuid/random_generator.hpp> |
| #include <boost/uuid/uuid_io.hpp> |
| #include <boost/detail/lightweight_test.hpp> |
| #include "lightweight_test_ex.hpp" |
| #include <boost/random.hpp> |
| |
| template <typename RandomUuidGenerator> |
| void check_random_generator(RandomUuidGenerator& uuid_gen) |
| { |
| boost::uuids::uuid u1 = uuid_gen(); |
| boost::uuids::uuid u2 = uuid_gen(); |
| |
| BOOST_TEST_NE(u1, u2); |
| |
| // check variant |
| BOOST_TEST_EQ(u1.variant(), boost::uuids::uuid::variant_rfc_4122); |
| |
| // version |
| BOOST_TEST_EQ(u1.version(), boost::uuids::uuid::version_random_number_based); |
| } |
| |
| int main(int, char*[]) |
| { |
| using namespace boost::uuids; |
| |
| // default random number generator |
| random_generator uuid_gen1; |
| check_random_generator(uuid_gen1); |
| |
| // specific random number generator |
| basic_random_generator<boost::rand48> uuid_gen2; |
| check_random_generator(uuid_gen2); |
| |
| // pass by reference |
| boost::ecuyer1988 ecuyer1988_gen; |
| basic_random_generator<boost::ecuyer1988> uuid_gen3(ecuyer1988_gen); |
| check_random_generator(uuid_gen3); |
| |
| // pass by pointer |
| boost::lagged_fibonacci607 lagged_fibonacci607_gen; |
| basic_random_generator<boost::lagged_fibonacci607> uuid_gen4(&lagged_fibonacci607_gen); |
| check_random_generator(uuid_gen4); |
| |
| // random device |
| //basic_random_generator<boost::random_device> uuid_gen5; |
| //check_random_generator(uuid_gen5); |
| |
| // there was a bug in basic_random_generator where it did not |
| // produce very random numbers. This checks for that bug. |
| uuid u = random_generator()(); |
| if ( (u.data[4] == u.data[12]) && |
| (u.data[5] == u.data[9] && u.data[5] == u.data[13]) && |
| (u.data[7] == u.data[11] && u.data[7] == u.data[15]) && |
| (u.data[10] == u.data[14]) ) |
| { |
| BOOST_ERROR("basic_random_generator is not producing random uuids"); |
| } |
| |
| return boost::report_errors(); |
| } |