1/* Test mpz_divexact_ui. 2 3Copyright 1996, 2001 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 23#include "gmp.h" 24#include "gmp-impl.h" 25#include "tests.h" 26 27 28void 29check_random (int argc, char *argv[]) 30{ 31 gmp_randstate_ptr rands = RANDS; 32 int reps = 500000; 33 mpz_t a, q, got; 34 int i, qneg; 35 unsigned long d; 36 37 if (argc == 2) 38 reps = atoi (argv[1]); 39 40 mpz_init (a); 41 mpz_init (q); 42 mpz_init (got); 43 44 for (i = 0; i < reps; i++) 45 { 46 do 47 d = (unsigned long) urandom(); 48 while (d == 0); 49 mpz_erandomb (q, rands, 512); 50 mpz_mul_ui (a, q, d); 51 52 for (qneg = 0; qneg <= 1; qneg++) 53 { 54 mpz_divexact_ui (got, a, d); 55 MPZ_CHECK_FORMAT (got); 56 if (mpz_cmp (got, q) != 0) 57 { 58 printf ("mpz_divexact_ui wrong\n"); 59 mpz_trace (" a", a); 60 printf (" d=%lu\n", d); 61 mpz_trace (" q", q); 62 mpz_trace (" got", got); 63 abort (); 64 } 65 66 mpz_neg (q, q); 67 mpz_neg (a, a); 68 } 69 70 } 71 72 mpz_clear (a); 73 mpz_clear (q); 74 mpz_clear (got); 75} 76 77 78int 79main (int argc, char **argv) 80{ 81 tests_start (); 82 83 check_random (argc, argv); 84 85 tests_end (); 86 exit (0); 87} 88