2013-02-28 26 views
11

Tôi không thể hiểu tại sao trường hợp thử nghiệm thất bại trong trường hợp tổng hợp số kép hoặc phao. Nó hoạt động rất tốt cho kiểu dữ liệu số nguyên.Lỗi với EXPECT_EQ cho tổng số tiền đôi hoặc phao

// phương pháp trong simple_method.h

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

// các trường hợp thử nghiệm cho phương pháp này

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

// đầu ra là

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 

Trả lời

11

Sử dụng EXPECT_NEAR hoặc DoubleEq đối sánh thay thế. Các hoạt động điểm nổi có thể dẫn đến rounding errors làm cho kết quả trở nên khác biệt một chút.

+0

Cảm ơn bạn .. nó hoạt động tốt với cả hai macro. – suma

10

tài liệu Xem cho Floating Point Comparison

EXPECT_EQ sử dụng kết hợp chính xác. Nhưng bạn không thể khớp chính xác hai số nổi. (ít nhất là dễ dàng.)

Bạn có thể sử dụng EXPECT_FLOAT_EQ hoặc EXPECT_DOUBLE_EQ. (với giới hạn theo thuyết) Ngoài ra, bạn có thể sử dụng EXPECT_NEAR với giới hạn cụ thể.

+0

Liên kết dẫn đến trang dự án Github. Có vẻ như nó không còn hợp lệ nữa. –

0

Đây chỉ là lỗi trong Googletest. Văn bản đầu ra phải chứng minh sự thất bại, nhưng định dạng của nó không được xác định chính xác.

+0

Đây không phải là lỗi trong gtest, nhưng là một thuộc tính của các số trong biểu diễn dấu phẩy động. Đây là tài liệu tham khảo https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html – alexisrozhkov

+0

Tôi tin rằng người đăng nói rằng đó là lỗi mà đầu ra văn bản không có đủ chữ số thập phân để hiển thị rằng cả hai không khớp. Không phải là các con số phải phù hợp. –

Các vấn đề liên quan