2010-01-21 4 views
5

Tôi đang sử dụng Boost thư viện :: Test, và tôi đang cố gắng để kiểm tra xem một giá trị phần trăm thực tế là gần với giá trị kỳ vọng:Vấn đề với BOOST_CHECK_CLOSE_FRACTION

BOOST_CHECK_CLOSE_FRACTION(
    items[i].ExpectedPercent, 
    items[i].ActualCount/totalCount, 
    0.05); 

Đối với một số lý do kiểm tra này không thành công ngay cả khi các giá trị đủ gần:

difference between items[i].ExpectedPercent{0.40000000000000002} 
    and items[i].ActualCount/totalReturned{0.42999999999999999} 
            exceeds 0.050000000000000003 

Đây có phải là vấn đề với Boost hoặc vấn đề với cách tôi đang sử dụng Boost không?

Trả lời

3

Sau một số thử nghiệm, nó chỉ ra rằng tài liệu cho BOOST_CHECK_CLOSE_FRACTION là không chính xác. Sự khoan dung nên được chỉ định như một phần nhỏ của giá trị kỳ vọng.

Vì vậy, TFAE:

BOOST_CHECK(abs(x - y) < (min(x, y) * 0.1)); 
BOOST_CHECK_CLOSE(x, y, 10); 
BOOST_CHECK_CLOSE_FRACTION(x, y, 0.1); 
+1

tôi muốn đề nghị bạn kiểm tra nếu có một báo cáo liên quan trong Boost Trac và nếu không, hãy báo cáo nó ở đó hoặc gửi bình luận của bạn để tăng danh sách gửi thư. – mloskot

2

Đó là vấn đề với cách bạn đang sử dụng tăng.

Đối số cuối cùng là dung sai phần trăm, không phải là giá trị chênh lệch tuyệt đối. 5% của 0,4 là 0,02.

0

Rõ ràng BOOST_CHECK_CLOSE và BOOST_CHECK_CLOSE_FRACTION sẽ không hoạt động nếu bạn kiểm tra xem một cái gì đó là gần 0. Sau đó, bạn có thể sử dụng:

BOOST_CHECK(abs(x - y) < accurancy);