project(tests)

set(TESTS_DIR ${CMAKE_CURRENT_LIST_DIR})
set(MVSIM_CLI_EXE_PATH $<TARGET_FILE:mvsim>)
set(MVSIM_COMMS_LIB_PATH $<TARGET_FILE_DIR:mvsim-comms>)
set(MVSIM_MSGS_LIB_PATH $<TARGET_FILE_DIR:mvsim-msgs>)
set(MVSIM_SIMULATOR_LIB_PATH $<TARGET_FILE_DIR:mvsim-simulator>)


if(MVSIM_WITH_PYTHON AND MVSIM_WITH_ZMQ)
  # ----------------------------------------------------------
  # Python tests
  # ----------------------------------------------------------
  # Basic sensor readings
  add_test(
      NAME Still2DLidarRanges
      COMMAND ${CMAKE_COMMAND}
      -E env
          PYTHONPATH=${CMAKE_BINARY_DIR}:$ENV{PYTHONPATH}
          LD_LIBRARY_PATH=${MVSIM_COMMS_LIB_PATH}:${MVSIM_MSGS_LIB_PATH}:${MVSIM_SIMULATOR_LIB_PATH}:$ENV{LD_LIBRARY_PATH}
          TESTS_DIR=${TESTS_DIR}
          MVSIM_CLI_EXE_PATH=${MVSIM_CLI_EXE_PATH}
          ${PYTHON_EXECUTABLE} ${TESTS_DIR}/test-still-lidar2d.py
  )
  # Fail instead of hanging forever if the server never comes up:
  set_tests_properties(Still2DLidarRanges PROPERTIES TIMEOUT 300)
  # Not needed?
  #    LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/modules/comms/lib/:${CMAKE_BINARY_DIR}/modules/simulator/lib/:${CMAKE_BINARY_DIR}/modules/msgs/lib/:$ENV{LD_LIBRARY_PATH}
endif()

# ----------------------------------------------------------
# C++ tests
# ----------------------------------------------------------
mvsim_add_test(
	TARGET test_shape2p5
	SOURCES test_shape2p5.cpp
	LINK_LIBRARIES mvsim::simulator
	)

mvsim_add_test(
	TARGET test_imu_noise_model
	SOURCES test_imu_noise_model.cpp
	LINK_LIBRARIES mvsim::simulator
	)

mvsim_add_test(
	TARGET test_vehicle_trajectories
	SOURCES test_vehicle_trajectories.cpp
	LINK_LIBRARIES mvsim::simulator
	)

mvsim_add_test(
	TARGET test_pose_trajectory_follower
	SOURCES test_pose_trajectory_follower.cpp
	LINK_LIBRARIES mvsim::simulator
	)

mvsim_add_test(
	TARGET test_trajectory_controller
	SOURCES test_trajectory_controller.cpp
	LINK_LIBRARIES mvsim::simulator
	)

mvsim_add_test(
	TARGET test_elevation_queries
	SOURCES test_elevation_queries.cpp
	LINK_LIBRARIES mvsim::simulator
	)

mvsim_add_test(
	TARGET test_drift_on_elevation
	SOURCES test_drift_on_elevation.cpp
	LINK_LIBRARIES mvsim::simulator
	)

mvsim_add_test(
	TARGET test_raytracer_primitives
	SOURCES test_raytracer_primitives.cpp
	LINK_LIBRARIES mvsim::raytracer
	)

mvsim_add_test(
	TARGET test_raytracer_bvh
	SOURCES test_raytracer_bvh.cpp
	LINK_LIBRARIES mvsim::raytracer
	)

mvsim_add_test(
	TARGET test_lidar3d_model
	SOURCES test_lidar3d_model.cpp
	LINK_LIBRARIES mvsim::raytracer
	)

mvsim_add_test(
	TARGET test_dataset_gen_e2e
	SOURCES test_dataset_gen_e2e.cpp
	LINK_LIBRARIES mvsim::simulator
	)
target_compile_definitions(test_dataset_gen_e2e PRIVATE
	MVSIM_DATASET_GEN_EXE_PATH="$<TARGET_FILE:mvsim-dataset-gen>"
	MVSIM_TUTORIAL_DIR="${CMAKE_CURRENT_SOURCE_DIR}/../mvsim_tutorial"
	)
add_dependencies(test_dataset_gen_e2e mvsim-dataset-gen)
