#include #include #include #include #include #include #include int test_log(){ using namespace boost::safe_numerics::utility; assert(ilog2(127u) == 6); assert(ilog2(128u) == 7); assert(ilog2(129u) == 7); assert(ilog2(255u) == 7); assert(ilog2(256u) == 8); assert(ilog2(127) == 6); assert(ilog2(128) == 7); assert(ilog2(129) == 7); assert(ilog2(255) == 7); assert(ilog2(256) == 8); return 0; } template void print_argument_type(const T & t){ const std::type_info & ti = typeid(T); std::cout << boost::core::demangle(ti.name()) << ' ' << t << std::endl; } template int test_auto(const T & t, const U & u){ using namespace boost::safe_numerics; try{ safe(t) + u; } catch(const std::exception &){ safe(t) + u; } try{ t + safe(u); } catch(const std::exception &){ t + safe(u); } return 0; } int test_auto_result(){ using namespace boost::safe_numerics; automatic::addition_result< safe, safe >::type r1; print_argument_type(r1); automatic::addition_result< safe_signed_range<-3, 8, automatic>, safe_signed_range<-4, 9, automatic> >::type r2; print_argument_type(r2); return 0; } int test_compare_result(){ using namespace boost::safe_numerics; automatic::comparison_result< safe, safe >::type r1; print_argument_type(r1); return 0; } int main(){ using namespace boost::safe_numerics; test_log(); test_auto(1, -128); test_auto_result(); test_compare_result(); return 0; }