From b94ddb0286d722bb3c931742342185bdcf4f7eb2 Mon Sep 17 00:00:00 2001 From: jzmaddock Date: Mon, 1 Jun 2015 19:07:02 +0100 Subject: [PATCH] Add missing test case. --- test/test_checked_mixed_cpp_int.cpp | 96 +++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 test/test_checked_mixed_cpp_int.cpp diff --git a/test/test_checked_mixed_cpp_int.cpp b/test/test_checked_mixed_cpp_int.cpp new file mode 100644 index 00000000..473af9a2 --- /dev/null +++ b/test/test_checked_mixed_cpp_int.cpp @@ -0,0 +1,96 @@ +/////////////////////////////////////////////////////////////// +// 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 "test.hpp" + +template +void check_result_type(const T&, const U&) +{ + BOOST_CHECK(0); +} + +void check_result_type(const boost::multiprecision::checked_int1024_t&, const boost::multiprecision::checked_int1024_t&){} + +int main() +{ + try{ + typedef boost::multiprecision::checked_int1024_t big_type; + typedef boost::multiprecision::checked_int512_t small_type; + typedef boost::multiprecision::number, boost::multiprecision::et_off> little_type; + + big_type big_val = (big_type(1) << 1000) + 1; + small_type small_val = 1; + little_type little_val = 1; + + check_result_type(big_val, big_val + small_val); + check_result_type(big_val, big_val - small_val); + check_result_type(big_val, big_val * small_val); + check_result_type(big_val, big_val / small_val); + check_result_type(big_val, big_val | small_val); + check_result_type(big_val, big_val & small_val); + check_result_type(big_val, big_val ^ small_val); + check_result_type(big_val, small_val + big_val); + check_result_type(big_val, small_val - big_val); + check_result_type(big_val, small_val * big_val); + check_result_type(big_val, small_val / big_val); + check_result_type(big_val, small_val | big_val); + check_result_type(big_val, small_val & big_val); + check_result_type(big_val, small_val ^ big_val); + + + check_result_type(big_val, big_val + little_val); + check_result_type(big_val, big_val - little_val); + check_result_type(big_val, big_val * little_val); + check_result_type(big_val, big_val / little_val); + check_result_type(big_val, big_val | little_val); + check_result_type(big_val, big_val & little_val); + check_result_type(big_val, big_val ^ little_val); + check_result_type(big_val, little_val + big_val); + check_result_type(big_val, little_val - big_val); + check_result_type(big_val, little_val * big_val); + check_result_type(big_val, little_val / big_val); + check_result_type(big_val, little_val | big_val); + check_result_type(big_val, little_val & big_val); + check_result_type(big_val, little_val ^ big_val); + + BOOST_CHECK_EQUAL(big_val == small_val, false); + BOOST_CHECK_EQUAL(big_val <= small_val, false); + BOOST_CHECK_EQUAL(big_val >= small_val, true); + BOOST_CHECK_EQUAL(big_val < small_val, false); + BOOST_CHECK_EQUAL(big_val > small_val, true); + BOOST_CHECK_EQUAL(big_val != small_val, true); + BOOST_CHECK_EQUAL(small_val == big_val, false); + BOOST_CHECK_EQUAL(small_val <= big_val, true); + BOOST_CHECK_EQUAL(small_val >= big_val, false); + BOOST_CHECK_EQUAL(small_val < big_val, true); + BOOST_CHECK_EQUAL(small_val > big_val, false); + BOOST_CHECK_EQUAL(small_val != big_val, true); + + BOOST_CHECK_EQUAL(big_val == little_val, false); + BOOST_CHECK_EQUAL(big_val <= little_val, false); + BOOST_CHECK_EQUAL(big_val >= little_val, true); + BOOST_CHECK_EQUAL(big_val < little_val, false); + BOOST_CHECK_EQUAL(big_val > little_val, true); + BOOST_CHECK_EQUAL(big_val != little_val, true); + BOOST_CHECK_EQUAL(little_val == big_val, false); + BOOST_CHECK_EQUAL(little_val <= big_val, true); + BOOST_CHECK_EQUAL(little_val >= big_val, false); + BOOST_CHECK_EQUAL(little_val < big_val, true); + BOOST_CHECK_EQUAL(little_val > big_val, false); + BOOST_CHECK_EQUAL(little_val != big_val, true); + } + catch(const std::exception& e) + { + std::cout << "Failed with unexpected exception: " << e.what() << std::endl; + return 1; + } + return boost::report_errors(); +} +