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