diff --git a/src/Magnum/Math/Range.h b/src/Magnum/Math/Range.h index 0757bfb66..e112f886e 100644 --- a/src/Magnum/Math/Range.h +++ b/src/Magnum/Math/Range.h @@ -793,14 +793,17 @@ template inline bool intersects(const Range Debug& operator<<(Debug& debug, const Range& value) { - debug << "Range({" << Debug::nospace << Vector{value.min()}[0]; + /** @todo might make sense to propagate the flags also, for hex value + printing etc */ + const bool packed = debug.immediateFlags() >= Debug::Flag::Packed; + debug << (packed ? "{{" : "Range({") << Debug::nospace << Vector{value.min()}[0]; for(UnsignedInt i = 1; i != dimensions; ++i) debug << Debug::nospace << "," << Vector{value.min()}[i]; debug << Debug::nospace << "}, {" << Debug::nospace << Vector{value.max()}[0]; for(UnsignedInt i = 1; i != dimensions; ++i) debug << Debug::nospace << "," << Vector{value.max()}[i]; - return debug << Debug::nospace << "})"; + return debug << Debug::nospace << (packed ? "}}" : "})"); } /* Explicit instantiation for commonly used types */ diff --git a/src/Magnum/Math/Test/RangeTest.cpp b/src/Magnum/Math/Test/RangeTest.cpp index 73b47bec8..e65b60547 100644 --- a/src/Magnum/Math/Test/RangeTest.cpp +++ b/src/Magnum/Math/Test/RangeTest.cpp @@ -144,6 +144,7 @@ struct RangeTest: TestSuite::Tester { void subclass(); void debug(); + void debugPacked(); }; using Magnum::Range1D; @@ -192,7 +193,8 @@ RangeTest::RangeTest() { &RangeTest::subclassTypes, &RangeTest::subclass, - &RangeTest::debug}); + &RangeTest::debug, + &RangeTest::debugPacked}); } void RangeTest::construct() { @@ -966,6 +968,13 @@ void RangeTest::debug() { CORRADE_COMPARE(o.str(), "Range({34, 23}, {47, 30})\n"); } +void RangeTest::debugPacked() { + std::ostringstream out; + /* Second is not packed, the first should not make any flags persistent */ + Debug{&out} << Debug::packed << Range2Di{{34, 23}, {47, 30}} << Range2Di{}; + CORRADE_COMPARE(out.str(), "{{34, 23}, {47, 30}} Range({0, 0}, {0, 0})\n"); +} + }}}} CORRADE_TEST_MAIN(Magnum::Math::Test::RangeTest)