11# CMakeLists.txt
22cmake_minimum_required (VERSION 3.22 )
33
4+ enable_testing ()
5+
46project (clox LANGUAGES C )
57
68# -----------------------------------------------------------------
@@ -37,6 +39,13 @@ set_source_files_properties(${VERSION_C} PROPERTIES GENERATED TRUE)
3739file (GLOB SRC_FILES CONFIGURE_DEPENDS src/*.c )
3840list (FILTER SRC_FILES EXCLUDE REGEX ".*/version\\ .c$" )
3941
42+ # ---
43+ # Test Source Files
44+ # ---
45+ file (GLOB UNIT_TEST_SRCS unit/*.c )
46+
47+ option (BUILD_TESTS "Build unit‑tests for project" OFF )
48+
4049# -----------------------------------------------------------------
4150# Executables
4251# -----------------------------------------------------------------
@@ -56,6 +65,36 @@ target_link_libraries(clox-test PRIVATE readline m)
5665add_dependencies (clox generate_version_c )
5766add_dependencies (clox-test generate_version_c )
5867
68+ if (BUILD_TESTS)
69+
70+ # -----------------------------------------------------------------
71+ # Tests
72+ # -----------------------------------------------------------------
73+
74+ add_executable (clox-version-unit-test unit/version.c ${VERSION_C} )
75+ add_dependencies (clox-version-unit-test generate_version_c )
76+ add_test (
77+ NAME clox-version-unit-test
78+ COMMAND clox-version-unit-test
79+ )
80+
81+ add_executable (clox-token-token-test unit/token.c src/token.c ${VERSION_C} )
82+ add_dependencies (clox-token-token-test generate_version_c )
83+ add_test (
84+ NAME clox-token-unit-test
85+ COMMAND clox-token-unit-test
86+ )
87+
88+ add_executable (clox-value-unit-test unit/value.c src/value.c src/object.c src/hashtable.c src/chunk.c src/memory.c src/vm.c src/assert.c src/scanner.c src/compiler.c src/token.c src/native.c ${VERSION_C} )
89+ add_dependencies (clox-value-unit-test generate_version_c )
90+ target_link_libraries (clox-value-unit-test PRIVATE readline m )
91+ add_test (
92+ NAME clox-value-unit-test
93+ COMMAND clox-value-unit-test
94+ )
95+
96+ endif ()
97+
5998# -----------------------------------------------------------------
6099# Coverage option
61100# -----------------------------------------------------------------
@@ -70,4 +109,7 @@ if(ENABLE_COVERAGE)
70109
71110 target_compile_options (clox-test PRIVATE ${COVERAGE_COMPILE_FLAGS} )
72111 target_link_options (clox-test PRIVATE ${COVERAGE_LINK_FLAGS} )
112+
113+ target_compile_options (clox-unit-test PRIVATE ${COVERAGE_COMPILE_FLAGS} )
114+ target_link_options (clox-unit-test PRIVATE ${COVERAGE_LINK_FLAGS} )
73115endif ()
0 commit comments