// Copyright 2005-2006 Daniel James. // 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) // 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 #if 0 #include #include #include #include #include #else #include #endif #include "./fwd.hpp" namespace test { #if 0 typedef boost::hellekalek1995 integer_generator_type; typedef boost::lagged_fibonacci607 real_generator_type; #endif template struct generator { typedef T value_type; value_type operator()() { return generate((T const*) 0); } }; inline int generate(int const*) { #if 0 integer_generator_type gen; boost::uniform_int<> dist(0, 1000); static boost::variate_generator > vg(gen, dist); return vg(); #else using namespace std; return rand(); #endif } inline char generate(char const*) { #if 0 integer_generator_type gen; boost::uniform_int dist(32, 127); static boost::variate_generator > vg(gen, dist); return vg(); #else using namespace std; return rand() % (128 - 32) + 32; #endif } 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*) { #if 0 real_generator_type gen; boost::uniform_real dist; static boost::variate_generator > vg(gen, dist); return vg(); #else using namespace std; return (double) rand() / (double) RAND_MAX; #endif } template std::pair generate( std::pair const*) { static generator g1; static generator g2; return std::pair(g1(), g2()); } } #endif