diff --git a/src/Magnum/Math/Range.h b/src/Magnum/Math/Range.h index f6c5916bc..4161668e9 100644 --- a/src/Magnum/Math/Range.h +++ b/src/Magnum/Math/Range.h @@ -186,6 +186,11 @@ template class Range { */ Range scaled(const VectorType& scaling) const; + /** @brief Whether given point is contained inside the range */ + constexpr bool contains(const VectorType& a) const { + return (a >= _min).all() && (a < _max).all(); + } + private: VectorType _min, _max; }; diff --git a/src/Magnum/Math/Test/RangeTest.cpp b/src/Magnum/Math/Test/RangeTest.cpp index f6938ef51..a428f77d9 100644 --- a/src/Magnum/Math/Test/RangeTest.cpp +++ b/src/Magnum/Math/Test/RangeTest.cpp @@ -123,6 +123,7 @@ struct RangeTest: Corrade::TestSuite::Tester { void padded(); void scaled(); + void contains(); void join(); void subclassTypes(); @@ -159,6 +160,7 @@ RangeTest::RangeTest() { &RangeTest::padded, &RangeTest::scaled, + &RangeTest::contains, &RangeTest::join, &RangeTest::subclassTypes, @@ -450,6 +452,14 @@ void RangeTest::scaled() { CORRADE_COMPARE(a.scaled({2, -3}), b); } +void RangeTest::contains() { + Range2Di a({34, 23}, {47, 30}); + + CORRADE_VERIFY(a.contains({40, 23})); + CORRADE_VERIFY(!a.contains({33, 23})); + CORRADE_VERIFY(!a.contains({40, 30})); +} + void RangeTest::join() { Range2Di a{{12, 20}, {15, 35}}; Range2Di b{{10, 25}, {17, 105}};