X-Git-Url: https://oss.titaniummirror.com/gitweb?a=blobdiff_plain;f=libstdc%2B%2B-v3%2Ftestsuite%2F18_support%2Fnumeric_limits.cc;fp=libstdc%2B%2B-v3%2Ftestsuite%2F18_support%2Fnumeric_limits.cc;h=0000000000000000000000000000000000000000;hb=6fed43773c9b0ce596dca5686f37ac3fc0fa11c0;hp=9d6fa7380c834de4e706bb390ddf8074962907b6;hpb=27b11d56b743098deb193d510b337ba22dc52e5c;p=msp430-gcc.git diff --git a/libstdc++-v3/testsuite/18_support/numeric_limits.cc b/libstdc++-v3/testsuite/18_support/numeric_limits.cc deleted file mode 100644 index 9d6fa738..00000000 --- a/libstdc++-v3/testsuite/18_support/numeric_limits.cc +++ /dev/null @@ -1,241 +0,0 @@ -// 1999-08-23 bkoz - -// Copyright (C) 1999, 2001, 2002 Free Software Foundation -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 2, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License along -// with this library; see the file COPYING. If not, write to the Free -// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, -// USA. - -// 18.2.1.1 template class numeric_limits - -#include -#include -#include -#include - -template -struct extrema { - static T min; - static T max; -}; - - -#define DEFINE_EXTREMA(T, m, M) \ - template<> T extrema::min = m; \ - template<> T extrema::max = M - -DEFINE_EXTREMA(char, CHAR_MIN, CHAR_MAX); -DEFINE_EXTREMA(signed char, SCHAR_MIN, SCHAR_MAX); -DEFINE_EXTREMA(unsigned char, 0, UCHAR_MAX); -DEFINE_EXTREMA(short, SHRT_MIN, SHRT_MAX); -DEFINE_EXTREMA(unsigned short, 0, USHRT_MAX); -DEFINE_EXTREMA(int, INT_MIN, INT_MAX); -DEFINE_EXTREMA(unsigned, 0U, UINT_MAX); -DEFINE_EXTREMA(long, LONG_MIN, LONG_MAX); -DEFINE_EXTREMA(unsigned long, 0UL, ULONG_MAX); - -DEFINE_EXTREMA(float, FLT_MIN, FLT_MAX); -DEFINE_EXTREMA(double, DBL_MIN, DBL_MAX); -DEFINE_EXTREMA(long double, LDBL_MIN, LDBL_MAX); - -#undef DEFINE_EXTREMA - -template -void test_extrema() -{ - bool test = true; - T limits_min = std::numeric_limits::min(); - T limits_max = std::numeric_limits::max(); - T extrema_min = extrema::min; - T extrema_max = extrema::max; - VERIFY( extrema_min == limits_min ); - VERIFY( extrema_max == limits_max ); -} - -#ifdef __FreeBSD__ -// This specialization allows the extra precision unmentioned in -// system headers yet supported by long double on FreeBSD or Solaris -// to not cause a gratuitous FAIL for the entire test. Using this -// technique to compare the residual against epsilon ensures that any -// major breakage will still be detected (although obviously not as -// tight as the exact equality check that would have been generated by -// default). This replacement test is allowable by the fact that C++ -// limits should match the system provided limits for C even if they -// were wrong verses the actual FP hardware. -template<> -void test_extrema() -{ - typedef long double T; - bool test = true; - T limits_min = std::numeric_limits::min(); - T limits_max = std::numeric_limits::max(); - T extrema_min = extrema::min; - T extrema_max = extrema::max; - T epsilon = std::numeric_limits::epsilon(); - - VERIFY( (extrema_min - limits_min) < epsilon ); - VERIFY( (limits_min - extrema_min) < epsilon ); - VERIFY( (extrema_max / limits_max) < (1 + epsilon) ); - VERIFY( (limits_max / extrema_max) < (1 + epsilon) ); -} -#endif - -#ifdef __CHAR_UNSIGNED__ -#define char_is_signed false -#else -#define char_is_signed true -#endif - -void test_sign() -{ - bool test = true; - VERIFY( std::numeric_limits::is_signed == char_is_signed ); - VERIFY( std::numeric_limits::is_signed == true ); - VERIFY( std::numeric_limits::is_signed == false ); - VERIFY( std::numeric_limits::is_signed == true ); - VERIFY( std::numeric_limits::is_signed == false ); - VERIFY( std::numeric_limits::is_signed == true ); - VERIFY( std::numeric_limits::is_signed == false ); - VERIFY( std::numeric_limits::is_signed == true ); - VERIFY( std::numeric_limits::is_signed == false ); - VERIFY( std::numeric_limits::is_signed == true ); - VERIFY( std::numeric_limits::is_signed == true ); - VERIFY( std::numeric_limits::is_signed == true ); -} - - -template - struct A - { - int key; - public: - A(int i = 0): key(i) { } - bool - operator==(int i) { return i == key; } - }; - -struct B -{ - B(int i = 0) { } -}; - - -bool test01() -{ - bool test = true; - std::numeric_limits< A > obj; - - VERIFY( !obj.is_specialized ); - VERIFY( obj.min() == 0 ); - VERIFY( obj.max() == 0 ); - VERIFY( obj.digits == 0 ); - VERIFY( obj.digits10 == 0 ); - VERIFY( !obj.is_signed ); - VERIFY( !obj.is_integer ); - VERIFY( !obj.is_exact ); - VERIFY( obj.radix == 0 ); - VERIFY( obj.epsilon() == 0 ); - VERIFY( obj.round_error() == 0 ); - VERIFY( obj.min_exponent == 0 ); - VERIFY( obj.min_exponent10 == 0 ); - VERIFY( obj.max_exponent == 0 ); - VERIFY( obj.max_exponent10 == 0 ); - VERIFY( !obj.has_infinity ); - VERIFY( !obj.has_quiet_NaN ); - VERIFY( !obj.has_signaling_NaN ); - VERIFY( !obj.has_denorm ); - VERIFY( !obj.has_denorm_loss ); - VERIFY( obj.infinity() == 0 ); - VERIFY( obj.quiet_NaN() == 0 ); - VERIFY( obj.signaling_NaN() == 0 ); - VERIFY( obj.denorm_min() == 0 ); - VERIFY( !obj.is_iec559 ); - VERIFY( !obj.is_bounded ); - VERIFY( !obj.is_modulo ); - VERIFY( !obj.traps ); - VERIFY( !obj.tinyness_before ); - VERIFY( obj.round_style == std::round_toward_zero ); - -#ifdef DEBUG_ASSERT - assert(test); -#endif - - return test; -} - -// test linkage of the generic bits -template struct std::numeric_limits; - -void test02() -{ - typedef std::numeric_limits b_nl_type; - - // Should probably do all of them... - const int* pi1 = &b_nl_type::digits; - const int* pi2 = &b_nl_type::digits10; - const int* pi3 = &b_nl_type::max_exponent10; - const bool* pb1 = &b_nl_type::traps; -} - -// libstdc++/5045 -bool test03() -{ - bool test = true; - - VERIFY( std::numeric_limits::digits10 == 0 ); - VERIFY( __glibcpp_s8_digits10 == 2 ); - VERIFY( __glibcpp_u8_digits10 == 2 ); - VERIFY( __glibcpp_s16_digits10 == 4 ); - VERIFY( __glibcpp_u16_digits10 == 4 ); - VERIFY( __glibcpp_s32_digits10 == 9 ); - VERIFY( __glibcpp_u32_digits10 == 9 ); - VERIFY( __glibcpp_s64_digits10 == 18 ); - VERIFY( __glibcpp_u64_digits10 == 19 ); - -#ifdef DEBUG_ASSERT - assert(test); -#endif - - return test; -} - - -int main() -{ - test01(); - test02(); - test03(); - - test_extrema(); - test_extrema(); - test_extrema(); - - test_extrema(); - test_extrema(); - - test_extrema(); - test_extrema(); - - test_extrema(); - test_extrema(); - - test_extrema(); - test_extrema(); - test_extrema(); - - test_sign(); - - return 0; -}