2026-05-20 18:53:21 -06:00
|
|
|
# ================================================================
|
|
|
|
|
# FIND CMOCKA (system → FetchContent as fallback)
|
|
|
|
|
# ================================================================
|
|
|
|
|
find_package(cmocka QUIET)
|
2026-03-29 10:40:09 -06:00
|
|
|
|
2026-05-20 18:53:21 -06:00
|
|
|
if(NOT cmocka_FOUND)
|
|
|
|
|
message(
|
|
|
|
|
STATUS "[arena] cmocka not found on system — fetching with FetchContent...")
|
|
|
|
|
|
|
|
|
|
include(FetchContent)
|
|
|
|
|
FetchContent_Declare(
|
|
|
|
|
cmocka
|
|
|
|
|
GIT_REPOSITORY https://git.cryptomilk.org/projects/cmocka.git
|
|
|
|
|
GIT_TAG cmocka-1.1.7
|
|
|
|
|
GIT_SHALLOW TRUE)
|
|
|
|
|
|
|
|
|
|
# Static lib only, no cmocka examples or self-tests
|
|
|
|
|
set(WITH_STATIC_LIB
|
|
|
|
|
ON
|
|
|
|
|
CACHE BOOL "" FORCE)
|
|
|
|
|
set(WITH_SHARED_LIB
|
|
|
|
|
OFF
|
|
|
|
|
CACHE BOOL "" FORCE)
|
|
|
|
|
set(WITH_CMOCKERY_SUPPORT
|
|
|
|
|
OFF
|
|
|
|
|
CACHE BOOL "" FORCE)
|
|
|
|
|
set(WITH_EXAMPLES
|
|
|
|
|
OFF
|
|
|
|
|
CACHE BOOL "" FORCE)
|
|
|
|
|
set(UNIT_TESTING
|
|
|
|
|
OFF
|
|
|
|
|
CACHE BOOL "" FORCE)
|
|
|
|
|
set(PICKY_DEVELOPER
|
|
|
|
|
OFF
|
|
|
|
|
CACHE BOOL "" FORCE)
|
|
|
|
|
|
|
|
|
|
FetchContent_MakeAvailable(cmocka)
|
2026-03-29 10:40:09 -06:00
|
|
|
|
2026-05-20 18:53:21 -06:00
|
|
|
# Normalize the target name (varies across cmocka versions)
|
|
|
|
|
if(NOT TARGET cmocka::cmocka)
|
|
|
|
|
if(TARGET cmocka-static)
|
|
|
|
|
add_library(cmocka::cmocka ALIAS cmocka-static)
|
|
|
|
|
elseif(TARGET cmocka)
|
|
|
|
|
add_library(cmocka::cmocka ALIAS cmocka)
|
|
|
|
|
else()
|
|
|
|
|
message(
|
|
|
|
|
WARNING
|
|
|
|
|
"[arena] Could not create cmocka::cmocka target — skipping tests.")
|
|
|
|
|
return()
|
|
|
|
|
endif()
|
|
|
|
|
endif()
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
# ================================================================
|
|
|
|
|
# DETECT ADDRESS SANITIZER SUPPORT
|
|
|
|
|
# ================================================================
|
|
|
|
|
set(ARENA_USE_ASAN OFF)
|
2026-03-29 10:40:09 -06:00
|
|
|
|
2026-04-23 12:09:34 -06:00
|
|
|
if(ARENA_ENABLE_SANITIZERS)
|
2026-05-20 18:53:21 -06:00
|
|
|
if(MSVC)
|
|
|
|
|
if(MSVC_VERSION GREATER_EQUAL 1928)
|
|
|
|
|
set(ARENA_USE_ASAN ON)
|
|
|
|
|
else()
|
|
|
|
|
message(STATUS "[arena] MSVC < 16.9: ASAN not available.")
|
|
|
|
|
endif()
|
|
|
|
|
elseif(CMAKE_C_COMPILER_ID MATCHES "GNU|Clang" AND NOT WIN32)
|
|
|
|
|
include(CheckCCompilerFlag)
|
|
|
|
|
check_c_compiler_flag(-fsanitize=address ARENA_COMPILER_HAS_ASAN)
|
|
|
|
|
if(ARENA_COMPILER_HAS_ASAN)
|
|
|
|
|
set(ARENA_USE_ASAN ON)
|
|
|
|
|
else()
|
|
|
|
|
message(STATUS "[arena] Compiler does not support -fsanitize=address.")
|
2026-04-23 12:09:34 -06:00
|
|
|
endif()
|
2026-05-20 18:53:21 -06:00
|
|
|
else()
|
|
|
|
|
message(STATUS "[arena] Unknown platform/compiler — ASAN skipped.")
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
if(ARENA_USE_ASAN)
|
|
|
|
|
message(STATUS "[arena] Address Sanitizer enabled.")
|
|
|
|
|
endif()
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
# ================================================================
|
|
|
|
|
# TEST EXECUTABLE
|
|
|
|
|
# ================================================================
|
|
|
|
|
add_executable(test_arena test_arena.c)
|
|
|
|
|
|
|
|
|
|
target_link_libraries(test_arena PRIVATE arena cmocka::cmocka)
|
|
|
|
|
|
|
|
|
|
target_compile_features(test_arena PRIVATE c_std_11)
|
|
|
|
|
|
|
|
|
|
# Apply ASAN flags per compiler
|
|
|
|
|
if(ARENA_USE_ASAN)
|
|
|
|
|
if(MSVC)
|
|
|
|
|
target_compile_options(test_arena PRIVATE /fsanitize=address)
|
|
|
|
|
else()
|
|
|
|
|
target_compile_options(test_arena PRIVATE -fsanitize=address
|
|
|
|
|
-fno-omit-frame-pointer)
|
|
|
|
|
target_link_options(test_arena PRIVATE -fsanitize=address)
|
|
|
|
|
endif()
|
2026-04-23 12:09:34 -06:00
|
|
|
endif()
|
refactor(all): Fixed alloc and moved growing logic to another function
OK, so evrything was a fucknig mess, it still kinda is, AI helped
me to clean my own mess, it really sucks but the fucking debugger
and address sanitizer were not working, also, there were small
small errors so no big deal but still, a bit sad, also changed a
the way i cast from uint8_t to double and int in the tests, may
change that i guess, verything else i might say is good :)
2026-04-03 12:44:01 -06:00
|
|
|
|
2026-05-20 18:53:21 -06:00
|
|
|
# ================================================================
|
|
|
|
|
# CTEST REGISTRATION
|
|
|
|
|
# ================================================================
|
2026-03-29 10:40:09 -06:00
|
|
|
add_test(NAME arena_tests COMMAND test_arena)
|
2026-05-20 18:53:21 -06:00
|
|
|
set_tests_properties(arena_tests PROPERTIES TIMEOUT 30)
|