From 440a31a2984b350e1be32911fb02567c06ebdb95 Mon Sep 17 00:00:00 2001
From: Anna Wellmann <a.wellmann@tu-bs.de>
Date: Wed, 1 Jun 2022 09:00:02 +0000
Subject: [PATCH] Refactor the tests for findEdgeNodesCommMultiGPU

---
 .../Parameter/ParameterTest.cpp               | 183 +++++++-----------
 1 file changed, 68 insertions(+), 115 deletions(-)

diff --git a/src/gpu/VirtualFluids_GPU/Parameter/ParameterTest.cpp b/src/gpu/VirtualFluids_GPU/Parameter/ParameterTest.cpp
index 59ac0d7af..a99c7b11c 100644
--- a/src/gpu/VirtualFluids_GPU/Parameter/ParameterTest.cpp
+++ b/src/gpu/VirtualFluids_GPU/Parameter/ParameterTest.cpp
@@ -160,13 +160,50 @@ static std::shared_ptr<Parameter> initParameterClass()
     return std::make_shared<Parameter>(config, 1, 0);
 }
 
-TEST(ParameterTest, findEdgeNodesXY_shouldReturnCorrectVector)
+static bool compareEdgeNodesRecv(std::vector<LBMSimulationParameter::EdgeNodePositions> &actual,
+                                 std::vector<std::pair<int, int>> &expected)
 {
+    for (int i = 0; i < (int)expected.size(); i++) {
+        if (actual[i].indexOfProcessNeighborRecv != expected[i].first) {
+            return false;
+        }
+        if (actual[i].indexInRecvBuffer != expected[i].second) {
+            return false;
+        }
+    }
+    return true;
+}
 
-    auto para = initParameterClass();
-    para->initLBMSimulationParameter();
+static bool compareEdgeNodesSend(std::vector<LBMSimulationParameter::EdgeNodePositions> &actual,
+                                 std::vector<std::pair<int, int>> &expected)
+{
+    for (int i = 0; i < (int)expected.size(); i++) {
+        if (actual[i].indexOfProcessNeighborSend != expected[i].first) {
+            return false;
+        }
+        if (actual[i].indexInSendBuffer != expected[i].second) {
+            return false;
+        }
+    }
+    return true;
+}
 
+class ParameterTest_findEdgeNodes : public testing::Test
+{
+protected:
+    std::shared_ptr<Parameter> para;
     int level = 0;
+
+private:
+    void SetUp() override
+    {
+        para = initParameterClass();
+        para->initLBMSimulationParameter();
+    }
+};
+
+TEST_F(ParameterTest_findEdgeNodes, shouldReturnCorrectVectorForXY)
+{
     para->parH[level]->recvProcessNeighborX.push_back(ProcessNeighbor27());
     para->parH[level]->sendProcessNeighborY.push_back(ProcessNeighbor27());
     para->parH[level]->sendProcessNeighborY.push_back(ProcessNeighbor27());
@@ -174,15 +211,15 @@ TEST(ParameterTest, findEdgeNodesXY_shouldReturnCorrectVector)
     int numRecvNeighbor = (int)para->parH[level]->recvProcessNeighborX.size() - 1;
     int numSendNeighbor = (int)para->parH[level]->sendProcessNeighborY.size() - 1;
 
-    const int sizeRecv                                                    = 6;
-    const int sizeSend                                                    = 10;
+    const int sizeRecv                                                     = 6;
+    const int sizeSend                                                     = 10;
     para->parH[level]->recvProcessNeighborX[numRecvNeighbor].numberOfNodes = sizeRecv;
     para->parH[level]->sendProcessNeighborY[numSendNeighbor].numberOfNodes = sizeSend;
 
-    int recvNeighbors[sizeRecv]                                   = { 1, 2, 3, 4, 5, 6 };
+    int recvNeighbors[sizeRecv]                                    = { 1, 2, 3, 4, 5, 6 };
     para->parH[level]->recvProcessNeighborX[numRecvNeighbor].index = recvNeighbors;
 
-    int sendNeighbors[sizeSend]                                   = { 20, 1, 21, 22, 6, 23, 5, 24, 25, 26 };
+    int sendNeighbors[sizeSend]                                    = { 20, 1, 21, 22, 6, 23, 5, 24, 25, 26 };
     para->parH[level]->sendProcessNeighborY[numSendNeighbor].index = sendNeighbors;
 
     para->findEdgeNodesCommMultiGPU();
@@ -196,43 +233,14 @@ TEST(ParameterTest, findEdgeNodesXY_shouldReturnCorrectVector)
                                                                    std::pair(numSendNeighbor, 4) };
 
     EXPECT_THAT(para->parH[level]->edgeNodesXtoY.size(), testing::Eq(expectedEdgeNodesXtoYRecv.size()));
-
-    bool vectorsAreIdentical = true;
-    for (int i = 0; i < (int)expectedEdgeNodesXtoYRecv.size(); i++) {
-        if (para->parH[level]->edgeNodesXtoY[i].indexOfProcessNeighborRecv != expectedEdgeNodesXtoYRecv[i].first) {
-            vectorsAreIdentical = false;
-            break;
-        }
-        if (para->parH[level]->edgeNodesXtoY[i].indexInRecvBuffer != expectedEdgeNodesXtoYRecv[i].second) {
-            vectorsAreIdentical = false;
-            break;
-        }
-    }
-
-    EXPECT_TRUE(vectorsAreIdentical);
-
-    vectorsAreIdentical = true;
-    for (int i = 0; i < (int)expectedEdgeNodesXtoYSend.size(); i++) {
-        if (para->parH[level]->edgeNodesXtoY[i].indexOfProcessNeighborSend != expectedEdgeNodesXtoYSend[i].first) {
-            vectorsAreIdentical = false;
-            break;
-        }
-        if (para->parH[level]->edgeNodesXtoY[i].indexInSendBuffer != expectedEdgeNodesXtoYSend[i].second) {
-            vectorsAreIdentical = false;
-            break;
-        }
-    }
-
-    EXPECT_TRUE(vectorsAreIdentical);
+    EXPECT_TRUE(compareEdgeNodesRecv(para->parH[level]->edgeNodesXtoY, expectedEdgeNodesXtoYRecv))
+        << "the edgeNodesXtoY for the receive process do not match the expected nodes";
+    EXPECT_TRUE(compareEdgeNodesSend(para->parH[level]->edgeNodesXtoY, expectedEdgeNodesXtoYSend))
+        << "the edgeNodesXtoY for the send process do not match the expected nodes";
 }
 
-TEST(ParameterTest, findEdgeNodesXZ_shouldReturnCorrectVector)
+TEST_F(ParameterTest_findEdgeNodes, shouldReturnCorrectVectorForXZ)
 {
-
-    auto para = initParameterClass();
-    para->initLBMSimulationParameter();
-
-    int level = 0;
     para->parH[level]->recvProcessNeighborX.push_back(ProcessNeighbor27());
     para->parH[level]->sendProcessNeighborZ.push_back(ProcessNeighbor27());
     para->parH[level]->sendProcessNeighborZ.push_back(ProcessNeighbor27());
@@ -240,16 +248,15 @@ TEST(ParameterTest, findEdgeNodesXZ_shouldReturnCorrectVector)
     int numRecvNeighbor = (int)para->parH[level]->recvProcessNeighborX.size() - 1;
     int numSendNeighbor = (int)para->parH[level]->sendProcessNeighborZ.size() - 1;
 
-    const int sizeRecv = 10;
-    const int sizeSend = 6;
-
+    const int sizeRecv                                                     = 10;
+    const int sizeSend                                                     = 6;
     para->parH[level]->recvProcessNeighborX[numRecvNeighbor].numberOfNodes = sizeRecv;
     para->parH[level]->sendProcessNeighborZ[numSendNeighbor].numberOfNodes = sizeSend;
 
-    int recvNeighbors[sizeRecv]                                   = { 20, 1, 21, 22, 6, 23, 5, 24, 25, 26 };
+    int recvNeighbors[sizeRecv]                                    = { 20, 1, 21, 22, 6, 23, 5, 24, 25, 26 };
     para->parH[level]->recvProcessNeighborX[numRecvNeighbor].index = recvNeighbors;
 
-    int sendNeighbors[sizeSend]                                   = { 1, 2, 3, 4, 5, 6 };
+    int sendNeighbors[sizeSend]                                    = { 1, 2, 3, 4, 5, 6 };
     para->parH[level]->sendProcessNeighborZ[numSendNeighbor].index = sendNeighbors;
 
     para->findEdgeNodesCommMultiGPU();
@@ -262,44 +269,14 @@ TEST(ParameterTest, findEdgeNodesXZ_shouldReturnCorrectVector)
                                                                    std::pair(numSendNeighbor, 4) };
 
     EXPECT_THAT(para->parH[level]->edgeNodesXtoZ.size(), testing::Eq(expectedEdgeNodesXtoZRecv.size()));
-
-    bool vectorsAreIdentical = true;
-    for (int i = 0; i < (int)expectedEdgeNodesXtoZRecv.size(); i++) {
-        if (para->parH[level]->edgeNodesXtoZ[i].indexOfProcessNeighborRecv != expectedEdgeNodesXtoZRecv[i].first) {
-            vectorsAreIdentical = false;
-            break;
-        }
-        if (para->parH[level]->edgeNodesXtoZ[i].indexInRecvBuffer != expectedEdgeNodesXtoZRecv[i].second) {
-            vectorsAreIdentical = false;
-            break;
-        }
-    }
-
-    EXPECT_TRUE(vectorsAreIdentical);
-
-    vectorsAreIdentical = true;
-    for (int i = 0; i < (int)expectedEdgeNodesXtoZRecv.size(); i++) {
-        if (para->parH[level]->edgeNodesXtoZ[i].indexOfProcessNeighborSend != expectedEdgeNodesXtoZSend[i].first) {
-            vectorsAreIdentical = false;
-            break;
-        }
-        if (para->parH[level]->edgeNodesXtoZ[i].indexInSendBuffer != expectedEdgeNodesXtoZSend[i].second) {
-            vectorsAreIdentical = false;
-            break;
-        }
-    }
-
-    EXPECT_TRUE(vectorsAreIdentical);
+    EXPECT_TRUE(compareEdgeNodesRecv(para->parH[level]->edgeNodesXtoZ, expectedEdgeNodesXtoZRecv))
+        << "the edgeNodesXtoZ for the receive process do not match the expected nodes";
+    EXPECT_TRUE(compareEdgeNodesSend(para->parH[level]->edgeNodesXtoZ, expectedEdgeNodesXtoZSend))
+        << "the edgeNodesXtoZ for the send process do not match the expected nodes";
 }
 
-TEST(ParameterTest, findEdgeNodesYZ_shouldReturnCorrectVector)
+TEST_F(ParameterTest_findEdgeNodes, shouldReturnCorrectVectorForYZ)
 {
-
-    auto para = initParameterClass();
-    para->initLBMSimulationParameter();
-
-    int level = 0;
-
     para->parH[level]->recvProcessNeighborY.push_back(ProcessNeighbor27());
     para->parH[level]->sendProcessNeighborZ.push_back(ProcessNeighbor27());
     para->parH[level]->sendProcessNeighborZ.push_back(ProcessNeighbor27());
@@ -312,48 +289,24 @@ TEST(ParameterTest, findEdgeNodesYZ_shouldReturnCorrectVector)
     para->parH[level]->sendProcessNeighborZ[0].numberOfNodes = sizeSend1;
     para->parH[level]->sendProcessNeighborZ[1].numberOfNodes = sizeSend2;
 
-    int recvNeighbors[sizeRecv]                     = { 20, 1, 9, 22, 6, 23, 5, 24, 11, 26 };
+    int recvNeighbors[sizeRecv]                      = { 20, 1, 9, 22, 6, 23, 5, 24, 11, 26 };
     para->parH[level]->recvProcessNeighborY[0].index = recvNeighbors;
 
-    int sendNeighbors1[sizeSend1]                   = { 1, 2, 3, 4, 5, 6 };
-    int sendNeighbors2[sizeSend2]                   = { 7, 8, 9, 10, 11 };
+    int sendNeighbors1[sizeSend1]                    = { 1, 2, 3, 4, 5, 6 };
+    int sendNeighbors2[sizeSend2]                    = { 7, 8, 9, 10, 11 };
     para->parH[level]->sendProcessNeighborZ[0].index = sendNeighbors1;
     para->parH[level]->sendProcessNeighborZ[1].index = sendNeighbors2;
 
     para->findEdgeNodesCommMultiGPU();
 
-    std::vector<std::pair<int, int>> expectedEdgeNodesXtoZRecv = { std::pair(0, 1), std::pair(0, 2), std::pair(0, 4),
+    std::vector<std::pair<int, int>> expectedEdgeNodesYtoZRecv = { std::pair(0, 1), std::pair(0, 2), std::pair(0, 4),
                                                                    std::pair(0, 6), std::pair(0, 8) };
-    std::vector<std::pair<int, int>> expectedEdgeNodesXtoZSend = { std::pair(0, 0), std::pair(1, 2), std::pair(0, 5),
+    std::vector<std::pair<int, int>> expectedEdgeNodesYtoZSend = { std::pair(0, 0), std::pair(1, 2), std::pair(0, 5),
                                                                    std::pair(0, 4), std::pair(1, 4) };
 
-    EXPECT_THAT(para->parH[level]->edgeNodesYtoZ.size(), testing::Eq(expectedEdgeNodesXtoZRecv.size()));
-
-    bool vectorsAreIdentical = true;
-    for (int i = 0; i < (int)expectedEdgeNodesXtoZRecv.size(); i++) {
-        if (para->parH[level]->edgeNodesYtoZ[i].indexOfProcessNeighborRecv != expectedEdgeNodesXtoZRecv[i].first) {
-            vectorsAreIdentical = false;
-            break;
-        }
-        if (para->parH[level]->edgeNodesYtoZ[i].indexInRecvBuffer != expectedEdgeNodesXtoZRecv[i].second) {
-            vectorsAreIdentical = false;
-            break;
-        }
-    }
-
-    EXPECT_TRUE(vectorsAreIdentical);
-
-    vectorsAreIdentical = true;
-    for (int i = 0; i < (int)expectedEdgeNodesXtoZRecv.size(); i++) {
-        if (para->parH[level]->edgeNodesYtoZ[i].indexOfProcessNeighborSend != expectedEdgeNodesXtoZSend[i].first) {
-            vectorsAreIdentical = false;
-            break;
-        }
-        if (para->parH[level]->edgeNodesYtoZ[i].indexInSendBuffer != expectedEdgeNodesXtoZSend[i].second) {
-            vectorsAreIdentical = false;
-            break;
-        }
-    }
-
-    EXPECT_TRUE(vectorsAreIdentical);
+    EXPECT_THAT(para->parH[level]->edgeNodesYtoZ.size(), testing::Eq(expectedEdgeNodesYtoZRecv.size()));
+    EXPECT_TRUE(compareEdgeNodesRecv(para->parH[level]->edgeNodesYtoZ, expectedEdgeNodesYtoZRecv))
+        << "the edgeNodesYtoZ for the receive process do not match the expected nodes";
+    EXPECT_TRUE(compareEdgeNodesSend(para->parH[level]->edgeNodesYtoZ, expectedEdgeNodesYtoZSend))
+        << "the edgeNodesYtoZ for the send process do not match the expected nodes";
 }
\ No newline at end of file
-- 
GitLab