Browse Source

Math: equality comparison for Frustum.

Together with the debug operator it allows for much simpler testing.
pull/190/head
Vladimír Vondruš 10 years ago
parent
commit
54d1aefcba
  1. 13
      src/Magnum/Math/Frustum.h
  2. 37
      src/Magnum/Math/Test/FrustumTest.cpp

13
src/Magnum/Math/Frustum.h

@ -61,6 +61,19 @@ template<class T> class Frustum {
/** @brief Constructor */
constexpr /*implicit*/ Frustum(const Vector4<T>& left, const Vector4<T>& right, const Vector4<T>& bottom, const Vector4<T>& top, const Vector4<T>& near, const Vector4<T>& far): _data{left, right, bottom, top, near, far} {}
/** @brief Equality comparison */
bool operator==(const Frustum<T>& other) const {
for(std::size_t i = 0; i != 6; ++i)
if(_data[i] != other._data[i]) return false;
return true;
}
/** @brief Non-equality comparison */
bool operator!=(const Frustum<T>& other) const {
return !operator==(other);
}
/**
* @brief Raw data
* @return One-dimensional array of length `24`.

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

@ -38,6 +38,8 @@ struct FrustumTest: Corrade::TestSuite::Tester {
void construct();
void constructFromMatrix();
void compare();
void debug();
};
@ -49,6 +51,8 @@ FrustumTest::FrustumTest() {
addTests({&FrustumTest::construct,
&FrustumTest::constructFromMatrix,
&FrustumTest::compare,
&FrustumTest::debug});
}
@ -84,8 +88,37 @@ void FrustumTest::constructFromMatrix() {
const Frustum frustum = Frustum::fromMatrix(
Matrix4::perspectiveProjection(90.0_degf, 1.0f, 1.0f, 10.0f));
CORRADE_COMPARE_AS(frustum.planes(), expected.planes(),
TestSuite::Compare::Container);
CORRADE_COMPARE(frustum, expected);
}
void FrustumTest::compare() {
Frustum a{
{-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}};
Frustum b{
{-1.0f, 2.0f, -3.0f, 0.1f},
{ 1.0f, -2.0f, 3.0f, 0.2f},
{-4.0f, 5.0f, -6.0f, 0.3f + Math::TypeTraits<Float>::epsilon()/2.0f},
{ 4.0f, -5.0f, 6.0f, 0.4f},
{-7.0f, 8.0f, -9.0f, 0.5f},
{ 7.0f, 8.0f, 9.0f, 0.6f}};
Frustum c{
{-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 + Math::TypeTraits<Float>::epsilon()*2.0f},
{ 7.0f, 8.0f, 9.0f, 0.6f}};
CORRADE_VERIFY(a == a);
CORRADE_VERIFY(a == b);
CORRADE_VERIFY(a != c);
}
void FrustumTest::debug() {

Loading…
Cancel
Save