#include "../source/defspace.c" #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; }