mirror of
https://github.com/cpm-cmake/CPM.cmake.git
synced 2025-11-22 04:07:49 -05:00
add complex test
This commit is contained in:
@@ -36,7 +36,10 @@ before_install:
|
|||||||
- echo "CC=$CC CXX=$CXX"
|
- echo "CC=$CC CXX=$CXX"
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- cmake -Htest -Bbuild
|
- cmake -Htests/simple -Bbuild/simple
|
||||||
- cmake --build build
|
- cmake --build build/simple
|
||||||
- CTEST_OUTPUT_ON_FAILURE=1 cmake --build build --target test
|
- CTEST_OUTPUT_ON_FAILURE=1 cmake --build build/simple --target test
|
||||||
|
- cmake -Htests/complex -Bbuild/complex
|
||||||
|
- cmake --build build/complex
|
||||||
|
- CTEST_OUTPUT_ON_FAILURE=1 cmake --build build/complex --target test
|
||||||
|
|
||||||
@@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.5 FATAL_ERROR)
|
|||||||
|
|
||||||
project(CPMTest)
|
project(CPMTest)
|
||||||
|
|
||||||
include(${CMAKE_CURRENT_SOURCE_DIR}/../cmake/CPM.cmake)
|
include(${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/CPM.cmake)
|
||||||
|
|
||||||
CPMAddPackage(
|
CPMAddPackage(
|
||||||
NAME LHC
|
NAME LHC
|
||||||
32
tests/complex/test.cpp
Normal file
32
tests/complex/test.cpp
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
#include <lars/parser_generator.h>
|
||||||
|
#include <lars/event.h>
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
// Define the return value
|
||||||
|
int result = 1;
|
||||||
|
|
||||||
|
// Define grammar and evaluation rules
|
||||||
|
lars::ParserGenerator<float> g;
|
||||||
|
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
|
||||||
|
|
||||||
|
// create an event
|
||||||
|
lars::Event<float> onResult;
|
||||||
|
onResult.connect([&](float v){ result = !(int(v) == 5); });
|
||||||
|
|
||||||
|
// emit the result of a parsed string
|
||||||
|
onResult.notify(g.run("1 + 2 * (3+4)/2 - 3"));
|
||||||
|
|
||||||
|
// return the result
|
||||||
|
return result;
|
||||||
|
}
|
||||||
21
tests/simple/CMakeLists.txt
Normal file
21
tests/simple/CMakeLists.txt
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.5 FATAL_ERROR)
|
||||||
|
|
||||||
|
project(CPMTest)
|
||||||
|
|
||||||
|
# add dependencies
|
||||||
|
include(${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/CPM.cmake)
|
||||||
|
|
||||||
|
CPMAddPackage(
|
||||||
|
NAME LarsParser
|
||||||
|
GIT_REPOSITORY https://github.com/TheLartians/Parser.git
|
||||||
|
VERSION 1.2
|
||||||
|
)
|
||||||
|
|
||||||
|
# add executable
|
||||||
|
set (CMAKE_CXX_STANDARD 17)
|
||||||
|
add_executable(cpm-test test.cpp)
|
||||||
|
target_link_libraries(cpm-test LarsParser)
|
||||||
|
|
||||||
|
# tests
|
||||||
|
enable_testing()
|
||||||
|
add_test(cpm-test cpm-test)
|
||||||
Reference in New Issue
Block a user