//===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // template // RealType generate_canonical(URNG& g); #include #include #include "test_macros.h" #include "truncate_fp.h" int main(int, char**) { { typedef std::minstd_rand0 E; typedef float F; E r; F f = std::generate_canonical(r); assert(f == truncate_fp((16807 - E::min()) / (static_cast(E::max() - E::min()) + F(1)))); } { typedef std::minstd_rand0 E; typedef float F; E r; F f = std::generate_canonical(r); assert(f == truncate_fp((16807 - E::min()) / (static_cast(E::max() - E::min()) + F(1)))); } { typedef std::minstd_rand0 E; typedef float F; E r; F f = std::generate_canonical::digits - 1>(r); assert(f == truncate_fp((16807 - E::min()) / (static_cast(E::max() - E::min()) + F(1)))); } { typedef std::minstd_rand0 E; typedef float F; E r; F f = std::generate_canonical::digits>(r); assert(f == truncate_fp((16807 - E::min()) / (static_cast(E::max() - E::min()) + F(1)))); } { typedef std::minstd_rand0 E; typedef float F; E r; F f = std::generate_canonical::digits + 1>(r); assert(f == truncate_fp((16807 - E::min()) / (static_cast(E::max() - E::min()) + F(1)))); } { typedef std::minstd_rand0 E; typedef double F; E r; F f = std::generate_canonical(r); assert(f == truncate_fp((16807 - E::min()) / (static_cast(E::max() - E::min()) + F(1)))); } { typedef std::minstd_rand0 E; typedef double F; E r; F f = std::generate_canonical(r); assert(f == truncate_fp((16807 - E::min()) / (static_cast(E::max() - E::min()) + F(1)))); } { typedef std::minstd_rand0 E; typedef double F; E r; F f = std::generate_canonical::digits - 1>(r); assert(f == truncate_fp( (16807 - E::min() + (282475249 - E::min()) * (static_cast(E::max() - E::min()) + F(1))) / ((static_cast(E::max() - E::min()) + F(1)) * (static_cast(E::max() - E::min()) + F(1))))); } { typedef std::minstd_rand0 E; typedef double F; E r; F f = std::generate_canonical::digits>(r); assert(f == truncate_fp( (16807 - E::min() + (282475249 - E::min()) * (static_cast(E::max() - E::min()) + F(1))) / ((static_cast(E::max() - E::min()) + F(1)) * (static_cast(E::max() - E::min()) + F(1))))); } { typedef std::minstd_rand0 E; typedef double F; E r; F f = std::generate_canonical::digits + 1>(r); assert(f == truncate_fp( (16807 - E::min() + (282475249 - E::min()) * (static_cast(E::max() - E::min()) + F(1))) / ((static_cast(E::max() - E::min()) + F(1)) * (static_cast(E::max() - E::min()) + F(1))))); } return 0; }