#These tests aren't set-up the same way as the others
set(TestsNotSetUpRight cfour optking testgrendel)

# In order to get CTest to run tests in separate categories,
# labels are used. All tests must carry the label "psi".
#
# The following labels are defined:
#
#  longtests   = The (as of right now) 4 really long tests
#  longertests = Every test in the test folder less longtests
#  quicktests  = Proper subset of tests deemed to run quickly
#
# It is possible to specify more than one label per test. CMake
# expects a ;-separated list, e.g. "psi;quicktests;scf"
# It is mandatory that any test carries a length label!
# It is suggested to add at least a second label to specify the method tested.
#
#  We use ctest -I [start,end] where start is the test number we start with
#  and end is the test number we end with.  We will then use math to back out
#  the appropriate starts and ends...
#
#
#  In order to ensure that this works properly, please add your tests to the
#  appropriate variables given below

add_subdirectory(adc1)
add_subdirectory(adc2)
add_subdirectory(casscf-fzc-sp)
add_subdirectory(casscf-sa-sp)
add_subdirectory(casscf-sp)
add_subdirectory(castup1)
add_subdirectory(castup2)
add_subdirectory(castup3)
add_subdirectory(cc1)
add_subdirectory(cc10)
add_subdirectory(cc11)
add_subdirectory(cc12)
add_subdirectory(cc13)
add_subdirectory(cc13a)
add_subdirectory(cc14)
add_subdirectory(cc15)
add_subdirectory(cc16)
add_subdirectory(cc17)
add_subdirectory(cc18)
add_subdirectory(cc19)
add_subdirectory(cc2)
add_subdirectory(cc21)
add_subdirectory(cc22)
add_subdirectory(cc23)
add_subdirectory(cc24)
add_subdirectory(cc25)
add_subdirectory(cc26)
add_subdirectory(cc27)
add_subdirectory(cc28)
add_subdirectory(cc29)
add_subdirectory(cc3)
add_subdirectory(cc30)
add_subdirectory(cc31)
add_subdirectory(cc32)
add_subdirectory(cc33)
add_subdirectory(cc34)
add_subdirectory(cc35)
add_subdirectory(cc36)
add_subdirectory(cc37)
add_subdirectory(cc38)
add_subdirectory(cc39)
add_subdirectory(cc4)
add_subdirectory(cc40)
add_subdirectory(cc41)
add_subdirectory(cc42)
add_subdirectory(cc43)
add_subdirectory(cc44)
add_subdirectory(cc45)
add_subdirectory(cc46)
add_subdirectory(cc47)
add_subdirectory(cc48)
add_subdirectory(cc49)
add_subdirectory(cc4a)
#add_subdirectory(cc5)
add_subdirectory(cc50)
add_subdirectory(cc51)
add_subdirectory(cc52)
add_subdirectory(cc53)
add_subdirectory(cc54)
add_subdirectory(cc55)
add_subdirectory(cc5a)
add_subdirectory(cc6)
add_subdirectory(cc8)
add_subdirectory(cc8a)
add_subdirectory(cc8b)
add_subdirectory(cc8c)
add_subdirectory(cc9)
add_subdirectory(cc9a)
add_subdirectory(cdomp2-1)
add_subdirectory(cdomp2-2)
add_subdirectory(cepa0-grad1)
add_subdirectory(cepa0-grad2)
add_subdirectory(cepa1)
add_subdirectory(cepa2)
add_subdirectory(cepa3)
add_subdirectory(ci-multi)
add_subdirectory(cisd-h2o+-0)
add_subdirectory(cisd-h2o+-1)
add_subdirectory(cisd-h2o+-2)
add_subdirectory(cisd-h2o-clpse)
add_subdirectory(cisd-opt-fd)
add_subdirectory(cisd-sp)
add_subdirectory(cisd-sp-2)
add_subdirectory(cubeprop)
add_subdirectory(dcft-grad1)
add_subdirectory(dcft-grad2)
add_subdirectory(dcft1)
add_subdirectory(dcft2)
add_subdirectory(dcft3)
add_subdirectory(dcft4)
add_subdirectory(dcft5)
add_subdirectory(dcft6)
add_subdirectory(dcft7)
add_subdirectory(dcft8)
add_subdirectory(dcft9)
add_subdirectory(dfccd1)
add_subdirectory(dfccdl1)
add_subdirectory(dfccd-grad1)
add_subdirectory(dfccsd1)
add_subdirectory(dfccsdl1)
add_subdirectory(dfccsd-grad1)
add_subdirectory(dfmp2-1)
add_subdirectory(dfmp2-2)
add_subdirectory(dfmp2-3)
add_subdirectory(dfmp2-4)
add_subdirectory(dfmp2-grad1)
add_subdirectory(dfmp2-grad2)
add_subdirectory(dfmp2-grad3)
add_subdirectory(dfmp2-grad4)
add_subdirectory(dfomp2-1)
add_subdirectory(dfomp2-2)
add_subdirectory(dfomp2-3)
add_subdirectory(dfomp2-4)
add_subdirectory(dfomp2-grad1)
add_subdirectory(dfomp2-grad2)
add_subdirectory(dfscf-bz2)
add_subdirectory(dft-b2plyp)
add_subdirectory(dft-dldf)
add_subdirectory(dft-freq)
add_subdirectory(dft-grad)
add_subdirectory(dft-pbe0-2)
add_subdirectory(dft-psivar)
add_subdirectory(dft1)
add_subdirectory(dft1-alt)
add_subdirectory(dft2)
add_subdirectory(dft3)
add_subdirectory(docs-bases)
add_subdirectory(docs-dft)
add_subdirectory(docs-psimod)
add_subdirectory(fci-dipole)
add_subdirectory(fci-h2o)
add_subdirectory(fci-h2o-2)
add_subdirectory(fci-h2o-fzcv)
add_subdirectory(fci-tdm)
add_subdirectory(fci-tdm-2)
add_subdirectory(fd-freq-energy)
add_subdirectory(fd-freq-energy-large)
add_subdirectory(fd-freq-gradient)
add_subdirectory(fd-freq-gradient-large)
add_subdirectory(fd-gradient)
add_subdirectory(fnocc1)
add_subdirectory(fnocc2)
add_subdirectory(fnocc3)
add_subdirectory(fnocc4)
add_subdirectory(frac)
add_subdirectory(ghosts)
add_subdirectory(gibbs)
#add_subdirectory(large_atoms)
add_subdirectory(matrix1)
add_subdirectory(mcscf1)
add_subdirectory(mcscf2)
add_subdirectory(mcscf3)
add_subdirectory(min_input)
add_subdirectory(mints1)
add_subdirectory(mints2)
add_subdirectory(mints3)
add_subdirectory(mints4)
add_subdirectory(mints5)
add_subdirectory(mints6)
add_subdirectory(mints8)
add_subdirectory(mints9)
add_subdirectory(mom)
add_subdirectory(mp2-1)
add_subdirectory(mp2-def2)
add_subdirectory(mp2-grad1)
add_subdirectory(mp2-grad2)
add_subdirectory(mp2_5-grad1)
add_subdirectory(mp2_5-grad2)
add_subdirectory(mp3-grad1)
add_subdirectory(mp3-grad2)
add_subdirectory(mpn-bh)
add_subdirectory(ocepa-freq1)
add_subdirectory(ocepa-grad1)
add_subdirectory(ocepa-grad2)
add_subdirectory(ocepa1)
add_subdirectory(ocepa2)
add_subdirectory(ocepa3)
add_subdirectory(omp2-1)
add_subdirectory(omp2-2)
add_subdirectory(omp2-3)
add_subdirectory(omp2-4)
add_subdirectory(omp2-5)
add_subdirectory(omp2-grad1)
add_subdirectory(omp2-grad2)
add_subdirectory(omp2_5-1)
add_subdirectory(omp2_5-2)
add_subdirectory(omp2_5-grad1)
add_subdirectory(omp2_5-grad2)
add_subdirectory(omp3-1)
add_subdirectory(omp3-2)
add_subdirectory(omp3-3)
add_subdirectory(omp3-4)
add_subdirectory(omp3-5)
add_subdirectory(omp3-grad1)
add_subdirectory(omp3-grad2)
add_subdirectory(opt-lindep-change)
add_subdirectory(opt1)
add_subdirectory(opt1-fd)
add_subdirectory(opt2)
add_subdirectory(opt2-fd)
add_subdirectory(opt3)
add_subdirectory(opt4)
add_subdirectory(opt5)
add_subdirectory(opt6)
add_subdirectory(opt7)
add_subdirectory(props1)
add_subdirectory(props2)
add_subdirectory(props3)
add_subdirectory(psimrcc-ccsd_t-1)
add_subdirectory(psimrcc-ccsd_t-2)
add_subdirectory(psimrcc-ccsd_t-3)
add_subdirectory(psimrcc-ccsd_t-4)
add_subdirectory(psimrcc-fd-freq1)
add_subdirectory(psimrcc-fd-freq2)
add_subdirectory(psimrcc-pt2)
add_subdirectory(psimrcc-sp1)
add_subdirectory(psithon1)
add_subdirectory(psithon2)
add_subdirectory(pubchem1)
add_subdirectory(pubchem2)
add_subdirectory(pywrap-alias)
add_subdirectory(pywrap-all)
add_subdirectory(pywrap-basis)
add_subdirectory(pywrap-cbs1)
add_subdirectory(pywrap-checkrun-convcrit)
add_subdirectory(pywrap-checkrun-rhf)
add_subdirectory(pywrap-checkrun-rohf)
add_subdirectory(pywrap-checkrun-uhf)
add_subdirectory(pywrap-db1)
add_subdirectory(pywrap-db2)
add_subdirectory(pywrap-db3)
add_subdirectory(pywrap-freq-e-sowreap)
add_subdirectory(pywrap-molecule)
add_subdirectory(pywrap-opt-sowreap)
add_subdirectory(rasci-c2-active)
add_subdirectory(rasci-h2o)
add_subdirectory(rasci-ne)
add_subdirectory(rasscf-sp)
add_subdirectory(sad1)
add_subdirectory(sapt1)
add_subdirectory(sapt2)
add_subdirectory(sapt3)
add_subdirectory(sapt4)
add_subdirectory(sapt5)
add_subdirectory(scf-bz2)
add_subdirectory(scf-guess-read)
add_subdirectory(scf-bs)
add_subdirectory(scf1)
add_subdirectory(scf11-freq-from-energies)
add_subdirectory(scf2)
add_subdirectory(scf3)
add_subdirectory(scf4)
add_subdirectory(scf5)
add_subdirectory(scf6)
add_subdirectory(soscf1)
add_subdirectory(stability1)
add_subdirectory(tu1-h2o-energy)
add_subdirectory(tu2-ch2-energy)
add_subdirectory(tu3-h2o-opt)
add_subdirectory(tu4-h2o-freq)
add_subdirectory(tu5-sapt)
add_subdirectory(tu6-cp-ne2)
add_subdirectory(x2c1)
add_subdirectory(x2c2)
add_subdirectory(x2c3)
add_subdirectory(zaptn-nh2)

###### START internal-executable-dependent tests ################

# For code that is distributed with and required for psi4 to build,
#   and thus should always be tested, but is developed and maintained
#   externally and dropped into psi4 as version increment, and thus
#   should get its own subdirectory:
#   * Follow directory structure described below for ext-exe-dep
#   * Follow un-qualified inclusion as above for normal tests

add_subdirectory(libefp)

###### END internal-executable-dependent tests ##################

###### START external-executable-dependent tests ################

# Set up groups of test cases analogous to dftd3 below
#   In particular, new ext-exe-dep tests should
#   * get their own directory in tests (e.g., tests/dftd3)
#   * have a name that doesn't repeat the exe (e.g., tests/dftd3/energy)
#   * be listed in the exeShort and exeLong variable name as exe-name (e.g., dftd3-energy)
#   * be sure the exe is listed in the python code below (search 'partition')

# <<<  DFTD3  >>>

find_program(DFTD3_EXECUTABLE
             NAMES dftd3
             DOC "Path to Grimme's dftd3 executable")

if(DFTD3_EXECUTABLE)
   add_subdirectory(dftd3)
   message(STATUS "dftd3 executable for interfaced DFTD3 found. Test cases added.")
endif()

# <<<  MRCC  >>>

find_program(MRCC_EXECUTABLE
             NAMES dmrcc
             DOC "Path to Kallay's mrcc executable")

if(MRCC_EXECUTABLE)
   add_subdirectory(mrcc)
   message(STATUS "dmrcc executable for interfaced MRCC found. Test cases added.")
endif()

# <<<  CFOUR  >>>

find_program(CFOUR_EXECUTABLE
             NAMES xcfour
             DOC "Path to Stanton and Gauss's xcfour executable")

if(CFOUR_EXECUTABLE)
   add_subdirectory(cfour)
   message(STATUS "xcfour executable for interfaced CFOUR found. Test cases added.")
endif()

###### END external-executable-dependent tests ##################

# External module dependent tests
if(ENABLE_PCMSOLVER)
   add_subdirectory(pcm_scf)
   add_subdirectory(pcm_dft)
endif()

if(NOT PERL_FOUND)
   message(WARNING "Perl was not found. Some Coupled Cluster test cases will not be thoroughly checked.")
endif()

if(ENABLE_CHEMPS2)
    add_subdirectory(dmrg)
endif()

