diff options
author | Egor Tensin <Egor.Tensin@gmail.com> | 2020-01-03 03:21:50 +0300 |
---|---|---|
committer | Egor Tensin <Egor.Tensin@gmail.com> | 2020-01-03 03:21:50 +0300 |
commit | 0df5875a0ea49c4e7e05274d180b07f5cb56743d (patch) | |
tree | dbc2da0da3a42c5253aa62aec61aaa1c18ec0483 | |
parent | add Google's benchmark library as a submodule (diff) | |
download | math-server-0df5875a0ea49c4e7e05274d180b07f5cb56743d.tar.gz math-server-0df5875a0ea49c4e7e05274d180b07f5cb56743d.zip |
add a basic benchmark for lexer
I suspect std::regex is _horribly_ slow.
Will compare it to boost::regex, then decide.
-rw-r--r-- | CMakeLists.txt | 3 | ||||
-rw-r--r-- | test/CMakeLists.txt | 1 | ||||
-rw-r--r-- | test/benchmarks/CMakeLists.txt | 12 | ||||
-rw-r--r-- | test/benchmarks/lexer.cpp | 25 |
4 files changed, 41 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 19b6164..65b8732 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -31,6 +31,9 @@ add_subdirectory(client) add_subdirectory(server) if(ENABLE_TESTS) + set(BENCHMARK_ENABLE_TESTING OFF CACHE BOOL "Suppressing benchmark's tests" FORCE) + add_subdirectory("3rdparty/google/benchmark") + add_subdirectory(test) endif() diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index bed23ce..5b81467 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1 +1,2 @@ +add_subdirectory(benchmarks) add_subdirectory(unit_tests) diff --git a/test/benchmarks/CMakeLists.txt b/test/benchmarks/CMakeLists.txt new file mode 100644 index 0000000..89d9858 --- /dev/null +++ b/test/benchmarks/CMakeLists.txt @@ -0,0 +1,12 @@ +add_executable(benchmarks lexer.cpp) +set_target_properties(benchmarks PROPERTIES OUTPUT_NAME math-server-benchmarks) + +target_link_libraries(benchmarks PRIVATE lexer) +target_include_directories(benchmarks PRIVATE ../..) + +target_link_libraries(benchmarks PRIVATE benchmark benchmark_main) + +install(TARGETS benchmarks RUNTIME DESTINATION bin) +if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") + install(FILES "$<TARGET_PDB_FILE:benchmarks>" DESTINATION bin OPTIONAL) +endif() diff --git a/test/benchmarks/lexer.cpp b/test/benchmarks/lexer.cpp new file mode 100644 index 0000000..0f3151f --- /dev/null +++ b/test/benchmarks/lexer.cpp @@ -0,0 +1,25 @@ +#include <server/lexer/details/parse.hpp> + +#include <benchmark/benchmark.h> + +class SelectionOfNumbers : public benchmark::Fixture { +protected: + std::vector<std::string_view> m_numbers{ + "0", + "123", + "0.123", + ".123", + "1e9", + "1.87E-18", + "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789.012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789", + }; +}; + +BENCHMARK_F(SelectionOfNumbers, ParseStdRegex)(benchmark::State &state) { + using namespace math::server::lexer::details; + for (auto _ : state) { + for (const auto& src : m_numbers) { + parse_number(src); + } + } +} |