9 assert(sizeof(long) > sizeof(int));
10 return (int)((long)rand() * n / (RAND_MAX + 1L));
13 int main(int argc, char **argv) {
15 printf("usage: %s n_items pool_size n_events item_size [do_base [seed]]\n", argv[0]);
18 int n_items = atoi(argv[1]);
19 int pool_size = atoi(argv[2]);
20 int n_events = atoi(argv[3]);
21 int item_size = atoi(argv[4]);
22 bool do_base = argc >= 6 ? strcmp(argv[5], "false") != 0 : false;
23 int seed = argc >= 7 ? atoi(argv[6]) : 1;
25 int *items = malloc(n_items * sizeof(int));
27 memset(items, -1, n_items * sizeof(int));
31 for (int i = 0; i < n_events; ++i) {
32 int item = rand_int(n_items);
33 int old_size = items[item];
35 int size = rand_int(item_size + 1);
36 bool success = pool_used + size <= pool_size;
41 success ? "true" : "false"
48 else if (rand_int(4)) {
49 int size = rand_int(item_size + 1);
50 bool success = pool_used + size - old_size <= pool_size;
52 "realloc%s %d %d %d %s\n",
53 do_base && rand_int(3) == 0 ? "_base" : "",
57 success ? "true" : "false"
61 pool_used += size - old_size;
65 printf("free %d %d\n", item, old_size);
67 pool_used -= old_size;