75 lines
1.6 KiB
C
75 lines
1.6 KiB
C
#include <unity.h>
|
|
|
|
#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] = {};
|
|
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] = {};
|
|
|
|
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] = {};
|
|
|
|
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();
|
|
}
|