Skip to content

Commit

Permalink
Fixed bug 3319 - Getting the POSIX out of testqsort.c
Browse files Browse the repository at this point in the history
Simon Hug

There's a call to the POSIX function random in test/testqsort.c. Naturally, Windows doesn't do that. The attached patch changes the call to the SDLtest framework random functions and adds some seed control.

Looking at SDLTest_RandomInitTime, I just want to say that 'srand((unsigned int)time(NULL)); a=rand(); srand(clock()); b=rand();' is an absolutely terrible way to initialize a seed on Windows because of its terrible LCG.
  • Loading branch information
slouken committed Oct 1, 2016
1 parent d870f27 commit 3ac201c
Showing 1 changed file with 29 additions and 5 deletions.
34 changes: 29 additions & 5 deletions test/testqsort.c
Expand Up @@ -10,10 +10,7 @@
freely.
*/

#include <stdio.h>
#include <stdlib.h>

#include "SDL.h"
#include "SDL_test.h"

static int
num_compare(const void *_a, const void *_b)
Expand Down Expand Up @@ -50,6 +47,33 @@ main(int argc, char *argv[])
static int nums[1024 * 100];
static const int itervals[] = { SDL_arraysize(nums), 12 };
int iteration;
SDLTest_RandomContext rndctx;

if (argc > 1)
{
int success;
Uint64 seed = 0;
if (argv[1][0] == '0' && argv[1][1] == 'x')
success = SDL_sscanf(argv[1] + 2, "%llx", &seed);
else
success = SDL_sscanf(argv[1], "%llu", &seed);
if (!success)
{
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Invalid seed. Use a decimal or hexadecimal number.\n");
return 1;
}
if (seed <= 0xffffffff)
{
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Seed must be equal or greater than 0x100000000.\n");
return 1;
}
SDLTest_RandomInit(&rndctx, (unsigned int)(seed >> 32), (unsigned int)(seed & 0xffffffff));
}
else
{
SDLTest_RandomInitTime(&rndctx);
}
SDL_Log("Using random seed 0x%08x%08x\n", rndctx.x, rndctx.c);

for (iteration = 0; iteration < SDL_arraysize(itervals); iteration++) {
const int arraylen = itervals[iteration];
Expand All @@ -72,7 +96,7 @@ main(int argc, char *argv[])
test_sort("reverse sorted", nums, arraylen);

for (i = 0; i < arraylen; i++) {
nums[i] = random();
nums[i] = SDLTest_RandomInt(&rndctx);
}
test_sort("random sorted", nums, arraylen);
}
Expand Down

0 comments on commit 3ac201c

Please sign in to comment.