5 #include "../lib/lfsr.h"
6 #include "../lib/axmap.h"
8 static int test_regular(size_t size, int seed)
16 printf("Using %llu entries...", (unsigned long long) size);
19 lfsr_init(&lfsr, size, seed, seed & 0xF);
20 map = axmap_new(size);
27 if (lfsr_next(&lfsr, &val)) {
28 printf("lfsr: short loop\n");
32 if (axmap_isset(map, val)) {
33 printf("bit already set\n");
38 if (!axmap_isset(map, val)) {
39 printf("bit not set\n");
48 ff = axmap_next_free(map, osize);
49 if (ff != (uint64_t) -1ULL) {
50 printf("axmap_next_free broken: got %llu\n", (unsigned long long) ff);
59 static int test_multi(size_t size, unsigned int bit_off)
61 unsigned int map_size = size;
63 uint64_t val = bit_off;
66 printf("Test multi %llu entries %u offset...", (unsigned long long) size, bit_off);
69 map = axmap_new(map_size);
70 while (val + 128 <= map_size) {
72 for (i = val; i < val + 128; i++) {
73 if (axmap_isset(map, val + i)) {
74 printf("bit already set\n");
83 err = axmap_set_nr(map, val, 128);
85 printf("only set %u bits\n", err);
90 for (i = 0; i < 128; i++) {
91 if (!axmap_isset(map, val + i)) {
92 printf("bit not set: %llu\n", (unsigned long long) val + i);
110 static int test_overlap(void)
115 printf("Test overlaps...");
118 map = axmap_new(200);
120 ret = axmap_set_nr(map, 16, 16);
122 printf("fail 0 16: %d\n", ret);
126 ret = axmap_set_nr(map, 0, 32);
128 printf("fail 0 32: %d\n", ret);
132 ret = axmap_set_nr(map, 48, 32);
134 printf("fail 48 32: %d\n", ret);
138 ret = axmap_set_nr(map, 32, 32);
140 printf("fail 32 32: %d\n", ret);
144 ret = axmap_set_nr(map, 102, 1);
146 printf("fail 102 1: %d\n", ret);
150 ret = axmap_set_nr(map, 101, 3);
152 printf("fail 102 1: %d\n", ret);
156 ret = axmap_set_nr(map, 106, 4);
158 printf("fail 106 4: %d\n", ret);
162 ret = axmap_set_nr(map, 105, 3);
164 printf("fail 105 3: %d\n", ret);
168 ret = axmap_set_nr(map, 120, 4);
170 printf("fail 120 4: %d\n", ret);
174 ret = axmap_set_nr(map, 118, 2);
176 printf("fail 118 2: %d\n", ret);
180 ret = axmap_set_nr(map, 118, 2);
182 printf("fail 118 2: %d\n", ret);
191 int main(int argc, char *argv[])
193 size_t size = (1UL << 23) - 200;
197 size = strtoul(argv[1], NULL, 10);
199 seed = strtoul(argv[2], NULL, 10);
202 if (test_regular(size, seed))
204 if (test_multi(size, 0))
206 if (test_multi(size, 17))