1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
|
///////////////////////////////////////////////////////////////
// Copyright 2022 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_0.txt).
#ifdef TEST_CPP_INT
#include <boost/multiprecision/cpp_int.hpp>
#include <boost/multiprecision/cpp_bin_float.hpp>
#include <boost/multiprecision/cpp_complex.hpp>
#endif
#ifdef TEST_GMP
#include <boost/multiprecision/gmp.hpp>
#endif
#ifdef TEST_TOMMATH
#include <boost/multiprecision/tommath.hpp>
#endif
#ifdef TEST_FLOAT128
#include <boost/multiprecision/float128.hpp>
#include <boost/multiprecision/complex128.hpp>
#endif
#ifdef TEST_MPC
#include <boost/multiprecision/mpc.hpp>
#endif
#ifdef TEST_MPFI
#include <boost/multiprecision/mpfi.hpp>
#endif
#include <sstream>
#include "test.hpp"
template <class T>
void test_integer()
{
std::istringstream iss("123#");
T val;
iss >> val;
BOOST_CHECK_EQUAL(val, 123);
}
template <class T>
void test_rational()
{
{
std::istringstream iss("123#");
T val;
iss >> val;
BOOST_CHECK_EQUAL(val, 123);
}
{
std::istringstream iss("123/23#");
T val;
iss >> val;
BOOST_CHECK_EQUAL(val, T(123, 23));
}
}
template <class T>
void test_float()
{
std::istringstream iss("123.0#");
T val;
iss >> val;
BOOST_CHECK_EQUAL(val, 123.0);
}
template <class T>
void test_complex()
{
{
std::istringstream iss("123.0#");
T val;
iss >> val;
BOOST_CHECK_EQUAL(val, 123.0);
}
{
std::istringstream iss("(123.0,23.0)#");
T val;
iss >> val;
BOOST_CHECK_EQUAL(val, T(123.0, 23.0));
}
}
template <class T>
void test_interval()
{
{
std::istringstream iss("123.0#");
T val;
iss >> val;
BOOST_CHECK_EQUAL(val, 123.0);
}
{
std::istringstream iss("{123.0,124.0}#");
T val;
iss >> val;
std::cout << val << std::endl;
BOOST_CHECK_EQUAL(val, T(123.0, 124.0));
}
}
int main()
{
#ifdef TEST_CPP_INT
test_integer<boost::multiprecision::cpp_int>();
test_rational<boost::multiprecision::cpp_rational>();
test_float<boost::multiprecision::cpp_bin_float_50>();
test_complex<boost::multiprecision::cpp_complex_50>();
#endif
#ifdef TEST_GMP
test_integer<boost::multiprecision::mpz_int>();
test_rational<boost::multiprecision::mpq_rational>();
test_float<boost::multiprecision::mpf_float_50>();
#endif
#ifdef TEST_TOMMATH
test_integer<boost::multiprecision::tom_int>();
test_rational<boost::multiprecision::tom_rational>();
#endif
#ifdef TEST_FLOAT128
test_float<boost::multiprecision::float128>();
test_complex<boost::multiprecision::complex128>();
#endif
#ifdef TEST_MPC
test_float<boost::multiprecision::mpfr_float_50>();
test_complex<boost::multiprecision::mpc_complex_50>();
#endif
#ifdef TEST_MPFI
test_interval<boost::multiprecision::mpfi_float_50>();
#endif
return 0;
}
|