Toponaming/Part: Additional testing for attacher

This commit is contained in:
bgbsww
2024-03-22 13:13:41 -04:00
committed by wwmayer
parent fb41af37f0
commit 1a4a9e41c4

View File

@@ -12,9 +12,11 @@ using namespace Attacher;
using namespace PartTestHelpers;
/*
* Testing note: It looks like there are about 45 different attachment modes, and these tests all
* only look at one of them - to prove that adding elementMap code doesn't break anything. A
* comprehensive test of the Attacher would definitely want to try many more code paths.
* Testing note: It looks like there are about 45 different attachment modes, and these tests
* mostly only look at some of them - to prove that adding elementMap code doesn't break anything.
* While a trivial bounding box test is used to ensure no hard crashes in any of the modes, any
* mode that requires additional shapes beyond a couple of boxes would need a more comprehensive
* test.
*/
class AttacherTest: public ::testing::Test, public PartTestHelpers::PartTestHelperClass
@@ -105,3 +107,247 @@ TEST_F(AttacherTest, TestCalculateAttachedPlacement)
EXPECT_EQ(placement.getPosition().y, 0);
EXPECT_EQ(placement.getPosition().z, 0);
}
TEST_F(AttacherTest, TestAllStringModesValid)
{
// Arrange
const char* modes[] = {
"Deactivated",
"Translate",
"ObjectXY",
"ObjectXZ",
"ObjectYZ",
"FlatFace",
"TangentPlane",
"NormalToEdge",
"FrenetNB",
"FrenetTN",
"FrenetTB",
"Concentric",
"SectionOfRevolution",
"ThreePointsPlane",
"ThreePointsNormal",
"Folding",
"ObjectX",
"ObjectY",
"ObjectZ",
"AxisOfCurvature",
"Directrix1",
"Directrix2",
"Asymptote1",
"Asymptote2",
"Tangent",
"Normal",
"Binormal",
"TangentU",
"TangentV",
"TwoPointLine",
"IntersectionLine",
"ProximityLine",
"ObjectOrigin",
"Focus1",
"Focus2",
"OnEdge",
"CenterOfCurvature",
"CenterOfMass",
"IntersectionPoint",
"Vertex",
"ProximityPoint1",
"ProximityPoint2",
"AxisOfInertia1",
"AxisOfInertia2",
"AxisOfInertia3",
"InertialCS",
"FaceNormal",
"OZX",
"OZY",
"OXY",
"OXZ",
"OYZ",
"OYX",
};
int index = 0;
for (auto mode : modes) {
_boxes[1]->MapMode.setValue(mode); // There are lots of attachment modes!
_boxes[1]->recomputeFeature();
EXPECT_STREQ(_boxes[1]->MapMode.getValueAsString(), mode);
EXPECT_EQ(_boxes[1]->MapMode.getValue(), index);
index++;
}
}
TEST_F(AttacherTest, TestAllModesBoundaries)
{
_boxes[1]->MapMode.setValue(mmTranslate);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 1, 2, 3)));
_boxes[1]->MapMode.setValue(mmObjectXY);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 1, 2, 3)));
_boxes[1]->MapMode.setValue(mmObjectXZ);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, -3, 0, 1, 0, 2)));
_boxes[1]->MapMode.setValue(mmObjectYZ);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2)));
_boxes[1]->MapMode.setValue(mmFlatFace);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2)));
_boxes[1]->MapMode.setValue(mmTangentPlane);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2)));
_boxes[1]->MapMode.setValue(mm1Normal);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2)));
_boxes[1]->MapMode.setValue(mmFrenetNB);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2)));
_boxes[1]->MapMode.setValue(mmFrenetTN);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2)));
_boxes[1]->MapMode.setValue(mmFrenetTB);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2)));
_boxes[1]->MapMode.setValue(mmConcentric);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2)));
_boxes[1]->MapMode.setValue(mmRevolutionSection);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2)));
_boxes[1]->MapMode.setValue(mmThreePointsNormal);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2)));
_boxes[1]->MapMode.setValue(mmThreePointsPlane);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2)));
_boxes[1]->MapMode.setValue(mmFolding);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2)));
_boxes[1]->MapMode.setValue(mm1AxisX);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2)));
_boxes[1]->MapMode.setValue(mm1AxisY);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2)));
_boxes[1]->MapMode.setValue(mm1AxisZ);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2)));
_boxes[1]->MapMode.setValue(mm1AxisCurv);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2)));
_boxes[1]->MapMode.setValue(mm1Directrix1);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2)));
_boxes[1]->MapMode.setValue(mm1Directrix2);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2)));
_boxes[1]->MapMode.setValue(mm1Asymptote1);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2)));
_boxes[1]->MapMode.setValue(mm1Asymptote2);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2)));
_boxes[1]->MapMode.setValue(mm1Tangent);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2)));
_boxes[1]->MapMode.setValue(mm1TangentU);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2)));
_boxes[1]->MapMode.setValue(mm1TangentV);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2)));
_boxes[1]->MapMode.setValue(mm1TwoPoints);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2)));
_boxes[1]->MapMode.setValue(mm1Intersection);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2)));
_boxes[1]->MapMode.setValue(mm1Proximity);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2)));
_boxes[1]->MapMode.setValue(mm0Origin);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2)));
_boxes[1]->MapMode.setValue(mm0Focus1);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2)));
_boxes[1]->MapMode.setValue(mm0Focus2);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2)));
_boxes[1]->MapMode.setValue(mm0OnEdge);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2)));
_boxes[1]->MapMode.setValue(mm0CenterOfCurvature);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2)));
_boxes[1]->MapMode.setValue(mm0CenterOfMass);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2)));
_boxes[1]->MapMode.setValue(mm1Intersection);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2)));
_boxes[1]->MapMode.setValue(mm0Vertex);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2)));
_boxes[1]->MapMode.setValue(mm0ProximityPoint1);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2)));
_boxes[1]->MapMode.setValue(mm0ProximityPoint2);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2)));
_boxes[1]->MapMode.setValue(mm1AxisInertia1);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2)));
_boxes[1]->MapMode.setValue(mm1AxisInertia2);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2)));
_boxes[1]->MapMode.setValue(mm1AxisInertia3);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0, 0, 0, 3, 1, 2)));
_boxes[1]->MapMode.setValue(mmInertialCS);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(
boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0.5, 1, 1.5, 3.5, 2, 3.5)));
_boxes[1]->MapMode.setValue(mm1FaceNormal);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(
boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0.5, 1, 1.5, 3.5, 2, 3.5)));
_boxes[1]->MapMode.setValue(mmOZX);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(
boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0.5, 1, 1.5, 3.5, 2, 3.5)));
_boxes[1]->MapMode.setValue(mmOZY);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(
boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0.5, 1, 1.5, 3.5, 2, 3.5)));
_boxes[1]->MapMode.setValue(mmOXY);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(
boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0.5, 1, 1.5, 3.5, 2, 3.5)));
_boxes[1]->MapMode.setValue(mmOXZ);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(
boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0.5, 1, 1.5, 3.5, 2, 3.5)));
_boxes[1]->MapMode.setValue(mmOYZ);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(
boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0.5, 1, 1.5, 3.5, 2, 3.5)));
_boxes[1]->MapMode.setValue(mmOYX);
_boxes[1]->recomputeFeature();
EXPECT_TRUE(
boxesMatch(_boxes[1]->Shape.getBoundingBox(), Base::BoundBox3d(0.5, 1, 1.5, 3.5, 2, 3.5)));
}