if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
  # warning level 4
  add_compile_options(/W4)
endif()

if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
  add_compile_options(-Wall -Wextra -Wpedantic)
endif()

if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
  add_compile_options(-Wall -Wextra -Wpedantic)
endif()

if(NOT TARGET tests)
  add_custom_target(tests)
endif()

set(PREFIX "boost_sort_")
set(LINK_LIBRARIES Boost::sort Boost::included_test_exec_monitor)
set(COMPILE_FEATURES cxx_std_11)

function(boost_sort_add_test name source)
  set(pname "${PREFIX}${name}")
  add_executable(${pname} ${source})
  target_link_libraries(${pname} PRIVATE ${LINK_LIBRARIES})
  target_compile_features(${pname} PRIVATE ${COMPILE_FEATURES})
  add_test(NAME ${pname} COMMAND ${pname})
  add_dependencies(tests ${pname})
endfunction()

boost_sort_add_test(float_sort_test float_sort_test.cpp)
boost_sort_add_test(integer_sort_test integer_sort_test.cpp)
boost_sort_add_test(sort_detail_test sort_detail_test.cpp)
boost_sort_add_test(string_sort_test string_sort_test.cpp)
boost_sort_add_test(test_block_indirect_sort test_block_indirect_sort.cpp)
boost_sort_add_test(test_flat_stable_sort test_flat_stable_sort.cpp)
boost_sort_add_test(test_insert_sort test_insert_sort.cpp)
boost_sort_add_test(test_parallel_stable_sort test_parallel_stable_sort.cpp)
boost_sort_add_test(test_pdqsort test_pdqsort.cpp)
boost_sort_add_test(test_sample_sort test_sample_sort.cpp)
boost_sort_add_test(test_spinsort test_spinsort.cpp)
