编译安装
Google Test/Benchmark 是基于 CMake
构建的。跨平台支持非常的好,Windows 可以使用 nmake 编译安装,默认会在
Program Files 目录下创建包含库和头文件的 benchmark
文件夹。
具体过程可以参考:https://learn.microsoft.com/en-us/visualstudio/test/how-to-use-google-test-for-cpp
轻量级的单元测试可以使用微软内置的测试框架:https://learn.microsoft.com/en-us/visualstudio/test/how-to-use-microsoft-test-framework-for-cpp
相关报错
error LNK2001: unresolved external symbol __CxxFrameHandler4 and __GSHandlerCheck_EH4
这个是因为编译 benchmark 库和项目的 msvc
工具链的版本不一样导致的,Visual Studio 这一侧的版本很好切换,CMake
那面使用参数 -G "Visual Studio 15 2017 Win64" 切换。
https://stackoverflow.com/questions/66151081/error-lnk2001-unresolved-external-symbol-cxxframehandler4-and-gshandlerchec
LINK : warning LNK4217: Symbol"?PrintDefaultHelp@benchmark@@YAXXZ ...
如果是 benchmark 自己的符号 importa 失败了,有可能是没有定义
BENCHMARK_STATIC_DEFINE.
https://github.com/google/benchmark/issues/1450
基本使用
https://www.cnblogs.com/coderzh/archive/2009/04/11/1433744.html
Google Benchmark 的前端主要用宏来实现,比较轻巧。
Test
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| #include "pch.h"
constexpr int a = 1, b = 2;
TEST(TestCaseOps, TestAdd) { EXPECT_EQ(bitAdd(a, b), a + b); }
TEST(TestCaseOps, TestSub) { EXPECT_EQ(bitSub(a, b), a - b); }
TEST(TestCaseOps, TestMul) { EXPECT_EQ(bitMul(a, b), a * b); EXPECT_EQ(bitMul(a, 0), a * 0); EXPECT_EQ(bitMul(0, b), 0 * b); }
TEST(TestCaseOps, TestDiv) { EXPECT_EQ(bitDiv(a, b), a / b); EXPECT_EQ(bitDiv(0, 0), 0); EXPECT_EQ(bitDiv(1, 0), 0x7fffffff); EXPECT_EQ(bitDiv(-1, 0), -0x80000000i32); EXPECT_EQ(bitDiv(9, 3), 9 / 3); }
int main(int argc, char **argv) { ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); }
|
Benchmark
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| #include <benchmark/benchmark.h>
static void BM_StringCreation(benchmark::State &state) { for (auto _ : state) std::string empty_string; } BENCHMARK(BM_StringCreation);
static void BM_StringCopy(benchmark::State &state) { std::string x = "hello"; for (auto _ : state) std::string copy(x); } BENCHMARK(BM_StringCopy);
BENCHMARK_MAIN();
|
image-20230719104135019