/////////////////////////////////////////////////////////////// // Copyright 2012 John Maddock. Distributed under the Boost // Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_ // #ifdef _MSC_VER # define _SCL_SECURE_NO_WARNINGS #endif #include #include #include "test.hpp" #include #include int main() { using namespace boost::multiprecision; cpp_int i(20); cpp_bin_float_50 f50(i); BOOST_CHECK_EQUAL(f50, 20); f50 = i.convert_to(); BOOST_CHECK_EQUAL(f50, 20); int1024_t i1024(45); cpp_bin_float_100 f100(i1024); BOOST_CHECK_EQUAL(f100, 45); f100 = i1024.convert_to(); BOOST_CHECK_EQUAL(f100, 45); uint1024_t ui1024(55); cpp_bin_float_100 f100b(ui1024); BOOST_CHECK_EQUAL(f100b, 55); f100b = ui1024.convert_to(); BOOST_CHECK_EQUAL(f100b, 55); typedef number, et_off> i32_t; i32_t i32(67); cpp_bin_float_100 f100c(i32); BOOST_CHECK_EQUAL(f100c, 67); f100c = i32.convert_to(); BOOST_CHECK_EQUAL(f100c, 67); typedef number, et_off> ui32_t; ui32_t ui32(98); cpp_bin_float_100 f100d(ui32); BOOST_CHECK_EQUAL(f100d, 98); f100d = ui32.convert_to(); BOOST_CHECK_EQUAL(f100d, 98); typedef number, et_off> i64_t; i64_t i64(67); cpp_bin_float_100 f100e(i64); BOOST_CHECK_EQUAL(f100e, 67); f100e = i64.convert_to(); BOOST_CHECK_EQUAL(f100e, 67); typedef number, et_off> ui64_t; ui64_t ui64(98); cpp_bin_float_100 f100f(ui64); BOOST_CHECK_EQUAL(f100f, 98); f100f = ui64.convert_to(); BOOST_CHECK_EQUAL(f100f, 98); typedef number, et_off> i128_t; i128_t i128(67); cpp_bin_float_100 f100g(i128); BOOST_CHECK_EQUAL(f100g, 67); f100g = i128.convert_to(); BOOST_CHECK_EQUAL(f100g, 67); typedef number, et_off> ui128_t; ui128_t ui128(98); cpp_bin_float_100 f100h(ui128); BOOST_CHECK_EQUAL(f100h, 98); f100h = ui128.convert_to(); BOOST_CHECK_EQUAL(f100h, 98); cpp_bin_float_quad q = (std::numeric_limits::min)(); BOOST_CHECK_EQUAL(q.convert_to(), (std::numeric_limits::min)()); q = (std::numeric_limits::max)(); BOOST_CHECK_EQUAL(q.convert_to(), (std::numeric_limits::max)()); q = (std::numeric_limits::denorm_min)(); BOOST_CHECK_EQUAL(q.convert_to(), (std::numeric_limits::denorm_min)()); // See https://svn.boost.org/trac/boost/ticket/12512: boost::multiprecision::number > ext_float("1e-646456978"); BOOST_CHECK_EQUAL(ext_float.convert_to(), 0); return boost::report_errors(); }