diff options
Diffstat (limited to 'tools/testing/selftests/kvm/lib/test_util.c')
| -rw-r--r-- | tools/testing/selftests/kvm/lib/test_util.c | 36 | 
1 files changed, 36 insertions, 0 deletions
| diff --git a/tools/testing/selftests/kvm/lib/test_util.c b/tools/testing/selftests/kvm/lib/test_util.c index 6d23878bbfe1..5c22fa4c2825 100644 --- a/tools/testing/selftests/kvm/lib/test_util.c +++ b/tools/testing/selftests/kvm/lib/test_util.c @@ -18,6 +18,23 @@  #include "test_util.h"  /* + * Random number generator that is usable from guest code. This is the + * Park-Miller LCG using standard constants. + */ + +struct guest_random_state new_guest_random_state(uint32_t seed) +{ +	struct guest_random_state s = {.seed = seed}; +	return s; +} + +uint32_t guest_random_u32(struct guest_random_state *state) +{ +	state->seed = (uint64_t)state->seed * 48271 % ((uint32_t)(1 << 31) - 1); +	return state->seed; +} + +/*   * Parses "[0-9]+[kmgt]?".   */  size_t parse_size(const char *size) @@ -334,3 +351,22 @@ long get_run_delay(void)  	return val[1];  } + +int atoi_paranoid(const char *num_str) +{ +	char *end_ptr; +	long num; + +	errno = 0; +	num = strtol(num_str, &end_ptr, 0); +	TEST_ASSERT(!errno, "strtol(\"%s\") failed", num_str); +	TEST_ASSERT(num_str != end_ptr, +		    "strtol(\"%s\") didn't find a valid integer.", num_str); +	TEST_ASSERT(*end_ptr == '\0', +		    "strtol(\"%s\") failed to parse trailing characters \"%s\".", +		    num_str, end_ptr); +	TEST_ASSERT(num >= INT_MIN && num <= INT_MAX, +		    "%ld not in range of [%d, %d]", num, INT_MIN, INT_MAX); + +	return num; +} |