Stephan T. Lavavej ae3c4eec5a [libcxx] [test] D26812: In random tests, use real static_asserts and silence a warning.
In C++11 mode and newer, use real static_asserts.
In C++03 mode, min() and max() aren't constexpr, so use plain asserts.

One test triggers MSVC's warning C4310 "cast truncates constant value".
The code is valid, and yet the warning is valid, so I'm silencing it
through push-disable-pop.

llvm-svn: 287391
2016-11-18 22:45:32 +00:00

71 lines
1.7 KiB
C++

//===----------------------------------------------------------------------===//
//
// The LLVM Compiler Infrastructure
//
// This file is dual licensed under the MIT and the University of Illinois Open
// Source Licenses. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <random>
// template<class Engine, size_t p, size_t r>
// class discard_block_engine
// {
// public:
// // types
// typedef typename Engine::result_type result_type;
//
// // engine characteristics
// static constexpr size_t block_size = p;
// static constexpr size_t used_block = r;
// static constexpr result_type min() { return Engine::min(); }
// static constexpr result_type max() { return Engine::max(); }
#include <random>
#include <type_traits>
#include <cassert>
template <class _Tp>
void where(const _Tp &) {}
void
test1()
{
typedef std::ranlux24 E;
static_assert((E::block_size == 223), "");
static_assert((E::used_block == 23), "");
#if TEST_STD_VER >= 11
static_assert((E::min() == 0), "");
static_assert((E::max() == 0xFFFFFF), "");
#else
assert((E::min() == 0));
assert((E::max() == 0xFFFFFF));
#endif
where(E::block_size);
where(E::used_block);
}
void
test2()
{
typedef std::ranlux48 E;
static_assert((E::block_size == 389), "");
static_assert((E::used_block == 11), "");
#if TEST_STD_VER >= 11
static_assert((E::min() == 0), "");
static_assert((E::max() == 0xFFFFFFFFFFFFull), "");
#else
assert((E::min() == 0));
assert((E::max() == 0xFFFFFFFFFFFFull));
#endif
where(E::block_size);
where(E::used_block);
}
int main()
{
test1();
test2();
}