// 1999-08-23 bkoz
-// Copyright (C) 1999, 2001 Free Software Foundation
+// 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
void test_extrema()
{
bool test = true;
- VERIFY( extrema<T>::min == std::numeric_limits<T>::min() );
- VERIFY( extrema<T>::max == std::numeric_limits<T>::max() );
+ T limits_min = std::numeric_limits<T>::min();
+ T limits_max = std::numeric_limits<T>::max();
+ T extrema_min = extrema<T>::min;
+ T extrema_max = extrema<T>::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 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.
+// 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<long double>()
{
typedef long double T;
bool test = true;
- VERIFY( (extrema<T>::min - std::numeric_limits<T>::min())
- < std::numeric_limits<T>::epsilon() );
- VERIFY( (std::numeric_limits<T>::min() - extrema<T>::min)
- < std::numeric_limits<T>::epsilon() );
- VERIFY( (extrema<T>::max / std::numeric_limits<T>::max())
- < (1 + std::numeric_limits<T>::epsilon()) );
- VERIFY( (std::numeric_limits<T>::max() / extrema<T>::max)
- < (1 + std::numeric_limits<T>::epsilon()) );
+ T limits_min = std::numeric_limits<T>::min();
+ T limits_max = std::numeric_limits<T>::max();
+ T extrema_min = extrema<T>::min;
+ T extrema_max = extrema<T>::max;
+ T epsilon = std::numeric_limits<T>::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