Files
charconv/test/test_float128.cpp
2023-06-12 16:37:18 +02:00

53 lines
1.4 KiB
C++

// Copyright 2023 Matt Borland
// Distributed under the Boost Software License, Version 1.0.
// https://www.boost.org/LICENSE_1_0.txt
#include <boost/charconv/detail/config.hpp>
#ifdef BOOST_CHARCONV_HAS_FLOAT128
#ifdef BOOST_CHARCONV_HAS_STDFLOAT128
#define BOOST_CHARCONV_HAS_FLOAT128_OSTREAM
#include <ostream>
#include <charconv>
std::ostream& operator<<( std::ostream& os, __float128 v )
{
char buffer[ 256 ] {};
std::to_chars(buffer, buffer + sizeof(buffer), static_cast<std::float128_t>(v));
os << buffer;
return os;
}
#endif // BOOST_CHARCONV_HAS_STDFLOAT128
#include <boost/charconv/detail/issignaling.hpp>
#include <boost/core/lightweight_test.hpp>
#include <limits>
void test_signaling_nan()
{
BOOST_TEST(boost::charconv::detail::issignaling(std::numeric_limits<__float128>::signaling_NaN()));
BOOST_TEST(!boost::charconv::detail::issignaling(std::numeric_limits<__float128>::quiet_NaN()));
BOOST_TEST(!boost::charconv::detail::issignaling(std::numeric_limits<__float128>::infinity()));
BOOST_TEST(boost::charconv::detail::issignaling(-std::numeric_limits<__float128>::signaling_NaN()));
BOOST_TEST(!boost::charconv::detail::issignaling(-std::numeric_limits<__float128>::quiet_NaN()));
BOOST_TEST(!boost::charconv::detail::issignaling(-std::numeric_limits<__float128>::infinity()));
}
int main()
{
test_signaling_nan();
return boost::report_errors();
}
#else
int main()
{
return 0;
}
#endif