diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index bee4b92942a..43743b8b8eb 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,9 @@ +2001-08-15 Gabriel Dos Reis + + * testsuite/18_support/numeric_limits.cc: Add more tests. + * include/bits/std_limits.h (numeric_limits::max): Fix + typo. + 2001-08-14 Ulrich Weigand * configure.target (cpu_include_dir): Set to `config/cpu/s390' diff --git a/libstdc++-v3/include/bits/std_limits.h b/libstdc++-v3/include/bits/std_limits.h index 06213ac2ba3..2d0804d31f7 100644 --- a/libstdc++-v3/include/bits/std_limits.h +++ b/libstdc++-v3/include/bits/std_limits.h @@ -1123,7 +1123,7 @@ namespace std static signed char min() throw() { return __glibcpp_signed_char_min; } static signed char max() throw() - { return __glibcpp_signed_char_min; } + { return __glibcpp_signed_char_max; } static const int digits = __glibcpp_signed_char_digits; static const int digits10 = __glibcpp_signed_char_digits10; diff --git a/libstdc++-v3/testsuite/18_support/numeric_limits.cc b/libstdc++-v3/testsuite/18_support/numeric_limits.cc index 6faaa92d5f2..000577917d1 100644 --- a/libstdc++-v3/testsuite/18_support/numeric_limits.cc +++ b/libstdc++-v3/testsuite/18_support/numeric_limits.cc @@ -21,8 +21,66 @@ // 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() +{ + VERIFY( extrema::min == std::numeric_limits::min() ); + VERIFY( extrema::max == std::numeric_limits::max() ); +} + +#ifdef __CHAR_UNSIGNED__ +#define char_is_signed false +#else +#define char_is_signed true +#endif + +void test_sign() +{ + 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 @@ -96,5 +154,25 @@ int main() { test01(); test02(); - return 0; + + 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; }