Add filter test, remove re test, and googletest deps
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 392dfb5..70ecbf9 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -1,40 +1,22 @@
# Enable the tests
-# Import and build Google Test
-include(ExternalProject)
-set_directory_properties(properties EP_PREFIX "${CMAKE_BINARY_DIR}/third_party")
-ExternalProject_Add(googletest
- URL "https://googletest.googlecode.com/files/gtest-1.7.0.zip"
- URL_MD5 2d6ec8ccdf5c46b05ba54a9fd1d130d7
- SOURCE_DIR "${CMAKE_BINARY_DIR}/third_party/gtest"
- CMAKE_ARGS "-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}"
- INSTALL_COMMAND "")
-
-ExternalProject_Get_Property(googletest source_dir)
-ExternalProject_Get_Property(googletest binary_dir)
-include_directories(${source_dir}/include)
-link_directories(${binary_dir})
-
find_package(Threads REQUIRED)
macro(compile_benchmark_test name)
add_executable(${name} "${name}.cc")
- target_link_libraries(${name} benchmark gtest ${CMAKE_THREAD_LIBS_INIT})
- add_dependencies(${name} googletest)
+ target_link_libraries(${name} benchmark ${CMAKE_THREAD_LIBS_INIT})
endmacro(compile_benchmark_test)
-macro(add_gtest_test name)
- add_executable(${name} "${name}.cc")
- target_link_libraries(${name} benchmark gtest gtest_main ${CMAKE_THREAD_LIBS_INIT})
- add_dependencies(${name} googletest)
- add_test(${name} ${name})
-endmacro(add_gtest_test)
-
# Demonstration executable
compile_benchmark_test(benchmark_test)
add_test(benchmark benchmark_test --benchmark_min_time=0.1 51)
-add_test(benchmark_filter_simple benchmark_test --benchmark_filter=Calculate 16)
-add_test(benchmark_filter_suffix benchmark_test --benchmark_filter=Calculate* 16)
-add_test(benchmark_filter_regex_wildcard benchmark_test --benchmark_filter=.*Calculate.* 16)
-add_gtest_test(re_test)
+compile_benchmark_test(filter_test)
+add_test(filter_simple filter_test --benchmark_filter=Calculate 16)
+add_test(filter_suffix filter_test --benchmark_filter=Calculate* 16)
+add_test(filter_regex_all filter_test --benchmark_filter=.* 16)
+add_test(filter_regex_blank filter_test --benchmark_filter= 16)
+add_test(filter_regex_none filter_test --benchmark_filter=monkey 0)
+add_test(filter_regex_wildcard filter_test --benchmark_filter=.*Calculate.* 16)
+add_test(filter_regex_begin filter_test --benchmark_filter=^BM_Calculate.* 16)
+add_test(filter_regex_end filter_test --benchmark_filter=.*Pi$ 8)
diff --git a/test/benchmark_test.cc b/test/benchmark_test.cc
index 0a3e48e..ec49fcd 100644
--- a/test/benchmark_test.cc
+++ b/test/benchmark_test.cc
@@ -14,8 +14,6 @@
#include <string>
#include <vector>
-#include <gtest/gtest.h>
-
#if defined(__GNUC__)
# define BENCHMARK_NOINLINE __attribute__((noinline))
#else
@@ -55,7 +53,7 @@
while (state.KeepRunning())
fac_42 = Factorial(8);
// Prevent compiler optimizations
- EXPECT_NE(fac_42, std::numeric_limits<int>::max());
+ std::cout << fac_42;
}
BENCHMARK(BM_Factorial);
@@ -149,45 +147,12 @@
}
BENCHMARK(BM_LongTest)->Range(1<<16,1<<28);
-class TestReporter : public benchmark::internal::ConsoleReporter {
- public:
- virtual bool ReportContext(const Context& context) const {
- return ConsoleReporter::ReportContext(context);
- };
-
- virtual void ReportRuns(const std::vector<Run>& report) const {
- ++count_;
- ConsoleReporter::ReportRuns(report);
- };
-
- TestReporter() : count_(0) {}
-
- virtual ~TestReporter() {}
-
- size_t GetCount() const {
- return count_;
- }
-
- private:
- mutable size_t count_;
-};
-
int main(int argc, const char* argv[]) {
benchmark::Initialize(&argc, argv);
assert(Factorial(8) == 40320);
assert(CalculatePi(1) == 0.0);
- TestReporter test_reporter;
- benchmark::RunSpecifiedBenchmarks(&test_reporter);
-
- // Make sure we ran all of the tests
- const size_t count = test_reporter.GetCount();
- const size_t expected = (argc == 2) ? std::stoul(argv[1]) : count;
- if (count != expected) {
- std::cerr << "ERROR: Expected " << expected << " tests to be ran but only "
- << count << " completed" << std::endl;
- return -1;
- }
+ benchmark::RunSpecifiedBenchmarks();
}
diff --git a/test/filter_test.cc b/test/filter_test.cc
new file mode 100644
index 0000000..00c2955
--- /dev/null
+++ b/test/filter_test.cc
@@ -0,0 +1,86 @@
+#include "benchmark/benchmark.h"
+
+#include <assert.h>
+#include <math.h>
+#include <stdint.h>
+
+#include <iostream>
+#include <sstream>
+#include <string>
+
+namespace {
+
+double CalculatePi(int depth) {
+ double pi = 0.0;
+ for (int i = 0; i < depth; ++i) {
+ double numerator = static_cast<double>(((i % 2) * 2) - 1);
+ double denominator = static_cast<double>((2 * i) - 1);
+ pi += numerator / denominator;
+ }
+ return (pi - 1.0) * 4;
+}
+
+class TestReporter : public benchmark::internal::ConsoleReporter {
+ public:
+ virtual bool ReportContext(const Context& context) const {
+ return ConsoleReporter::ReportContext(context);
+ };
+
+ virtual void ReportRuns(const std::vector<Run>& report) const {
+ ++count_;
+ ConsoleReporter::ReportRuns(report);
+ };
+
+ TestReporter() : count_(0) {}
+
+ virtual ~TestReporter() {}
+
+ size_t GetCount() const {
+ return count_;
+ }
+
+ private:
+ mutable size_t count_;
+};
+
+} // end namespace
+
+static void BM_CalculatePiRange(benchmark::State& state) {
+ double pi = 0.0;
+ while (state.KeepRunning())
+ pi = CalculatePi(state.range_x());
+ std::stringstream ss;
+ ss << pi;
+ state.SetLabel(ss.str());
+}
+BENCHMARK_RANGE(BM_CalculatePiRange, 1, 1024 * 1024);
+
+static void BM_CalculatePi(benchmark::State& state) {
+ static const int depth = 1024;
+ double pi BENCHMARK_UNUSED = 0.0;
+ while (state.KeepRunning()) {
+ pi = CalculatePi(depth);
+ }
+}
+BENCHMARK(BM_CalculatePi)->Threads(8);
+BENCHMARK(BM_CalculatePi)->ThreadRange(1, 32);
+BENCHMARK(BM_CalculatePi)->ThreadPerCpu();
+
+int main(int argc, const char* argv[]) {
+ benchmark::Initialize(&argc, argv);
+
+ assert(CalculatePi(1) == 0.0);
+
+ TestReporter test_reporter;
+ benchmark::RunSpecifiedBenchmarks(&test_reporter);
+
+ // Make sure we ran all of the tests
+ const size_t count = test_reporter.GetCount();
+ const size_t expected = (argc == 2) ? std::stoul(argv[1]) : count;
+ if (count != expected) {
+ std::cerr << "ERROR: Expected " << expected << " tests to be ran but only "
+ << count << " completed" << std::endl;
+ return -1;
+ }
+}
+
diff --git a/test/re_test.cc b/test/re_test.cc
deleted file mode 100644
index 1bba661..0000000
--- a/test/re_test.cc
+++ /dev/null
@@ -1,79 +0,0 @@
-// Copyright 2015 Google Inc. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include <gtest/gtest.h>
-#include "../src/re.h"
-
-TEST(Regex, RegexSimple) {
- benchmark::Regex re;
- EXPECT_TRUE(re.Init("a+", NULL));
-
- EXPECT_FALSE(re.Match(""));
- EXPECT_TRUE(re.Match("a"));
- EXPECT_TRUE(re.Match("aa"));
- EXPECT_TRUE(re.Match("baa"));
- EXPECT_FALSE(re.Match("b"));
-}
-
-TEST(Regex, RegexWildcard) {
- benchmark::Regex re;
- EXPECT_TRUE(re.Init("^a*$", NULL));
-
- EXPECT_TRUE(re.Match(""));
- EXPECT_TRUE(re.Match("a"));
- EXPECT_TRUE(re.Match("aa"));
- EXPECT_FALSE(re.Match("baa"));
- EXPECT_FALSE(re.Match("b"));
-}
-
-TEST(Regex, RegexAny) {
- benchmark::Regex re;
- EXPECT_TRUE(re.Init(".", NULL));
-
- EXPECT_FALSE(re.Match(""));
- EXPECT_TRUE(re.Match("a"));
- EXPECT_TRUE(re.Match("aa"));
-}
-
-TEST(Regex, RegexExact) {
- benchmark::Regex re;
- EXPECT_TRUE(re.Init("^.$", NULL));
-
- EXPECT_FALSE(re.Match(""));
- EXPECT_TRUE(re.Match("a"));
- EXPECT_FALSE(re.Match("aa"));
-}
-
-TEST(Regex, RegexComplicated) {
- benchmark::Regex re;
- EXPECT_TRUE(re.Init("([0-9]+ )?(mon|low)key(s)?", NULL));
-
- EXPECT_TRUE(re.Match("something monkey hands"));
- EXPECT_TRUE(re.Match("1 lowkey"));
- EXPECT_TRUE(re.Match("19 monkeys"));
- EXPECT_FALSE(re.Match("09 a"));
-}
-
-TEST(Regex, InvalidNoErrorMessage) {
- benchmark::Regex re;
- EXPECT_FALSE(re.Init("[", NULL));
-}
-
-TEST(Regex, Invalid) {
- std::string error;
- benchmark::Regex re;
- EXPECT_FALSE(re.Init("[", &error));
-
- EXPECT_NE("", error);
-}