使用Matcher中的GTEST FLOAT比较
Using gtest float comparison in Matcher
我喜欢为拥有一些浮点值的结构编写匹配器:
struct Point3D
{
float x;
float y;
float z;
}
class Interface
{
virtual void SetPoint(Point3D point) = 0;
}
class MockInterface:
public Interface
{
MOCK_METHOD1(SetPoint, void(Point3D point));
}
MATCHER_P(Point3DEq, point, "Comparison of a Point3D")
{
return point.x == arg.x && point.y == arg.y && point.z == arg.z;
}
TEST(Point3DComparison, TestIfPoint3DAreEqual)
{
MockInterface interfaceFake;
Point setPoint = { 1.0, 1.0, 1.0 }
EXPECT_CALL(interfaceFake, SetPoint(Point3DEq(setPoint)).WillOnce(Return());
}
我不喜欢这个比赛,因为他没有尊重良好的浮点比较。我想使用Gmock或Gtest的浮动比较来编写一个匹配器。它应该看起来与之相似。
MATCHER_P(Point3DEq, point, "Comparison of a Point3D")
{
return EXPECT_THAT(point.x, FloatEq(arg.x) && EXPECT_THAT(point.y, FloatEq(arg.y) && EXPECT_THAT(point.z, FloatEq(arg.z);
}
问题是,期望_没有返回任何布尔值。使用Gmock和Gtest的功能,有没有很好的干净方法?
不错的方法是忘记 MATCHER_P
...
使用::testing::AllOf
-并使用Gmock的适当匹配器 - 如上所述FloatEq
/DoubleEq
-请参阅:
auto Point3DEq(Point3D const& p_expected)
{
using namespace testing;
return AllOf(Field(&Point3D::x, DoubleEq(p_expected.x)),
Field(&Point3D::y, DoubleEq(p_expected.y)),
Field(&Point3D::z, DoubleEq(p_expected.z)));
}
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么比较运算符如此快速
- 我可以使用 g++ 进行三种比较 (<=>) 吗?
- 比较字符数组
- 将模板化的类型与C++中的某些类/类型进行比较
- C++自定义比较函数
- 如何比较自定义类的std::变体
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- std::设置自定义比较器
- 布尔比较运算符是如何在C++中工作的
- C++将目录中的所有文件与::filesystem进行比较
- 使用Matcher中的GTEST FLOAT比较
- Visual Studio调试与发布版本:比较int和float不匹配
- 比较float比double更有效吗
- 如何比较cocos2dx中的float和Size变量内容
- 比较uint64_t和float的数值等价性
- 是否有一种方法可以正确地比较一个float值是否大于/小于另一个
- c++中两个float类型变量的精确比较
- 浮点精度 - C++ std::numeric_limits<float>::max() 可以准确地存储在浮点数中并在以后进行比较吗?
- float与int比较所需的额外时间