编译安装
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
#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
#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();
