]> git.draconx.ca Git - rrace.git/blobdiff - t/rng-test.c
tests: Skip reference RNG test on old compilers.
[rrace.git] / t / rng-test.c
index 9d27f3838d1b551d650f6ef45d7625083d9bc9fd..e141c0dd462f9c857616bd3404db9dc3c96aaf9e 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Test case for xoshiro256** implementation.
- * Copyright © 2022-2023 Nick Bowler
+ * Copyright © 2022-2024 Nick Bowler
  *
  * Directly compare the game RNG against the reference implementation.
  *
  */
 
 #include <config.h>
-#include <stdio.h>
-#include <stdlib.h>
+#include "tap.h"
 
+#if !HAVE_FOR_DECLS
+int main(void)
+{
+       tap_skip_all("cannot compile reference xoshiro256**");
+}
+#else
 #include "game-notime.h"
 #include "game.c"
 #include "xos256ss.c"
@@ -33,7 +38,7 @@ int main(void)
        unsigned long long ref_state[4], test_state[4];
        int i, ret = 0;
 
-       printf("1..200\n");
+       tap_plan(200);
        for (i = 0; i < 100; i++) {
                s[0] = ref_state[0] = test_state[0] = splitmix64(&seed_state);
                s[1] = ref_state[1] = test_state[1] = splitmix64(&seed_state);
@@ -43,40 +48,34 @@ int main(void)
                ref_result = next();
                test_result = xoshiro256ss(test_state);
 
-               if (ref_result != test_result) {
-                       printf("not ok %d rng output\n", 2*i+1);
-                       printf("# Failed, unexpected result\n");
-                       printf("#   with initial state %llx %llx %llx %llx\n",
-                              ref_state[0], ref_state[1],
-                              ref_state[2], ref_state[3]);
-                       printf("#   received: %llx\n", test_result);
-                       printf("#   expected: %llx\n", ref_result);
-                       ret = EXIT_FAILURE;
-               } else {
-                       printf("ok %d rng output\n", 2*i+1);
+               if (!tap_result(ref_result == test_result, "rng output")) {
+                       tap_diag("Failed, unexpected result");
+                       tap_diag("   with initial state %llx %llx %llx %llx",
+                                                 ref_state[0], ref_state[1],
+                                                 ref_state[2], ref_state[3]);
+                       tap_diag("   received: %llx", test_result);
+                       tap_diag("   expected: %llx", ref_result);
                }
 
-               if (s[0] != test_state[0] || s[1] != test_state[1]
-                   || s[2] != test_state[2] || s[3] != test_state[3])
+               if (!tap_result(s[0] == test_state[0] && s[1] == test_state[1]
+                            && s[2] == test_state[2] && s[3] == test_state[3],
+                               "rng state update"))
                {
-                       printf("not ok %d rng state update\n", 2*i+2);
-                       printf("# Failed, state update differed\n");
-                       printf("#   with initial state %llx %llx %llx %llx\n",
-                              ref_state[0], ref_state[1],
-                              ref_state[2], ref_state[3]);
-                       printf("#   received: %llx %llx %llx %llx\n",
-                              test_state[0], test_state[1],
-                              test_state[2], test_state[3]);
-                       printf("#   expected: %llx %llx %llx %llx\n",
-                              (unsigned long long)s[0],
-                              (unsigned long long)s[1],
-                              (unsigned long long)s[2],
-                              (unsigned long long)s[3]);
-                       ret = EXIT_FAILURE;
-               } else {
-                       printf("ok %d rng state update\n", 2*i+2);
-               }
+                       tap_diag("Failed, state update differed");
+                       tap_diag("   with initial state %llx %llx %llx %llx",
+                                                 ref_state[0], ref_state[1],
+                                                 ref_state[2], ref_state[3]);
+                       tap_diag("   received: %llx %llx %llx %llx",
+                                      test_state[0], test_state[1],
+                                      test_state[2], test_state[3]);
+                       tap_diag("   expected: %llx %llx %llx %llx",
+                                      (unsigned long long)s[0],
+                                      (unsigned long long)s[1],
+                                      (unsigned long long)s[2],
+                                      (unsigned long long)s[3]);
+                }
        }
 
-       return ret;
+       tap_done();
 }
+#endif