Browse Source

MeshTools: also test NaN behavior of boundingBoxAxisAligned()

pull/557/head
Pablo Escobar 4 years ago
parent
commit
53487f5a84
  1. 25
      src/Magnum/MeshTools/Test/BoundingVolumeTest.cpp

25
src/Magnum/MeshTools/Test/BoundingVolumeTest.cpp

@ -47,6 +47,8 @@ struct BoundingVolumeTest: TestSuite::Tester {
explicit BoundingVolumeTest(); explicit BoundingVolumeTest();
void boxAxisAligned(); void boxAxisAligned();
void boxAxisAlignedNaN();
void sphereBouncingBubble(); void sphereBouncingBubble();
void sphereBouncingBubbleNaN(); void sphereBouncingBubbleNaN();
@ -56,6 +58,7 @@ struct BoundingVolumeTest: TestSuite::Tester {
BoundingVolumeTest::BoundingVolumeTest() { BoundingVolumeTest::BoundingVolumeTest() {
addTests({&BoundingVolumeTest::boxAxisAligned, addTests({&BoundingVolumeTest::boxAxisAligned,
&BoundingVolumeTest::boxAxisAlignedNaN,
&BoundingVolumeTest::sphereBouncingBubble, &BoundingVolumeTest::sphereBouncingBubble,
&BoundingVolumeTest::sphereBouncingBubbleNaN}); &BoundingVolumeTest::sphereBouncingBubbleNaN});
@ -75,6 +78,28 @@ void BoundingVolumeTest::boxAxisAligned() {
CORRADE_COMPARE(box.size(), (Vector3{2.0f, cylinderLength + 2.0f, 2.0f})); CORRADE_COMPARE(box.size(), (Vector3{2.0f, cylinderLength + 2.0f, 2.0f}));
} }
void BoundingVolumeTest::boxAxisAlignedNaN() {
/* NaNs are skipped (unless it's all NaNs), matching minmax() behaviour */
{
const Range3D box = MeshTools::boundingBoxAxisAligned(Containers::stridedArrayView({
Vector3{Constants::nan()},
Vector3{1.0f, 1.0f, 1.0f},
Vector3{Constants::nan()},
Vector3{2.0f, 2.0f, 2.0f},
Vector3{Constants::nan()}
}));
CORRADE_COMPARE(box.min(), (Vector3{1.0f, 1.0f, 1.0f}));
CORRADE_COMPARE(box.max(), (Vector3{2.0f, 2.0f, 2.0f}));
} {
const Range3D box = MeshTools::boundingBoxAxisAligned(Containers::stridedArrayView({
Vector3{Constants::nan()},
Vector3{Constants::nan()}
}));
CORRADE_VERIFY(Math::isNan(box.min()));
CORRADE_VERIFY(Math::isNan(box.max()));
}
}
void BoundingVolumeTest::sphereBouncingBubble() { void BoundingVolumeTest::sphereBouncingBubble() {
/* Empty positions -- produces radius epsilon for consistency with all /* Empty positions -- produces radius epsilon for consistency with all
all identical positions */ all identical positions */

Loading…
Cancel
Save