From 6e790860b520b06a92ceb69904f6ab700fdb5625 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Thu, 20 Jan 2022 16:44:36 +0100 Subject: [PATCH] MeshTools: clean up and improve reference() and owned() tests. Explicitly testing the case of non-indexed meshes, renaming some variables to match what they actually contain. --- src/Magnum/MeshTools/Test/ReferenceTest.cpp | 92 +++++++++++++++++---- 1 file changed, 76 insertions(+), 16 deletions(-) diff --git a/src/Magnum/MeshTools/Test/ReferenceTest.cpp b/src/Magnum/MeshTools/Test/ReferenceTest.cpp index d4b077b44..b2f153f61 100644 --- a/src/Magnum/MeshTools/Test/ReferenceTest.cpp +++ b/src/Magnum/MeshTools/Test/ReferenceTest.cpp @@ -34,6 +34,7 @@ #include "Magnum/Primitives/Gradient.h" #include "Magnum/Primitives/Grid.h" #include "Magnum/Trade/MeshData.h" +#include namespace Magnum { namespace MeshTools { namespace Test { namespace { @@ -41,9 +42,11 @@ struct ReferenceTest: TestSuite::Tester { explicit ReferenceTest(); void reference(); + void referenceNoIndexData(); void referenceNoIndexVertexAttributeData(); void mutableReference(); + void mutableReferenceNoIndexData(); void mutableReferenceNoIndexVertexAttributeData(); void mutableReferenceNotMutable(); @@ -59,9 +62,11 @@ struct ReferenceTest: TestSuite::Tester { ReferenceTest::ReferenceTest() { addTests({&ReferenceTest::reference, + &ReferenceTest::referenceNoIndexData, &ReferenceTest::referenceNoIndexVertexAttributeData, &ReferenceTest::mutableReference, + &ReferenceTest::mutableReferenceNoIndexData, &ReferenceTest::mutableReferenceNoIndexVertexAttributeData, &ReferenceTest::mutableReferenceNotMutable, @@ -76,9 +81,30 @@ ReferenceTest::ReferenceTest() { } void ReferenceTest::reference() { - const Trade::MeshData circle = Primitives::grid3DSolid({15, 3}, Primitives::GridFlag::Tangents); + const Trade::MeshData grid = Primitives::grid3DSolid({15, 3}, Primitives::GridFlag::Tangents); + CORRADE_VERIFY(grid.isIndexed()); + + Trade::MeshData reference = MeshTools::reference(grid); + CORRADE_VERIFY(reference.isIndexed()); + CORRADE_COMPARE(reference.primitive(), grid.primitive()); + CORRADE_COMPARE(reference.indexDataFlags(), Trade::DataFlags{}); + CORRADE_COMPARE(reference.vertexDataFlags(), Trade::DataFlags{}); + CORRADE_COMPARE(reference.indexCount(), grid.indexCount()); + CORRADE_COMPARE(reference.indexType(), grid.indexType()); + CORRADE_COMPARE(reference.indexOffset(), grid.indexOffset()); + CORRADE_COMPARE(reference.indexStride(), grid.indexStride()); + CORRADE_COMPARE(reference.vertexCount(), grid.vertexCount()); + CORRADE_COMPARE(static_cast(reference.indexData().data()), grid.indexData().data()); + CORRADE_COMPARE(static_cast(reference.vertexData().data()), grid.vertexData().data()); + CORRADE_COMPARE(static_cast(reference.attributeData().data()), grid.attributeData().data()); +} + +void ReferenceTest::referenceNoIndexData() { + const Trade::MeshData circle = Primitives::circle3DSolid(5); + CORRADE_VERIFY(!circle.isIndexed()); Trade::MeshData reference = MeshTools::reference(circle); + CORRADE_VERIFY(!reference.isIndexed()); CORRADE_COMPARE(reference.primitive(), circle.primitive()); CORRADE_COMPARE(reference.indexDataFlags(), Trade::DataFlags{}); CORRADE_COMPARE(reference.vertexDataFlags(), Trade::DataFlags{}); @@ -102,10 +128,30 @@ void ReferenceTest::referenceNoIndexVertexAttributeData() { } void ReferenceTest::mutableReference() { - Trade::MeshData circle = Primitives::grid3DSolid({15, 3}, Primitives::GridFlag::Tangents); - CORRADE_VERIFY(circle.isIndexed()); + Trade::MeshData grid = Primitives::grid3DSolid({15, 3}, Primitives::GridFlag::Tangents); + CORRADE_VERIFY(grid.isIndexed()); + + Trade::MeshData reference = MeshTools::mutableReference(grid); + CORRADE_VERIFY(reference.isIndexed()); + CORRADE_COMPARE(reference.primitive(), grid.primitive()); + CORRADE_COMPARE(reference.indexDataFlags(), Trade::DataFlag::Mutable); + CORRADE_COMPARE(reference.vertexDataFlags(), Trade::DataFlag::Mutable); + CORRADE_COMPARE(reference.indexCount(), grid.indexCount()); + CORRADE_COMPARE(reference.indexType(), grid.indexType()); + CORRADE_COMPARE(reference.indexOffset(), grid.indexOffset()); + CORRADE_COMPARE(reference.indexStride(), grid.indexStride()); + CORRADE_COMPARE(reference.vertexCount(), grid.vertexCount()); + CORRADE_COMPARE(static_cast(reference.indexData().data()), grid.indexData().data()); + CORRADE_COMPARE(static_cast(reference.vertexData().data()), grid.vertexData().data()); + CORRADE_COMPARE(static_cast(reference.attributeData().data()), grid.attributeData().data()); +} + +void ReferenceTest::mutableReferenceNoIndexData() { + Trade::MeshData circle = Primitives::circle3DSolid(5); + CORRADE_VERIFY(!circle.isIndexed()); Trade::MeshData reference = MeshTools::mutableReference(circle); + CORRADE_VERIFY(!reference.isIndexed()); CORRADE_COMPARE(reference.primitive(), circle.primitive()); CORRADE_COMPARE(reference.indexDataFlags(), Trade::DataFlag::Mutable); CORRADE_COMPARE(reference.vertexDataFlags(), Trade::DataFlag::Mutable); @@ -149,13 +195,14 @@ void ReferenceTest::owned() { CORRADE_COMPARE(cube.vertexDataFlags(), Trade::DataFlags{}); Trade::MeshData owned = MeshTools::owned(cube); + CORRADE_VERIFY(owned.isIndexed()); CORRADE_COMPARE(owned.primitive(), cube.primitive()); CORRADE_COMPARE(owned.indexDataFlags(), Trade::DataFlag::Mutable|Trade::DataFlag::Owned); CORRADE_COMPARE(owned.vertexDataFlags(), Trade::DataFlag::Mutable|Trade::DataFlag::Owned); - CORRADE_VERIFY(owned.isIndexed()); CORRADE_COMPARE(owned.indexCount(), cube.indexCount()); CORRADE_COMPARE(owned.indexType(), cube.indexType()); CORRADE_COMPARE(owned.indexOffset(), cube.indexOffset()); + CORRADE_COMPARE(owned.indexStride(), cube.indexStride()); CORRADE_COMPARE(owned.vertexCount(), cube.vertexCount()); CORRADE_COMPARE(owned.attributeCount(), cube.attributeCount()); @@ -179,10 +226,10 @@ void ReferenceTest::ownedNoIndexData() { CORRADE_COMPARE(cube.vertexDataFlags(), Trade::DataFlags{}); Trade::MeshData owned = MeshTools::owned(cube); + CORRADE_VERIFY(!owned.isIndexed()); CORRADE_COMPARE(owned.primitive(), cube.primitive()); CORRADE_COMPARE(owned.indexDataFlags(), Trade::DataFlag::Mutable|Trade::DataFlag::Owned); CORRADE_COMPARE(owned.vertexDataFlags(), Trade::DataFlag::Mutable|Trade::DataFlag::Owned); - CORRADE_VERIFY(!owned.isIndexed()); CORRADE_COMPARE(owned.vertexCount(), cube.vertexCount()); CORRADE_COMPARE(owned.attributeCount(), cube.attributeCount()); } @@ -194,10 +241,10 @@ void ReferenceTest::ownedNoAttributeVertexData() { 42}; Trade::MeshData owned = MeshTools::owned(indexedFourtytwo); + CORRADE_VERIFY(owned.isIndexed()); CORRADE_COMPARE(owned.primitive(), MeshPrimitive::Edges); CORRADE_COMPARE(owned.indexDataFlags(), Trade::DataFlag::Mutable|Trade::DataFlag::Owned); CORRADE_COMPARE(owned.vertexDataFlags(), Trade::DataFlag::Mutable|Trade::DataFlag::Owned); - CORRADE_VERIFY(owned.isIndexed()); CORRADE_COMPARE(owned.indexCount(), 3); CORRADE_COMPARE(owned.indexType(), MeshIndexType::UnsignedShort); CORRADE_COMPARE(owned.indexOffset(), 0); @@ -216,10 +263,10 @@ void ReferenceTest::ownedStridedIndices() { 16}; Trade::MeshData owned = MeshTools::owned(stuff); + CORRADE_VERIFY(owned.isIndexed()); CORRADE_COMPARE(owned.primitive(), MeshPrimitive::Points); CORRADE_COMPARE(owned.indexDataFlags(), Trade::DataFlag::Mutable|Trade::DataFlag::Owned); CORRADE_COMPARE(owned.vertexDataFlags(), Trade::DataFlag::Mutable|Trade::DataFlag::Owned); - CORRADE_VERIFY(owned.isIndexed()); CORRADE_COMPARE(owned.indexCount(), 3); CORRADE_COMPARE(owned.indexType(), MeshIndexType::UnsignedShort); CORRADE_COMPARE(owned.indexOffset(), 2); @@ -265,16 +312,27 @@ void ReferenceTest::ownedImplementationSpecificVertexFormat() { } void ReferenceTest::ownedRvaluePassthrough() { - Trade::MeshData circle = Primitives::grid3DSolid({15, 3}, Primitives::GridFlag::Tangents); - CORRADE_COMPARE(circle.indexDataFlags(), Trade::DataFlag::Mutable|Trade::DataFlag::Owned); - CORRADE_COMPARE(circle.vertexDataFlags(), Trade::DataFlag::Mutable|Trade::DataFlag::Owned); - const void* indexData = circle.indexData(); - const void* vertexData = circle.vertexData(); - const void* attributeData = circle.attributeData(); - - Trade::MeshData owned = MeshTools::owned(std::move(circle)); + Trade::MeshData grid = Primitives::grid3DSolid({15, 3}, Primitives::GridFlag::Tangents); + CORRADE_COMPARE(grid.indexDataFlags(), Trade::DataFlag::Mutable|Trade::DataFlag::Owned); + CORRADE_COMPARE(grid.vertexDataFlags(), Trade::DataFlag::Mutable|Trade::DataFlag::Owned); + UnsignedInt indexCount = grid.indexCount(); + MeshIndexType indexType = grid.indexType(); + std::size_t indexOffset = grid.indexOffset(); + Int indexStride = grid.indexStride(); + UnsignedInt vertexCount = grid.vertexCount(); + const void* indexData = grid.indexData(); + const void* vertexData = grid.vertexData(); + const void* attributeData = grid.attributeData(); + + Trade::MeshData owned = MeshTools::owned(std::move(grid)); + CORRADE_VERIFY(owned.isIndexed()); CORRADE_COMPARE(owned.indexDataFlags(), Trade::DataFlag::Mutable|Trade::DataFlag::Owned); CORRADE_COMPARE(owned.vertexDataFlags(), Trade::DataFlag::Mutable|Trade::DataFlag::Owned); + CORRADE_COMPARE(owned.indexCount(), indexCount); + CORRADE_COMPARE(owned.indexType(), indexType); + CORRADE_COMPARE(owned.indexOffset(), indexOffset); + CORRADE_COMPARE(owned.indexStride(), indexStride); + CORRADE_COMPARE(owned.vertexCount(), vertexCount); CORRADE_COMPARE(owned.indexData(), indexData); CORRADE_COMPARE(owned.vertexData(), vertexData); CORRADE_COMPARE(owned.attributeData(), attributeData); @@ -283,13 +341,15 @@ void ReferenceTest::ownedRvaluePassthrough() { void ReferenceTest::ownedRvaluePartialPassthrough() { Trade::MeshData gradient = Primitives::gradient3DHorizontal({}, {}); CORRADE_COMPARE(gradient.vertexDataFlags(), Trade::DataFlag::Mutable|Trade::DataFlag::Owned); + UnsignedInt vertexCount = gradient.vertexCount(); const void* vertexData = gradient.vertexData(); const void* attributeData = gradient.attributeData(); Trade::MeshData owned = MeshTools::owned(std::move(gradient)); + CORRADE_VERIFY(!owned.isIndexed()); CORRADE_COMPARE(owned.indexDataFlags(), Trade::DataFlag::Mutable|Trade::DataFlag::Owned); CORRADE_COMPARE(owned.vertexDataFlags(), Trade::DataFlag::Mutable|Trade::DataFlag::Owned); - CORRADE_VERIFY(!owned.isIndexed()); + CORRADE_COMPARE(owned.vertexCount(), vertexCount); CORRADE_COMPARE(owned.vertexData(), vertexData); /* Attribute data is constant in the original, so this gets copied */ CORRADE_VERIFY(owned.attributeData() != attributeData);