Skip to content

Commit

Permalink
Use SplitMix64 for seeding test cases
Browse files Browse the repository at this point in the history
Close #581.
  • Loading branch information
Cuda-Chen committed Oct 6, 2023
1 parent 8371b36 commit b535ac1
Showing 1 changed file with 20 additions and 4 deletions.
24 changes: 20 additions & 4 deletions tests/impl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -350,10 +350,26 @@ static inline double bankersRounding(double val)
return ret;
}

static float ranf(void)
// by Sebastiano Vigna, see: <https://xoshiro.di.unimi.it/splitmix64.c>
static uint64_t x;
const double TWOPOWER64 = pow(2, 64);

#define SSE2NEON_INIT_TEST_CASES_GENERATOR(seed) \
do { \
x = seed; \
} while (0)

static double next()
{
uint64_t z = (x += 0x9e3779b97f4a7c15);
z = (z ^ (z >> 30)) * 0xbf58476d1ce4e5b9;
z = (z ^ (z >> 27)) * 0x94d049bb133111eb;
return z ^ (z >> 31);
}

static float ranf()
{
uint32_t ir = rand() & 0x7FFF;
return (float) ir * (1.0f / 32768.0f);
return next() / TWOPOWER64;
}

static float ranf(float low, float high)
Expand Down Expand Up @@ -11796,7 +11812,7 @@ SSE2NEONTestImpl::SSE2NEONTestImpl(void)
mTestFloatPointer2 = (float *) platformAlignedAlloc(sizeof(__m128));
mTestIntPointer1 = (int32_t *) platformAlignedAlloc(sizeof(__m128i));
mTestIntPointer2 = (int32_t *) platformAlignedAlloc(sizeof(__m128i));
srand(0);
SSE2NEON_INIT_TEST_CASES_GENERATOR(123456);
for (uint32_t i = 0; i < MAX_TEST_VALUE; i++) {
mTestFloats[i] = ranf(-100000, 100000);
mTestInts[i] = (int32_t) ranf(-100000, 100000);
Expand Down

0 comments on commit b535ac1

Please sign in to comment.