#include "BridgeNode.h"
#include "BranchNode.h"
#include "EndpointNode.h"
+#include "SingleoException.h"
#define IMG_FACE TEST_RES_PATH "/usr/share/capi-media-vision/res/inference/images/faceDetection.jpg"
#define IMG_BANANA TEST_RES_PATH "/usr/share/capi-media-vision/res/inference/images/banana.jpg"
taskManager->clear();
}
+}
+
+// GraphG:
+// input ----> face_detection ----> bridge ----> face_landmark_detection ----> endpoint ----> output
+// ↑ ↓
+// bridge <---- face_detection
+TEST(SingloTaskManager, CyclicGraphGShouldNotWork)
+{
+ cv::Mat cv_image = cv::imread(IMG_FACE, cv::IMREAD_COLOR);
+ cv::cvtColor(cv_image, cv_image, cv::COLOR_BGR2RGB);
+ const vector<Point> answer { { 243, 133 }, { 404, 135 }, { 347, 197 }, { 250, 266 }, { 385, 266 } };
+
+ ASSERT_FALSE(cv_image.empty());
+
+ ImageDataType image_data;
+
+ image_data.width = cv_image.cols;
+ image_data.height = cv_image.rows;
+ image_data.byte_per_pixel = cv_image.channels();
+ image_data.ptr = cv_image.data;
+
+ auto factory = InferenceTaskFactory::instance().create("MvInferenceTaskFactory");
+
+ auto taskManager = make_unique<TaskManager>();
+
+ taskManager->requestNewNode(NodeType::STARTPOINT, "startpoint");
+
+ auto face_detection_node_a = taskManager->requestNewNode(NodeType::INFERENCE, "face_detectionA");
+ dynamic_cast<InferenceNode *>(face_detection_node_a)->setInferenceTask(factory->createFaceDetection());
+
+ auto face_detection_node_b = taskManager->requestNewNode(NodeType::INFERENCE, "face_detectionB");
+ dynamic_cast<InferenceNode *>(face_detection_node_b)->setInferenceTask(factory->createFaceDetection());
+
+ auto bridge_node_a = taskManager->requestNewNode(NodeType::BRIDGE, "bridgeA");
+ dynamic_cast<BridgeNode *>(bridge_node_a)->setCb(BridgeNodeCallbackFD);
+
+ auto bridge_node_b = taskManager->requestNewNode(NodeType::BRIDGE, "bridgeB");
+ dynamic_cast<BridgeNode *>(bridge_node_b)->setCb(BridgeNodeCallbackFD);
+
+ auto face_landmark_node = taskManager->requestNewNode(NodeType::INFERENCE, "face_landmark");
+ dynamic_cast<InferenceNode *>(face_landmark_node)->setInferenceTask(factory->createFaceLandmarkDetection());
+
+ taskManager->requestNewNode(NodeType::ENDPOINT, "endpoint");
+
+ taskManager->resetPipeline();
+
+ taskManager->addEdge("startpoint", "face_detectionA");
+ taskManager->addEdge("face_detectionA", "bridgeA");
+ taskManager->addEdge("bridgeA", "face_landmark");
+ taskManager->addEdge("face_landmark", "endpoint");
+ taskManager->addEdge("bridgeA", "face_detectionB");
+ taskManager->addEdge("face_detectionB", "bridgeB");
+ taskManager->addEdge("bridgeB", "face_detectionA");
+
+ taskManager->addInput(image_data);
+
+ EXPECT_THROW(taskManager->run(), singleo::exception::InvalidOperation);
+
+ taskManager->clear();
}
\ No newline at end of file