Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 12 additions & 3 deletions munit.c
Original file line number Diff line number Diff line change
Expand Up @@ -962,6 +962,7 @@ munit_rand_memory(size_t size, munit_uint8_t data[MUNIT_ARRAY_PARAM(size)]) {
} while (!munit_atomic_cas(&munit_rand_state, &old, state));
}

/* max cannot be zero. */
static munit_uint32_t
munit_rand_state_at_most(munit_uint32_t* state, munit_uint32_t salt, munit_uint32_t max) {
/* We want (UINT32_MAX + 1) % max, which in unsigned arithmetic is the same
Expand All @@ -983,6 +984,7 @@ munit_rand_state_at_most(munit_uint32_t* state, munit_uint32_t salt, munit_uint3
return x % max;
}

/* max cannot be zero. */
static munit_uint32_t
munit_rand_at_most(munit_uint32_t salt, munit_uint32_t max) {
munit_uint32_t old, state;
Expand All @@ -998,11 +1000,15 @@ munit_rand_at_most(munit_uint32_t salt, munit_uint32_t max) {

int
munit_rand_int_range(int min, int max) {
munit_uint64_t range = (munit_uint64_t) max - (munit_uint64_t) min;
munit_uint64_t range;

if (min > max)
if (min == max)
return min;
else if (min > max)
return munit_rand_int_range(max, min);

range = (munit_uint64_t) max - (munit_uint64_t) min;

if (range > (~((munit_uint32_t) 0U)))
range = (~((munit_uint32_t) 0U));

Expand Down Expand Up @@ -1614,7 +1620,10 @@ munit_test_runner_run_test(MunitTestRunner* runner,
* running a single test, but we don't want every test with
* the same number of parameters to choose the same parameter
* number, so use the test name as a primitive salt. */
pidx = munit_rand_at_most(munit_str_hash(test_name), possible - 1);
if (possible > 1)
pidx = munit_rand_at_most(munit_str_hash(test_name), possible - 1);
else
pidx = 0;
if (MUNIT_UNLIKELY(munit_parameters_add(&params_l, &params, pe->name, pe->values[pidx]) != MUNIT_OK))
goto cleanup;
} else {
Expand Down