#include #include #include "../debug.hpp" #include "../range.hpp" using namespace std; using namespace util; int main (int, char **) { // Check some simple cases close to the edges of a unit range. Tests float rounding. CHECK ( range::UNIT.contains ( 0.0)); CHECK ( range::UNIT.contains ( 0.5)); CHECK ( range::UNIT.contains ( 1.0)); CHECK ( range::UNIT.contains (std::numeric_limits::min ())); CHECK (!range::UNIT.contains (-0.00001)); CHECK (!range::UNIT.contains ( 1.00001)); // Check edge cases of unit with integer values CHECK ( range::UNIT.contains (0)); CHECK ( range::UNIT.contains (1)); CHECK (!range::UNIT.contains (2)); CHECK (!range::UNIT.contains (numeric_limits ::max ())); // Check the inclusivity of UNLIMITED with special floating values CHECK ( range::UNLIMITED.contains (0.0)); CHECK ( range::UNLIMITED.contains (+numeric_limits::infinity ())); CHECK ( range::UNLIMITED.contains (-numeric_limits::infinity ())); CHECK (!range::UNLIMITED.contains ( numeric_limits::quiet_NaN ())); // Check the inclusivity of UNLIMITED with some large numbers CHECK ( range::UNLIMITED.contains (numeric_limits::min())); CHECK ( range::UNLIMITED.contains (numeric_limits::max())); // Check inclusivity of MAX CHECK (!range::MAX.contains ( numeric_limits::infinity ())); CHECK (!range::MAX.contains (-numeric_limits::infinity ())); CHECK ( range::MAX.contains (numeric_limits::min())); CHECK ( range::MAX.contains (numeric_limits::max())); // Check that expansion via NaN is a noop { range initial_nan (numeric_limits::quiet_NaN (), numeric_limits::quiet_NaN ()); initial_nan.expand (1.0); CHECK_EQ (initial_nan.min, 1.0); CHECK_EQ (initial_nan.max, 1.0); } return EXIT_SUCCESS; }