📄 test_limits.cpp
字号:
// Boost.Units - A C++ library for zero-overhead dimensional analysis and // unit/quantity manipulation and conversion//// Copyright (C) 2003-2008 Matthias Christian Schabel// Copyright (C) 2008 Steven Watanabe//// 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)/** \file \brief test_limits.cpp\detailedTest numeric_limits specialization.Output:@verbatim@endverbatim**/#include <complex>#include <limits>#include <boost/units/limits.hpp>#include <boost/units/cmath.hpp>#include "test_header.hpp"typedef boost::units::length unit_type;using boost::units::quantity;template<bool>struct check_quiet_NaN;template<>struct check_quiet_NaN<true> { template<class T> static void apply() { quantity<unit_type, T> q((std::numeric_limits<quantity<unit_type, T> >::quiet_NaN)()); bool test = isnan BOOST_PREVENT_MACRO_SUBSTITUTION (q); BOOST_CHECK(test); }};template<>struct check_quiet_NaN<false> { template<class T> static void apply() {}};template<bool>struct check_signaling_NaN;template<>struct check_signaling_NaN<true> { template<class T> static void apply() { quantity<unit_type, T> q((std::numeric_limits<quantity<unit_type, T> >::signaling_NaN)()); bool test = isnan BOOST_PREVENT_MACRO_SUBSTITUTION (q); BOOST_CHECK(test); }};template<>struct check_signaling_NaN<false> { template<class T> static void apply() {}};template<class T>void do_check() { #define CHECK_FUNCTION(name) BOOST_CHECK(((std::numeric_limits<T>::name)() == (std::numeric_limits<quantity<unit_type, T> >::name)().value())) #define CHECK_CONSTANT(name) BOOST_CHECK((std::numeric_limits<T>::name == std::numeric_limits<quantity<unit_type, T> >::name)) CHECK_FUNCTION(min); CHECK_FUNCTION(max); CHECK_FUNCTION(epsilon); CHECK_FUNCTION(round_error); CHECK_FUNCTION(infinity); CHECK_FUNCTION(denorm_min); CHECK_CONSTANT(is_specialized); CHECK_CONSTANT(digits); CHECK_CONSTANT(digits10); CHECK_CONSTANT(is_signed); CHECK_CONSTANT(is_integer); CHECK_CONSTANT(is_exact); CHECK_CONSTANT(radix); CHECK_CONSTANT(min_exponent); CHECK_CONSTANT(min_exponent10); CHECK_CONSTANT(max_exponent); CHECK_CONSTANT(max_exponent10); CHECK_CONSTANT(has_infinity); CHECK_CONSTANT(has_quiet_NaN); CHECK_CONSTANT(has_signaling_NaN); CHECK_CONSTANT(has_denorm); CHECK_CONSTANT(has_denorm_loss); CHECK_CONSTANT(is_iec559); CHECK_CONSTANT(is_bounded); CHECK_CONSTANT(is_modulo); CHECK_CONSTANT(traps); CHECK_CONSTANT(tinyness_before); CHECK_CONSTANT(round_style); check_quiet_NaN<std::numeric_limits<quantity<unit_type, T> >::has_quiet_NaN>::template apply<T>(); check_signaling_NaN<std::numeric_limits<quantity<unit_type, T> >::has_signaling_NaN>::template apply<T>();}int test_main(int,char *[]){ do_check<float>(); do_check<double>(); do_check<int>(); do_check<long>(); do_check<unsigned>(); do_check<std::complex<double> >(); return(0);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -