unordered/test/helpers/generators.hpp
Daniel James ec240d22ed Stop using Boost.Random as it doesn't support all the platforms I do. The new
code (using std::rand) needs work, but I want to get this in before the sandbox
is converted to subversion.


[SVN r3993]
2007-05-01 21:24:48 +00:00

81 lines
1.8 KiB
C++

// Copyright 2005-2007 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)
// This uses std::rand to generate random values for tests.
// Which is not good as different platforms will be running different tests.
// It would be much better to use Boost.Random, but it doesn't
// support all the compilers that I want to test on.
// TODO: seed the random generator.
// TODO: check that this is actually working...
#if !defined(BOOST_UNORDERED_TEST_HELPERS_GENERATORS_HEADER)
#define BOOST_UNORDERED_TEST_HELPERS_GENERATORS_HEADER
#include <string>
#include <utility>
#include <stdexcept>
#include <cstdlib>
#include "./fwd.hpp"
namespace test
{
template <class T>
struct generator;
template <class T1, class T2> std::pair<T1, T2> generate(
std::pair<T1, T2> const*)
{
static generator<T1> g1;
static generator<T2> g2;
return std::pair<T1, T2>(g1(), g2());
}
template <class T>
struct generator
{
typedef T value_type;
value_type operator()()
{
return generate((T const*) 0);
}
};
inline int generate(int const*)
{
using namespace std;
return rand();
}
inline char generate(char const*)
{
using namespace std;
return (rand() >> 1) % (128-32) + 32;
}
inline std::string generate(std::string const*)
{
using namespace std;
static test::generator<char> char_gen;
std::string result;
int length = rand() % 10;
for(int i = 0; i < length; ++i)
result += char_gen();
return result;
}
float generate(float const*)
{
return (float) rand() / (float) RAND_MAX;
}
}
#endif