我正在为尚未实现的功能编写测试。在下面的代码中,即使输出和结果向量具有相同的值,QCOMPARE也会返回False。有人能解释一下原因吗?
void EigenValuesTest::EigenValuesTestx2_data()
{
QTest::addColumn<Eigen::MatrixXd>("data");
Eigen::MatrixXd a(2,2);
a<<12,3,4,5;
QTest::newRow("0") << a ;
}
void EigenValuesTest::EigenValuesTestx2()
{
QFETCH(Eigen::MatrixXd, data);
Eigen::EigenSolver<Eigen::MatrixXd> es(data,false);
Eigen::Vector2cd result;
result << std::complex<double>(13.4244,0),std::complex<double>(3.57557,0);
Eigen::Vector2cd output;
output = es.eigenvalues();
QCOMPARE(result,output);
}
答案 0 :(得分:2)
您需要使用
QCOMPARE(result.isApprox(output), true);
bool operator== (const MatrixBase< OtherDerived > & other) const
如果* this和other的每个系数都完全,则返回true 等于。警告可能使用浮点标量值时 应该使用模糊比较,例如isApprox()另请参阅 isApprox(),operator!=
编辑
您的特征向量不正确。零应为1,即(13.4244, 1.0)
,(3.57557, 1.0)
。此外,它们可能以与参考向量result
中指定的顺序不同的顺序出现。你需要考虑更加坚实的考验。
答案 1 :(得分:0)
我想引用文档
在比较浮点数和双精度数的情况下,qFuzzyCompare()用于比较。这意味着与0相比可能会失败。对此的一个解决方案是与1进行比较,并将1添加到生成的输出中。
到目前为止,这么好。自动完成,但现在
请注意,比较p1或p2为0.0的值将不起作用。对此的解决方案是与大于或等于1.0的值进行比较。
可能会导致问题,因为您的比较值中有零。
此外,如果Q_COMPARE
适用于所提供的类型,我无法肯定地说。任何输出都可能有所帮助。
如果比较失败,QCOMPARE会尝试输出值的内容,因此从测试日志中可以看出比较失败的原因。