blob: 27fdaa73922526b92e9e25fd5ff59cfb63d2f59c [file] [log] [blame]
Jens Axboead1f90a2012-11-28 21:29:14 +01001#include <stdio.h>
2#include <stdlib.h>
3#include <fcntl.h>
4#include <string.h>
5#include <unistd.h>
6#include <inttypes.h>
7
8#include "../lib/lfsr.h"
Jens Axboe32bbd3a2013-01-23 11:02:07 -07009#include "../lib/axmap.h"
Jens Axboead1f90a2012-11-28 21:29:14 +010010
11void *smalloc(size_t size)
12{
13 return malloc(size);
14}
15
16void sfree(void *ptr)
17{
18 free(ptr);
19}
20
21int main(int argc, char *argv[])
22{
23 struct fio_lfsr lfsr;
Jens Axboe32bbd3a2013-01-23 11:02:07 -070024 size_t osize, size = (1UL << 28) - 200;
Jens Axboead1f90a2012-11-28 21:29:14 +010025 struct axmap *map;
Jens Axboe32bbd3a2013-01-23 11:02:07 -070026 uint64_t ff;
Jens Axboe4e590172012-12-21 21:32:50 +010027 int seed = 1;
Jens Axboead1f90a2012-11-28 21:29:14 +010028
Jens Axboe4e590172012-12-21 21:32:50 +010029 if (argc > 1) {
Jens Axboead1f90a2012-11-28 21:29:14 +010030 size = strtoul(argv[1], NULL, 10);
Jens Axboe4e590172012-12-21 21:32:50 +010031 if (argc > 2)
32 seed = strtoul(argv[2], NULL, 10);
33 }
Jens Axboead1f90a2012-11-28 21:29:14 +010034
35 printf("Using %llu entries\n", (unsigned long long) size);
36
Jens Axboe4e590172012-12-21 21:32:50 +010037 lfsr_init(&lfsr, size, seed);
Jens Axboead1f90a2012-11-28 21:29:14 +010038 map = axmap_new(size);
Jens Axboe32bbd3a2013-01-23 11:02:07 -070039 osize = size;
Jens Axboead1f90a2012-11-28 21:29:14 +010040
41 while (size--) {
42 uint64_t val;
43
Jens Axboe32bbd3a2013-01-23 11:02:07 -070044 if (lfsr_next(&lfsr, &val, osize)) {
45 printf("lfsr: short loop\n");
46 break;
47 }
Jens Axboead1f90a2012-11-28 21:29:14 +010048 axmap_set(map, val);
49 }
50
Jens Axboe32bbd3a2013-01-23 11:02:07 -070051 ff = axmap_next_free(map, osize);
52 if (ff != (uint64_t) -1ULL) {
53 printf("axmap_next_free broken: got %llu\n", (unsigned long long) ff);
54 return 1;
55 }
56
Jens Axboead1f90a2012-11-28 21:29:14 +010057 return 0;
58}