2013-02-28 552 views
11

我無法理解在求和雙精度數或浮點數的情況下測試用例失敗的原因。它對於整數數據類型工作得非常好。EXPECT_EQ爲雙精度或浮點數求和時出錯

//在simple_method.h方法

double sum (double a, double b) 
{ 
    double res = a+b; 
    return res; 
} 

//測試用例此方法

TEST(simpleSum, sumOfFloat) 
{ 
    EXPECT_EQ(4.56, sum(0.56, 4.0)); 
} 

//輸出是

Running main() from gtest_main.cc 
[==========] Running 1 test from 1 test case. 
[----------] Global test environment set-up. 
[----------] 1 test from simpleSum 
[ RUN  ] simpleSum.sumOfFloat 
/home/pcadmin/Desktop/so/so3/simple_method_test.cpp:7: Failure 
Value of: sum(0.56, 4.0) 
    Actual: 4.56 
Expected: 4.56 
[ FAILED ] simpleSum.sumOfFloat (0 ms) 
[----------] 1 test from simpleSum (0 ms total) 

[----------] Global test environment tear-down 
[==========] 1 test from 1 test case ran. (0 ms total) 
[ PASSED ] 0 tests. 
[ FAILED ] 1 test, listed below: 
[ FAILED ] simpleSum.sumOfFloat 

1 FAILED TEST 

回答

10

Floating Point Comparison

EXPECT_EQ查看文檔使用精確匹配。 但是,您無法準確匹配兩個浮動數字。 (至少輕鬆點)。

您可以使用EXPECT_FLOAT_EQEXPECT_DOUBLE_EQ。 (帶啓發式邊界) 另外,您可以使用EXPECT_NEAR以及特定邊界。

+0

鏈接導向Github項目頁面。它似乎不再有效。 – 2016-05-02 20:09:23

0

這只是Googletest中的一個錯誤。文本輸出應該證明失敗,但是它的格式沒有被精確地指定。

+0

這不是gtest中的錯誤,而是浮點數表示中的數字屬性。這裏有一個參考https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html – alexisrozhkov 2016-04-20 12:42:50

+0

我相信海報是說這是一個錯誤,文本輸出沒有足夠的小數位來顯示這兩個不匹配。不是數字應該匹配。 – 2016-09-13 14:16:58

相關問題