find_package(GTest "1.11.0" REQUIRED COMPONENTS GTest PATHS "${YGGDRASIL_NATIVE_PREFIX}" NO_DEFAULT_PATH)
find_package(Boost REQUIRED COMPONENTS json PATHS "${YGGDRASIL_NATIVE_PREFIX}" NO_DEFAULT_PATH)
find_package(fmt CONFIG REQUIRED PATHS "${YGGDRASIL_NATIVE_PREFIX}" NO_DEFAULT_PATH)
find_package(TBB CONFIG REQUIRED PATHS "${YGGDRASIL_NATIVE_PREFIX}" NO_DEFAULT_PATH)

function(add_yggdrasil_gtest test_name source_file)
    add_executable(${test_name} ${source_file} main.cpp)
    target_compile_features(${test_name} PRIVATE cxx_std_20)
    target_include_directories(${test_name} PRIVATE "${PROJECT_SOURCE_DIR}/include" "${YGGDRASIL_NATIVE_PREFIX}/include")
    target_compile_definitions(${test_name} PRIVATE ROOT_DIR="${PROJECT_SOURCE_DIR}")
    target_link_libraries(${test_name} PRIVATE GTest::gtest Boost::json fmt::fmt TBB::tbb)
    add_test(NAME ${test_name} COMMAND ${test_name})
endfunction()

add_yggdrasil_gtest(common_adapters "common/adapters.cpp")
add_yggdrasil_gtest(common_associative_containers "common/associative_containers.cpp")
add_yggdrasil_gtest(common_bit_packed_array_pool "common/bit_packed_array_pool.cpp")
add_yggdrasil_gtest(common_bit_packed_array_set "common/bit_packed_array_set.cpp")
add_yggdrasil_gtest(common_block_array_set "common/block_array_set.cpp")
add_yggdrasil_gtest(common_canonicalization "common/canonicalization.cpp")
add_yggdrasil_gtest(common_closed_interval "common/closed_interval.cpp")
add_yggdrasil_gtest(common_common "common/common.cpp")
add_yggdrasil_gtest(common_comparators "common/comparators.cpp")
add_yggdrasil_gtest(common_concepts "common/concepts.cpp")
add_yggdrasil_gtest(common_containers "common/containers.cpp")
add_yggdrasil_gtest(common_core "common/core.cpp")
add_yggdrasil_gtest(common_dynamic_bitset "common/dynamic_bitset.cpp")
add_yggdrasil_gtest(common_equal_to "common/equal_to.cpp")
add_yggdrasil_gtest(common_formatter "common/formatter.cpp")
add_yggdrasil_gtest(common_hash "common/hash.cpp")
add_yggdrasil_gtest(common_indexed_hash_set "common/indexed_hash_set.cpp")
add_yggdrasil_gtest(common_json "common/json.cpp")
add_yggdrasil_gtest(common_json_loader "common/json_loader.cpp")
add_yggdrasil_gtest(common_json_suite "common/json_suite.cpp")
add_yggdrasil_gtest(common_path "common/path.cpp")
add_yggdrasil_gtest(common_project_adapters "common/project_adapters.cpp")
add_yggdrasil_gtest(common_project_path "common/project_path.cpp")
add_yggdrasil_gtest(common_raw_array_pool "common/raw_array_pool.cpp")
add_yggdrasil_gtest(common_raw_array_set "common/raw_array_set.cpp")
add_yggdrasil_gtest(common_raw_vector_pool "common/raw_vector_pool.cpp")
add_yggdrasil_gtest(common_raw_vector_set "common/raw_vector_set.cpp")
add_yggdrasil_gtest(common_repository_types "common/repository_types.cpp")
add_yggdrasil_gtest(common_segmented_vector "common/segmented_vector.cpp")
add_yggdrasil_gtest(common_shared_object_pool "common/shared_object_pool.cpp")
add_yggdrasil_gtest(common_unique_object_pool "common/unique_object_pool.cpp")
add_yggdrasil_gtest(common_vector "common/vector.cpp")
add_yggdrasil_gtest(buffer_indexed_hash_set "buffer/indexed_hash_set.cpp")
add_yggdrasil_gtest(buffer_segmented_buffer "buffer/segmented_buffer.cpp")
