root/maint/gnulib/tests/test-random_r.c

/* [previous][next][first][last][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. test_failed
  2. main

   1 /* Test random_r.
   2    Copyright (C) 2008-2021 Free Software Foundation, Inc.
   3 
   4    This program is free software: you can redistribute it and/or modify
   5    it under the terms of the GNU General Public License as published by
   6    the Free Software Foundation; either version 3 of the License, or
   7    (at your option) any later version.
   8 
   9    This program is distributed in the hope that it will be useful,
  10    but WITHOUT ANY WARRANTY; without even the implied warranty of
  11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12    GNU General Public License for more details.
  13 
  14    You should have received a copy of the GNU General Public License
  15    along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
  16 
  17 #include <config.h>
  18 
  19 #include <stdlib.h>
  20 
  21 #include "signature.h"
  22 SIGNATURE_CHECK (srandom_r, int, (unsigned int, struct random_data *));
  23 SIGNATURE_CHECK (initstate_r, int, (unsigned int, char *, size_t,
  24                                     struct random_data *));
  25 SIGNATURE_CHECK (setstate_r, int, (char *, struct random_data *));
  26 SIGNATURE_CHECK (random_r, int, (struct random_data *, int32_t *));
  27 
  28 #include <time.h>
  29 
  30 #include "macros.h"
  31 
  32 static int
  33 test_failed (int alignment)
     /* [previous][next][first][last][top][bottom][index][help] */
  34 {
  35   struct random_data rand_state;
  36   char buf[128 + sizeof (int32_t)];
  37   unsigned int i;
  38   unsigned int n_big = 0;
  39 
  40   rand_state.state = NULL;
  41   if (initstate_r (time (NULL), buf + alignment, sizeof buf - alignment,
  42                    &rand_state))
  43     return 1;
  44   for (i = 0; i < 1000; i++)
  45     {
  46       int32_t r;
  47       ASSERT (random_r (&rand_state, &r) == 0);
  48       ASSERT (0 <= r);
  49       if (RAND_MAX / 2 < r)
  50         ++n_big;
  51     }
  52 
  53   /* Fail if none of the numbers were larger than RAND_MAX / 2.  */
  54   return !n_big;
  55 }
  56 
  57 int
  58 main ()
     /* [previous][next][first][last][top][bottom][index][help] */
  59 {
  60   int alignment;
  61   for (alignment = 0; alignment < sizeof (int32_t); alignment++)
  62     if (test_failed (alignment))
  63       return 1;
  64   return 0;
  65 }

/* [previous][next][first][last][top][bottom][index][help] */