From b5222854f76e0e1d742a7a18bfd6b7d909e96f58 Mon Sep 17 00:00:00 2001 From: Anna Wellmann <a.wellmann@tu-bs.de> Date: Tue, 31 May 2022 09:28:49 +0000 Subject: [PATCH] Refactor tests for splitting the indices CF into border and bulk --- .../IndexRearrangementForStreamsTest.cpp | 206 ++++++------------ 1 file changed, 67 insertions(+), 139 deletions(-) diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreamsTest.cpp b/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreamsTest.cpp index b3ed57794..2c2512e6e 100644 --- a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreamsTest.cpp +++ b/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreamsTest.cpp @@ -1,28 +1,28 @@ #include <gmock/gmock.h> -#include <iostream> #include <algorithm> #include <filesystem> +#include <iostream> -#include <basics/config/ConfigurationFile.h> #include <Parameter/Parameter.h> +#include <basics/config/ConfigurationFile.h> #include <DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreams.h> #include <gpu/GridGenerator/grid/GridBuilder/LevelGridBuilder.h> #include <gpu/GridGenerator/grid/GridImp.h> -class GridBuilderDouble : public LevelGridBuilder +class LevelGridBuilderDouble : public LevelGridBuilder { private: SPtr<Grid> grid; - GridBuilderDouble()=default; + LevelGridBuilderDouble() = default; + public: - GridBuilderDouble(SPtr<Grid> grid) : LevelGridBuilder(Device(), ""), grid(grid){}; - SPtr<Grid> getGrid(uint level) override{ return grid; }; - std::shared_ptr<Grid> getGrid(int level, int box) override {return grid; }; + LevelGridBuilderDouble(SPtr<Grid> grid) : LevelGridBuilder(Device(), ""), grid(grid){}; + SPtr<Grid> getGrid(uint level) override { return grid; }; + std::shared_ptr<Grid> getGrid(int level, int box) override { return grid; }; }; - class GridImpDouble : public GridImp { private: @@ -30,13 +30,13 @@ private: public: GridImpDouble(Object *object, real startX, real startY, real startZ, real endX, real endY, real endZ, real delta, - SPtr<GridStrategy> gridStrategy, Distribution d, uint level) + SPtr<GridStrategy> gridStrategy, Distribution d, uint level) : GridImp(object, startX, startY, startZ, endX, endY, endZ, delta, gridStrategy, d, level) { } static SPtr<GridImpDouble> makeShared(Object *object, real startX, real startY, real startZ, real endX, real endY, - real endZ, real delta, SPtr<GridStrategy> gridStrategy, Distribution d, + real endZ, real delta, SPtr<GridStrategy> gridStrategy, Distribution d, uint level) { SPtr<GridImpDouble> grid( @@ -49,8 +49,10 @@ public: this->fluidNodeIndicesBorder = fluidNodeIndicesBorder; } - bool isSparseIndexInFluidNodeIndicesBorder(uint& sparseIndex) const override { - return std::find(this->fluidNodeIndicesBorder.begin(), this->fluidNodeIndicesBorder.end(), sparseIndex)!=this->fluidNodeIndicesBorder.end(); + bool isSparseIndexInFluidNodeIndicesBorder(uint &sparseIndex) const override + { + return std::find(this->fluidNodeIndicesBorder.begin(), this->fluidNodeIndicesBorder.end(), sparseIndex) != + this->fluidNodeIndicesBorder.end(); } }; @@ -59,7 +61,7 @@ struct CFBorderBulk { std::vector<uint> fluidNodeIndicesBorder = { 10, 11, 12, 13, 14, 15, 16 }; std::vector<uint> iCellCFC = { 1, 11, 3, 13, 5, 15, 7 }; std::vector<uint> iCellCFF = { 2, 12, 4, 14, 6, 16, 8 }; - uint sizeOfICellCf = (uint) iCellCFC.size(); + uint sizeOfICellCf = (uint)iCellCFC.size(); uint neighborX_SP[17] = { 0u }; uint neighborY_SP[17] = { 0u }; uint neighborZ_SP[17] = { 0u }; @@ -69,19 +71,18 @@ struct CFBorderBulk { std::vector<real> offsetCFz = { 1001, 1011, 1003, 1013, 1005, 1015, 1007 }; // expected data - std::vector<uint> iCellCfcBorder_expected = { 11, 13, 15 }; - std::vector<uint> iCellCfcBulk_expected = { 1, 3, 5, 7 }; - std::vector<uint> iCellCffBorder_expected = { 12, 14, 16 }; - std::vector<uint> iCellCffBulk_expected = { 2, 4, 6, 8 }; - std::vector<uint> offsetCFx_Border_expected = { 11, 13, 15 }; - std::vector<uint> offsetCFx_Bulk_expected = { 1, 3, 5, 7 }; - std::vector<uint> offsetCFy_Border_expected = { 111, 113, 115 }; - std::vector<uint> offsetCFy_Bulk_expected = { 101, 103, 105, 107 }; - std::vector<uint> offsetCFz_Border_expected = { 1011, 1013, 1015 }; - std::vector<uint> offsetCFz_Bulk_expected = { 1001, 1003, 1005, 1007 }; + std::vector<uint> iCellCfcBorder_expected = { 11, 13, 15 }; + std::vector<uint> iCellCfcBulk_expected = { 1, 3, 5, 7 }; + std::vector<uint> iCellCffBorder_expected = { 12, 14, 16 }; + std::vector<uint> iCellCffBulk_expected = { 2, 4, 6, 8 }; + std::vector<real> offsetCFx_Border_expected = { 11, 13, 15 }; + std::vector<real> offsetCFx_Bulk_expected = { 1, 3, 5, 7 }; + std::vector<real> offsetCFy_Border_expected = { 111, 113, 115 }; + std::vector<real> offsetCFy_Bulk_expected = { 101, 103, 105, 107 }; + std::vector<real> offsetCFz_Border_expected = { 1011, 1013, 1015 }; + std::vector<real> offsetCFz_Bulk_expected = { 1001, 1003, 1005, 1007 }; }; - static SPtr<Parameter> initParameterClass() { std::filesystem::path filePath = __FILE__; // assuming that the config file is stored parallel to this file. @@ -91,14 +92,8 @@ static SPtr<Parameter> initParameterClass() return std::make_shared<Parameter>(config, 1, 0); } - template <typename T> -bool vectorsAreEqual(std::vector<T> vector1, std::vector<T> vectorExpected) -{ - return vector1 == vectorExpected; -} - -bool vectorsAreEqual(uint *vector1, std::vector<uint> vectorExpected) +bool vectorsAreEqual(T *vector1, std::vector<T> vectorExpected) { for (uint i = 0; i < vectorExpected.size(); i++) { if (vector1[i] != vectorExpected[i]) @@ -107,31 +102,22 @@ bool vectorsAreEqual(uint *vector1, std::vector<uint> vectorExpected) return true; } -bool vectorsAreEqual(real *vector1, std::vector<uint> vectorExpected) +class IndexRearrangementForStreamsTest_IndicesCFBorderBulkTest : public testing::Test { - for (uint i = 0; i < vectorExpected.size(); i++) { - if (vector1[i] != vectorExpected[i]) - return false; - } - return true; -} - - -class IndexRearrangementForStreamsTest_IndicesCFBorderBulkTest : public testing::Test -{ - public: +public: CFBorderBulk cf; SPtr<Parameter> para; - private: - static std::unique_ptr<IndexRearrangementForStreams> createTestSubjectCFBorderBulk(CFBorderBulk &cf, std::shared_ptr<Parameter> para) +private: + static std::unique_ptr<IndexRearrangementForStreams> createTestSubjectCFBorderBulk(CFBorderBulk &cf, + std::shared_ptr<Parameter> para) { SPtr<GridImpDouble> grid = GridImpDouble::makeShared(nullptr, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, nullptr, Distribution(), 1); grid->setFluidNodeIndicesBorder(cf.fluidNodeIndicesBorder); - std::shared_ptr<GridBuilderDouble> builder = std::make_shared<GridBuilderDouble>(grid); + std::shared_ptr<LevelGridBuilderDouble> builder = std::make_shared<LevelGridBuilderDouble>(grid); - para->setMaxLevel(cf.level + 1); // setMaxLevel resizes parH and parD + para->setMaxLevel(cf.level + 1); // setMaxLevel resizes parH and parD para->parH[cf.level] = std::make_shared<LBMSimulationParameter>(); para->parD[cf.level] = std::make_shared<LBMSimulationParameter>(); para->getParH(cf.level)->intCF.ICellCFC = &(cf.iCellCFC.front()); @@ -144,104 +130,46 @@ class IndexRearrangementForStreamsTest_IndicesCFBorderBulkTest : public testing: para->getParH(cf.level)->offCF.yOffCF = &(cf.offsetCFy.front()); para->getParH(cf.level)->offCF.zOffCF = &(cf.offsetCFz.front()); - return std::make_unique<IndexRearrangementForStreams>(para, builder); + return std::make_unique<IndexRearrangementForStreams>(para, builder); }; - public: - - void SetUp() override { - para = initParameterClass(); - auto testSubject = createTestSubjectCFBorderBulk(cf, para); + void SetUp() override + { + para = initParameterClass(); + auto testSubject = createTestSubjectCFBorderBulk(cf, para); testSubject->splitCoarseToFineIntoBorderAndBulk(cf.level); } - - void TearDown() override { - - } - }; - TEST_F(IndexRearrangementForStreamsTest_IndicesCFBorderBulkTest, splitCoarseToFineIntoBorderAndBulk) { - EXPECT_THAT(para->getParH(cf.level)->intCFBorder.kCF + para->getParH(cf.level)->intCFBulk.kCF, testing::Eq(cf.sizeOfICellCf)) << "The number of interpolation cells from coarse to fine changed during reordering."; - EXPECT_THAT(para->getParH(cf.level)->intCFBorder.kCF, testing::Eq((uint) cf.iCellCfcBorder_expected.size())); + EXPECT_THAT(para->getParH(cf.level)->intCFBorder.kCF + para->getParH(cf.level)->intCFBulk.kCF, + testing::Eq(cf.sizeOfICellCf)) + << "The number of interpolation cells from coarse to fine changed during reordering."; + + // check coarse to fine border (coarse nodes) + EXPECT_THAT(para->getParH(cf.level)->intCFBorder.kCF, testing::Eq((uint)cf.iCellCfcBorder_expected.size())); + EXPECT_TRUE(vectorsAreEqual(para->getParH(cf.level)->intCFBorder.ICellCFC, cf.iCellCfcBorder_expected)) + << "intCFBorder.ICellCFC does not match the expected border vector"; + // check coarse to fine border (fine nodes) + EXPECT_THAT(para->getParH(cf.level)->intCFBorder.kCF, testing::Eq((uint)cf.iCellCffBorder_expected.size())); + EXPECT_TRUE(vectorsAreEqual(para->getParH(cf.level)->intCFBorder.ICellCFF, cf.iCellCffBorder_expected)) + << "intCFBorder.ICellCFF does not match the expected border vector"; + + // check coarse to fine bulk (coarse nodes) + EXPECT_THAT(para->getParH(cf.level)->intCFBulk.kCF, testing::Eq((uint)cf.iCellCfcBulk_expected.size())); + EXPECT_TRUE(vectorsAreEqual(para->getParH(cf.level)->intCFBulk.ICellCFC, cf.iCellCfcBulk_expected)) + << "intCFBulk.ICellCFC does not match the expected bulk vector"; + // check coarse to fine bulk (fine nodes) + EXPECT_THAT(para->getParH(cf.level)->intCFBulk.kCF, testing::Eq((uint)cf.iCellCffBulk_expected.size())); + EXPECT_TRUE(vectorsAreEqual(para->getParH(cf.level)->intCFBulk.ICellCFF, cf.iCellCffBulk_expected)) + << "intCFBulk.ICellCFF does not match the expected bulk vector"; + + // check offset cells + EXPECT_TRUE(vectorsAreEqual(para->getParH(cf.level)->offCF.xOffCF, cf.offsetCFx_Border_expected)); + EXPECT_TRUE(vectorsAreEqual(para->getParH(cf.level)->offCFBulk.xOffCF, cf.offsetCFx_Bulk_expected)); + EXPECT_TRUE(vectorsAreEqual(para->getParH(cf.level)->offCF.yOffCF, cf.offsetCFy_Border_expected)); + EXPECT_TRUE(vectorsAreEqual(para->getParH(cf.level)->offCFBulk.yOffCF, cf.offsetCFy_Bulk_expected)); + EXPECT_TRUE(vectorsAreEqual(para->getParH(cf.level)->offCF.zOffCF, cf.offsetCFz_Border_expected)); + EXPECT_TRUE(vectorsAreEqual(para->getParH(cf.level)->offCFBulk.zOffCF, cf.offsetCFz_Bulk_expected)); } - -// TEST(IndexRearrangementForStreamsTest_IndicesCFBorderBulk, borderVectorCFC) -// { -// CFBorderBulk cf; -// SPtr<Parameter> para; -// initParameterClass(para); -// IndexRearrangementForStreamsTest::setUpAndRun_splitCoarseToFineIntoBorderAndBulk(cf, para); -// EXPECT_TRUE(vectorsAreEqual(para->getParH(cf.level)->intCFBorder.ICellCFC, cf.iCellCfcBorder_expected)); -// } - -// TEST(IndexRearrangementForStreamsTest_IndicesCFBorderBulk, bulkSizeCFC) -// { -// CFBorderBulk cf; -// SPtr<Parameter> para; -// initParameterClass(para); -// IndexRearrangementForStreamsTest::setUpAndRun_splitCoarseToFineIntoBorderAndBulk(cf, para); -// EXPECT_EQ(para->getParH(cf.level)->intCFBulk.kCF, (uint)cf.iCellCfcBulk_expected.size()); -// } - -// TEST(IndexRearrangementForStreamsTest_IndicesCFBorderBulk, bulkVectorCFC) -// { -// CFBorderBulk cf; -// SPtr<Parameter> para; -// initParameterClass(para); -// IndexRearrangementForStreamsTest::setUpAndRun_splitCoarseToFineIntoBorderAndBulk(cf, para); -// EXPECT_TRUE(vectorsAreEqual(para->getParH(cf.level)->intCFBulk.ICellCFC, cf.iCellCfcBulk_expected)); -// } - -// TEST(IndexRearrangementForStreamsTest_IndicesCFBorderBulk, borderSizeCFF) -// { -// CFBorderBulk cf; -// SPtr<Parameter> para; -// initParameterClass(para); -// IndexRearrangementForStreamsTest::setUpAndRun_splitCoarseToFineIntoBorderAndBulk(cf, para); -// EXPECT_EQ(para->getParH(cf.level)->intCFBorder.kCF, (uint)cf.iCellCffBorder_expected.size()); -// } - -// TEST(IndexRearrangementForStreamsTest_IndicesCFBorderBulk, borderVectorCFF) -// { -// CFBorderBulk cf; -// SPtr<Parameter> para; -// initParameterClass(para); -// IndexRearrangementForStreamsTest::setUpAndRun_splitCoarseToFineIntoBorderAndBulk(cf, para); -// EXPECT_TRUE(vectorsAreEqual(para->getParH(cf.level)->intCFBorder.ICellCFF, cf.iCellCffBorder_expected)); -// } - -// TEST(IndexRearrangementForStreamsTest_IndicesCFBorderBulk, bulkSizeCFF) -// { -// CFBorderBulk cf; -// SPtr<Parameter> para; -// initParameterClass(para); -// IndexRearrangementForStreamsTest::setUpAndRun_splitCoarseToFineIntoBorderAndBulk(cf, para); -// EXPECT_EQ(para->getParH(cf.level)->intCFBulk.kCF, (uint)cf.iCellCffBulk_expected.size()); -// } - -// TEST(IndexRearrangementForStreamsTest_IndicesCFBorderBulk, bulkVectorCFF) -// { -// CFBorderBulk cf; -// SPtr<Parameter> para; -// initParameterClass(para); -// IndexRearrangementForStreamsTest::setUpAndRun_splitCoarseToFineIntoBorderAndBulk(cf, para); -// EXPECT_TRUE(vectorsAreEqual(para->getParH(cf.level)->intCFBulk.ICellCFF, cf.iCellCffBulk_expected)); -// } - -// TEST(IndexRearrangementForStreamsTest_IndicesCFBorderBulk, offsetsVectorsCFC) -// { -// CFBorderBulk cf; -// SPtr<Parameter> para; -// initParameterClass(para); -// IndexRearrangementForStreamsTest::setUpAndRun_splitCoarseToFineIntoBorderAndBulk(cf, para); - -// EXPECT_TRUE(vectorsAreEqual(para->getParH(cf.level)->offCF.xOffCF, cf.offsetCFx_Border_expected)); -// EXPECT_TRUE(vectorsAreEqual(para->getParH(cf.level)->offCFBulk.xOffCF, cf.offsetCFx_Bulk_expected)); -// EXPECT_TRUE(vectorsAreEqual(para->getParH(cf.level)->offCF.yOffCF, cf.offsetCFy_Border_expected)); -// EXPECT_TRUE(vectorsAreEqual(para->getParH(cf.level)->offCFBulk.yOffCF, cf.offsetCFy_Bulk_expected)); -// EXPECT_TRUE(vectorsAreEqual(para->getParH(cf.level)->offCF.zOffCF, cf.offsetCFz_Border_expected)); -// EXPECT_TRUE(vectorsAreEqual(para->getParH(cf.level)->offCFBulk.zOffCF, cf.offsetCFz_Bulk_expected)); -// } \ No newline at end of file -- GitLab