diff --git a/CMakeLists.txt b/CMakeLists.txt index b9055aa..2f01ccb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,352 +1,240 @@ project(specmicp) cmake_minimum_required(VERSION 2.8.8) ####################### External Package ##################################### set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/cmake/") find_package(Eigen3 REQUIRED) # This module comes from the Eigen3 Package find_package(CxxTest) # Necessary if you want the tests # catch for unit testing include(ExternalProject) find_package(Git REQUIRED) ExternalProject_Add( catch PREFIX ${CMAKE_BINARY_DIR}/catch GIT_REPOSITORY https://github.com/philsquared/Catch.git TIMEOUT 10 UPDATE_COMMAND ${GIT_EXECUTABLE} pull CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" LOG_DOWNLOAD ON ) ######################## Compilation flags ################################# if(UNIX) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native -std=c++11") SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall -pedantic") SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2 -DNDEBUG") message(STATUS "c++ flags ${CMAKE_CXX_FLAGS}") else() message(WARNING "not tested !") endif() ################ Directories ##################### -set(PROJECT_TEST_DIR ${PROJECT_SOURCE_DIR}/tests) -ExternalProject_Get_Property(catch source_dir) -set(CATCH_INCLUDE_DIR ${source_dir}/include CACHE INTERNAL "Path to include folder for Catch") set(PROJECT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src) # include include_directories(${EIGEN3_INCLUDE_DIR}) include_directories(${PROJECT_SOURCE_DIR}) -include_directories(${CATCH_INCLUDE_DIR}) -include_directories(${PROJECT_TEST_DIR}) ################ Modules ########################## # -------- MiCPSolver ---------------- set(MICPSOLVER_DIR ${PROJECT_SOURCE_DIR}/micpsolver) add_custom_target(specmisolver_inc SOURCES ${MICPSOLVER_DIR}/micpsolver_base.hpp ${MICPSOLVER_DIR}/micpsolver_base.inl ${MICPSOLVER_DIR}/micpsolver.hpp ${MICPSOLVER_DIR}/micpsolver.inl ${MICPSOLVER_DIR}/micpsolver_min.hpp ${MICPSOLVER_DIR}/micpsolver_min.inl ${MICPSOLVER_DIR}/micpsolverold.hpp ${MICPSOLVER_DIR}/micpsolverold.inl ${MICPSOLVER_DIR}/micpsolver_structs.hpp ${MICPSOLVER_DIR}/micpprog.hpp ${MICPSOLVER_DIR}/ncp_function.hpp ${MICPSOLVER_DIR}/estimate_cond_number.hpp ) # ------- SpecMiCP --------------- set(SPECMICP_DIR ${PROJECT_SOURCE_DIR}/specmicp) add_custom_target(specmic_inc SOURCES #${SPECMICP_DIR}/.hpp ${SPECMICP_DIR}/simulation_box.hpp ) set(SPECMICP_LIBFILE ${SPECMICP_DIR}/equilibrium_data.cpp ${SPECMICP_DIR}/reduced_system.cpp ${SPECMICP_DIR}/reduced_system_solver.cpp ${SPECMICP_DIR}/reaction_path.cpp ${SPECMICP_DIR}/speciation_solver.cpp ${SPECMICP_DIR}/simple_composition.cpp ) add_library(specmicp ${SPECMICP_LIBFILE}) # -------- Database ---------------- set(DATABASE_DIR ${PROJECT_SOURCE_DIR}/database) set(DATABASE_LIBFILE ${DATABASE_DIR}/data_container.cpp ${DATABASE_DIR}/database.cpp ${DATABASE_DIR}/reader.cpp ${DATABASE_DIR}/selector.cpp ${DATABASE_DIR}/mineral_selector.cpp ${DATABASE_DIR}/canonicalizer.cpp ${DATABASE_DIR}/switch_basis.cpp ) add_custom_target(data_incl SOURCES ${DATABASE_DIR}/common_def.hpp ${DATABASE_DIR}/module.hpp ) add_library(specmicp_database ${DATABASE_LIBFILE}) # --------- ODE int ------------------ set(ODEINT_DIR ${PROJECT_SOURCE_DIR}/odeint) add_custom_target(odeint_incl SOURCES ${ODEINT_DIR}/odeint_types.hpp ${ODEINT_DIR}/butcher_tableau.hpp ${ODEINT_DIR}/runge_kutta_step.hpp ${ODEINT_DIR}/runge_kutta_step.inl ) # --------- DFPMSolver ----------------- set(DFPMSOLVER_DIR ${PROJECT_SOURCE_DIR}/dfpmsolver) add_custom_target(dfpmsolver_incl SOURCES ${DFPMSOLVER_DIR}/driver.hpp ${DFPMSOLVER_DIR}/driver.inl ${DFPMSOLVER_DIR}/driver_structs.hpp ${DFPMSOLVER_DIR}/dfpm_program.hpp # ${DFPMSOLVER_DIR}/sparse_solver.hpp ${DFPMSOLVER_DIR}/sparse_solver_structs.hpp # Parabolic solver ${DFPMSOLVER_DIR}/parabolic_driver.hpp ${DFPMSOLVER_DIR}/parabolic_driver.inl ${DFPMSOLVER_DIR}/parabolic_program.hpp ${DFPMSOLVER_DIR}/parabolic_structs.hpp ) # --------- ReactMiCP ----------------- set(REACTMICP_DIR ${PROJECT_SOURCE_DIR}/reactmicp) add_custom_target(reactmicp_incl SOURCES ${REACTMICP_DIR}/common.hpp # ${REACTMICP_DIR}/micpsolvers/parabolicprogram.hpp ${REACTMICP_DIR}/micpsolvers/micpsolver_structs.hpp ${REACTMICP_DIR}/micpsolvers/micpsolver.hpp ${REACTMICP_DIR}/micpsolvers/micpsolver.inl # ${REACTMICP_DIR}/meshes/mesh1d.hpp ${REACTMICP_DIR}/systems/secondary_variables/secondary.hpp ${REACTMICP_DIR}/systems/secondary_variables/secondary.inl ${REACTMICP_DIR}/systems/saturated_diffusion/options.hpp ${REACTMICP_DIR}/systems/saturated_diffusion/transport_parameters.hpp ${REACTMICP_DIR}/systems/saturated_diffusion/boundary_conditions.hpp ) set(REACTMICP_LIBFILES ${REACTMICP_DIR}/systems/diffusion/diffusion.cpp ${REACTMICP_DIR}/systems/diffusion/diffusion_numbering.cpp ${REACTMICP_DIR}/systems/diffusion/diffusion_secondary.cpp ${REACTMICP_DIR}/systems/saturated_diffusion/reactive_transport_solver.cpp ${REACTMICP_DIR}/systems/saturated_diffusion/transport_program.cpp ${REACTMICP_DIR}/systems/saturated_diffusion/variables.cpp ) add_library(reactmicp ${REACTMICP_LIBFILES}) # ------- Utils ------------------ set(UTILS_DIR ${PROJECT_SOURCE_DIR}/utils) add_custom_target(utils_inc SOURCES ${UTILS_DIR}/log.hpp ) # ------- Physics ---------------- set(PHYSICS_DIR ${PROJECT_SOURCE_DIR}/physics) add_custom_target(physics_inc SOURCES ${PHYSICS_DIR}/constants.hpp ${PHYSICS_DIR}/laws.hpp ${PHYSICS_DIR}/units.hpp ) # ------- Data ------------------- set(DATA_DIR ${CMAKE_CURRENT_SOURCE_DIR}/data) set(DATABASE_LIST ${DATA_DIR}/specmicp_database.js ${DATA_DIR}/cemdata_specmicp.js ) add_custom_target(data SOURCES ${DATABASE_LIST}) file(INSTALL ${DATABASE_LIST} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/data/) # ------ Documentation ----------- set( DOCS_LIST ${CMAKE_CURRENT_SOURCE_DIR}/README.md ${CMAKE_CURRENT_SOURCE_DIR}/INSTALL ${CMAKE_CURRENT_SOURCE_DIR}/TODO ${CMAKE_CURRENT_SOURCE_DIR}/COPYING ) add_custom_target(docs SOURCES ${DOCS_LIST}) # add a target to generate API documentation with Doxygen find_package(Doxygen) if(DOXYGEN_FOUND) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/doc/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/doc/Doxyfile @ONLY) add_custom_target(doc ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/doc/Doxyfile WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMENT "Generating API documentation with Doxygen" VERBATIM ) add_custom_target(citations SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/doc/citations.bib) file(INSTALL ${CMAKE_CURRENT_SOURCE_DIR}/doc/citations.bib DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/doc/) endif(DOXYGEN_FOUND) # --------- Python interface ---------- add_subdirectory( cython ) - # --------- Test ---------------------- -enable_testing(true) - -# CXX Test -# ======== - -if(CXXTEST_FOUND) - set(CXXTEST_USE_PYTHON TRUE) - include_directories(${CXXTEST_INCLUDE_DIR}) - enable_testing() - - # MiCP Solver - # ------------ - CXXTEST_ADD_TEST(test_cond_number - test_cond_number.cpp - ${PROJECT_TEST_DIR}/micpsolver/test_cond_number.hpp) - - CXXTEST_ADD_TEST(test_ncp_funtion - test_ncp_function.cpp - ${PROJECT_TEST_DIR}/micpsolver/test_ncp_function.hpp) - - CXXTEST_ADD_TEST(test_micpsolver - test_micpsolver.cpp - ${PROJECT_TEST_DIR}/micpsolver/test_micpsolver.hpp) - - # Database - # -------- - - CXXTEST_ADD_TEST(test_data_reader - test_data_reader.cpp - ${PROJECT_TEST_DIR}/database/test_data_reader.hpp) - target_link_libraries(test_data_reader specmicp_database jsoncpp) - - - CXXTEST_ADD_TEST(test_data_selector - test_data_selector.cpp - ${PROJECT_TEST_DIR}/database/test_data_selector.hpp) - target_link_libraries(test_data_selector specmicp_database jsoncpp) - - # Odeint - # ------ - - CXXTEST_ADD_TEST(test_butchertableau - test_butchertableau.cpp - ${PROJECT_TEST_DIR}/odeint/test_butchertableau.hpp) - - - CXXTEST_ADD_TEST(test_embeddedrungekutta - test_embeddedrungekutta.cpp - ${PROJECT_TEST_DIR}/odeint/test_embeddedrungekutta.hpp) - -endif() - -# Test 'Perso' -# ============ - -add_executable(thermocarbo ${PROJECT_TEST_DIR}/specmicp/thermocarbo.cpp) -target_link_libraries(thermocarbo specmicp specmicp_database jsoncpp) - -add_executable(carboalu ${PROJECT_TEST_DIR}/specmicp/carboalu.cpp) -target_link_libraries(carboalu specmicp specmicp_database jsoncpp) - -add_executable(alkaliactivated ${PROJECT_TEST_DIR}/specmicp/alkaliactivated.cpp) -target_link_libraries(alkaliactivated specmicp specmicp_database jsoncpp) - -add_executable(rate_nicoleau ${PROJECT_TEST_DIR}/specmicp/rate_nicoleau.cpp) -target_link_libraries(rate_nicoleau specmicp specmicp_database jsoncpp) - -add_executable(kinetics ${PROJECT_TEST_DIR}/specmicp/kinetics.cpp) -target_link_libraries(kinetics specmicp specmicp_database jsoncpp) - - -set(DATA_TEST ${PROJECT_TEST_DIR}/specmicp/data_test/data_nicoleau_c3sm.csv - ${PROJECT_TEST_DIR}/specmicp/data_test/data_nicoleau_c3st1.csv - ${PROJECT_TEST_DIR}/specmicp/data_test/data_nicoleau_c3st2.csv -) - -add_custom_target(data_nicoleau SOURCES ${DATA_TEST}) - -file(INSTALL ${DATA_TEST} - DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/data_test/) - -# Catch test -#=========== - -add_custom_target(catch_header SOURCES - ${PROJECT_TEST_DIR}/test_database.hpp -) - -add_executable(test_reactmicp_diffusion - ${PROJECT_TEST_DIR}/reactmip/systems/diffusion/test_reactmicp_diffusion.cpp - ${PROJECT_TEST_DIR}/reactmip/systems/diffusion/diffusion.cpp - ${PROJECT_TEST_DIR}/reactmip/systems/diffusion/numbering.cpp - ${PROJECT_TEST_DIR}/reactmip/systems/diffusion/secondary.cpp - ${PROJECT_TEST_DIR}/reactmip/systems/diffusion/solving.cpp - ${PROJECT_TEST_DIR}/reactmip/systems/diffusion/utils.cpp -) -target_link_libraries(test_reactmicp_diffusion reactmicp specmicp specmicp_database jsoncpp) - -add_executable(test_reactmicp_saturated_diffusion - ${PROJECT_TEST_DIR}/reactmip/systems/saturated_diffusion/test_reactmicp_saturated_diffusion.cpp - ${PROJECT_TEST_DIR}/reactmip/systems/saturated_diffusion/variables.cpp - ${PROJECT_TEST_DIR}/reactmip/systems/saturated_diffusion/solver.cpp - ${PROJECT_TEST_DIR}/reactmip/systems/saturated_diffusion/transport_program.cpp - ${PROJECT_TEST_DIR}/reactmip/systems/saturated_diffusion/reactive_transport.cpp - ${PROJECT_TEST_DIR}/reactmip/systems/saturated_diffusion/utils.cpp -) -target_link_libraries(test_reactmicp_saturated_diffusion reactmicp specmicp specmicp_database jsoncpp) +add_subdirectory( tests ) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt new file mode 100644 index 0000000..5361f66 --- /dev/null +++ b/tests/CMakeLists.txt @@ -0,0 +1,136 @@ +##################### External packages ######################### + +find_package(CxxTest) # Necessary if you want the tests + +# catch for unit testing +include(ExternalProject) +find_package(Git REQUIRED) + +ExternalProject_Add( + catch + PREFIX ${CMAKE_BINARY_DIR}/catch + GIT_REPOSITORY https://github.com/philsquared/Catch.git + TIMEOUT 10 + UPDATE_COMMAND ${GIT_EXECUTABLE} pull + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" + LOG_DOWNLOAD ON + ) + +################## Configuration ################################ + +set(PROJECT_TEST_DIR ${CMAKE_CURRENT_SOURCE_DIR}) +ExternalProject_Get_Property(catch source_dir) +set(CATCH_INCLUDE_DIR ${source_dir}/include CACHE INTERNAL "Path to include folder for Catch") + + +include_directories(${CATCH_INCLUDE_DIR}) +include_directories(${PROJECT_TEST_DIR}) +################## Tests ######################################## + +enable_testing(true) + +# CXX Test +# ======== + +if(CXXTEST_FOUND) + set(CXXTEST_USE_PYTHON TRUE) + include_directories(${CXXTEST_INCLUDE_DIR}) + enable_testing() + + # MiCP Solver + # ------------ + CXXTEST_ADD_TEST(test_cond_number + test_cond_number.cpp + ${PROJECT_TEST_DIR}/micpsolver/test_cond_number.hpp) + + CXXTEST_ADD_TEST(test_ncp_funtion + test_ncp_function.cpp + ${PROJECT_TEST_DIR}/micpsolver/test_ncp_function.hpp) + + CXXTEST_ADD_TEST(test_micpsolver + test_micpsolver.cpp + ${PROJECT_TEST_DIR}/micpsolver/test_micpsolver.hpp) + + # Database + # -------- + + CXXTEST_ADD_TEST(test_data_reader + test_data_reader.cpp + ${PROJECT_TEST_DIR}/database/test_data_reader.hpp) + target_link_libraries(test_data_reader specmicp_database jsoncpp) + + + CXXTEST_ADD_TEST(test_data_selector + test_data_selector.cpp + ${PROJECT_TEST_DIR}/database/test_data_selector.hpp) + target_link_libraries(test_data_selector specmicp_database jsoncpp) + + # Odeint + # ------ + + CXXTEST_ADD_TEST(test_butchertableau + test_butchertableau.cpp + ${PROJECT_TEST_DIR}/odeint/test_butchertableau.hpp) + + + CXXTEST_ADD_TEST(test_embeddedrungekutta + test_embeddedrungekutta.cpp + ${PROJECT_TEST_DIR}/odeint/test_embeddedrungekutta.hpp) + +endif() + +# Test 'Perso' +# ============ + +add_executable(thermocarbo ${PROJECT_TEST_DIR}/specmicp/thermocarbo.cpp) +target_link_libraries(thermocarbo specmicp specmicp_database jsoncpp) + +add_executable(carboalu ${PROJECT_TEST_DIR}/specmicp/carboalu.cpp) +target_link_libraries(carboalu specmicp specmicp_database jsoncpp) + +add_executable(alkaliactivated ${PROJECT_TEST_DIR}/specmicp/alkaliactivated.cpp) +target_link_libraries(alkaliactivated specmicp specmicp_database jsoncpp) + +add_executable(rate_nicoleau ${PROJECT_TEST_DIR}/specmicp/rate_nicoleau.cpp) +target_link_libraries(rate_nicoleau specmicp specmicp_database jsoncpp) + +add_executable(kinetics ${PROJECT_TEST_DIR}/specmicp/kinetics.cpp) +target_link_libraries(kinetics specmicp specmicp_database jsoncpp) + + +set(DATA_TEST ${PROJECT_TEST_DIR}/specmicp/data_test/data_nicoleau_c3sm.csv + ${PROJECT_TEST_DIR}/specmicp/data_test/data_nicoleau_c3st1.csv + ${PROJECT_TEST_DIR}/specmicp/data_test/data_nicoleau_c3st2.csv +) + +add_custom_target(data_nicoleau SOURCES ${DATA_TEST}) + +file(INSTALL ${DATA_TEST} + DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/data_test/) + +# Catch test +#=========== + +add_custom_target(catch_header SOURCES test_database.hpp) + +add_executable(test_reactmicp_diffusion + ${PROJECT_TEST_DIR}/reactmip/systems/diffusion/test_reactmicp_diffusion.cpp + ${PROJECT_TEST_DIR}/reactmip/systems/diffusion/diffusion.cpp + ${PROJECT_TEST_DIR}/reactmip/systems/diffusion/numbering.cpp + ${PROJECT_TEST_DIR}/reactmip/systems/diffusion/secondary.cpp + ${PROJECT_TEST_DIR}/reactmip/systems/diffusion/solving.cpp + ${PROJECT_TEST_DIR}/reactmip/systems/diffusion/utils.cpp +) +target_link_libraries(test_reactmicp_diffusion reactmicp specmicp specmicp_database jsoncpp) + +add_executable(test_reactmicp_saturated_diffusion + ${PROJECT_TEST_DIR}/reactmip/systems/saturated_diffusion/test_reactmicp_saturated_diffusion.cpp + ${PROJECT_TEST_DIR}/reactmip/systems/saturated_diffusion/variables.cpp + ${PROJECT_TEST_DIR}/reactmip/systems/saturated_diffusion/solver.cpp + ${PROJECT_TEST_DIR}/reactmip/systems/saturated_diffusion/transport_program.cpp + ${PROJECT_TEST_DIR}/reactmip/systems/saturated_diffusion/reactive_transport.cpp + ${PROJECT_TEST_DIR}/reactmip/systems/saturated_diffusion/utils.cpp +) +target_link_libraries(test_reactmicp_saturated_diffusion reactmicp specmicp specmicp_database jsoncpp)