2018-09-09 13:37:09 +00:00
|
|
|
#include "../source/defspace.c"
|
2018-10-09 03:45:26 +00:00
|
|
|
#include "test-defspace.h"
|
|
|
|
|
|
|
|
__attribute__((pure)) int
|
|
|
|
def_list_is_empty (const defspace_t *space)
|
|
|
|
{
|
|
|
|
return (!space->defs && space->def_tail == &space->defs);
|
|
|
|
}
|
|
|
|
|
|
|
|
__attribute__((pure)) int
|
|
|
|
def_list_is_valid (const defspace_t *space)
|
|
|
|
{
|
|
|
|
def_t *const *d = &space->defs;
|
|
|
|
|
|
|
|
while (*d) {
|
|
|
|
d = &(*d)->next;
|
|
|
|
}
|
|
|
|
return d == space->def_tail;
|
|
|
|
}
|
|
|
|
|
|
|
|
int
|
|
|
|
free_locs_is_valid (const defspace_t *space)
|
|
|
|
{
|
|
|
|
int free_space = 0;
|
|
|
|
const locref_t *loc;
|
|
|
|
|
|
|
|
for (loc = space->free_locs; loc; loc = loc->next) {
|
|
|
|
if (loc->ofs < 0) {
|
|
|
|
printf ("negative offset in free_locs\n");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
if (loc->size <= 0) {
|
|
|
|
printf ("zero or negative size in free_locs\n");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
if (loc->next && loc->ofs > loc->next->ofs) {
|
|
|
|
printf ("free_locs not in ascending order\n");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
if (loc->next && loc->ofs + loc->size > loc->next->ofs) {
|
|
|
|
printf ("overlap in free_locs\n");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
if (loc->next && loc->ofs + loc->size == loc->next->ofs) {
|
|
|
|
printf ("adjoining nodes in free_locs\n");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
free_space += loc->size;
|
|
|
|
}
|
|
|
|
if (free_space > space->size) {
|
|
|
|
printf ("free_locs describes too much free space\n");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
return 1;
|
|
|
|
}
|