diff --git a/range.cpp b/range.cpp index 29463d5d..55b8d763 100644 --- a/range.cpp +++ b/range.cpp @@ -80,8 +80,10 @@ range::clamp (T val) const template void range::expand (T val) { - min = std::min (min, val); - max = std::max (max, val); + // The arguments to min and max are such that expansion from initial NaN + // values should change both min and max to be that value. + min = std::min (val, min); + max = std::max (val, max); } diff --git a/test/range.cpp b/test/range.cpp index bfa764f3..78d98213 100644 --- a/test/range.cpp +++ b/test/range.cpp @@ -27,6 +27,15 @@ main (int, char **) { CHECK_HARD ( range::UNLIMITED.contains (numeric_limits::min())); CHECK_HARD ( range::UNLIMITED.contains (numeric_limits::max())); + + { + 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; }