如何修改Google Benchmark中Range()函数的增量、步长或范围设置
问题原因
Google Benchmark的Ranges方法默认采用2的幂次作为步长生成参数,目的是在大范围参数测试时减少用例数量、缩短测试耗时,因此你只会得到1、8、64、100这类非连续的采样结果,不符合小范围连续采样的需求。
解决方案
方案1:使用ArgsProduct搭配DenseRange(推荐)
这是官方提供的专门用于连续范围参数测试的接口,写法如下:
// registering function 'largestDivisorOdd' as a benchmark BENCHMARK(largestDivisorOdd)->ArgsProduct({ {999999}, // 第一个参数固定为999999 benchmark::DenseRange(1, 100, 1) // 第二个参数从1到100,步长为1 });
DenseRange的三个入参分别是起始值、结束值、步长,这里步长设为1就会生成1到100的所有整数,ArgsProduct会对两个参数集合做笛卡尔积,刚好得到你需要的100组测试用例。如果后续需要其他步长,直接修改第三个参数即可。
方案2:手动循环注册参数(兼容性更好)
如果你的Google Benchmark版本较低不支持DenseRange,可以直接循环调用Args手动注册每一组参数:
// registering function 'largestDivisorOdd' as a benchmark for (int i = 1; i <= 100; ++i) { BENCHMARK(largestDivisorOdd)->Args({999999, i}); }
这种写法逻辑直观,兼容所有版本的Google Benchmark。
内容的提问来源于stack exchange,提问作者YousefOnWeb
相关产品推荐
相关产品推荐

