// Copyright Daniel James 2005-2006. Use, modification, and distribution are // subject to 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) // A crude wrapper round Boost.Random to make life easier. #if !defined(BOOST_UNORDERED_TEST_HELPERS_GENERATORS_HEADER) #define BOOST_UNORDERED_TEST_HELPERS_GENERATORS_HEADER #include #include #include #include #include #include #include #include "./fwd.hpp" namespace test { typedef boost::hellekalek1995 integer_generator_type; typedef boost::lagged_fibonacci607 real_generator_type; template struct generator { typedef T value_type; value_type operator()() { return generate((T const*) 0); } }; inline int generate(int const*) { static boost::variate_generator > vg((integer_generator_type()), boost::uniform_int<>(0, 1000)); return vg(); } inline char generate(char const*) { static boost::variate_generator > vg((integer_generator_type()), boost::uniform_int(32, 128)); return vg(); } inline std::string generate(std::string const*) { using namespace std; static test::generator char_gen; std::string result; int length = rand() % 10; for(int i = 0; i < length; ++i) result += char_gen(); //std::generate_n( // std::back_inserter(result), // rand() % 10, // char_gen); return result; } float generate(float const*) { static boost::variate_generator > vg((real_generator_type()), boost::uniform_real()); return vg(); } template std::pair generate( std::pair const*) { static generator g1; static generator g2; return std::pair(g1(), g2()); } } #endif