#include #include //#define private public #include #include #include using namespace mdd; TEST(ProcessorManual, CalculateSimpleFormula){ //f4:(f3:(f1:(5*3)-f2:(4+5))/2)==(15-9)/2==6/2==3 std::vector inputs; std::shared_ptr f1 = std::make_shared(MULTIPLY); inputs = f1->getInputIDs(); f1->getInput(inputs[0])->setDefaultValue()["value"] = 5; f1->getInput(inputs[1])->setDefaultValue()["value"] = 3; std::shared_ptr f2 = std::make_shared(ADD); inputs = f2->getInputIDs(); f2->getInput(inputs[0])->setDefaultValue()["value"] = 4; f2->getInput(inputs[1])->setDefaultValue()["value"] = 5; std::shared_ptr f3 = std::make_shared(SUBTRACT); inputs = f3->getInputIDs(); f3->getInput(inputs[0])->connect(f1->getOutput(f1->getOutputIDs()[0])); f3->getInput(inputs[1])->connect(f1->getOutput(f2->getOutputIDs()[0])); std::shared_ptr f4 = std::make_shared(DIVIDE); inputs = f4->getInputIDs(); f4->getInput(inputs[0])->connect(f1->getOutput(f3->getOutputIDs()[0])); f4->getInput(inputs[1])->setDefaultValue()["value"] = 2; std::shared_ptr test = std::make_shared(); test->addModule(f1); test->addModule(f2); test->addModule(f3); test->addModule(f4); test->addModuleOutput(f3, f3->getOutput(f3->getOutputIDs()[0])); test->update(); EXPECT_EQ(test->getOutput(test->getOutputIDs()[1])->getValue()["value"].get(), 3); } TEST(ProcessorManual, CalculateAdvancedFormula){ //f4:(f3:(f1:(5*3)-f2:(4+5))/2)==(15-9)/2==6/2==3 std::vector inputs; std::shared_ptr f1 = std::make_shared(MULTIPLY); inputs = f1->getInputIDs(); f1->getInput(inputs[0])->setDefaultValue()["value"] = 5; f1->getInput(inputs[1])->setDefaultValue()["value"] = 3; std::shared_ptr f2 = std::make_shared(ADD); inputs = f2->getInputIDs(); f2->getInput(inputs[0])->setDefaultValue()["value"] = 4; f2->getInput(inputs[1])->setDefaultValue()["value"] = 5; std::shared_ptr f3 = std::make_shared(SUBTRACT); inputs = f3->getInputIDs(); f3->getInput(inputs[0])->connect(f1->getOutput(f1->getOutputIDs()[0])); f3->getInput(inputs[1])->connect(f1->getOutput(f2->getOutputIDs()[0])); std::shared_ptr f4 = std::make_shared(DIVIDE); inputs = f4->getInputIDs(); f4->getInput(inputs[0])->connect(f1->getOutput(f3->getOutputIDs()[0])); f4->getInput(inputs[1])->setDefaultValue()["value"] = 2; std::shared_ptr test = std::make_shared(); test->addModule(f4); test->addModule(f3); test->addModule(f2); test->addModule(f1); test->addModuleOutput(f3, f3->getOutput(f3->getOutputIDs()[0])); test->update(); EXPECT_EQ(test->getOutput(test->getOutputIDs()[1])->getValue()["value"].get(), 3); } TEST(ProcessorManual, CalculateExtremeFormula){ //x_0=8, x_i=x_{i-1}/2 std::shared_ptr switchModule = std::make_shared(); std::shared_ptr calcModule = std::make_shared(DIVIDE); std::shared_ptr processor = std::make_shared(); processor->addModule(switchModule); processor->addModule(calcModule); bool connect; connect =switchModule->getInput(switchModule->getInputIDs()[0])->connect(processor->getIteration()); switchModule->getInput(switchModule->getInputIDs()[1])->setDefaultValue()["value"] = 8.0; connect = switchModule->getInput(switchModule->getInputIDs()[2])->connect(calcModule->getOutput(calcModule->getOutputIDs()[0])); calcModule->getInput(calcModule->getInputIDs()[0])->connect(switchModule->getOutput(switchModule->getInputIDs()[0])); calcModule->getInput(calcModule->getInputIDs()[1])->setDefaultValue()["value"] = 2.0; processor->addModuleOutput(calcModule,calcModule->getOutput(calcModule->getOutputIDs()[0])); processor->update(); EXPECT_FLOAT_EQ(processor->getOutput(processor->getOutputIDs()[1])->getValue()["value"].get(), 0.0); }