Browse Source

Math: whoops, forgot about StrictWeakOrdering for Frustum.

Just a stretched version of the test for Matrix4. Hope that's okay.
simd
Vladimír Vondruš 8 years ago
parent
commit
f5b90cefba
  1. 18
      src/Magnum/Math/Frustum.h
  2. 39
      src/Magnum/Math/Test/FrustumTest.cpp

18
src/Magnum/Math/Frustum.h

@ -181,6 +181,24 @@ template<class T> template<class U> constexpr Frustum<T>::Frustum(const Frustum<
Vector4<T>{other[4]},
Vector4<T>{other[5]}} {}
namespace Implementation {
template<class T> struct StrictWeakOrdering<Frustum<T>> {
bool operator()(const Frustum<T>& a, const Frustum<T>& b) const {
StrictWeakOrdering<Vector<4, T>> o;
for(std::size_t i = 0; i < 6; ++i) {
if(o(a[i], b[i]))
return true;
if(o(b[i], a[i]))
return false;
}
return false; /* a and b are equivalent */
}
};
}
}}
#endif

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

@ -29,6 +29,7 @@
#include <Corrade/TestSuite/Compare/Container.h>
#include "Magnum/Math/Frustum.h"
#include "Magnum/Math/StrictWeakOrdering.h"
struct Frstm {
float data[24];
@ -77,6 +78,8 @@ struct FrustumTest: Corrade::TestSuite::Tester {
void compare();
void strictWeakOrdering();
void debug();
};
@ -98,6 +101,8 @@ FrustumTest::FrustumTest() {
&FrustumTest::compare,
&FrustumTest::strictWeakOrdering,
&FrustumTest::debug});
}
@ -310,6 +315,40 @@ void FrustumTest::compare() {
CORRADE_VERIFY(a != c);
}
void FrustumTest::strictWeakOrdering() {
StrictWeakOrdering o;
const Frustum a{
{1.0f, 1.0f, 2.0f, 2.0f},
{5.0f, 5.0f, 6.0f, 5.0f},
{5.0f, 5.0f, 6.0f, 5.0f},
{5.0f, 5.0f, 6.0f, 5.0f},
{5.0f, 5.0f, 6.0f, 5.0f},
{3.0f, 1.0f, 2.0f, 4.0f}};
const Frustum b{
{2.0f, 1.0f, 2.0f, 3.0f},
{5.0f, 5.0f, 6.0f, 5.0f},
{5.0f, 5.0f, 6.0f, 5.0f},
{5.0f, 5.0f, 6.0f, 5.0f},
{5.0f, 5.0f, 6.0f, 5.0f},
{4.0f, 1.0f, 2.0f, 5.0f}};
const Frustum c{
{1.0f, 1.0f, 2.0f, 2.0f},
{5.0f, 5.0f, 6.0f, 5.0f},
{5.0f, 5.0f, 6.0f, 5.0f},
{5.0f, 5.0f, 6.0f, 5.0f},
{5.0f, 5.0f, 6.0f, 5.0f},
{3.0f, 1.0f, 2.0f, 5.0f}};
CORRADE_VERIFY( o(a, b));
CORRADE_VERIFY(!o(b, a));
CORRADE_VERIFY( o(a, c));
CORRADE_VERIFY(!o(c, a));
CORRADE_VERIFY( o(c, b));
CORRADE_VERIFY(!o(b, c));
CORRADE_VERIFY(!o(a, a));
}
void FrustumTest::debug() {
Frustum frustum{
{-1.0f, 2.0f, -3.0f, 0.1f},

Loading…
Cancel
Save