ASSERT_NE(clone->getData("5"), nullptr);
}
-TEST_F(GraphCopyTests, canPreserveTopology) {
- auto iclone = CNNNetCopy<MockCopier>(*mockNet, mc);
- auto clone = CNNNetwork(iclone);
-
- ASSERT_EQ(clone.layerCount(), 5);
-
- EXPECT_CALL(*this, visited(1, 0)).Times(1);
- EXPECT_CALL(*this, visited(2, 1)).Times(1);
-
- EXPECT_CALL(*this, visited2(3, 0)).Times(1);
- EXPECT_CALL(*this, visited2(4, AnyOf(1, 2))).Times(1);
- EXPECT_CALL(*this, visited2(5, AnyOf(1, 2))).Times(1);
- EXPECT_CALL(*this, visited2(2, 3)).Times(1);
-
- int idx = 0;
- CNNNetBFS(clone.getLayerByName("1"), [&](CNNLayerPtr layer) {
- visited(ID(layer), idx++);
- });
-
- idx = 0;
- CNNNetBFS(clone.getLayerByName("3"), [&](CNNLayerPtr layer) {
- visited2(ID(layer), idx++);
- });
-}
-
#ifdef ENABLE_GNA
using namespace GNAPluginNS;
struct _FP32_2_FP32 : public GNAPluginNS::frontend::QuantDescTmpl<float, float, float, float, float> {
EXPECT_FALSE(contains(temp_set, 5));
}
-TEST(UtilTests, cloneData) {
- IE::Data srcData("test", { IE::Precision::FP32, IE::SizeVector{3,2,1}, IE::CHW });
- IE::CNNLayerPtr layer1 = std::make_shared<IE::CNNLayer>(IE::LayerParams{});
- IE::CNNLayerPtr layer2 = std::make_shared<IE::CNNLayer>(IE::LayerParams{});
- srcData.getCreatorLayer() = layer1;
- srcData.getInputTo().insert({"foo",layer2});
- auto cloned = IE::cloneData(srcData);
- ASSERT_NE(nullptr, cloned);
- EXPECT_EQ(srcData.getName(), cloned->getName());
- EXPECT_EQ(srcData.getPrecision(), cloned->getPrecision());
- EXPECT_EQ(srcData.getLayout(), cloned->getLayout());
- EXPECT_EQ(srcData.getDims(), cloned->getDims());
- EXPECT_EQ(nullptr, cloned->getCreatorLayer().lock());
- EXPECT_TRUE(cloned->getInputTo().empty());
-}
-
namespace {
template<typename T>
bool checkLayerCloning() {
ASSERT_TRUE(contains(data_names, "data5"));
ASSERT_TRUE(contains(data_names, "data6"));
}
-
-TEST(UtilTests, replaceLayerWithNewLayer) {
- //
- // I->L1->L3->O
- // \ /
- // L2
- //
-
- NetBuilder netBuilder;
- auto net = netBuilder
- .data("data1", IE::TensorDesc(IE::Precision::UNSPECIFIED, IE::SizeVector{ 1,1,1 }, IE::Layout::CHW))
- .data("data2", IE::TensorDesc(IE::Precision::UNSPECIFIED, IE::SizeVector{ 1,1,1 }, IE::Layout::CHW))
- .data("data3", IE::TensorDesc(IE::Precision::UNSPECIFIED, IE::SizeVector{ 1,1,1 }, IE::Layout::CHW))
- .data("data4", IE::TensorDesc(IE::Precision::UNSPECIFIED, IE::SizeVector{ 1,1,1 }, IE::Layout::CHW))
- .layer<IE::CNNLayer>(IE::LayerParams{"layer1", "dummy", IE::Precision::UNSPECIFIED})
- .layer<IE::CNNLayer>(IE::LayerParams{"layer2", "dummy", IE::Precision::UNSPECIFIED})
- .layer<IE::CNNLayer>(IE::LayerParams{"layer3", "dummy", IE::Precision::UNSPECIFIED})
- .linkData("data1", "data2", "layer1")
- .linkData("data2", "data3", "layer2")
- .linkData("data2", "data4", "layer3")
- .linkDataTo("data3", "layer3")
- .finalize();
-
- const auto& layers = netBuilder.getLayersMap();
- const auto& data = netBuilder.getDataMap();
-
- { // Replace L1
- auto newLayer1 = std::make_shared<IE::CNNLayer>(IE::LayerParams{"layer1", "dummy", IE::Precision::UNSPECIFIED});
- auto layer1 = layers.find("layer1");
- EXPECT_TRUE(layer1 != layers.end());
- CNNNetSubstituteLayer(*net, layer1->second, newLayer1);
- IE::CNNLayerPtr layer1Check = nullptr;
- net->getLayerByName("layer1", layer1Check, nullptr);
- ASSERT_EQ(layer1Check, newLayer1);
- ASSERT_EQ(layer1Check->outData.size(), 1);
- ASSERT_EQ(layer1Check->outData[0], data.find("data2")->second);
- ASSERT_EQ(layer1Check->outData[0]->getCreatorLayer().lock(), newLayer1);
- }
- { // Replace L2
- auto newLayer2 = std::make_shared<IE::CNNLayer>(IE::LayerParams{"layer2", "dummy", IE::Precision::UNSPECIFIED});
- auto layer2 = layers.find("layer2");
- EXPECT_TRUE(layer2 != layers.end());
- CNNNetSubstituteLayer(*net, layer2->second, newLayer2);
- IE::CNNLayerPtr layer2Check = nullptr;
- net->getLayerByName("layer2", layer2Check, nullptr);
- ASSERT_EQ(layer2Check, newLayer2);
- ASSERT_EQ(layer2Check->outData.size(), 1);
- ASSERT_EQ(layer2Check->outData[0], data.find("data3")->second);
- ASSERT_EQ(layer2Check->outData[0]->getCreatorLayer().lock(), newLayer2);
- }
- { // Replace L3
- auto newLayer3 = std::make_shared<IE::CNNLayer>(IE::LayerParams{"layer3", "dummy", IE::Precision::UNSPECIFIED});
- auto layer3 = layers.find("layer3");
- EXPECT_TRUE(layer3 != layers.end());
- CNNNetSubstituteLayer(*net, layer3->second, newLayer3);
- IE::CNNLayerPtr layer3Check = nullptr;
- net->getLayerByName("layer3", layer3Check, nullptr);
- ASSERT_EQ(layer3Check, newLayer3);
- ASSERT_EQ(layer3Check->outData.size(), 1);
- ASSERT_EQ(layer3Check->outData[0], data.find("data4")->second);
- ASSERT_EQ(layer3Check->outData[0]->getCreatorLayer().lock(), newLayer3);
- ASSERT_TRUE(layer3Check->insData[0].lock() == data.find("data2")->second ||
- layer3Check->insData[0].lock() == data.find("data3")->second);
- ASSERT_TRUE(layer3Check->insData[1].lock() == data.find("data2")->second ||
- layer3Check->insData[1].lock() == data.find("data3")->second);
- }
-}