繁体   English   中英

在这种情况下,为什么QCOMPARE不返回True?

[英]Why doesn't QCOMPARE return True in this case?

我正在为尚未实现的功能编写测试。 在下面的代码中,即使输出和结果向量具有相同的值,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);

}

您需要使用

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指定的顺序不同。 您需要考虑到这一点,以便进行更可靠的测试。

我想引用文档中的内容

如果比较浮点数和双精度数,则使用qFuzzyCompare()进行比较。 这意味着与0比较可能会失败。 一种解决方案是比较1,然后将产生的结果加1。

到现在为止还挺好。 自动完成,但现在

请注意,比较p1或p2为0.0的值将不起作用。 解决方案是与大于或等于1.0的值进行比较。

可能会导致问题,因为比较值中的零。

此外,我不能肯定地说Q_COMPARE适用于提供的类型。 任何输出可能会有所帮助。

如果比较失败,QCOMPARE会尝试输出值的内容,因此从测试日志中可以看出为什么比较失败。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM