Browse Source

Math: debug operator for Frustum.

pull/190/head
Vladimír Vondruš 10 years ago
parent
commit
376ea1e0b2
  1. 19
      src/Magnum/Math/Frustum.h
  2. 26
      src/Magnum/Math/Test/FrustumTest.cpp
  3. 4
      src/Magnum/Math/instantiation.cpp

19
src/Magnum/Math/Frustum.h

@ -81,6 +81,25 @@ template<class T> class Frustum {
Vector4<T> _data[6];
};
/** @debugoperator{Magnum::Math::Frustum} */
template<class T> Corrade::Utility::Debug& operator<<(Corrade::Utility::Debug& debug, const Frustum<T>& value) {
debug << "Frustum({" << Corrade::Utility::Debug::nospace;
for(std::size_t i = 0; i != 6; ++i) {
if(i != 0) debug << Corrade::Utility::Debug::nospace << "},\n {" << Corrade::Utility::Debug::nospace;
for(std::size_t j = 0; j != 4; ++j) {
if(j != 0) debug << Corrade::Utility::Debug::nospace << ",";
debug << value[i][j];
}
}
return debug << Corrade::Utility::Debug::nospace << "})";
}
/* Explicit instantiation for commonly used types */
#ifndef DOXYGEN_GENERATING_OUTPUT
extern template MAGNUM_EXPORT Corrade::Utility::Debug& operator<<(Corrade::Utility::Debug&, const Frustum<Float>&);
extern template MAGNUM_EXPORT Corrade::Utility::Debug& operator<<(Corrade::Utility::Debug&, const Frustum<Float>&);
#endif
}}
#endif

26
src/Magnum/Math/Test/FrustumTest.cpp

@ -24,6 +24,7 @@
DEALINGS IN THE SOFTWARE.
*/
#include <sstream>
#include <Corrade/TestSuite/Tester.h>
#include <Corrade/TestSuite/Compare/Container.h>
@ -36,6 +37,8 @@ struct FrustumTest: Corrade::TestSuite::Tester {
void construct();
void constructFromMatrix();
void debug();
};
typedef Math::Vector4<Float> Vector4;
@ -44,7 +47,9 @@ typedef Math::Frustum<Float> Frustum;
FrustumTest::FrustumTest() {
addTests({&FrustumTest::construct,
&FrustumTest::constructFromMatrix});
&FrustumTest::constructFromMatrix,
&FrustumTest::debug});
}
void FrustumTest::construct() {
@ -83,6 +88,25 @@ void FrustumTest::constructFromMatrix() {
TestSuite::Compare::Container);
}
void FrustumTest::debug() {
Frustum frustum{
{-1.0f, 2.0f, -3.0f, 0.1f},
{ 1.0f, -2.0f, 3.0f, 0.2f},
{-4.0f, 5.0f, -6.0f, 0.3f},
{ 4.0f, -5.0f, 6.0f, 0.4f},
{-7.0f, 8.0f, -9.0f, 0.5f},
{ 7.0f, -8.0f, 9.0f, 0.6f}};
std::ostringstream out;
Debug{&out} << frustum;
CORRADE_COMPARE(out.str(), "Frustum({-1, 2, -3, 0.1},\n"
" {1, -2, 3, 0.2},\n"
" {-4, 5, -6, 0.3},\n"
" {4, -5, 6, 0.4},\n"
" {-7, 8, -9, 0.5},\n"
" {7, -8, 9, 0.6})\n");
}
}}}
CORRADE_TEST_MAIN(Magnum::Math::Test::FrustumTest)

4
src/Magnum/Math/instantiation.cpp

@ -26,6 +26,7 @@
#include "Magnum/Math/Bezier.h"
#include "Magnum/Math/DualComplex.h"
#include "Magnum/Math/DualQuaternion.h"
#include "Magnum/Math/Frustum.h"
#include "Magnum/Math/Range.h"
namespace Corrade { namespace Utility {
@ -179,6 +180,9 @@ template Corrade::Utility::Debug& operator<<(Corrade::Utility::Debug&, const Vec
template Corrade::Utility::Debug& operator<<(Corrade::Utility::Debug&, const Vector<3, Double>&);
template Corrade::Utility::Debug& operator<<(Corrade::Utility::Debug&, const Vector<4, Double>&);
template Corrade::Utility::Debug& operator<<(Corrade::Utility::Debug&, const Frustum<Float>&);
template Corrade::Utility::Debug& operator<<(Corrade::Utility::Debug&, const Frustum<Double>&);
template Corrade::Utility::Debug& operator<<(Corrade::Utility::Debug&, const Range<1, Float>&);
template Corrade::Utility::Debug& operator<<(Corrade::Utility::Debug&, const Range<2, Float>&);
template Corrade::Utility::Debug& operator<<(Corrade::Utility::Debug&, const Range<3, Float>&);

Loading…
Cancel
Save