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