2013-02-28 5 views
11

Nie mogę zrozumieć, dlaczego przypadek testowy nie powiódł się w przypadku sumowania podwójnych liczb lub wartości zmiennoprzecinkowych. Działa bardzo drobno dla typu danych integer.Błąd z EXPECT_EQ dla sumy podwójnej lub zmiennoprzecinkowej

// Sposób simple_method.h

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

// przypadku testu w tym sposobie

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

// wyjście

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 

Odpowiedz

10

Patrz dokumentacja Floating Point Comparison

EXPECT_EQ wykorzystuje dokładne dopasowanie. Ale nie można dokładnie dopasować dwóch liczb zmiennoprzecinkowych. (przynajmniej z łatwością.)

Możesz użyć EXPECT_FLOAT_EQ lub EXPECT_DOUBLE_EQ. (z heurystycznymi granicami) Możesz również użyć EXPECT_NEAR z określonymi granicami.

+0

Link prowadzi do strony projektu Github. Wygląda na to, że nie jest już ważny. –

0

To tylko błąd w Googletest. Wynik tekstowy powinien udowodnić awarię, ale jej format nie jest dokładnie określony.

+0

To nie jest błąd w gtest, ale właściwość liczb w reprezentacji zmiennoprzecinkowej. Oto referencja: https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html – alexisrozhkov

+0

Wydaje mi się, że plakat mówi, że jest to błąd, którego wynik tekstowy nie ma wystarczającej liczby miejsc dziesiętnych do wyświetlenia że te dwa nie pasują. Nie, że liczby powinny się zgadzać. –