Browse Source

Math: support packed debug output for Range.

pull/168/head
Vladimír Vondruš 3 years ago
parent
commit
0201b18f64
  1. 7
      src/Magnum/Math/Range.h
  2. 11
      src/Magnum/Math/Test/RangeTest.cpp

7
src/Magnum/Math/Range.h

@ -793,14 +793,17 @@ template<UnsignedInt dimensions, class T> inline bool intersects(const Range<dim
#ifndef CORRADE_SINGLES_NO_DEBUG
/** @debugoperator{Range} */
template<UnsignedInt dimensions, class T> Debug& operator<<(Debug& debug, const Range<dimensions, T>& value) {
debug << "Range({" << Debug::nospace << Vector<dimensions, T>{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<dimensions, T>{value.min()}[0];
for(UnsignedInt i = 1; i != dimensions; ++i)
debug << Debug::nospace << "," << Vector<dimensions, T>{value.min()}[i];
debug << Debug::nospace << "}, {"
<< Debug::nospace << Vector<dimensions, T>{value.max()}[0];
for(UnsignedInt i = 1; i != dimensions; ++i)
debug << Debug::nospace << "," << Vector<dimensions, T>{value.max()}[i];
return debug << Debug::nospace << "})";
return debug << Debug::nospace << (packed ? "}}" : "})");
}
/* Explicit instantiation for commonly used types */

11
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)

Loading…
Cancel
Save