update test

This commit is contained in:
Lars Melchior
2019-04-09 15:51:25 +02:00
parent dbc785e354
commit 5a56af6f06
3 changed files with 55 additions and 17 deletions

View File

@@ -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()

View File

@@ -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)

27
test/test.cpp Normal file
View File

@@ -0,0 +1,27 @@
#include <lars/parser_generator.h>
int main() {
lars::ParserGenerator<float> 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;
}
}