// { dg-do run { target c++11 } }
#include <random>
#include <limits>
#include <testsuite_hooks.h>
#include <testsuite_random.h>
void
test01()
{
  for (auto token : { "mt19937", "prng", "rand_s" })
    if (__gnu_test::random_device_available(token))
      VERIFY( std::random_device(token).entropy() == 0.0 );
  using result_type = std::random_device::result_type;
  const double max = std::numeric_limits<result_type>::digits;
  for (auto token : { "/dev/random", "/dev/urandom" })
    if (__gnu_test::random_device_available(token))
    {
      const double entropy = std::random_device(token).entropy();
      VERIFY( entropy >= 0.0 );
      VERIFY( entropy <= max );
    }
  for (auto token : { "rdrand", "rdseed", "darn", "hw" })
    if (__gnu_test::random_device_available(token))
    {
      const double entropy = std::random_device(token).entropy();
      VERIFY( entropy == max );
    }
    for (auto token : { "getentropy", "arc4random" })
    if (__gnu_test::random_device_available(token))
    {
      const double entropy = std::random_device(token).entropy();
      VERIFY( entropy == max );
    }
}
int
main()
{
  test01();
}