if (VTKm_VERSION VERSION_EQUAL "1.9")
  set(VTKM_LIBS vtkm_io)
elseif(VTKm_VERSION VERSION_GREATER_EQUAL "2.0")
  set(VTKM_LIBS vtkm::io)
endif()

add_executable(test-basic test-basic.cxx)
vtkm_add_target_information(test-basic
                            DROP_UNUSED_SYMBOLS
                            MODIFY_CUDA_FLAGS
                            DEVICE_SOURCES test-basic.cxx)
target_compile_definitions(test-basic PRIVATE ${MPI_DEFS})
target_link_libraries(test-basic PRIVATE fides adios2::adios2 ${MPI_LIBS})
add_test(NAME test-basic
  COMMAND test-basic
    ${CMAKE_CURRENT_SOURCE_DIR}/vtk-uns-grid-2.json
    ${CMAKE_CURRENT_SOURCE_DIR}/data
)

add_executable(test-explicit test-explicit.cxx)
vtkm_add_target_information(test-explicit
                            DROP_UNUSED_SYMBOLS
                            MODIFY_CUDA_FLAGS
                            DEVICE_SOURCES test-explicit.cxx)
target_compile_definitions(test-explicit PRIVATE ${MPI_DEFS})
target_link_libraries(test-explicit PRIVATE fides adios2::adios2 ${MPI_LIBS})
add_test(NAME test-explicit
  COMMAND test-explicit
    ${CMAKE_CURRENT_SOURCE_DIR}/vtk-uns-grid-3.json
    ${CMAKE_CURRENT_SOURCE_DIR}/data
)

add_executable(test-streaming test-streaming.cxx)
vtkm_add_target_information(test-streaming
                            DROP_UNUSED_SYMBOLS
                            MODIFY_CUDA_FLAGS
                            DEVICE_SOURCES test-streaming.cxx)
target_compile_definitions(test-streaming PRIVATE ${MPI_DEFS})
target_link_libraries(test-streaming PRIVATE fides adios2::adios2 ${MPI_LIBS})
add_test(NAME test-streaming
  COMMAND test-streaming
    ${CMAKE_CURRENT_SOURCE_DIR}/vtk-uns-grid-2.json
    ${CMAKE_CURRENT_SOURCE_DIR}/data
)

add_executable(test-streaming-separate-sources
  test-streaming-separate-sources.cxx
)
vtkm_add_target_information(test-streaming-separate-sources
                            DROP_UNUSED_SYMBOLS
                            MODIFY_CUDA_FLAGS
                            DEVICE_SOURCES test-streaming-separate-sources.cxx)
target_compile_definitions(test-streaming-separate-sources PRIVATE ${MPI_DEFS})
target_link_libraries(test-streaming-separate-sources
  PRIVATE fides adios2::adios2 ${MPI_LIBS}
)
add_test(NAME test-streaming-separate-sources
  COMMAND test-streaming-separate-sources
    ${CMAKE_CURRENT_SOURCE_DIR}/vtk-uns-grid-sep.json
    ${CMAKE_CURRENT_SOURCE_DIR}/data/
)

add_executable(test-time test-time.cxx)
vtkm_add_target_information(test-time
                            DROP_UNUSED_SYMBOLS
                            MODIFY_CUDA_FLAGS
                            DEVICE_SOURCES test-time.cxx)
target_compile_definitions(test-time PRIVATE ${MPI_DEFS})
target_link_libraries(test-time PRIVATE fides adios2::adios2 ${MPI_LIBS})
add_test(NAME test-time
  COMMAND test-time
    ${CMAKE_CURRENT_SOURCE_DIR}/vtk-uns-grid-2.json
    ${CMAKE_CURRENT_SOURCE_DIR}/data
)

add_executable(test-cartesian test-cartesian.cxx)
vtkm_add_target_information(test-cartesian
                            DROP_UNUSED_SYMBOLS
                            MODIFY_CUDA_FLAGS
                            DEVICE_SOURCES test-cartesian.cxx)
target_compile_definitions(test-cartesian PRIVATE ${MPI_DEFS})
target_link_libraries(test-cartesian PRIVATE fides adios2::adios2 ${MPI_LIBS})
add_test(NAME test-cartesian
  COMMAND test-cartesian
    ${CMAKE_CURRENT_SOURCE_DIR}/cartesian.json
    ${CMAKE_CURRENT_SOURCE_DIR}/data
)

add_executable(test-write test-write.cxx)
vtkm_add_target_information(test-write
                            DROP_UNUSED_SYMBOLS
                            MODIFY_CUDA_FLAGS
                            DEVICE_SOURCES test-write.cxx)
target_compile_definitions(test-write PRIVATE ${MPI_DEFS})
target_link_libraries(test-write PRIVATE fides adios2::adios2 fides_rapidjson ${MPI_LIBS})
add_test(NAME test-write
  COMMAND test-write
)

add_executable(test-structured test-structured.cxx)
vtkm_add_target_information(test-structured
                            DROP_UNUSED_SYMBOLS
                            MODIFY_CUDA_FLAGS
                            DEVICE_SOURCES test-structured.cxx)
target_compile_definitions(test-structured PRIVATE ${MPI_DEFS})
target_link_libraries(test-structured PRIVATE fides adios2::adios2 ${MPI_LIBS})
add_test(NAME test-structured
  COMMAND test-structured
    ${CMAKE_CURRENT_SOURCE_DIR}/structured.json
    ${CMAKE_CURRENT_SOURCE_DIR}/data
)

add_executable(test-rectilinear test-rectilinear.cxx)
vtkm_add_target_information(test-rectilinear
                            DROP_UNUSED_SYMBOLS
                            MODIFY_CUDA_FLAGS
                            DEVICE_SOURCES test-rectilinear.cxx)
target_compile_definitions(test-rectilinear PRIVATE ${MPI_DEFS})
target_link_libraries(test-rectilinear PRIVATE fides adios2::adios2 ${MPI_LIBS})
add_test(NAME test-rectilinear
  COMMAND test-rectilinear
    ${CMAKE_CURRENT_SOURCE_DIR}/rectilinear.json
    ${CMAKE_CURRENT_SOURCE_DIR}/data
)

add_executable(test-inline test-inline.cxx)
vtkm_add_target_information(test-inline
                            DROP_UNUSED_SYMBOLS
                            MODIFY_CUDA_FLAGS
                            DEVICE_SOURCES test-inline.cxx)
target_compile_definitions(test-inline PRIVATE ${MPI_DEFS})
target_link_libraries(test-inline PRIVATE fides adios2::adios2 ${MPI_LIBS})
add_test(NAME test-inline
  COMMAND test-inline
    ${CMAKE_CURRENT_SOURCE_DIR}/test-inline.json
)

add_executable(test-xgc test-xgc.cxx)
vtkm_add_target_information(test-xgc
                            DROP_UNUSED_SYMBOLS
                            MODIFY_CUDA_FLAGS
                            DEVICE_SOURCES test-xgc.cxx)
target_compile_definitions(test-xgc PRIVATE ${MPI_DEFS})
target_link_libraries(test-xgc PRIVATE fides adios2::adios2 ${VTKM_LIBS} ${MPI_LIBS})
add_test(NAME test-xgc
  COMMAND test-xgc
    ${CMAKE_CURRENT_SOURCE_DIR}/test-xgc.json
    ${CMAKE_CURRENT_SOURCE_DIR}/data
)

add_executable(test-gem test-gem.cxx)
vtkm_add_target_information(test-gem
                            DROP_UNUSED_SYMBOLS
                            MODIFY_CUDA_FLAGS
                            DEVICE_SOURCES test-gem.cxx)
target_compile_definitions(test-gem PRIVATE ${MPI_DEFS})
target_link_libraries(test-gem PRIVATE fides adios2::adios2 ${VTKM_LIBS} ${MPI_LIBS})
add_test(NAME test-gem
  COMMAND test-gem
    ${CMAKE_CURRENT_SOURCE_DIR}/test-gem.json
    ${CMAKE_CURRENT_SOURCE_DIR}/data
)

add_executable(test-gtc test-gtc.cxx)
vtkm_add_target_information(test-gtc
                            DROP_UNUSED_SYMBOLS
                            MODIFY_CUDA_FLAGS
                            DEVICE_SOURCES test-gtc.cxx)
target_compile_definitions(test-gtc PRIVATE ${MPI_DEFS})
target_link_libraries(test-gtc PRIVATE fides adios2::adios2 ${VTKM_LIBS} ${MPI_LIBS})
add_test(NAME test-gtc
  COMMAND test-gtc
    ${CMAKE_CURRENT_SOURCE_DIR}/test-gtc.json
    ${CMAKE_CURRENT_SOURCE_DIR}/data
)

add_executable(test-composite test-composite.cxx)
vtkm_add_target_information(test-composite
                            DROP_UNUSED_SYMBOLS
                            MODIFY_CUDA_FLAGS
                            DEVICE_SOURCES test-composite.cxx)
target_compile_definitions(test-composite PRIVATE ${MPI_DEFS})
target_link_libraries(test-composite PRIVATE fides adios2::adios2 ${MPI_LIBS})
add_test(NAME test-composite
  COMMAND test-composite
    ${CMAKE_CURRENT_SOURCE_DIR}/test-composite-points.json
    ${CMAKE_CURRENT_SOURCE_DIR}/data
)

add_executable(test-predefined-model test-predefined-models.cxx)
vtkm_add_target_information(test-predefined-model
                            DROP_UNUSED_SYMBOLS
                            MODIFY_CUDA_FLAGS
                            DEVICE_SOURCES test-predefined-models.cxx)

target_compile_definitions(test-predefined-model PRIVATE ${MPI_DEFS})
target_link_libraries(test-predefined-model PRIVATE fides adios2::adios2 fides_rapidjson ${MPI_LIBS})
add_test(NAME test-predefined-model-uniform
  COMMAND test-predefined-model
    uniform
    ${CMAKE_CURRENT_SOURCE_DIR}/data
    ${CMAKE_CURRENT_SOURCE_DIR}/fides-schema.json
)
add_test(NAME test-predefined-model-rectilinear
  COMMAND test-predefined-model
    rectilinear
    ${CMAKE_CURRENT_SOURCE_DIR}/data
    ${CMAKE_CURRENT_SOURCE_DIR}/fides-schema.json
)
add_test(NAME test-predefined-model-unstructured
  COMMAND test-predefined-model
    unstructured
    ${CMAKE_CURRENT_SOURCE_DIR}/data
    ${CMAKE_CURRENT_SOURCE_DIR}/fides-schema.json
)
add_test(NAME test-predefined-model-unstructured-single
  COMMAND test-predefined-model
    unstructured_single
    ${CMAKE_CURRENT_SOURCE_DIR}/data
    ${CMAKE_CURRENT_SOURCE_DIR}/fides-schema.json
)
add_test(NAME test-predefined-model-xgc
  COMMAND test-predefined-model
    xgc
    ${CMAKE_CURRENT_SOURCE_DIR}/data
    ${CMAKE_CURRENT_SOURCE_DIR}/fides-schema.json
)

add_executable(validate-schema validate-schema.cxx)
target_link_libraries(validate-schema PRIVATE fides_rapidjson)
add_test(NAME validate-vtk-uns-grid-2
  COMMAND validate-schema
  ${CMAKE_CURRENT_SOURCE_DIR}/fides-schema.json
  ${CMAKE_CURRENT_SOURCE_DIR}/vtk-uns-grid-2.json)
add_test(NAME validate-vtk-uns-grid-3
  COMMAND validate-schema
  ${CMAKE_CURRENT_SOURCE_DIR}/fides-schema.json
  ${CMAKE_CURRENT_SOURCE_DIR}/vtk-uns-grid-3.json)
add_test(NAME validate-vtk-uns-grid-sep
  COMMAND validate-schema
  ${CMAKE_CURRENT_SOURCE_DIR}/fides-schema.json
  ${CMAKE_CURRENT_SOURCE_DIR}/vtk-uns-grid-sep.json)
add_test(NAME validate-cartesian
  COMMAND validate-schema
  ${CMAKE_CURRENT_SOURCE_DIR}/fides-schema.json
  ${CMAKE_CURRENT_SOURCE_DIR}/cartesian.json)
add_test(NAME validate-rectilinear
  COMMAND validate-schema
  ${CMAKE_CURRENT_SOURCE_DIR}/fides-schema.json
  ${CMAKE_CURRENT_SOURCE_DIR}/rectilinear.json)
add_test(NAME validate-structured
  COMMAND validate-schema
  ${CMAKE_CURRENT_SOURCE_DIR}/fides-schema.json
  ${CMAKE_CURRENT_SOURCE_DIR}/structured.json)
add_test(NAME validate-inline
  COMMAND validate-schema
  ${CMAKE_CURRENT_SOURCE_DIR}/fides-schema.json
  ${CMAKE_CURRENT_SOURCE_DIR}/test-inline.json)
add_test(NAME validate-xgc
  COMMAND validate-schema
  ${CMAKE_CURRENT_SOURCE_DIR}/fides-schema.json
  ${CMAKE_CURRENT_SOURCE_DIR}/test-xgc.json)

add_executable(test-deprecated test-deprecated.cxx)
target_link_libraries(test-deprecated PRIVATE fides ${MPI_LIBS})
add_test(NAME test-deprecated
  COMMAND test-deprecated)

fides_sanitizer_apply_env(ALL_IN_DIRECTORY)
