#
# Testing
#
ENABLE_TESTING()
# INCLUDE(${CMAKE_SOURCE_DIR}/platforms/cuda/cuda-cmake/FindCuda.cmake)
INCLUDE_DIRECTORIES(${CUDA_INCLUDE})
INCLUDE_DIRECTORIES(${OPENMM_DIR}/platforms/cuda/include)
INCLUDE_DIRECTORIES(${OPENMM_DIR}/platforms/cuda/src)
INCLUDE_DIRECTORIES(${OPENMM_DIR}/platforms/cuda/src/kernels)

# serialize test cases for GBVI and GBSAOBC softcore runs
# if INCLUDE_SERIALIZATION is TRUE

SET( INCLUDE_SERIALIZATION FALSE )
#SET( INCLUDE_SERIALIZATION TRUE )

SET( SHARED_OPENMM_TARGET OpenMMFreeEnergy)
SET( STATIC_OPENMM_TARGET OpenMMFreeEnergy_static)
SET( SHARED_CUDA_TARGET OpenMMCuda)
SET( STATIC_CUDA_TARGET OpenMMCuda_static)

IF( INCLUDE_SERIALIZATION )
    INCLUDE_DIRECTORIES(${OPENMM_DIR}/serialization/include)
    SET( SHARED_OPENMM_SERIALIZATION OpenMMSerialization )
    SET( SHARED_FREE_ENERGY_SERIALIZATION FreeEnergySerialization )
ENDIF( INCLUDE_SERIALIZATION )

IF (UNIX AND CMAKE_BUILD_TYPE MATCHES Debug)
    SET(SHARED_CUDA_TARGET   ${SHARED_CUDA_TARGET}_d)
    SET(SHARED_OPENMM_TARGET ${SHARED_OPENMM_TARGET}_d)
    IF( INCLUDE_SERIALIZATION )
        SET(SHARED_OPENMM_SERIALIZATION ${SHARED_OPENMM_SERIALIZATION}_d)
        SET(SHARED_FREE_ENERGY_SERIALIZATION ${SHARED_FREE_ENERGY_SERIALIZATION}_d)
    ENDIF( INCLUDE_SERIALIZATION )
    SET(STATIC_CUDA_TARGET ${STATIC_CUDA_TARGET}_d)
    SET(STATIC_OPENMM_TARGET ${STATIC_OPENMM_TARGET}_d)
ENDIF (UNIX AND CMAKE_BUILD_TYPE MATCHES Debug)

# Automatically create tests using files named "Test*.cpp"
FILE(GLOB TEST_PROGS "*Test*.cpp")
FOREACH(TEST_PROG ${TEST_PROGS})
    GET_FILENAME_COMPONENT(TEST_ROOT ${TEST_PROG} NAME_WE)

    # Link with shared library

    CUDA_ADD_EXECUTABLE(${TEST_ROOT} ${TEST_PROG})
    IF( INCLUDE_SERIALIZATION )
        TARGET_LINK_LIBRARIES(${TEST_ROOT} ${SHARED_TARGET} ${SHARED_OPENMM_TARGET} ${SHARED_CUDA_TARGET} ${SHARED_OPENMM_SERIALIZATION} ${SHARED_FREE_ENERGY_SERIALIZATION})
    ELSE( INCLUDE_SERIALIZATION )
        TARGET_LINK_LIBRARIES(${TEST_ROOT} ${SHARED_TARGET} ${SHARED_OPENMM_TARGET} ${SHARED_CUDA_TARGET})
    ENDIF( INCLUDE_SERIALIZATION )
    SET(DEFINE_STRING "-DUSE_SOFTCORE")
    IF( INCLUDE_SERIALIZATION )
        SET(DEFINE_STRING "${DEFINE_STRING} -DOPENMM_SERIALIZE")
    ENDIF( INCLUDE_SERIALIZATION )

    IF( ${TEST_ROOT} STREQUAL "TestCudaOBCSoftcoreForce" )
        SET(DEFINE_STRING "${DEFINE_STRING} -DIMPLICIT_SOLVENT=1")
    ENDIF( ${TEST_ROOT} STREQUAL "TestCudaOBCSoftcoreForce" )

    IF( ${TEST_ROOT} STREQUAL "TestCudaGBVISoftcoreForce" )
        SET(DEFINE_STRING "${DEFINE_STRING} -DIMPLICIT_SOLVENT=2")
    ENDIF( ${TEST_ROOT} STREQUAL "TestCudaGBVISoftcoreForce" )

    #MESSAGE( "${TEST_ROOT} ${DEFINE_STRING}" )
    SET_TARGET_PROPERTIES(${TEST_ROOT} PROPERTIES COMPILE_FLAGS ${DEFINE_STRING} )
    ADD_TEST(${TEST_ROOT} ${EXECUTABLE_OUTPUT_PATH}/${TEST_ROOT})

ENDFOREACH(TEST_PROG ${TEST_PROGS})
