diff options
Diffstat (limited to 'test/std/numerics/rand/rand.util/rand.util.canonical/generate_canonical.pass.cpp')
-rw-r--r-- | test/std/numerics/rand/rand.util/rand.util.canonical/generate_canonical.pass.cpp | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/test/std/numerics/rand/rand.util/rand.util.canonical/generate_canonical.pass.cpp b/test/std/numerics/rand/rand.util/rand.util.canonical/generate_canonical.pass.cpp new file mode 100644 index 000000000000..7433e28e4935 --- /dev/null +++ b/test/std/numerics/rand/rand.util/rand.util.canonical/generate_canonical.pass.cpp @@ -0,0 +1,100 @@ +//===----------------------------------------------------------------------===// +// +// 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 RealType, size_t bits, class URNG> +// RealType generate_canonical(URNG& g); + +#include <random> +#include <cassert> + +int main() +{ + { + typedef std::minstd_rand0 E; + typedef float F; + E r; + F f = std::generate_canonical<F, 0>(r); + assert(f == (16807 - E::min()) / (E::max() - E::min() + F(1))); + } + { + typedef std::minstd_rand0 E; + typedef float F; + E r; + F f = std::generate_canonical<F, 1>(r); + assert(f == (16807 - E::min()) / (E::max() - E::min() + F(1))); + } + { + typedef std::minstd_rand0 E; + typedef float F; + E r; + F f = std::generate_canonical<F, std::numeric_limits<F>::digits - 1>(r); + assert(f == (16807 - E::min()) / (E::max() - E::min() + F(1))); + } + { + typedef std::minstd_rand0 E; + typedef float F; + E r; + F f = std::generate_canonical<F, std::numeric_limits<F>::digits>(r); + assert(f == (16807 - E::min()) / (E::max() - E::min() + F(1))); + } + { + typedef std::minstd_rand0 E; + typedef float F; + E r; + F f = std::generate_canonical<F, std::numeric_limits<F>::digits + 1>(r); + assert(f == (16807 - E::min()) / (E::max() - E::min() + F(1))); + } + + { + typedef std::minstd_rand0 E; + typedef double F; + E r; + F f = std::generate_canonical<F, 0>(r); + assert(f == (16807 - E::min()) / (E::max() - E::min() + F(1))); + } + { + typedef std::minstd_rand0 E; + typedef double F; + E r; + F f = std::generate_canonical<F, 1>(r); + assert(f == (16807 - E::min()) / (E::max() - E::min() + F(1))); + } + { + typedef std::minstd_rand0 E; + typedef double F; + E r; + F f = std::generate_canonical<F, std::numeric_limits<F>::digits - 1>(r); + assert(f == + (16807 - E::min() + + (282475249 - E::min()) * (E::max() - E::min() + F(1))) / + ((E::max() - E::min() + F(1)) * (E::max() - E::min() + F(1)))); + } + { + typedef std::minstd_rand0 E; + typedef double F; + E r; + F f = std::generate_canonical<F, std::numeric_limits<F>::digits>(r); + assert(f == + (16807 - E::min() + + (282475249 - E::min()) * (E::max() - E::min() + F(1))) / + ((E::max() - E::min() + F(1)) * (E::max() - E::min() + F(1)))); + } + { + typedef std::minstd_rand0 E; + typedef double F; + E r; + F f = std::generate_canonical<F, std::numeric_limits<F>::digits + 1>(r); + assert(f == + (16807 - E::min() + + (282475249 - E::min()) * (E::max() - E::min() + F(1))) / + ((E::max() - E::min() + F(1)) * (E::max() - E::min() + F(1)))); + } +} |