Hi,

I am trying to compare two floating point numbers but am encountering somewhat
strange behaviour.

The minimal compilable example:
#define BOOST_TEST_MODULE tests
#define BOOST_TEST_DYN_LINK
#include <boost/test/unit_test.hpp>

BOOST_AUTO_TEST_SUITE(testsuite)

BOOST_AUTO_TEST_CASE(test1)
{
  namespace tt = boost::test_tools;
  BOOST_TEST(0.1 == 0.2, tt::tolerance(0.01)); // will fail
  BOOST_TEST(0.1f == 0.2f, tt::tolerance(0.02)); // will fail too, but 
different error message...
}

BOOST_AUTO_TEST_SUITE_END()

When compiling with:
clang++ (clang version 7.0.1-8 (tags/RELEASE_701/final))
flags: -o main -g -std=c++17 -stdlib=libc++ -lboost_unit_test_framework main.cpp
boost: 1.72.0

I'll get the following output:
Running 1 test case...
main.cpp(10): error: in "testsuite/test1": check 0.1 == 0.2 has failed 
[0.10000000000000001 != 0.20000000000000001]. Relative difference exceeds 
tolerance [1 > 0.01]
main.cpp(11): error: in "testsuite/test1": check 0.1f == 0.2f has failed 
[0.100000001 != 0.200000003]

*** 2 failures are detected in the test module "tests"

Why am I getting two different messages? I expected those to be the same...

Regards, Matthijs

Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
Boost-users mailing list
[email protected]
https://lists.boost.org/mailman/listinfo.cgi/boost-users

Reply via email to