我有以下头文件:
电源.hpp:
#pragma once
#include <type_traits>
template <typename T, typename R = decltype(std::declval<T>() * std::declval<T>())>
constexpr inline R square(const T& x_) noexcept;
电源.inl:
#pragma once
#include "power.hpp"
template <typename T, typename R>
constexpr inline R square(const T& x_) noexcept
{
return (x_ * x_);
}
power_unit_test.cpp:
#include <power.inl>
int main()
{
static_assert(square(2) == 4);
assert(square(2) == 4);
square(2);
return (0);
}
在使用标志编译-fprofile-instr-generate
并-fcoverage-mapping
使用 clang++ 之后。运行单元测试二进制文件,我得到一个报告,告诉我 main 中的三行中的每一行都被调用了,但函数内容只使用了一次。这种使用来自对 的独立调用square(2)
,断言似乎无法正确生成覆盖率报告。
如果我删除独立square(2)
的,那么覆盖率不会达到 100%,因为断言由于某种原因错过了产生覆盖率。
覆盖率报告如下:
电源.inl:
22| | template <typename T, typename R>
23| | constexpr inline R square(const T& x_) noexcept
24| 0| {
25| 0| return (x_ * x_);
26| 0| }
power_unit_test.cpp
29| |int main()
30| 1|{
31| 1| static_assert(arc::math::sq(2) == 4);
32| 1| assert(arc::math::sq(2) == 4);
33| 1| // arc::math::sq(2);
34| 1|
35| 1| return (0);
36| 1|}
请你能帮我理解为什么没有像我在这里期望的那样报道报道吗?这是 llvm-cov 中的错误还是我不理解覆盖意图?
在 MacOS 上使用自制的 clang 7.0.1 进行编译。使用 CMake 3.13.2 构建系统。