2013-02-28 4 views
11

Ich bin nicht in der Lage zu verstehen, warum der Testfall im Falle der Summierung von doppelten Zahlen oder Floats fehlgeschlagen ist. Es funktioniert sehr genau für den Integer-Datentyp.Fehler mit EXPECT_EQ für Summe von Double oder Float

// das Verfahren in simple_method.h

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

// der Testfall für dieses Verfahren

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

// Ausgabe ist

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 

Antwort

10

Siehe Dokumentation für Floating Point Comparison

EXPECT_EQ verwendet genaue Übereinstimmung. Aber Sie können nicht zwei Floating-Nummern genau übereinstimmen. (zumindest mit Leichtigkeit.)

Sie können EXPECT_FLOAT_EQ oder EXPECT_DOUBLE_EQ verwenden. (mit heuristischen Grenzen) Sie können auch EXPECT_NEAR mit bestimmten Grenzen verwenden.

+0

Link führt zur Github-Projektseite. Es scheint, dass es nicht mehr gültig ist. –

0

Dies ist nur ein Fehler beim Googletest. Die Textausgabe sollte den Fehler beweisen, aber das Format davon ist nicht genau spezifiziert.

+0

Dies ist kein Fehler in gtest, sondern eine Eigenschaft von Zahlen in Gleitkommadarstellung. Hier ist eine Referenz https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html – alexisrozhkov

+0

Ich glaube, das Plakat sagt, dass es ein Fehler ist, dass die Textausgabe nicht genug Nachkommastellen zu zeigen hat dass die zwei nicht übereinstimmen. Nicht dass die Zahlen übereinstimmen sollten. –