ash,hush: improve randomness of $RANDOM, add easy-ish way to test it

function                                             old     new   delta
next_random                                           68     113     +45
change_random                                        103     121     +18

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko
2014-03-13 12:52:43 +01:00
parent 69f9567de2
commit fb183076a3
2 changed files with 135 additions and 17 deletions

View File

@ -12,16 +12,24 @@
PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN
typedef struct random_t {
/* Random number generators */
int32_t galois_LFSR; /* Galois LFSR (fast but weak). signed! */
uint32_t LCG; /* LCG (fast but weak) */
/* State of random number generators: */
/* Galois LFSR (fast but weak) */
int32_t galois_LFSR; /* must be signed! */
/* LCG (fast but weak) */
uint32_t LCG;
/* 64-bit xorshift (fast, moderate strength) */
uint32_t xs64_x;
uint32_t xs64_y;
} random_t;
#define UNINITED_RANDOM_T(rnd) \
((rnd)->galois_LFSR == 0)
#define INIT_RANDOM_T(rnd, nonzero, v) \
((rnd)->galois_LFSR = (nonzero), (rnd)->LCG = (v))
((rnd)->galois_LFSR = (rnd)->xs64_x = (nonzero), (rnd)->LCG = (rnd)->xs64_y = (v))
#define CLEAR_RANDOM_T(rnd) \
((rnd)->galois_LFSR = 0)