]> git.ipfire.org Git - thirdparty/git.git/commitdiff
test-mergesort: use repeatable random numbers
authorRené Scharfe <l.s.r@web.de>
Fri, 8 Oct 2021 04:04:42 +0000 (06:04 +0200)
committerJunio C Hamano <gitster@pobox.com>
Fri, 8 Oct 2021 17:04:56 +0000 (10:04 -0700)
Use MINSTD to generate pseudo-random numbers consistently instead of
using rand(3), whose output can vary from system to system, and reset
its seed before filling in the test values.  This gives repeatable
results across versions and systems, which simplifies sharing and
comparing of results between developers.

Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/helper/test-mergesort.c

index 43ec74e2d32e684aba42b153bd93a34c2785b365..ebf68f7de82465d2761bceedd47715badbf76dbb 100644 (file)
@@ -2,6 +2,12 @@
 #include "cache.h"
 #include "mergesort.h"
 
+static uint32_t minstd_rand(uint32_t *state)
+{
+       *state = (uint64_t)*state * 48271 % 2147483647;
+       return *state;
+}
+
 struct line {
        char *text;
        struct line *next;
@@ -60,8 +66,9 @@ static void dist_sawtooth(int *arr, int n, int m)
 static void dist_rand(int *arr, int n, int m)
 {
        int i;
+       uint32_t seed = 1;
        for (i = 0; i < n; i++)
-               arr[i] = rand() % m;
+               arr[i] = minstd_rand(&seed) % m;
 }
 
 static void dist_stagger(int *arr, int n, int m)
@@ -81,8 +88,9 @@ static void dist_plateau(int *arr, int n, int m)
 static void dist_shuffle(int *arr, int n, int m)
 {
        int i, j, k;
+       uint32_t seed = 1;
        for (i = j = 0, k = 1; i < n; i++)
-               arr[i] = (rand() % m) ? (j += 2) : (k += 2);
+               arr[i] = minstd_rand(&seed) % m ? (j += 2) : (k += 2);
 }
 
 #define DIST(name) { #name, dist_##name }