Add tests against Peter's spec.

[SVN r28281]
This commit is contained in:
Daniel James
2005-04-16 16:56:27 +00:00
parent 72cd8cdaa1
commit 0fae4b4f65
10 changed files with 207 additions and 28 deletions
+30 -9
View File
@@ -30,6 +30,9 @@ void float_tests(T* = 0)
BOOST_CHECK(zero == minus_zero);
BOOST_CHECK(x1(zero) == x1(minus_zero));
BOOST_CHECK(x1(zero) == HASH_NAMESPACE::hash_value(zero));
BOOST_CHECK(x1(minus_zero) == HASH_NAMESPACE::hash_value(minus_zero));
using namespace std;
if(std::numeric_limits<T>::has_infinity) {
@@ -42,6 +45,10 @@ void float_tests(T* = 0)
T minus_infinity2 = log(zero);
T minus_infinity3 = (T) 1. / minus_zero;
BOOST_CHECK(x1(infinity) == HASH_NAMESPACE::hash_value(infinity));
BOOST_CHECK(x1(minus_infinity)
== HASH_NAMESPACE::hash_value(minus_infinity));
BOOST_CHECK(infinity == infinity2);
BOOST_CHECK(infinity == infinity3);
BOOST_CHECK(infinity == infinity4);
@@ -75,33 +82,47 @@ void float_tests(T* = 0)
T max = (std::numeric_limits<T>::max)();
T half_max = max / 2;
T quater_max = max / 4;
T three_quater_max = max - quater_max;
T quarter_max = max / 4;
T three_quarter_max = max - quarter_max;
BOOST_CHECK(x1(max) == HASH_NAMESPACE::hash_value(max));
BOOST_CHECK(x1(half_max) == HASH_NAMESPACE::hash_value(half_max));
BOOST_CHECK(x1(quarter_max) == HASH_NAMESPACE::hash_value(quarter_max));
BOOST_CHECK(x1(three_quarter_max) == HASH_NAMESPACE::hash_value(three_quarter_max));
BOOST_CHECK(x1(max) == x1(max));
BOOST_CHECK(x1(max) != x1(quater_max));
BOOST_CHECK(x1(max) != x1(quarter_max));
BOOST_CHECK(x1(max) != x1(half_max));
BOOST_CHECK(x1(max) != x1(three_quater_max));
BOOST_CHECK(x1(quater_max) == x1(quater_max));
BOOST_CHECK(x1(quater_max) != x1(half_max));
BOOST_CHECK(x1(quater_max) != x1(three_quater_max));
BOOST_CHECK(x1(max) != x1(three_quarter_max));
BOOST_CHECK(x1(quarter_max) == x1(quarter_max));
BOOST_CHECK(x1(quarter_max) != x1(half_max));
BOOST_CHECK(x1(quarter_max) != x1(three_quarter_max));
BOOST_CHECK(x1(half_max) == x1(half_max));
BOOST_CHECK(x1(half_max) != x1(three_quater_max));
BOOST_CHECK(x1(three_quater_max) == x1(three_quater_max));
BOOST_CHECK(x1(half_max) != x1(three_quarter_max));
BOOST_CHECK(x1(three_quarter_max) == x1(three_quarter_max));
T v1 = asin((T) 1);
T v2 = acos((T) 0);
BOOST_CHECK(v1 == v2);
BOOST_CHECK(x1(v1) == x1(v2));
BOOST_CHECK(x1(v1) == HASH_NAMESPACE::hash_value(v1));
BOOST_CHECK(x1(v2) == HASH_NAMESPACE::hash_value(v2));
BOOST_CHECK(x1(std::numeric_limits<T>::epsilon()) != x1((T) 0));
BOOST_CHECK(x1(std::numeric_limits<T>::epsilon()) ==
HASH_NAMESPACE::hash_value(std::numeric_limits<T>::epsilon()));
// As before.
if(std::numeric_limits<T>::has_denorm) {
BOOST_CHECK(x1(std::numeric_limits<T>::denorm_min()) != x1(zero));
BOOST_CHECK(x1(std::numeric_limits<T>::denorm_min()) ==
HASH_NAMESPACE::hash_value(std::numeric_limits<T>::denorm_min()));
}
if(std::numeric_limits<T>::has_quiet_NaN) {
BOOST_CHECK(x1(std::numeric_limits<T>::quiet_NaN()) != x1(zero));
BOOST_CHECK(x1(std::numeric_limits<T>::quiet_NaN()) ==
HASH_NAMESPACE::hash_value(std::numeric_limits<T>::quiet_NaN()));
}
}