#include #include "arena.h" #define NUM_OBJECTS 8 struct test_5 { uint64_t value; uint8_t pad; }; struct ucl_arena *arena = NULL; void setUp(void) { arena = ucl_arena_create(sizeof(struct test_5), NUM_OBJECTS); } static void put_all(struct ucl_arena *arena, void *object) { ucl_arena_put(arena, object); } void tearDown(void) { ucl_arena_map(arena, put_all); } static void test_arena_single(void) { struct test_5 *object = ucl_arena_get(arena); TEST_ASSERT_NOT_NULL(object); } static void test_arena_get_all(void) { struct test_5 *objects[NUM_OBJECTS] = { NULL }; for (int i = 0; i < NUM_OBJECTS; i++) { objects[i] = ucl_arena_get(arena); TEST_ASSERT_NOT_NULL(objects[i]); } } static void test_arena_get_put_limit(void) { struct test_5 *objects[NUM_OBJECTS] = { NULL }; for (int i = 0; i < NUM_OBJECTS; i++) { objects[i] = ucl_arena_get(arena); TEST_ASSERT_NOT_NULL(objects[i]); } ucl_arena_put(arena, (void *) objects[4]); struct test_5 *spare = ucl_arena_get(arena); TEST_ASSERT_EQUAL(spare, objects[4]); } static void test_arena_get_over_limit(void) { struct test_5 *objects[NUM_OBJECTS + 1] = { NULL }; for (int i = 0; i < NUM_OBJECTS + 1; i++) { objects[i] = ucl_arena_get(arena); if (i < NUM_OBJECTS) { TEST_ASSERT_NOT_NULL(objects[i]); } else { TEST_ASSERT_NULL(objects[i]); } } } int main(void) { UNITY_BEGIN(); RUN_TEST(test_arena_single); RUN_TEST(test_arena_get_all); RUN_TEST(test_arena_get_put_limit); RUN_TEST(test_arena_get_over_limit); return UNITY_END(); }