# game/ai tests: the task vocabulary, the priority table read off the original, and the ranking.
add_executable(game_ai_test_tasks test_tasks.cpp)
target_link_libraries(game_ai_test_tasks PRIVATE sots_game_ai)
target_include_directories(game_ai_test_tasks PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
target_compile_options(game_ai_test_tasks PRIVATE -Wall -Wextra -pedantic)
add_test(NAME game_ai_tasks COMMAND game_ai_test_tasks)

# The AI stepping order and the two-pass model: which AI players run, in what order, and which
# pass may write commands. Pure data -- the ModCount sequence, computed offline.
add_executable(game_ai_test_turn_order test_turn_order.cpp)
target_link_libraries(game_ai_test_turn_order PRIVATE sots_game_ai)
target_include_directories(game_ai_test_turn_order PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
target_compile_options(game_ai_test_turn_order PRIVATE -Wall -Wextra -pedantic)
add_test(NAME game_ai_turn_order COMMAND game_ai_test_turn_order)

# The command block, the order API and the modification counter's arithmetic: what an order costs,
# which lists cost nothing, and the two reconstructions of the reference turn.
add_executable(game_ai_test_orders test_orders.cpp)
target_link_libraries(game_ai_test_orders PRIVATE sots_game_ai)
target_include_directories(game_ai_test_orders PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
target_compile_options(game_ai_test_orders PRIVATE -Wall -Wextra -pedantic)
add_test(NAME game_ai_orders COMMAND game_ai_test_orders)

# The turn's phase list and the two-pass task walk: the dead tail after the submit, the one
# species-restricted phase, and the first pass writing nothing.
add_executable(game_ai_test_agent test_agent.cpp)
target_link_libraries(game_ai_test_agent PRIVATE sots_game_ai)
target_include_directories(game_ai_test_agent PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
target_compile_options(game_ai_test_agent PRIVATE -Wall -Wextra -pedantic)
add_test(NAME game_ai_agent COMMAND game_ai_test_agent)

# The two AI command blocks read out of the RUNNING game (lane L4). Distinct from test_orders.cpp
# on purpose: that file is what static reading predicted, this one is what the game did, and the
# agreement between them is only evidence while the two stay independent.
add_executable(game_ai_test_live_blocks test_live_blocks.cpp)
target_link_libraries(game_ai_test_live_blocks PRIVATE sots_game_ai)
target_include_directories(game_ai_test_live_blocks PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
target_compile_options(game_ai_test_live_blocks PRIVATE -Wall -Wextra -pedantic)
add_test(NAME game_ai_live_blocks COMMAND game_ai_test_live_blocks)

# The order the server applies a turn's commands in: twenty-seven per-list steps with three
# per-player gate loops spliced in, which is neither list order nor member order.
add_executable(game_ai_test_apply_order test_apply_order.cpp)
target_link_libraries(game_ai_test_apply_order PRIVATE sots_game_ai)
target_include_directories(game_ai_test_apply_order PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
target_compile_options(game_ai_test_apply_order PRIVATE -Wall -Wextra -pedantic)
add_test(NAME game_ai_apply_order COMMAND game_ai_test_apply_order)

# The recorded-turn capture format and the two real turns that exist in it.
add_executable(game_ai_test_command_capture test_command_capture.cpp)
target_link_libraries(game_ai_test_command_capture PRIVATE sots_game_ai)
target_include_directories(game_ai_test_command_capture PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
target_compile_options(game_ai_test_command_capture PRIVATE -Wall -Wextra -pedantic)
add_test(NAME game_ai_command_capture COMMAND game_ai_test_command_capture)
