X-Git-Url: https://git.draconx.ca/gitweb/cdecl99.git/blobdiff_plain/ddbdd8cec2a54faef7b3a25d998ba350ec026cfe..d9e803fa14295c584c784c4244aab95de41eefdf:/test/declgen.c diff --git a/test/declgen.c b/test/declgen.c index af7dd8d..d7bdbc1 100644 --- a/test/declgen.c +++ b/test/declgen.c @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include @@ -268,6 +269,20 @@ gen_declspecs(struct gen_rng *rng, unsigned flags) return gen_randomize_specs(rng, s); } +static uintmax_t gen_uintmax(struct gen_rng *rng) +{ + unsigned char tmp; + uintmax_t ret = 0; + + for (size_t i = 0; i < sizeof ret; i++) { + tmp = gsl_rng_uniform_int(rng->rng, UCHAR_MAX+1); + ret <<= CHAR_BIT; + ret |= tmp; + } + + return ret; +} + /* * Generate a random array declarator, selecting one of four possibilities * uniformly at random. @@ -289,7 +304,7 @@ static void gen_array(struct gen_rng *rng, struct cdecl_declarator *d) d->u.array.length = 0; break; case 3: - d->u.array.length = gsl_rng_uniform_int(rng->rng, -1); + d->u.array.length = gen_uintmax(rng); break; default: assert(0);