From: Nick Bowler Date: Sun, 7 Jan 2024 01:42:03 +0000 (-0500) Subject: tests: Improve RNG compatibility with old compilers. X-Git-Tag: v1.3~44 X-Git-Url: https://git.draconx.ca/gitweb/cdecl99.git/commitdiff_plain/0a1c8a90e23304220f6602e98aba5f891a1350b2 tests: Improve RNG compatibility with old compilers. Some C89 compilers with 32-bit longs won't automatically widen integer constants to (unsigned) long long in order to represent values that don't fit in an (unsigned) long, even if those compilers otherwise support 64-bit long long. The "ll" and "ull" suffixes seem to get things working. --- diff --git a/t/rng.c b/t/rng.c index 2e2fc09..e442d99 100644 --- a/t/rng.c +++ b/t/rng.c @@ -32,7 +32,7 @@ # include "test.h" #endif -#define B64(x) ((x) & 0xffffffffffffffff) +#define B64(x) ((x) & 0xffffffffffffffffull) struct test_rng { unsigned long long state[4]; @@ -65,9 +65,9 @@ static unsigned long long splitmix64(unsigned long long *state) { unsigned long long z; - z = B64(*state += 0x9e3779b97f4a7c15); - z = B64((z ^ (z >> 30)) * 0xbf58476d1ce4e5b9); - z = B64((z ^ (z >> 27)) * 0x94d049bb133111eb); + z = B64(*state += 0x9e3779b97f4a7c15ull); + z = B64((z ^ (z >> 30)) * 0xbf58476d1ce4e5b9ull); + z = B64((z ^ (z >> 27)) * 0x94d049bb133111ebull); return z ^ (z >> 31); }