aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorEgor Tensin <Egor.Tensin@gmail.com>2020-01-03 03:21:50 +0300
committerEgor Tensin <Egor.Tensin@gmail.com>2020-01-03 03:21:50 +0300
commit0df5875a0ea49c4e7e05274d180b07f5cb56743d (patch)
treedbc2da0da3a42c5253aa62aec61aaa1c18ec0483
parentadd Google's benchmark library as a submodule (diff)
downloadmath-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.txt3
-rw-r--r--test/CMakeLists.txt1
-rw-r--r--test/benchmarks/CMakeLists.txt12
-rw-r--r--test/benchmarks/lexer.cpp25
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);
+ }
+ }
+}