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