commit fc7d77be4729cd3b48db4e746e82c2dab343d003
parent 5235c0bde1ace2cbe5f03d39c7978305765e7ff1
Author: vaplv <vaplv@free.fr>
Date: Tue, 11 Oct 2016 09:53:50 +0200
Add and test the is_empty free list function
Diffstat:
2 files changed, 16 insertions(+), 0 deletions(-)
diff --git a/src/free_list.h b/src/free_list.h
@@ -212,6 +212,13 @@ CONCAT(FITEM_TYPE, _id_get)(const struct FITEM_TYPE* item)
return item->fitem__.id;
}
+static FINLINE int
+FLIST_FUNC__(is_empty)(struct FLIST_TYPE__* list)
+{
+ ASSERT(list);
+ return list->head == list->tail;
+}
+
#undef FLIST_TYPE__
#undef FLIST_FUNC__
#undef FITEM_TYPE
diff --git a/src/test_free_list.c b/src/test_free_list.c
@@ -41,9 +41,15 @@ main(int argc, char** argv)
}
flist_object_init(NULL, &list);
+ CHECK(flist_object_is_empty(&list), 1);
CHECK(flist_object_hold(&list, id[0]), 0);
CHECK(flist_object_get(&list, id[0]), NULL);
+ id[0] = flist_object_add(&list);
+ CHECK(flist_object_is_empty(&list), 0);
+ flist_object_clear(&list);
+ CHECK(flist_object_is_empty(&list), 1);
+
FOR_EACH(i, 0, NB_OBJ / 2) {
struct fid tmp_id;
id[i] = flist_object_add(&list);
@@ -54,6 +60,7 @@ main(int argc, char** argv)
NCHECK(obj, NULL);
obj->i = 0xDECAF000 + (unsigned)i;
}
+ CHECK(flist_object_is_empty(&list), 0);
FOR_EACH(i, 0, NB_OBJ * 2 / 3) {
const float rand_f /* in [0, 1] */ = (float)rand() / (float)RAND_MAX;
@@ -121,7 +128,9 @@ main(int argc, char** argv)
}
}
+ CHECK(flist_object_is_empty(&list), 0);
flist_object_clear(&list);
+ CHECK(flist_object_is_empty(&list), 1);
nitems = 0;
FLIST_FOR_EACH(obj, &list)
++nitems;