Fix a bug where allocator was unable to allocate up to last (n%64) blocks, add tests for it

This commit is contained in:
Vitaliy Filippov
2021-03-13 02:19:02 +03:00
parent dd76eda5e5
commit f49fd53d55
3 changed files with 40 additions and 21 deletions
+30 -11
View File
@@ -2,20 +2,39 @@
// License: VNPL-1.1 (see README.md for details)
#include <stdio.h>
#include <stdlib.h>
#include "allocator.h"
void alloc_all(int size)
{
allocator *a = new allocator(size);
for (int i = 0; i < size; i++)
{
uint64_t x = a->find_free();
if (x == UINT64_MAX)
{
printf("ran out of space %d allocated=%d\n", size, i);
exit(1);
}
if (x != i)
{
printf("incorrect block allocated: expected %d, got %lu\n", i, x);
}
a->set(x, true);
}
uint64_t x = a->find_free();
if (x != UINT64_MAX)
{
printf("extra free space found: %lx (%d)\n", x, size);
exit(1);
}
delete a;
}
int main(int narg, char *args[])
{
allocator a(8192);
for (int i = 0; i < 8192; i++)
{
uint64_t x = a.find_free();
if (x == UINT64_MAX)
{
printf("ran out of space %d\n", i);
return 1;
}
a.set(x, true);
}
alloc_all(8192);
alloc_all(8062);
alloc_all(4096);
return 0;
}