
include(${PROJECT_ROOT_DIR}/cmake/bazel.cmake)
include(${PROJECT_ROOT_DIR}/cmake/option.cmake)

if(APPLE)
  set(APPLE_FRAMEWORK_LIBS
    -framework CoreFoundation
    -framework CoreGraphics
    -framework CoreData
    -framework CoreText
    -framework Security
    -framework Foundation
    -Wl,-U,_MallocExtension_ReleaseFreeMemory
    -Wl,-U,_ProfilerStart
    -Wl,-U,_ProfilerStop
    -Wl,-U,_RegisterThriftProtocol
  )
endif()

file(GLOB_RECURSE ALL_TEST_SRCS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *_test.cc)

if(MSVC)
  #TODO(windows): should include these UTs
  set(_MSVC_EXCLUDE_TESTS
    "storage/mmap_store_test.cc"
    "storage/mem_store_test.cc"
    "column/inverted_column/inverted_indexer_util_test.cc"
    "segment/segment_test.cc"
  )
  foreach(_excl ${_MSVC_EXCLUDE_TESTS})
    list(FILTER ALL_TEST_SRCS EXCLUDE REGEX "${_excl}")
  endforeach()
endif()

foreach(CC_SRCS ${ALL_TEST_SRCS})
  get_filename_component(CC_TARGET ${CC_SRCS} NAME_WE)
  cc_gmock(
    NAME ${CC_TARGET} STRICT
    LIBS zvec
    zvec_ailego
    zvec_proto
          core_knn_diskann
    core_metric_static
    core_utility_static
    core_quantizer_static
    core_knn_hnsw core_knn_hnsw_sparse sparsehash
    core_knn_flat core_knn_flat_sparse core_knn_ivf
    core_knn_hnsw_rabitq core_mix_reducer
    Arrow::arrow_dataset
    ${CMAKE_THREAD_LIBS_INIT}
    ${CMAKE_DL_LIBS}
    SRCS ${CC_SRCS} utils/utils.cc
    INCS . .. ../../src
    LDFLAGS ${APPLE_FRAMEWORK_LIBS}
  )
  cc_test_suite(zvec_index ${CC_TARGET})
endforeach()

# Inject TEST_SOURCE_DIR for fts_column_indexer_test so it can locate testdata/
if(TARGET fts_column_indexer_test)
  target_compile_definitions(fts_column_indexer_test PRIVATE
    TEST_SOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}/column/fts_column"
    JIEBA_DICT_DIR="${PROJECT_SOURCE_DIR}/thirdparty/cppjieba/cppjieba-5.6.7/dict")
endif()
