
TRIBITS_ADD_EXECUTABLE_AND_TEST(
  hesopcheck
  SOURCES hesopcheck.cpp
  ARGS 
  COMM serial mpi
  NUM_MPI_PROCS 1
  PASS_REGULAR_EXPRESSION "OK"
  )

  ADD_CUSTOM_COMMAND(
    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/hesopcheck_ADC.cpp
    COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/hesopcheck.cpp ${CMAKE_CURRENT_BINARY_DIR}/hesopcheck_ADC.cpp
    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/hesopcheck.cpp
    )

  ADD_CUSTOM_COMMAND(
    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/radops2_ADC.cpp
    COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/../../src/Sacado_radops2.cpp ${CMAKE_CURRENT_BINARY_DIR}/radops2_ADC.cpp
    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/../../src/Sacado_radops2.cpp
    )

  SET_PROPERTY(
    SOURCE ${CMAKE_CURRENT_BINARY_DIR}/hesopcheck_ADC.cpp ${CMAKE_CURRENT_BINARY_DIR}/radops2_ADC.cpp
    PROPERTY COMPILE_DEFINITIONS "RAD_AUTO_AD_Const" 
    )

# Don't link Sacado library to this test as it results in duplicate symbols.
# So we can't use TRIBITS_ADD_EXECUTABLE_AND_TEST and instead have to create
# the executable using raw CMake and then add the test.

# TRIBITS_ADD_EXECUTABLE_AND_TEST(
#   hesopcheck_ADC
#   SOURCES hesopcheck_ADC.cpp radops2_ADC.cpp
#   ARGS 
#   COMM serial mpi
#   NUM_MPI_PROCS 1
#   PASS_REGULAR_EXPRESSION "OK"
#   )

GET_PROPERTY(Sacado_lib_deps TARGET "${${PROJECT_NAME}_LIBRARY_NAME_PREFIX}sacado" PROPERTY LINK_LIBRARIES)
ADD_EXECUTABLE("Sacado_hesopcheck_ADC${${PROJECT_NAME}_CMAKE_EXECUTABLE_SUFFIX}" hesopcheck_ADC.cpp radops2_ADC.cpp)
TARGET_LINK_LIBRARIES("Sacado_hesopcheck_ADC${${PROJECT_NAME}_CMAKE_EXECUTABLE_SUFFIX}" ${Sacado_lib_deps})
TRIBITS_ADD_TEST(
  hesopcheck_ADC
  ARGS
  COMM serial mpi
  NUM_MPI_PROCS 1
  PASS_REGULAR_EXPRESSION "OK"
  )

FILE(GLOB TRADOPTESTS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "tradoptest_*.cpp")

FOREACH( TESTFILE ${TRADOPTESTS} )

  STRING(REPLACE ".cpp" "" BASENAME ${TESTFILE})

  ADD_CUSTOM_COMMAND(
    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${BASENAME}_ADC.cpp
    COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/${TESTFILE} ${CMAKE_CURRENT_BINARY_DIR}/${BASENAME}_ADC.cpp
    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${TESTFILE}
    )
  SET_PROPERTY(
    SOURCE ${CMAKE_CURRENT_BINARY_DIR}/${BASENAME}_ADC.cpp
    PROPERTY COMPILE_DEFINITIONS "RAD_AUTO_AD_Const" 
    )
  TRIBITS_ADD_EXECUTABLE_AND_TEST(
    ${BASENAME}_ADC
    SOURCES ${BASENAME}_ADC.cpp
    ARGS 
    COMM serial mpi
    NUM_MPI_PROCS 1
    PASS_REGULAR_EXPRESSION "OK"
    )

  ADD_CUSTOM_COMMAND(
    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${BASENAME}_EQA.cpp
    COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/${TESTFILE} ${CMAKE_CURRENT_BINARY_DIR}/${BASENAME}_EQA.cpp
    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${TESTFILE}
    )
  SET_PROPERTY(
    SOURCE ${CMAKE_CURRENT_BINARY_DIR}/${BASENAME}_EQA.cpp
    PROPERTY COMPILE_DEFINITIONS "RAD_EQ_ALIAS" 
    )
  TRIBITS_ADD_EXECUTABLE_AND_TEST(
    ${BASENAME}_EQA
    SOURCES ${BASENAME}_EQA.cpp
    ARGS 
    COMM serial mpi
    NUM_MPI_PROCS 1
    PASS_REGULAR_EXPRESSION "OK"
    )

  ADD_CUSTOM_COMMAND(
    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${BASENAME}_RE1.cpp
    COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/${TESTFILE} ${CMAKE_CURRENT_BINARY_DIR}/${BASENAME}_RE1.cpp
    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${TESTFILE}
    )
  SET_PROPERTY(
    SOURCE ${CMAKE_CURRENT_BINARY_DIR}/${BASENAME}_RE1.cpp
    PROPERTY COMPILE_DEFINITIONS "RAD_REINIT=1" 
    )
  TRIBITS_ADD_EXECUTABLE_AND_TEST(
    ${BASENAME}_RE1
    SOURCES ${BASENAME}_RE1.cpp
    ARGS 
    COMM serial mpi
    NUM_MPI_PROCS 1
    PASS_REGULAR_EXPRESSION "OK"
    )

  ADD_CUSTOM_COMMAND(
    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${BASENAME}_RE2.cpp
    COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/${TESTFILE} ${CMAKE_CURRENT_BINARY_DIR}/${BASENAME}_RE2.cpp
    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${TESTFILE}
    )
  SET_PROPERTY(
    SOURCE ${CMAKE_CURRENT_BINARY_DIR}/${BASENAME}_RE2.cpp
    PROPERTY COMPILE_DEFINITIONS "RAD_REINIT=2" 
    )
  TRIBITS_ADD_EXECUTABLE_AND_TEST(
    ${BASENAME}_RE2
    SOURCES ${BASENAME}_RE2.cpp
    ARGS 
    COMM serial mpi
    NUM_MPI_PROCS 1
    PASS_REGULAR_EXPRESSION "OK"
    )

ENDFOREACH()
