Create simple, bump allocator store

This commit is contained in:
2025-08-09 17:01:56 +01:00
parent 23bbbea755
commit f41d3a949c
5 changed files with 66 additions and 0 deletions

View File

@@ -1,5 +1,6 @@
add_library(imp add_library(imp
memory_stream.c memory_stream.c
store.c
token.c token.c
) )
target_include_directories(imp PUBLIC include) target_include_directories(imp PUBLIC include)

16
lib/include/store.h Normal file
View File

@@ -0,0 +1,16 @@
#ifndef STORE_H
#define STORE_H
#include "expr.h"
#define STORE_SIZE 256U
typedef struct {
expr_t *free;
expr_t buffer[STORE_SIZE];
} store_t;
void store_init(store_t *store);
expr_t *store_alloc(store_t *store);
#endif

14
lib/store.c Normal file
View File

@@ -0,0 +1,14 @@
#include "store.h"
#include <string.h>
void store_init(store_t *store)
{
memset(store, 0, sizeof(store_t));
store->free = store->buffer;
}
expr_t *store_alloc(store_t *store)
{
return store->free++;
}

View File

@@ -9,5 +9,6 @@ function(add_test_suites)
endfunction() endfunction()
add_test_suites( add_test_suites(
store_tests.c
token_tests.c token_tests.c
) )

34
tests/store_tests.c Normal file
View File

@@ -0,0 +1,34 @@
#include "store.h"
#include "unity.h"
static store_t store;
void setUp(void)
{
store_init(&store);
}
void tearDown(void)
{
}
static void test_alloc_returns_non_null_after_init(void)
{
const expr_t *const expr = store_alloc(&store);
TEST_ASSERT_NOT_NULL(expr);
}
static void test_two_calls_to_alloc_return_distinct(void)
{
const expr_t *const a = store_alloc(&store);
const expr_t *const b = store_alloc(&store);
TEST_ASSERT_NOT_EQUAL(a, b);
}
int main(void)
{
UNITY_BEGIN();
RUN_TEST(test_alloc_returns_non_null_after_init);
RUN_TEST(test_two_calls_to_alloc_return_distinct);
return UNITY_END();
}