簡體   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