#include #include #include #include "generators.h" static void generate_random(int *buffer, size_t size) { srandom(1); for (size_t i = 0; i < size; i++) buffer[i] = random(); /* compress the values to nice small numbers to make debugging nicer */ #if 0 int maxcompressed = -1; for (size_t compressed = 0; compressed < size; compressed++) { size_t minidx = -1; for (size_t i = 0; i < size; i++) { if (maxcompressed < buffer[i] && (minidx >= size || buffer[i] < buffer[minidx])) minidx = i; } buffer[minidx] = ++maxcompressed; } #endif } static void generate_sorted(int *buffer, size_t size) { for (size_t i = 0; i < size; i++) buffer[i] = i; } static void generate_reverse(int *buffer, size_t size) { for (size_t i = 0; i < size; i++) buffer[i] = size - i - 1; } static void generate_constant(int *buffer, size_t size) { for (size_t i = 0; i < size; i++) buffer[i] = 42; } static void add_noise(int *buffer, size_t size) { int noisemax = size / 4; int noiseoff = size / 8; srandom(1); for (size_t i = 0; i < size; i++) { if (random() < 0.2 * RAND_MAX) { buffer[i] += random() % noisemax - noiseoff; } } } static void generate_sorted_noise(int *buffer, size_t size) { generate_sorted(buffer, size); add_noise(buffer, size); } static void generate_reverse_noise(int *buffer, size_t size) { generate_reverse(buffer, size); add_noise(buffer, size); } const struct generator generators[] = { { .name = "random", .func = generate_random }, { .name = "sorted", .func = generate_sorted }, { .name = "reverse", .func = generate_reverse }, { .name = "constant", .func = generate_constant }, { .name = "sorted+noise", .func = generate_sorted_noise }, { .name = "reverse+noise", .func = generate_reverse_noise }, { 0 } };