mirror of
https://github.com/boostorg/unordered.git
synced 2025-05-11 13:34:06 +00:00
87 lines
1.9 KiB
C++
87 lines
1.9 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 signed char generate(signed char const*)
|
|
{
|
|
using namespace std;
|
|
return rand();
|
|
}
|
|
|
|
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
|