Files
libcxx/test/std/numerics/rand/rand.eng/rand.eng.sub/values.pass.cpp
Stephan T. Lavavej 2917004aed [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.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@287391 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-18 22:45:32 +00:00

81 lines
2.1 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 UIntType, size_t w, size_t s, size_t r>
// class subtract_with_carry_engine
// {
// public:
// // types
// typedef UIntType result_type;
//
// // engine characteristics
// static constexpr size_t word_size = w;
// static constexpr size_t short_lag = s;
// static constexpr size_t long_lag = r;
// static constexpr result_type min() { return 0; }
// static constexpr result_type max() { return m-1; }
// static constexpr result_type default_seed = 19780503u;
#include <random>
#include <type_traits>
#include <cassert>
template <class _Tp>
void where(const _Tp &) {}
void
test1()
{
typedef std::ranlux24_base E;
static_assert((E::word_size == 24), "");
static_assert((E::short_lag == 10), "");
static_assert((E::long_lag == 24), "");
#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
static_assert((E::default_seed == 19780503u), "");
where(E::word_size);
where(E::short_lag);
where(E::long_lag);
where(E::default_seed);
}
void
test2()
{
typedef std::ranlux48_base E;
static_assert((E::word_size == 48), "");
static_assert((E::short_lag == 5), "");
static_assert((E::long_lag == 12), "");
#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
static_assert((E::default_seed == 19780503u), "");
where(E::word_size);
where(E::short_lag);
where(E::long_lag);
where(E::default_seed);
}
int main()
{
test1();
test2();
}