cmake_minimum_required(VERSION 3.25)
project(benchmark_menu_tests LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(rexglue 0.10.0 REQUIRED CONFIG)

add_executable(title_menu_test ../title_menu_test.cpp)
target_compile_definitions(title_menu_test PRIVATE FORZA_TITLE_UPDATE=4)
target_include_directories(title_menu_test PRIVATE ../../src)
target_link_libraries(title_menu_test PRIVATE rex::runtime)

add_executable(benchmark_stats_test ../benchmark_stats_test.cpp)
add_executable(benchmark_profile_test ../benchmark_profile_test.cpp)
add_executable(input_caps_test ../input_caps_test.cpp)
add_executable(benchmark_camera_settings_test ../benchmark_camera_settings_test.cpp)
target_compile_definitions(benchmark_camera_settings_test PRIVATE FORZA_TITLE_UPDATE=4)
target_include_directories(benchmark_camera_settings_test PRIVATE ../../src)
target_link_libraries(benchmark_camera_settings_test PRIVATE rex::runtime)
target_include_directories(input_caps_test PRIVATE ../../src)
target_link_libraries(input_caps_test PRIVATE rex::runtime)

enable_testing()
foreach(version 0 4)
    add_executable(benchmark_session_tu${version}_test ../benchmark_session_test.cpp)
    target_compile_definitions(benchmark_session_tu${version}_test PRIVATE FORZA_TITLE_UPDATE=${version})
    target_link_libraries(benchmark_session_tu${version}_test PRIVATE rex::runtime)
    if(MSVC)
        target_compile_options(benchmark_session_tu${version}_test PRIVATE /UNDEBUG)
    else()
        target_compile_options(benchmark_session_tu${version}_test PRIVATE -UNDEBUG)
    endif()
    foreach(scenario confirmation success success-dlc failure invalid)
        add_test(NAME benchmark_session_tu${version}_${scenario}
            COMMAND benchmark_session_tu${version}_test ${scenario}
            "${CMAKE_CURRENT_BINARY_DIR}/session-tu${version}-${scenario}")
    endforeach()
endforeach()
foreach(test title_menu benchmark_stats benchmark_profile input_caps benchmark_camera_settings)
    # The existing standalone tests use assert, including in Release builds.
    if(MSVC)
        target_compile_options(${test}_test PRIVATE /UNDEBUG)
    else()
        target_compile_options(${test}_test PRIVATE -UNDEBUG)
    endif()
    add_test(NAME ${test} COMMAND ${test}_test)
endforeach()
