Home | History | Annotate | Line # | Download | only in tests
mini-random.c revision 1.1.1.2
      1      1.1  mrg /*
      2      1.1  mrg 
      3      1.1  mrg Copyright 2011, 2013, Free Software Foundation, Inc.
      4      1.1  mrg 
      5      1.1  mrg This file is part of the GNU MP Library test suite.
      6      1.1  mrg 
      7      1.1  mrg The GNU MP Library test suite is free software; you can redistribute it
      8      1.1  mrg and/or modify it under the terms of the GNU General Public License as
      9      1.1  mrg published by the Free Software Foundation; either version 3 of the License,
     10      1.1  mrg or (at your option) any later version.
     11      1.1  mrg 
     12      1.1  mrg The GNU MP Library test suite is distributed in the hope that it will be
     13      1.1  mrg useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
     14      1.1  mrg MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General
     15      1.1  mrg Public License for more details.
     16      1.1  mrg 
     17      1.1  mrg You should have received a copy of the GNU General Public License along with
     18  1.1.1.2  mrg the GNU MP Library test suite.  If not, see https://www.gnu.org/licenses/.  */
     19      1.1  mrg 
     20      1.1  mrg #include <stdio.h>
     21      1.1  mrg #include <stdlib.h>
     22      1.1  mrg 
     23      1.1  mrg #include "mini-random.h"
     24      1.1  mrg 
     25      1.1  mrg static void
     26      1.1  mrg set_str (mpz_t r, const char *s)
     27      1.1  mrg {
     28      1.1  mrg   if (mpz_set_str (r, s, 16) != 0)
     29      1.1  mrg     {
     30      1.1  mrg       fprintf (stderr, "mpz_set_str failed on input %s\n", s);
     31      1.1  mrg       abort ();
     32      1.1  mrg     }
     33      1.1  mrg }
     34      1.1  mrg 
     35      1.1  mrg void
     36      1.1  mrg mini_urandomb (mpz_t r, unsigned long bits)
     37      1.1  mrg {
     38      1.1  mrg   char *s;
     39      1.1  mrg   s = hex_urandomb (bits);
     40      1.1  mrg   set_str (r, s);
     41      1.1  mrg   free (s);
     42      1.1  mrg }
     43      1.1  mrg 
     44      1.1  mrg void
     45      1.1  mrg mini_rrandomb (mpz_t r, unsigned long bits)
     46      1.1  mrg {
     47      1.1  mrg   char *s;
     48      1.1  mrg   s = hex_rrandomb (bits);
     49      1.1  mrg   set_str (r, s);
     50      1.1  mrg   free (s);
     51      1.1  mrg }
     52      1.1  mrg 
     53      1.1  mrg void
     54      1.1  mrg mini_rrandomb_export (mpz_t r, void *dst, size_t *countp,
     55      1.1  mrg 		      int order, size_t size, int endian, unsigned long bits)
     56      1.1  mrg {
     57      1.1  mrg   char *s;
     58      1.1  mrg   s = hex_rrandomb_export (dst, countp, order, size, endian, bits);
     59      1.1  mrg   set_str (r, s);
     60      1.1  mrg   free (s);
     61      1.1  mrg }
     62      1.1  mrg 
     63      1.1  mrg void
     64      1.1  mrg mini_random_op2 (enum hex_random_op op, unsigned long maxbits,
     65      1.1  mrg 		 mpz_t a, mpz_t r)
     66      1.1  mrg {
     67      1.1  mrg   char *ap;
     68      1.1  mrg   char *rp;
     69      1.1  mrg 
     70      1.1  mrg   hex_random_op2 (op, maxbits, &ap, &rp);
     71      1.1  mrg   set_str (a, ap);
     72      1.1  mrg   set_str (r, rp);
     73      1.1  mrg 
     74      1.1  mrg   free (ap);
     75      1.1  mrg   free (rp);
     76      1.1  mrg }
     77      1.1  mrg 
     78      1.1  mrg void
     79      1.1  mrg mini_random_op3 (enum hex_random_op op, unsigned long maxbits,
     80      1.1  mrg 		 mpz_t a, mpz_t b, mpz_t r)
     81      1.1  mrg {
     82      1.1  mrg   char *ap;
     83      1.1  mrg   char *bp;
     84      1.1  mrg   char *rp;
     85      1.1  mrg 
     86      1.1  mrg   hex_random_op3 (op, maxbits, &ap, &bp, &rp);
     87      1.1  mrg   set_str (a, ap);
     88      1.1  mrg   set_str (b, bp);
     89      1.1  mrg   set_str (r, rp);
     90      1.1  mrg 
     91      1.1  mrg   free (ap);
     92      1.1  mrg   free (bp);
     93      1.1  mrg   free (rp);
     94      1.1  mrg }
     95      1.1  mrg 
     96      1.1  mrg void
     97      1.1  mrg mini_random_op4 (enum hex_random_op op, unsigned long maxbits,
     98      1.1  mrg 		 mpz_t a, mpz_t b, mpz_t c, mpz_t d)
     99      1.1  mrg {
    100      1.1  mrg   char *ap;
    101      1.1  mrg   char *bp;
    102      1.1  mrg   char *cp;
    103      1.1  mrg   char *dp;
    104      1.1  mrg 
    105      1.1  mrg   hex_random_op4 (op, maxbits, &ap, &bp, &cp, &dp);
    106      1.1  mrg   set_str (a, ap);
    107      1.1  mrg   set_str (b, bp);
    108      1.1  mrg   set_str (c, cp);
    109      1.1  mrg   set_str (d, dp);
    110      1.1  mrg 
    111      1.1  mrg   free (ap);
    112      1.1  mrg   free (bp);
    113      1.1  mrg   free (cp);
    114      1.1  mrg   free (dp);
    115      1.1  mrg }
    116      1.1  mrg 
    117      1.1  mrg void
    118      1.1  mrg mini_random_bit_op (enum hex_random_op op, unsigned long maxbits,
    119      1.1  mrg 			 mpz_t a, mp_bitcnt_t *b, mpz_t r)
    120      1.1  mrg {
    121      1.1  mrg   char *ap;
    122      1.1  mrg   char *rp;
    123      1.1  mrg 
    124      1.1  mrg   hex_random_bit_op (op, maxbits, &ap, b, &rp);
    125      1.1  mrg   set_str (a, ap);
    126      1.1  mrg   set_str (r, rp);
    127      1.1  mrg 
    128      1.1  mrg   free (ap);
    129      1.1  mrg   free (rp);
    130      1.1  mrg }
    131      1.1  mrg 
    132      1.1  mrg void
    133      1.1  mrg mini_random_scan_op (enum hex_random_op op, unsigned long maxbits,
    134      1.1  mrg 		     mpz_t a, mp_bitcnt_t *b, mp_bitcnt_t *r)
    135      1.1  mrg {
    136      1.1  mrg   char *ap;
    137      1.1  mrg 
    138      1.1  mrg   hex_random_scan_op (op, maxbits, &ap, b, r);
    139      1.1  mrg   set_str (a, ap);
    140      1.1  mrg 
    141      1.1  mrg   free (ap);
    142      1.1  mrg }
    143