diff --git a/src/sfizz/Range.h b/src/sfizz/Range.h index b52224a7..c19c960a 100644 --- a/src/sfizz/Range.h +++ b/src/sfizz/Range.h @@ -125,6 +125,17 @@ public: _end = end; } + void expandTo(Type value) + { + if (containsWithEnd(value)) + return; + + if (value > _end) + _end = value; + else + _start = value; + } + private: Type _start { static_cast(0.0) }; Type _end { static_cast(0.0) }; diff --git a/tests/RangeT.cpp b/tests/RangeT.cpp index a55c7715..a7cbe16e 100644 --- a/tests/RangeT.cpp +++ b/tests/RangeT.cpp @@ -111,4 +111,23 @@ TEST_CASE("[Range] shrinkIfSmaller") REQUIRE(intRange == sfz::Range(4, 7)); intRange.shrinkIfSmaller(6, 5); REQUIRE(intRange == sfz::Range(5, 6)); -} \ No newline at end of file +} + +TEST_CASE("[Range] expandTo") +{ + sfz::Range intRange { 2, 10 }; + intRange.expandTo(5); + REQUIRE(intRange == sfz::Range(2, 10)); + intRange.expandTo(10); + REQUIRE(intRange == sfz::Range(2, 10)); + intRange.expandTo(2); + REQUIRE(intRange == sfz::Range(2, 10)); + intRange.expandTo(1); + REQUIRE(intRange == sfz::Range(1, 10)); + intRange.expandTo(-10); + REQUIRE(intRange == sfz::Range(-10, 10)); + intRange.expandTo(12); + REQUIRE(intRange == sfz::Range(-10, 12)); + intRange.expandTo(6); + REQUIRE(intRange == sfz::Range(-10, 12)); +}