1 #ifndef BOOST_TEST_SUBTRACT_HPP
2 #define BOOST_TEST_SUBTRACT_HPP
4 // Copyright (c) 2015 Robert Ramey
6 // Distributed under the Boost Software License, Version 1.0. (See
7 // accompanying file LICENSE_1_0.txt or copy at
8 // http://www.boost.org/LICENSE_1_0.txt)
12 #include <boost/safe_numerics/safe_integer.hpp>
13 #include <boost/safe_numerics/range_value.hpp>
15 template<class T1, class T2>
23 std::cout << "testing"<< std::endl;
26 using result_type = decltype(t1 - v2);
27 std::cout << "safe<" << av1 << "> - " << av2 << " -> ";
29 boost::safe_numerics::is_safe<safe_t<T1> >::value,
33 boost::safe_numerics::is_safe<result_type>::value,
34 "Expression failed to return safe type"
38 // use auto to avoid checking assignment.
39 auto result = t1 - v2;
40 std::cout << make_result_display(result);
41 if(expected_result == 'x'){
43 << " ! = "<< av1 << " - " << av2
44 << " failed to detect error in subtraction "
49 std::cout << std::endl;
51 catch(const std::exception &){
52 if(expected_result == '.'){
54 << " == "<< av1 << " - " << av2
55 << " erroneously detected error in subtraction "
60 catch(const std::exception &){}
67 using result_type = decltype(v1 - t2);
68 std::cout << av1 << " - " << "safe<" << av2 << "> -> ";
70 boost::safe_numerics::is_safe<safe_t<T2> >::value,
74 boost::safe_numerics::is_safe<result_type>::value,
75 "Expression failed to return safe type"
79 // use auto to avoid checking assignment.
80 auto result = v1 - t2;
81 std::cout << make_result_display(result);
82 if(expected_result == 'x'){
84 << " ! = "<< av1 << " - " << av2
85 << " failed to detect error in subtraction "
90 std::cout << std::endl;
92 catch(const std::exception &){
93 if(expected_result == '.'){
95 << " == "<< av1 << " - " << av2
96 << " erroneously detected error in subtraction "
101 catch(const std::exception &){}
109 using result_type = decltype(t1 - t2);
110 std::cout << "safe<" << av1 << "> - " << "safe<" << av2 << "> -> ";
112 boost::safe_numerics::is_safe<result_type>::value,
113 "Expression failed to return safe type"
116 // use auto to avoid checking assignment.
117 auto result = t1 - t2;
118 std::cout << make_result_display(result);
119 if(expected_result == 'x'){
121 << " ! = "<< av1 << " - " << av2
122 << " failed to detect error in subtraction "
127 std::cout << std::endl;
129 catch(const std::exception &){
130 if(expected_result == '.'){
132 << " == "<< av1 << " - " << av2
133 << "erroneously detected error in subtraction "
138 catch(const std::exception &){}
143 return true; // correct result
146 #endif // BOOST_TEST_SUBTRACT