Skip to content
Snippets Groups Projects
GridScalingKernelManagerTest.cpp 3.12 KiB
#include <gmock/gmock.h>
#include <stdexcept>

#include "GridScalingKernelManager.h"
#include "Factories/GridScalingFactory.h"
#include "Parameter/Parameter.h"
#include "PointerDefinitions.h"

class GridScalingKernelManagerTest_Initialization : public testing::Test
{
protected:
    GridScalingFactory scalingFactory;
    SPtr<Parameter> para = std::make_shared<Parameter>();

    void SetUp() override
    {
        para->setGridX({2, 8});
        para->setGridY({2, 8});
        para->setGridZ({2, 8});
        para->setDistX({0, 0});
        para->setDistY({0, 0});
        para->setDistZ({0, 0});
    }
};

TEST_F(GridScalingKernelManagerTest_Initialization, singleLevel_noScalingFactoryProvided_doesNotThrow)
{
    // only one level --> no scaling factory needed --> no error
    para->initLBMSimulationParameter();
    EXPECT_NO_THROW(GridScalingKernelManager(para, nullptr));
}

TEST_F(GridScalingKernelManagerTest_Initialization, singleLevel_scalingFactoryProvided_doesNotThrow)
{
    // only one level --> no scaling function needed --> no error
    para->initLBMSimulationParameter();
    EXPECT_NO_THROW(GridScalingKernelManager(para, &scalingFactory));
}

TEST_F(GridScalingKernelManagerTest_Initialization, singleLevel_scalingFactoryAndFunctionProvided_doesNotThrow)
{
    // only one level, but the user provided a scaling function anyway --> no error
    para->initLBMSimulationParameter();
    scalingFactory.setScalingFactory(GridScalingFactory::GridScaling::ScaleCompressible);
    EXPECT_NO_THROW(GridScalingKernelManager(para, &scalingFactory));
}

TEST_F(GridScalingKernelManagerTest_Initialization, multipleLevels_notScalingFactoryProvided_throws)
{
    // multiple levels, but the user forgot the scaling factory --> error
    para->setMaxLevel(2);
    para->initLBMSimulationParameter();
    EXPECT_THROW(GridScalingKernelManager(para, nullptr), std::runtime_error);
}

TEST_F(GridScalingKernelManagerTest_Initialization, multipleLevelWithoutInterpolationNodes_noScalingFunctionProvided_doesNotThrow)
{
    // multiple levels, but no interpolation nodes specified --> no scaling function needed --> no error
    para->setMaxLevel(2);
    para->initLBMSimulationParameter();
    EXPECT_NO_THROW(GridScalingKernelManager(para, &scalingFactory));
}

TEST_F(GridScalingKernelManagerTest_Initialization, multipleLevelWithoutInterpolationNodes_scalingFunctionProvided_doesNotThrow)
{
    // multiple levels and NO interpolation nodes specified, but the user provided a scaling function anyway --> no error
    para->setMaxLevel(2);
    para->initLBMSimulationParameter();
    scalingFactory.setScalingFactory(GridScalingFactory::GridScaling::ScaleRhoSq);
    EXPECT_NO_THROW(GridScalingKernelManager(para, &scalingFactory));
}

TEST_F(GridScalingKernelManagerTest_Initialization, multipleLevelWithInterpolationNodes_noScalingFunctionProvided_throws)
{
    // multiple levels and interpolation nodes specified, but the user forgot to set the scalingFunction --> error
    para->setMaxLevel(2);
    para->initLBMSimulationParameter();
    para->getParD(0)->fineToCoarse.numberOfCells = 100;
    EXPECT_THROW(GridScalingKernelManager(para, &scalingFactory), std::runtime_error);
}