From 5a56af6f0649749054ac04312fb33a672662b626 Mon Sep 17 00:00:00 2001 From: Lars Melchior Date: Tue, 9 Apr 2019 15:51:25 +0200 Subject: [PATCH] update test --- cmake/CPM.cmake | 36 +++++++++++++++++++----------------- test/CMakeLists.txt | 9 +++++++++ test/test.cpp | 27 +++++++++++++++++++++++++++ 3 files changed, 55 insertions(+), 17 deletions(-) create mode 100644 test/test.cpp diff --git a/cmake/CPM.cmake b/cmake/CPM.cmake index 92ace1b..db537d3 100644 --- a/cmake/CPM.cmake +++ b/cmake/CPM.cmake @@ -26,20 +26,10 @@ function(CPMAddPackage) set(CPM_PACKAGES "") endif() - if (${CPM_ARGS_NAME} IN_LIST CPM_PACKAGES) - message(STATUS "CPM: package ${CPM_ARGS_NAME} already added") - return() - endif() - - message(STATUS "CPM: adding package ${CPM_ARGS_NAME}") - # update package data - LIST(APPEND CPM_PACKAGES ${CPM_ARGS_NAME}) - # save package data - set(CPM_PACKAGES "${CPM_PACKAGES}" CACHE INTERNAL "CPM Packages") - if (NOT CPM_ARGS_BINARY_DIR) set(CPM_ARGS_BINARY_DIR ${CMAKE_BINARY_DIR}/CPM-projects/${CPM_ARGS_NAME}) endif() + message("test: ${CPM_ARGS_BINARY_DIR}") if (NOT CPM_PROJECT_DIR) @@ -52,12 +42,24 @@ function(CPMAddPackage) SET(CPM_TARGET_CMAKE_FILE "${CPM_PROJECT_DIR}") - configure_file( - "${_CPM_Dir}/CPMProject.CMakeLists.cmake.in" - "${CPM_TARGET_CMAKE_FILE}/CMakeLists.txt" - @ONLY - ) + if (${CPM_ARGS_NAME} IN_LIST CPM_PACKAGES) + message(STATUS "CPM: package ${CPM_ARGS_NAME} already added") + else() + message(STATUS "CPM: adding package ${CPM_ARGS_NAME}@${CPM_ARGS_VERSION}") + # update package data + LIST(APPEND CPM_PACKAGES ${CPM_ARGS_NAME}) + # save package data + set(CPM_PACKAGES "${CPM_PACKAGES}" CACHE INTERNAL "CPM Packages") - add_subdirectory(${CPM_TARGET_CMAKE_FILE} ${CPM_ARGS_BINARY_DIR}) + configure_file( + "${_CPM_Dir}/CPMProject.CMakeLists.cmake.in" + "${CPM_TARGET_CMAKE_FILE}/CMakeLists.txt" + @ONLY + ) + endif() + + if (NOT TARGET ${CPM_ARGS_NAME}) + add_subdirectory(${CPM_TARGET_CMAKE_FILE} ${CPM_ARGS_BINARY_DIR}) + endif() endfunction() diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index cc96668..7c893ac 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -29,3 +29,12 @@ CPMAddPackage( GIT_REPOSITORY https://github.com/TheLartians/LHC.git VERSION 0.3 ) + +# add executable +set (CMAKE_CXX_STANDARD 17) +add_executable(cpm-test test.cpp) +target_link_libraries(cpm-test LHC LarsEvent LarsParser) + +# tests +enable_testing() +add_test(cpm-test cpm-test) diff --git a/test/test.cpp b/test/test.cpp new file mode 100644 index 0000000..b268663 --- /dev/null +++ b/test/test.cpp @@ -0,0 +1,27 @@ +#include + +int main() { + lars::ParserGenerator g; + + // Define grammar and evaluation rules + g.setSeparator(g["Whitespace"] << "[\t ]"); + g["Sum" ] << "Add | Subtract | Product"; + g["Product" ] << "Multiply | Divide | Atomic"; + g["Atomic" ] << "Number | '(' Sum ')'"; + g["Add" ] << "Sum '+' Product" >> [](auto e){ return e[0].evaluate() + e[1].evaluate(); }; + g["Subtract"] << "Sum '-' Product" >> [](auto e){ return e[0].evaluate() - e[1].evaluate(); }; + g["Multiply"] << "Product '*' Atomic" >> [](auto e){ return e[0].evaluate() * e[1].evaluate(); }; + g["Divide" ] << "Product '/' Atomic" >> [](auto e){ return e[0].evaluate() / e[1].evaluate(); }; + g["Number" ] << "'-'? [0-9]+ ('.' [0-9]+)?" >> [](auto e){ return stof(e.string()); }; + g.setStart(g["Sum"]); + + // Execute a string + float result = g.run("1 + 2 * (3+4)/2 - 3"); + + // validate result + if (result == 5) { + return 0; + } else { + return 1; + } +}