From 9ddc4f13722bf26da46820c5199529d6aca65f71 Mon Sep 17 00:00:00 2001 From: bgbsww Date: Sun, 24 Mar 2024 09:59:37 -0400 Subject: [PATCH] Toponaming/Part: Fix elementMatch to use full clause and be deterministic --- tests/src/Mod/Part/App/FeatureMirroring.cpp | 102 ++++++++++++-------- tests/src/Mod/Part/App/FeatureOffset.cpp | 67 ++++++------- tests/src/Mod/Part/App/PartTestHelpers.cpp | 10 +- 3 files changed, 101 insertions(+), 78 deletions(-) diff --git a/tests/src/Mod/Part/App/FeatureMirroring.cpp b/tests/src/Mod/Part/App/FeatureMirroring.cpp index 1e4bd70a2f..a8a308fd72 100644 --- a/tests/src/Mod/Part/App/FeatureMirroring.cpp +++ b/tests/src/Mod/Part/App/FeatureMirroring.cpp @@ -81,47 +81,67 @@ TEST_F(FeatureMirroringTest, testYMirrorWithExistingElementMap) EXPECT_TRUE(boxesMatch(bb, Base::BoundBox3d(0, 0, -3, 1, 3, 0))); // Assert correct element Map #ifdef FC_USE_TNP_FIX - EXPECT_TRUE(elementsMatch( - _mirror->Shape.getShape(), - { - "Edge10;:M;FUS;:H30a:7,E;:M;MIR;:H310:7,E", - "Edge11;:M;FUS;:H309:7,E;:M;MIR;:H310:7,E", - "Edge12;:M;FUS;:H309:7,E;:M;MIR;:H310:7,E", - "Edge1;:M;FUS;:H30a:7,E;:M;MIR;:H310:7,E", - "Edge1;:M;FUS;:H30a:7,E;:U2;FUS;:H30a:8,V;:M;MIR;:H310:7,V", - "Edge1;:M;FUS;:H30a:7,E;:U;FUS;:H30a:7,V;:M;MIR;:H310:7,V", - "Edge2;:M2(Edge2;:H30a,E);FUS;:H309:17,E;:M;MIR;:H310:7,E", - "Edge2;:M2(Edge2;:H30a,E);FUS;:H309:17,E;:U2;FUS;:H309:8,V;:M;MIR;:H310:7,V", - "Edge2;:M2;FUS;:H30a:8,E;:M;MIR;:H310:7,E", - "Edge2;:M2;FUS;:H30a:8,E;:U2;FUS;:H30a:8,V;:M;MIR;:H310:7,V", - "Edge2;:M;FUS;:H309:7,E;:M;MIR;:H310:7,E", - "Edge2;:M;FUS;:H309:7,E;:U;FUS;:H309:7,V;:M;MIR;:H310:7,V", - "Edge3;:M;FUS;:H309:7,E;:M;MIR;:H310:7,E", - "Edge3;:M;FUS;:H309:7,E;:U2;FUS;:H309:8,V;:M;MIR;:H310:7,V", - "Edge4;:M2(Edge4;:H30a,E);FUS;:H309:17,E;:M;MIR;:H310:7,E", - "Edge4;:M2;FUS;:H30a:8,E;:M;MIR;:H310:7,E", - "Edge4;:M2;FUS;:H30a:8,E;:U2;FUS;:H30a:8,V;:M;MIR;:H310:7,V", - "Edge4;:M;FUS;:H309:7,E;:M;MIR;:H310:7,E", - "Edge4;:M;FUS;:H309:7,E;:U;FUS;:H309:7,V;:M;MIR;:H310:7,V", - "Edge5;:M;FUS;:H30a:7,E;:M;MIR;:H310:7,E", - "Edge5;:M;FUS;:H30a:7,E;:U2;FUS;:H30a:8,V;:M;MIR;:H310:7,V", - "Edge5;:M;FUS;:H30a:7,E;:U;FUS;:H30a:7,V;:M;MIR;:H310:7,V", - "Edge6;:M2(Edge6;:H30a,E);FUS;:H309:17,E;:M;MIR;:H310:7,E", - "Edge6;:M2(Edge6;:H30a,E);FUS;:H309:17,E;:U2;FUS;:H309:8,V;:M;MIR;:H310:7,V", - "Edge6;:M2;FUS;:H30a:8,E;:M;MIR;:H310:7,E", - "Edge6;:M2;FUS;:H30a:8,E;:U2;FUS;:H30a:8,V;:M;MIR;:H310:7,V", - "Edge6;:M;FUS;:H309:7,E;:M;MIR;:H310:7,E", - "Edge6;:M;FUS;:H309:7,E;:U;FUS;:H309:7,V;:M;MIR;:H310:7,V", - "Edge7;:M;FUS;:H309:7,E;:M;MIR;:H310:7,E", - "Edge7;:M;FUS;:H309:7,E;:U2;FUS;:H309:8,V;:M;MIR;:H310:7,V", - "Edge8;:M2(Edge8;:H30a,E);FUS;:H309:17,E;:M;MIR;:H310:7,E", - "Edge8;:M2;FUS;:H30a:8,E;:M;MIR;:H310:7,E", - "Edge8;:M2;FUS;:H30a:8,E;:U2;FUS;:H30a:8,V;:M;MIR;:H310:7,V", - "Edge8;:M;FUS;:H309:7,E;:M;MIR;:H310:7,E", - "Edge8;:M;FUS;:H309:7,E;:U;FUS;:H309:7,V;:M;MIR;:H310:7,V", - "Edge9;:M;FUS;:H30a:7,E;:M;MIR;:H310:7,E", - // TODO: Testing the Faces here was non-deterministic from run to run. Is that okay? - })); + EXPECT_TRUE(elementsMatch(_mirror->Shape.getShape(), + { + "Edge10;FUS;:Hfd6:4,E;:M;MIR;:Hfdd:7,E", + "Edge10;FUS;:Hfd7:4,E;:M;MIR;:Hfdd:7,E", + "Edge11;FUS;:Hfd6:4,E;:M;MIR;:Hfdd:7,E", + "Edge11;FUS;:Hfd7:4,E;:M;MIR;:Hfdd:7,E", + "Edge12;FUS;:Hfd6:4,E;:M;MIR;:Hfdd:7,E", + "Edge12;FUS;:Hfd7:4,E;:M;MIR;:Hfdd:7,E", + "Edge1;FUS;:Hfd6:4,E;:M;MIR;:Hfdd:7,E", + "Edge1;FUS;:Hfd7:4,E;:M;MIR;:Hfdd:7,E", + "Edge2;:M2(Edge2;:Hfd7,E);FUS;:Hfd6:17,E;:M;MIR;:Hfdd:7,E", + "Edge2;:M2;FUS;:Hfd7:8,E;:M;MIR;:Hfdd:7,E", + "Edge2;:M;FUS;:Hfd6:7,E;:M;MIR;:Hfdd:7,E", + "Edge3;FUS;:Hfd6:4,E;:M;MIR;:Hfdd:7,E", + "Edge3;FUS;:Hfd7:4,E;:M;MIR;:Hfdd:7,E", + "Edge4;:M2(Edge4;:Hfd7,E);FUS;:Hfd6:17,E;:M;MIR;:Hfdd:7,E", + "Edge4;:M2;FUS;:Hfd7:8,E;:M;MIR;:Hfdd:7,E", + "Edge4;:M;FUS;:Hfd6:7,E;:M;MIR;:Hfdd:7,E", + "Edge5;FUS;:Hfd6:4,E;:M;MIR;:Hfdd:7,E", + "Edge5;FUS;:Hfd7:4,E;:M;MIR;:Hfdd:7,E", + "Edge6;:M2(Edge6;:Hfd7,E);FUS;:Hfd6:17,E;:M;MIR;:Hfdd:7,E", + "Edge6;:M2;FUS;:Hfd7:8,E;:M;MIR;:Hfdd:7,E", + "Edge6;:M;FUS;:Hfd6:7,E;:M;MIR;:Hfdd:7,E", + "Edge7;FUS;:Hfd6:4,E;:M;MIR;:Hfdd:7,E", + "Edge7;FUS;:Hfd7:4,E;:M;MIR;:Hfdd:7,E", + "Edge8;:M2(Edge8;:Hfd7,E);FUS;:Hfd6:17,E;:M;MIR;:Hfdd:7,E", + "Edge8;:M2;FUS;:Hfd7:8,E;:M;MIR;:Hfdd:7,E", + "Edge8;:M;FUS;:Hfd6:7,E;:M;MIR;:Hfdd:7,E", + "Edge9;FUS;:Hfd6:4,E;:M;MIR;:Hfdd:7,E", + "Edge9;FUS;:Hfd7:4,E;:M;MIR;:Hfdd:7,E", + "Face1;:M2(Face1;:Hfd7,F);FUS;:Hfd6:17,F;:M;MIR;:Hfdd:7,F", + "Face1;:M2;FUS;:Hfd7:8,F;:M;MIR;:Hfdd:7,F", + "Face1;:M;FUS;:Hfd6:7,F;:M;MIR;:Hfdd:7,F", + "Face2;:M2(Face2;:Hfd7,F);FUS;:Hfd6:17,F;:M;MIR;:Hfdd:7,F", + "Face2;:M2;FUS;:Hfd7:8,F;:M;MIR;:Hfdd:7,F", + "Face2;:M;FUS;:Hfd6:7,F;:M;MIR;:Hfdd:7,F", + "Face3;FUS;:Hfd6:4,F;:M;MIR;:Hfdd:7,F", + "Face4;FUS;:Hfd7:4,F;:M;MIR;:Hfdd:7,F", + "Face5;:M2(Face5;:Hfd7,F);FUS;:Hfd6:17,F;:M;MIR;:Hfdd:7,F", + "Face5;:M2;FUS;:Hfd7:8,F;:M;MIR;:Hfdd:7,F", + "Face5;:M;FUS;:Hfd6:7,F;:M;MIR;:Hfdd:7,F", + "Face6;:M2(Face6;:Hfd7,F);FUS;:Hfd6:17,F;:M;MIR;:Hfdd:7,F", + "Face6;:M2;FUS;:Hfd7:8,F;:M;MIR;:Hfdd:7,F", + "Face6;:M;FUS;:Hfd6:7,F;:M;MIR;:Hfdd:7,F", + "Vertex1;FUS;:Hfd6:4,V;:M;MIR;:Hfdd:7,V", + "Vertex1;FUS;:Hfd7:4,V;:M;MIR;:Hfdd:7,V", + "Vertex2;FUS;:Hfd6:4,V;:M;MIR;:Hfdd:7,V", + "Vertex2;FUS;:Hfd7:4,V;:M;MIR;:Hfdd:7,V", + "Vertex3;FUS;:Hfd6:4,V;:M;MIR;:Hfdd:7,V", + "Vertex3;FUS;:Hfd7:4,V;:M;MIR;:Hfdd:7,V", + "Vertex4;FUS;:Hfd6:4,V;:M;MIR;:Hfdd:7,V", + "Vertex4;FUS;:Hfd7:4,V;:M;MIR;:Hfdd:7,V", + "Vertex5;FUS;:Hfd6:4,V;:M;MIR;:Hfdd:7,V", + "Vertex5;FUS;:Hfd7:4,V;:M;MIR;:Hfdd:7,V", + "Vertex6;FUS;:Hfd6:4,V;:M;MIR;:Hfdd:7,V", + "Vertex6;FUS;:Hfd7:4,V;:M;MIR;:Hfdd:7,V", + "Vertex7;FUS;:Hfd6:4,V;:M;MIR;:Hfdd:7,V", + "Vertex7;FUS;:Hfd7:4,V;:M;MIR;:Hfdd:7,V", + "Vertex8;FUS;:Hfd6:4,V;:M;MIR;:Hfdd:7,V", + "Vertex8;FUS;:Hfd7:4,V;:M;MIR;:Hfdd:7,V", + })); #else EXPECT_EQ(_mirror->Shape.getShape().getElementMapSize(), 0); #endif diff --git a/tests/src/Mod/Part/App/FeatureOffset.cpp b/tests/src/Mod/Part/App/FeatureOffset.cpp index 5085cbeef2..d8d9b463cb 100644 --- a/tests/src/Mod/Part/App/FeatureOffset.cpp +++ b/tests/src/Mod/Part/App/FeatureOffset.cpp @@ -86,39 +86,40 @@ TEST_F(FeatureOffsetTest, testOffset3DWithExistingElementMap) EXPECT_TRUE(elementsMatch( _offset->Shape.getShape(), { - "Edge2;:M2(Edge2;:H366,E);FUS;:H365:17,E;:G(Edge2;:M2;FUS;:H366:8,E;K-1;:H366:4,E|" - "Edge2;:M;FUS;:H365:7,E;K-1;:H365:4,E);RFI;:H365:53,E;:G;OFS;:H36c:7,E;SLD;:H36c:4,E", - "Edge2;:M2(Edge2;:H366,E);FUS;:H365:17,E;:G(Edge2;:M2;FUS;:H366:8,E;K-1;:H366:4,E|" - "Edge2;:M;FUS;:H365:7,E;K-1;:H365:4,E);RFI;:H365:53,E;:U2;RFI;:H365:8,V;:G;OFS;:H36c:7," - "V;SLD;:H36c:4,V", - "Edge2;:M2(Edge2;:H366,E);FUS;:H365:17,E;:G(Edge2;:M2;FUS;:H366:8,E;K-1;:H366:4,E|" - "Edge2;:M;FUS;:H365:7,E;K-1;:H365:4,E);RFI;:H365:53,E;:U;RFI;:H365:7,V;:G;OFS;:H36c:7," - "V;SLD;:H36c:4,V", - "Edge4;:M2(Edge4;:H366,E);FUS;:H365:17,E;:G(Edge4;:M2;FUS;:H366:8,E;K-1;:H366:4,E|" - "Edge4;:M;FUS;:H365:7,E;K-1;:H365:4,E);RFI;:H365:53,E;:G;OFS;:H36c:7,E;SLD;:H36c:4,E", - "Edge4;:M2(Edge4;:H366,E);FUS;:H365:17,E;:G(Edge4;:M2;FUS;:H366:8,E;K-1;:H366:4,E|" - "Edge4;:M;FUS;:H365:7,E;K-1;:H365:4,E);RFI;:H365:53,E;:U2;RFI;:H365:8,V;:G;OFS;:H36c:7," - "V;SLD;:H36c:4,V", - "Edge4;:M2(Edge4;:H366,E);FUS;:H365:17,E;:G(Edge4;:M2;FUS;:H366:8,E;K-1;:H366:4,E|" - "Edge4;:M;FUS;:H365:7,E;K-1;:H365:4,E);RFI;:H365:53,E;:U;RFI;:H365:7,V;:G;OFS;:H36c:7," - "V;SLD;:H36c:4,V", - "Edge6;:M2(Edge6;:H366,E);FUS;:H365:17,E;:G(Edge6;:M2;FUS;:H366:8,E;K-1;:H366:4,E|" - "Edge6;:M;FUS;:H365:7,E;K-1;:H365:4,E);RFI;:H365:53,E;:G;OFS;:H36c:7,E;SLD;:H36c:4,E", - "Edge6;:M2(Edge6;:H366,E);FUS;:H365:17,E;:G(Edge6;:M2;FUS;:H366:8,E;K-1;:H366:4,E|" - "Edge6;:M;FUS;:H365:7,E;K-1;:H365:4,E);RFI;:H365:53,E;:U2;RFI;:H365:8,V;:G;OFS;:H36c:7," - "V;SLD;:H36c:4,V", - "Edge6;:M2(Edge6;:H366,E);FUS;:H365:17,E;:G(Edge6;:M2;FUS;:H366:8,E;K-1;:H366:4,E|" - "Edge6;:M;FUS;:H365:7,E;K-1;:H365:4,E);RFI;:H365:53,E;:U;RFI;:H365:7,V;:G;OFS;:H36c:7," - "V;SLD;:H36c:4,V", - "Edge8;:M2(Edge8;:H366,E);FUS;:H365:17,E;:G(Edge8;:M2;FUS;:H366:8,E;K-1;:H366:4,E|" - "Edge8;:M;FUS;:H365:7,E;K-1;:H365:4,E);RFI;:H365:53,E;:G;OFS;:H36c:7,E;SLD;:H36c:4,E", - "Edge8;:M2(Edge8;:H366,E);FUS;:H365:17,E;:G(Edge8;:M2;FUS;:H366:8,E;K-1;:H366:4,E|" - "Edge8;:M;FUS;:H365:7,E;K-1;:H365:4,E);RFI;:H365:53,E;:U2;RFI;:H365:8,V;:G;OFS;:H36c:7," - "V;SLD;:H36c:4,V", - "Edge8;:M2(Edge8;:H366,E);FUS;:H365:17,E;:G(Edge8;:M2;FUS;:H366:8,E;K-1;:H366:4,E|" - "Edge8;:M;FUS;:H365:7,E;K-1;:H365:4,E);RFI;:H365:53,E;:U;RFI;:H365:7,V;:G;OFS;:H36c:7," - "V;SLD;:H36c:4,V", - // TODO: Testing the Faces here was non-deterministic from run to run. Is that okay? + "Edge10;FUS;:He59:4,E;RFI;:He59:4,E;:G;OFS;:He60:7,E;SLD;:He60:4,E", + "Edge11;FUS;:He5a:4,E;RFI;:He5a:4,E;:G;OFS;:He60:7,E;SLD;:He60:4,E", + "Edge12;FUS;:He5a:4,E;RFI;:He5a:4,E;:G;OFS;:He60:7,E;SLD;:He60:4,E", + "Edge1;FUS;:He59:4,E;RFI;:He59:4,E;:G;OFS;:He60:7,E;SLD;:He60:4,E", + "Edge2;:M2(Edge2;:He5a,E);FUS;:He59:17,E;:G(Edge2;:M2;FUS;:He5a:8,E;K-1;:He5a:4,E|" + "Edge2;:M;FUS;:He59:7,E;K-1;:He59:4,E);RFI;:He59:53,E;:G;OFS;:He60:7,E;SLD;:He60:4,E", + "Edge3;FUS;:He5a:4,E;RFI;:He5a:4,E;:G;OFS;:He60:7,E;SLD;:He60:4,E", + "Edge4;:M2(Edge4;:He5a,E);FUS;:He59:17,E;:G(Edge4;:M2;FUS;:He5a:8,E;K-1;:He5a:4,E|" + "Edge4;:M;FUS;:He59:7,E;K-1;:He59:4,E);RFI;:He59:53,E;:G;OFS;:He60:7,E;SLD;:He60:4,E", + "Edge5;FUS;:He59:4,E;RFI;:He59:4,E;:G;OFS;:He60:7,E;SLD;:He60:4,E", + "Edge6;:M2(Edge6;:He5a,E);FUS;:He59:17,E;:G(Edge6;:M2;FUS;:He5a:8,E;K-1;:He5a:4,E|" + "Edge6;:M;FUS;:He59:7,E;K-1;:He59:4,E);RFI;:He59:53,E;:G;OFS;:He60:7,E;SLD;:He60:4,E", + "Edge7;FUS;:He5a:4,E;RFI;:He5a:4,E;:G;OFS;:He60:7,E;SLD;:He60:4,E", + "Edge8;:M2(Edge8;:He5a,E);FUS;:He59:17,E;:G(Edge8;:M2;FUS;:He5a:8,E;K-1;:He5a:4,E|" + "Edge8;:M;FUS;:He59:7,E;K-1;:He59:4,E);RFI;:He59:53,E;:G;OFS;:He60:7,E;SLD;:He60:4,E", + "Edge9;FUS;:He59:4,E;RFI;:He59:4,E;:G;OFS;:He60:7,E;SLD;:He60:4,E", + "Face1;:M2(Face1;:He5a,F);FUS;:He59:17,F;:G(Face1;:M2;FUS;:He5a:8,F;K-1;:He5a:4,F|" + "Face1;:M;FUS;:He59:7,F;K-1;:He59:4,F);RFI;:He59:53,F;:G;OFS;:He60:7,F;SLD;:He60:4,F", + "Face2;:M2(Face2;:He5a,F);FUS;:He59:17,F;:G(Face2;:M2;FUS;:He5a:8,F;K-1;:He5a:4,F|" + "Face2;:M;FUS;:He59:7,F;K-1;:He59:4,F);RFI;:He59:53,F;:G;OFS;:He60:7,F;SLD;:He60:4,F", + "Face3;FUS;:He59:4,F;RFI;:He59:4,F;:G;OFS;:He60:7,F;SLD;:He60:4,F", + "Face4;FUS;:He5a:4,F;RFI;:He5a:4,F;:G;OFS;:He60:7,F;SLD;:He60:4,F", + "Face5;:M2(Face5;:He5a,F);FUS;:He59:17,F;:G(Face5;:M2;FUS;:He5a:8,F;K-1;:He5a:4,F|" + "Face5;:M;FUS;:He59:7,F;K-1;:He59:4,F);RFI;:He59:53,F;:G;OFS;:He60:7,F;SLD;:He60:4,F", + "Face6;:M2(Face6;:He5a,F);FUS;:He59:17,F;:G(Face6;:M2;FUS;:He5a:8,F;K-1;:He5a:4,F|" + "Face6;:M;FUS;:He59:7,F;K-1;:He59:4,F);RFI;:He59:53,F;:G;OFS;:He60:7,F;SLD;:He60:4,F", + "Vertex1;FUS;:He59:4,V;RFI;:He59:4,V;:G;OFS;:He60:7,V;SLD;:He60:4,V", + "Vertex2;FUS;:He59:4,V;RFI;:He59:4,V;:G;OFS;:He60:7,V;SLD;:He60:4,V", + "Vertex3;FUS;:He5a:4,V;RFI;:He5a:4,V;:G;OFS;:He60:7,V;SLD;:He60:4,V", + "Vertex4;FUS;:He5a:4,V;RFI;:He5a:4,V;:G;OFS;:He60:7,V;SLD;:He60:4,V", + "Vertex5;FUS;:He59:4,V;RFI;:He59:4,V;:G;OFS;:He60:7,V;SLD;:He60:4,V", + "Vertex6;FUS;:He59:4,V;RFI;:He59:4,V;:G;OFS;:He60:7,V;SLD;:He60:4,V", + "Vertex7;FUS;:He5a:4,V;RFI;:He5a:4,V;:G;OFS;:He60:7,V;SLD;:He60:4,V", + "Vertex8;FUS;:He5a:4,V;RFI;:He5a:4,V;:G;OFS;:He60:7,V;SLD;:He60:4,V", })); #else EXPECT_EQ(_offset->Shape.getShape().getElementMapSize(), 0); diff --git a/tests/src/Mod/Part/App/PartTestHelpers.cpp b/tests/src/Mod/Part/App/PartTestHelpers.cpp index 59e5ac39f7..c9361b9f4b 100644 --- a/tests/src/Mod/Part/App/PartTestHelpers.cpp +++ b/tests/src/Mod/Part/App/PartTestHelpers.cpp @@ -175,15 +175,17 @@ testing::AssertionResult elementsMatch(const TopoShape& shape, if (std::find_if(elements.begin(), elements.end(), [&, name](const Data::MappedElement& element) { - return matchStringsWithoutClause(element.name.toString(), - name, - "(;D|;:H|;K)-?[a-fA-F0-9]+"); + return matchStringsWithoutClause( + element.name.toString(), + name, + "(;D|;:H|;K)-?[a-fA-F0-9]+(:[0-9]+)?"); // ;D ;:H and ;K are the sections of an encoded name for // Duplicate, Tag and a Face name in slices. All three of these // can vary from run to run or platform to platform, as they are // based on either explicit random numbers or memory addresses. // Thus we remove the value from comparisons and just check that - // they exist. + // they exist. The full form could be something like ;:He59:53 + // which is what we match and remove. }) == elements.end()) { return testing::AssertionFailure() << mappedElementVectorToString(elements);