1/* Test gmp_urandomb_ui. 2 3Copyright 2003, 2005 Free Software Foundation, Inc. 4 5This file is part of the GNU MP Library test suite. 6 7The GNU MP Library test suite is free software; you can redistribute it 8and/or modify it under the terms of the GNU General Public License as 9published by the Free Software Foundation; either version 3 of the License, 10or (at your option) any later version. 11 12The GNU MP Library test suite is distributed in the hope that it will be 13useful, but WITHOUT ANY WARRANTY; without even the implied warranty of 14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General 15Public License for more details. 16 17You should have received a copy of the GNU General Public License along with 18the GNU MP Library test suite. If not, see https://www.gnu.org/licenses/. */ 19 20#include <stdio.h> 21#include <stdlib.h> 22#include "gmp-impl.h" 23#include "tests.h" 24 25/* Expect numbers generated by rstate to obey the number of bits requested. 26 No point testing bits==BITS_PER_ULONG, since any return is acceptable in 27 that case. */ 28void 29check_one (const char *name, gmp_randstate_ptr rstate) 30{ 31 unsigned long bits, limit, got; 32 int i; 33 34 for (bits = 0; bits < BITS_PER_ULONG; bits++) 35 { 36 /* will demand got < limit */ 37 limit = (1UL << bits); 38 39 for (i = 0; i < 5; i++) 40 { 41 got = gmp_urandomb_ui (rstate, bits); 42 if (got >= limit) 43 { 44 printf ("Return value out of range:\n"); 45 printf (" algorithm: %s\n", name); 46 printf (" bits: %lu\n", bits); 47 printf (" limit: %#lx\n", limit); 48 printf (" got: %#lx\n", got); 49 abort (); 50 } 51 } 52 } 53} 54 55int 56main (int argc, char *argv[]) 57{ 58 tests_start (); 59 60 call_rand_algs (check_one); 61 62 tests_end (); 63 exit (0); 64} 65