[英]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.