已合并
feat: 增补UT覆盖率 #4270
likun104创建于 21 天前
feat: 增补UT覆盖率 #4270
已合并
共 154 个文件变更+14268-204
| @@ -236,6 +236,7 @@ set(PASS_TEST_FILES | |||
| 236 | "graph/passes/subgraph_multi_dims_clone_pass_unittest.cc" | 236 | "graph/passes/subgraph_multi_dims_clone_pass_unittest.cc" |
| 237 | "graph/passes/create_subgraph_with_scope_pass_unittest.cc" | 237 | "graph/passes/create_subgraph_with_scope_pass_unittest.cc" |
| 238 | "graph/passes/subgraph_const_migration_pass_unittest.cc" | 238 | "graph/passes/subgraph_const_migration_pass_unittest.cc" |
| 239 | + "graph/passes/symbolic_cond_remove_pass_unittest.cc" | ||
| 239 | "graph/passes/start_of_sequence_pass_unittest.cc" | 240 | "graph/passes/start_of_sequence_pass_unittest.cc" |
| 240 | "graph/passes/replace_with_empty_const_pass_unittest.cc" | 241 | "graph/passes/replace_with_empty_const_pass_unittest.cc" |
| 241 | "graph/passes/link_gen_mask_nodes_pass_unittest.cc" | 242 | "graph/passes/link_gen_mask_nodes_pass_unittest.cc" |
| @@ -1532,6 +1533,7 @@ target_link_libraries(ut_eager_style_builder | |||
| 1532 | aihac_symbolizer | 1533 | aihac_symbolizer |
| 1533 | ge_running_env | 1534 | ge_running_env |
| 1534 | ge_compiler | 1535 | ge_compiler |
| 1536 | + cmd_flag_info_static | ||
| 1535 | GTestShared::gtest GTestShared::gtest_main GTestShared::gmock_main ${COMMON_SHARED_LIBRARIES} -lrt -ldl ${AIR_COMMON_LINK_OPTION} | 1537 | GTestShared::gtest GTestShared::gtest_main GTestShared::gmock_main ${COMMON_SHARED_LIBRARIES} -lrt -ldl ${AIR_COMMON_LINK_OPTION} |
| 1536 | -Wl,--no-as-needed GTestShared::gmock -Wl,--as-needed | 1538 | -Wl,--no-as-needed GTestShared::gmock -Wl,--as-needed |
| 1537 | ascendcl_stub | 1539 | ascendcl_stub |
| @@ -1913,5 +1913,112 @@ TEST_F(UtestCustomOpsKernelInfoStore, GenerateTaskFailsWhenAnnotatedArgsRejectsP | |||
| 1913 | } | 1913 | } |
| 1914 | } | 1914 | } |
| 1915 | 1915 | ||
| 1916 | +TEST_F(UtestCustomOpsKernelInfoStore, CustomGraphOptimizerInitializeAndFinalize) { | ||
| 1917 | + CustomGraphOptimizer optimizer; | ||
| 1918 | + std::map<std::string, std::string> options; | ||
| 1919 | + EXPECT_EQ(optimizer.Initialize(options, nullptr), SUCCESS); | ||
| 1920 | + EXPECT_EQ(optimizer.Finalize(), SUCCESS); | ||
| 1921 | +} | ||
| 1922 | + | ||
| 1923 | +TEST_F(UtestCustomOpsKernelInfoStore, CustomGraphOptimizerOptimizeOriginalGraph) { | ||
| 1924 | + CustomGraphOptimizer optimizer; | ||
| 1925 | + auto graph = std::make_shared<ComputeGraph>("test_graph"); | ||
| 1926 | + EXPECT_EQ(optimizer.OptimizeOriginalGraph(*graph), SUCCESS); | ||
| 1927 | +} | ||
| 1928 | + | ||
| 1929 | +TEST_F(UtestCustomOpsKernelInfoStore, CustomGraphOptimizerOptimizeFusedGraph) { | ||
| 1930 | + CustomGraphOptimizer optimizer; | ||
| 1931 | + auto graph = std::make_shared<ComputeGraph>("test_graph"); | ||
| 1932 | + EXPECT_EQ(optimizer.OptimizeFusedGraph(*graph), SUCCESS); | ||
| 1933 | +} | ||
| 1934 | + | ||
| 1935 | +TEST_F(UtestCustomOpsKernelInfoStore, CustomGraphOptimizerOptimizeWholeGraphEmptyGraph) { | ||
| 1936 | + CustomGraphOptimizer optimizer; | ||
| 1937 | + auto graph = std::make_shared<ComputeGraph>("empty_graph"); | ||
| 1938 | + EXPECT_EQ(optimizer.OptimizeWholeGraph(*graph), SUCCESS); | ||
| 1939 | +} | ||
| 1940 | + | ||
| 1941 | +TEST_F(UtestCustomOpsKernelInfoStore, CustomGraphOptimizerOptimizeWholeGraphNonCustomOp) { | ||
| 1942 | + CustomGraphOptimizer optimizer; | ||
| 1943 | + auto graph = std::make_shared<ComputeGraph>("non_custom_graph"); | ||
| 1944 | + auto op_desc = std::make_shared<OpDesc>("non_custom_node", "NonCustomType"); | ||
| 1945 | + GeTensorDesc input_desc(GeShape({1, 16}), FORMAT_ND, DT_FLOAT16); | ||
| 1946 | + GeTensorDesc output_desc(GeShape({1, 16}), FORMAT_ND, DT_FLOAT16); | ||
| 1947 | + (void)op_desc->AddInputDesc("x", input_desc); | ||
| 1948 | + (void)op_desc->AddOutputDesc("y", output_desc); | ||
| 1949 | + ASSERT_NE(graph->AddNode(op_desc), nullptr); | ||
| 1950 | + EXPECT_EQ(optimizer.OptimizeWholeGraph(*graph), SUCCESS); | ||
| 1951 | +} | ||
| 1952 | + | ||
| 1953 | +TEST_F(UtestCustomOpsKernelInfoStore, CustomGraphOptimizerOptimizeWholeGraphBaseOnlyOp) { | ||
| 1954 | + const std::string kTestOpType = "TestBaseOnlyOp_OptimizerTest"; | ||
| 1955 | + auto creator = []() -> std::unique_ptr<BaseCustomOp> { return std::make_unique<MockBaseOnlyCustomOp>(); }; | ||
| 1956 | + ASSERT_EQ(CustomOpFactory::RegisterCustomOpCreator(AscendString(kTestOpType.c_str()), creator), GRAPH_SUCCESS); | ||
| 1957 | + | ||
| 1958 | + auto graph = std::make_shared<ComputeGraph>("base_only_graph"); | ||
| 1959 | + auto op_desc = std::make_shared<OpDesc>("base_only_node", kTestOpType); | ||
| 1960 | + GeTensorDesc input_desc(GeShape({1, 16}), FORMAT_ND, DT_FLOAT16); | ||
| 1961 | + GeTensorDesc output_desc(GeShape({1, 16}), FORMAT_ND, DT_FLOAT16); | ||
| 1962 | + (void)op_desc->AddInputDesc("x", input_desc); | ||
| 1963 | + (void)op_desc->AddOutputDesc("y", output_desc); | ||
| 1964 | + ASSERT_NE(graph->AddNode(op_desc), nullptr); | ||
| 1965 | + | ||
| 1966 | + CustomGraphOptimizer optimizer; | ||
| 1967 | + EXPECT_EQ(optimizer.OptimizeWholeGraph(*graph), SUCCESS); | ||
| 1968 | +} | ||
| 1969 | + | ||
| 1970 | +TEST_F(UtestCustomOpsKernelInfoStore, CustomGraphOptimizerGetAttributes) { | ||
| 1971 | + CustomGraphOptimizer optimizer; | ||
| 1972 | + GraphOptimizerAttribute attrs; | ||
| 1973 | + EXPECT_EQ(optimizer.GetAttributes(attrs), SUCCESS); | ||
| 1974 | + EXPECT_EQ(attrs.engineName, "DNN_VM_CUSTOM"); | ||
| 1975 | +} | ||
| 1976 | + | ||
| 1977 | +TEST_F(UtestCustomOpsKernelInfoStore, CustomOpsKernelBuilderCalcOpRunningParamKnownShape) { | ||
| 1978 | + const std::string kTestOpType = "TestCalcOpRunningParam_KnownShape"; | ||
| 1979 | + auto creator = []() -> std::unique_ptr<BaseCustomOp> { return std::make_unique<MockCompilableCustomOp>(); }; | ||
| 1980 | + ASSERT_EQ(CustomOpFactory::RegisterCustomOpCreator(AscendString(kTestOpType.c_str()), creator), GRAPH_SUCCESS); | ||
| 1981 | + | ||
| 1982 | + auto graph = std::make_shared<ComputeGraph>("calc_param_graph"); | ||
| 1983 | + auto op_desc = std::make_shared<OpDesc>("calc_param_node", kTestOpType); | ||
| 1984 | + op_desc->AppendIrInput("x", kIrInputRequired); | ||
| 1985 | + op_desc->AppendIrOutput("y", kIrOutputRequired); | ||
| 1986 | + GeTensorDesc input_desc(GeShape({1, 16}), FORMAT_ND, DT_FLOAT16); | ||
| 1987 | + GeTensorDesc output_desc(GeShape({1, 16}), FORMAT_ND, DT_FLOAT16); | ||
| 1988 | + (void)op_desc->AddInputDesc("x", input_desc); | ||
| 1989 | + (void)op_desc->AddOutputDesc("y", output_desc); | ||
| 1990 | + auto node = graph->AddNode(op_desc); | ||
| 1991 | + ASSERT_NE(node, nullptr); | ||
| 1992 | + | ||
| 1993 | + CustomOpsKernelBuilder builder; | ||
| 1994 | + EXPECT_EQ(builder.CalcOpRunningParam(*node), SUCCESS); | ||
| 1995 | +} | ||
| 1996 | + | ||
| 1997 | +TEST_F(UtestCustomOpsKernelInfoStore, CustomOpsKernelBuilderCalcOpRunningParamUnknownShape) { | ||
| 1998 | + const std::string kTestOpType = "TestCalcOpRunningParam_UnknownShape"; | ||
| 1999 | + auto creator = []() -> std::unique_ptr<BaseCustomOp> { return std::make_unique<MockCompilableCustomOp>(); }; | ||
| 2000 | + ASSERT_EQ(CustomOpFactory::RegisterCustomOpCreator(AscendString(kTestOpType.c_str()), creator), GRAPH_SUCCESS); | ||
| 2001 | + | ||
| 2002 | + auto graph = std::make_shared<ComputeGraph>("calc_param_graph_unknown"); | ||
| 2003 | + auto op_desc = std::make_shared<OpDesc>("calc_param_node_unknown", kTestOpType); | ||
| 2004 | + op_desc->AppendIrInput("x", kIrInputRequired); | ||
| 2005 | + op_desc->AppendIrOutput("y", kIrOutputRequired); | ||
| 2006 | + GeTensorDesc input_desc(GeShape({-1, 16}), FORMAT_ND, DT_FLOAT16); | ||
| 2007 | + GeTensorDesc output_desc(GeShape({-1, 16}), FORMAT_ND, DT_FLOAT16); | ||
| 2008 | + (void)op_desc->AddInputDesc("x", input_desc); | ||
| 2009 | + (void)op_desc->AddOutputDesc("y", output_desc); | ||
| 2010 | + auto node = graph->AddNode(op_desc); | ||
| 2011 | + ASSERT_NE(node, nullptr); | ||
| 2012 | + | ||
| 2013 | + CustomOpsKernelBuilder builder; | ||
| 2014 | + EXPECT_EQ(builder.CalcOpRunningParam(*node), SUCCESS); | ||
| 2015 | +} | ||
| 2016 | + | ||
| 2017 | +TEST_F(UtestCustomOpsKernelInfoStore, CustomOpsKernelBuilderInitializeAndFinalize) { | ||
| 2018 | + CustomOpsKernelBuilder builder; | ||
| 2019 | + std::map<std::string, std::string> options; | ||
| 2020 | + EXPECT_EQ(builder.Initialize(options), SUCCESS); | ||
| 2021 | + EXPECT_EQ(builder.Finalize(), SUCCESS); | ||
| 2022 | +} | ||
| 1916 | } // namespace custom | 2023 | } // namespace custom |
| 1917 | } // namespace ge | 2024 | } // namespace ge |
| @@ -1033,4 +1033,142 @@ TEST_F(DataSlice, Cov_InferDavinciSpecialOpSlice_GetOriOutputFail) { | |||
| 1033 | Status ret = DataSliceHelper::InferDavinciAxisSlice(op_desc, axis_type_info); | 1033 | Status ret = DataSliceHelper::InferDavinciAxisSlice(op_desc, axis_type_info); |
| 1034 | EXPECT_EQ(ret, FAILED); | 1034 | EXPECT_EQ(ret, FAILED); |
| 1035 | } | 1035 | } |
| 1036 | +TEST_F(DataSlice, Cov_TransAxisInfo_NZFormat) { | ||
| 1037 | + OpDescPtr op_desc = std::make_shared<OpDesc>("Add", "Add"); | ||
| 1038 | + GeTensorDesc input_desc(GeShape({2, 2, 3, 4}), FORMAT_FRACTAL_NZ); | ||
| 1039 | + input_desc.SetOriginShape(GeShape({2, 2, 3, 4})); | ||
| 1040 | + input_desc.SetOriginFormat(FORMAT_NCHW); | ||
| 1041 | + op_desc->AddInputDesc("input", input_desc); | ||
| 1042 | + GeTensorDesc output_desc(GeShape({2, 2, 3, 4}), FORMAT_FRACTAL_NZ); | ||
| 1043 | + output_desc.SetOriginShape(GeShape({2, 2, 3, 4})); | ||
| 1044 | + output_desc.SetOriginFormat(FORMAT_NCHW); | ||
| 1045 | + op_desc->AddOutputDesc("output", output_desc); | ||
| 1046 | + AxisTypeInfo axis_type_info; | ||
| 1047 | + axis_type_info.SetAxisTypes({AxisType::ELEMENTWISE}); | ||
| 1048 | + axis_type_info.SetAxisType(AxisType::ELEMENTWISE); | ||
| 1049 | + axis_type_info.SetRelateInputs({{0, {0}}}); | ||
| 1050 | + axis_type_info.SetRelateOutputs({{0, {0}}}); | ||
| 1051 | + std::vector<AxisTypeInfo> axis_type_vec = {axis_type_info}; | ||
| 1052 | + DataSliceAdapter::TransAxisInfo(op_desc, axis_type_vec); | ||
| 1053 | + EXPECT_EQ(axis_type_vec.size(), 1U); | ||
| 1054 | +} | ||
| 1055 | + | ||
| 1056 | +TEST_F(DataSlice, Cov_TransAxisInfo_NC1HWC0Format) { | ||
| 1057 | + OpDescPtr op_desc = std::make_shared<OpDesc>("Add", "Add"); | ||
| 1058 | + GeTensorDesc input_desc(GeShape({2, 1, 3, 4, 16}), FORMAT_NC1HWC0); | ||
| 1059 | + input_desc.SetOriginShape(GeShape({2, 16, 3, 4})); | ||
| 1060 | + input_desc.SetOriginFormat(FORMAT_NCHW); | ||
| 1061 | + op_desc->AddInputDesc("input", input_desc); | ||
| 1062 | + GeTensorDesc output_desc(GeShape({2, 1, 3, 4, 16}), FORMAT_NC1HWC0); | ||
| 1063 | + output_desc.SetOriginShape(GeShape({2, 16, 3, 4})); | ||
| 1064 | + output_desc.SetOriginFormat(FORMAT_NCHW); | ||
| 1065 | + op_desc->AddOutputDesc("output", output_desc); | ||
| 1066 | + AxisTypeInfo axis_type_info; | ||
| 1067 | + axis_type_info.SetAxisTypes({AxisType::ELEMENTWISE}); | ||
| 1068 | + axis_type_info.SetAxisType(AxisType::ELEMENTWISE); | ||
| 1069 | + axis_type_info.SetRelateInputs({{0, {1}}}); | ||
| 1070 | + axis_type_info.SetRelateOutputs({{0, {1}}}); | ||
| 1071 | + std::vector<AxisTypeInfo> axis_type_vec = {axis_type_info}; | ||
| 1072 | + DataSliceAdapter::TransAxisInfo(op_desc, axis_type_vec); | ||
| 1073 | + EXPECT_EQ(axis_type_vec.size(), 1U); | ||
| 1074 | +} | ||
| 1075 | + | ||
| 1076 | +TEST_F(DataSlice, Cov_TransAxisInfo_UnsupportedType) { | ||
| 1077 | + OpDescPtr op_desc = std::make_shared<OpDesc>("Add", "Add"); | ||
| 1078 | + GeTensorDesc input_desc(GeShape({2, 2, 3, 4}), FORMAT_NCHW); | ||
| 1079 | + input_desc.SetOriginShape(GeShape({2, 2, 3, 4})); | ||
| 1080 | + input_desc.SetOriginFormat(FORMAT_NCHW); | ||
| 1081 | + op_desc->AddInputDesc("input", input_desc); | ||
| 1082 | + GeTensorDesc output_desc(GeShape({2, 2, 3, 4}), FORMAT_NCHW); | ||
| 1083 | + output_desc.SetOriginShape(GeShape({2, 2, 3, 4})); | ||
| 1084 | + output_desc.SetOriginFormat(FORMAT_NCHW); | ||
| 1085 | + op_desc->AddOutputDesc("output", output_desc); | ||
| 1086 | + AxisTypeInfo axis_type_info; | ||
| 1087 | + axis_type_info.SetAxisTypes({AxisType::UNSPLIT}); | ||
| 1088 | + axis_type_info.SetAxisType(AxisType::UNSPLIT); | ||
| 1089 | + axis_type_info.SetRelateInputs({{0, {0}}}); | ||
| 1090 | + axis_type_info.SetRelateOutputs({{0, {0}}}); | ||
| 1091 | + std::vector<AxisTypeInfo> axis_type_vec = {axis_type_info}; | ||
| 1092 | + DataSliceAdapter::TransAxisInfo(op_desc, axis_type_vec); | ||
| 1093 | + EXPECT_TRUE(axis_type_vec.empty()); | ||
| 1094 | +} | ||
| 1095 | + | ||
| 1096 | +TEST_F(DataSlice, Cov_TransAxisInfo_SlidingWindowCombination) { | ||
| 1097 | + OpDescPtr op_desc = std::make_shared<OpDesc>("Add", "Add"); | ||
| 1098 | + GeTensorDesc input_desc(GeShape({2, 2, 3, 4}), FORMAT_NCHW); | ||
| 1099 | + input_desc.SetOriginShape(GeShape({2, 2, 3, 4})); | ||
| 1100 | + input_desc.SetOriginFormat(FORMAT_NCHW); | ||
| 1101 | + op_desc->AddInputDesc("input", input_desc); | ||
| 1102 | + GeTensorDesc output_desc(GeShape({2, 2, 3, 4}), FORMAT_NCHW); | ||
| 1103 | + output_desc.SetOriginShape(GeShape({2, 2, 3, 4})); | ||
| 1104 | + output_desc.SetOriginFormat(FORMAT_NCHW); | ||
| 1105 | + op_desc->AddOutputDesc("output", output_desc); | ||
| 1106 | + AxisTypeInfo axis_type_info; | ||
| 1107 | + axis_type_info.SetAxisTypes({AxisType::ELEMENTWISE, AxisType::REDUCESUM}); | ||
| 1108 | + axis_type_info.SetAxisType(AxisType::ELEMENTWISE); | ||
| 1109 | + axis_type_info.SetRelateInputs({{0, {0}}}); | ||
| 1110 | + axis_type_info.SetRelateOutputs({{0, {0}}}); | ||
| 1111 | + std::vector<AxisTypeInfo> axis_type_vec = {axis_type_info}; | ||
| 1112 | + DataSliceAdapter::TransAxisInfo(op_desc, axis_type_vec); | ||
| 1113 | + EXPECT_EQ(axis_type_vec.size(), 1U); | ||
| 1114 | +} | ||
| 1115 | + | ||
| 1116 | +TEST_F(DataSlice, Cov_TransAxisInfo_ReduceTypeMultiAxis) { | ||
| 1117 | + OpDescPtr op_desc = std::make_shared<OpDesc>("Add", "Add"); | ||
| 1118 | + GeTensorDesc input_desc(GeShape({2, 2, 3, 4}), FORMAT_FRACTAL_NZ); | ||
| 1119 | + input_desc.SetOriginShape(GeShape({2, 2, 3, 4})); | ||
| 1120 | + input_desc.SetOriginFormat(FORMAT_NCHW); | ||
| 1121 | + op_desc->AddInputDesc("input", input_desc); | ||
| 1122 | + GeTensorDesc output_desc(GeShape({2, 2, 3, 4}), FORMAT_FRACTAL_NZ); | ||
| 1123 | + output_desc.SetOriginShape(GeShape({2, 2, 3, 4})); | ||
| 1124 | + output_desc.SetOriginFormat(FORMAT_NCHW); | ||
| 1125 | + op_desc->AddOutputDesc("output", output_desc); | ||
| 1126 | + AxisTypeInfo axis_type_info; | ||
| 1127 | + axis_type_info.SetAxisTypes({AxisType::REDUCEMEAN}); | ||
| 1128 | + axis_type_info.SetAxisType(AxisType::REDUCEMEAN); | ||
| 1129 | + axis_type_info.SetRelateInputs({{0, {2}}}); | ||
| 1130 | + axis_type_info.SetRelateOutputs({{0, {2}}}); | ||
| 1131 | + std::vector<AxisTypeInfo> axis_type_vec = {axis_type_info}; | ||
| 1132 | + DataSliceAdapter::TransAxisInfo(op_desc, axis_type_vec); | ||
| 1133 | + EXPECT_TRUE(axis_type_vec.empty()); | ||
| 1134 | +} | ||
| 1135 | + | ||
| 1136 | +TEST_F(DataSlice, Cov_GetDavinciSliceInfo_InvalidOriInfo) { | ||
| 1137 | + ComputeGraphPtr test_graph = std::make_shared<ComputeGraph>("test_graph"); | ||
| 1138 | + OpDescPtr op_desc = std::make_shared<OpDesc>("Add", "Add"); | ||
| 1139 | + GeTensorDesc output_desc(GeShape({10, 20}), FORMAT_NCHW); | ||
| 1140 | + output_desc.SetOriginShape(GeShape(std::vector<int64_t>{})); | ||
| 1141 | + output_desc.SetOriginFormat(FORMAT_NCHW); | ||
| 1142 | + op_desc->AddOutputDesc("output", output_desc); | ||
| 1143 | + GeTensorDesc input_desc(GeShape({10, 20}), FORMAT_NCHW); | ||
| 1144 | + input_desc.SetOriginShape(GeShape(std::vector<int64_t>{})); | ||
| 1145 | + input_desc.SetOriginFormat(FORMAT_NCHW); | ||
| 1146 | + op_desc->AddInputDesc("input", input_desc); | ||
| 1147 | + NodePtr node = test_graph->AddNode(op_desc); | ||
| 1148 | + std::vector<AxisTypeInfo> axis_type_info; | ||
| 1149 | + Status ret = DataSliceHelper::GetDavinciSliceInfo(node, axis_type_info); | ||
| 1150 | + EXPECT_EQ(ret, SUCCESS); | ||
| 1151 | + EXPECT_TRUE(axis_type_info.empty()); | ||
| 1152 | +} | ||
| 1153 | + | ||
| 1154 | +TEST_F(DataSlice, Cov_InferDavinciCommonOpSlice_NullPtr) { | ||
| 1155 | + OpDescPtr op_desc = std::make_shared<OpDesc>("Cast", "Cast"); | ||
| 1156 | + GeTensorDesc output_desc(GeShape({10, 20}), FORMAT_NCHW); | ||
| 1157 | + output_desc.SetOriginShape(GeShape({10, 20})); | ||
| 1158 | + output_desc.SetOriginFormat(FORMAT_NCHW); | ||
| 1159 | + op_desc->AddOutputDesc("output", output_desc); | ||
| 1160 | + GeTensorDesc input_desc(GeShape({10, 20}), FORMAT_NCHW); | ||
| 1161 | + input_desc.SetOriginShape(GeShape({10, 20})); | ||
| 1162 | + input_desc.SetOriginFormat(FORMAT_NCHW); | ||
| 1163 | + op_desc->AddInputDesc("input", input_desc); | ||
| 1164 | + AxisTypeInfo axis_type_info; | ||
| 1165 | + axis_type_info.SetAxisTypes({AxisType::SLIDINGWINDOW}); | ||
| 1166 | + axis_type_info.SetAxisType(AxisType::SLIDINGWINDOW); | ||
| 1167 | + axis_type_info.SetRelateInputs({{0, {0}}}); | ||
| 1168 | + axis_type_info.SetRelateOutputs({{0, {0}}}); | ||
| 1169 | + axis_type_info.SetOriRelateInputs({{0, {0}}}); | ||
| 1170 | + axis_type_info.SetOriRelateOutputs({{0, {0}}}); | ||
| 1171 | + Status ret = DataSliceHelper::InferDavinciAxisSlice(op_desc, axis_type_info); | ||
| 1172 | + EXPECT_EQ(ret, FAILED); | ||
| 1173 | +} | ||
| 1036 | } // namespace ge | 1174 | } // namespace ge |
| @@ -21,7 +21,7 @@ | |||
| 21 | 21 | ||
| 22 | 22 | ||
| 23 | 23 | ||
| 24 | -#include "graph/node.h" | 24 | +#include "graph/debug/ge_attr_define.h" |
| 25 | 25 | ||
| 26 | 26 | ||
| 27 | 27 | ||
| @@ -326,4 +326,224 @@ TEST_F(UtestDnnengineManager, GetDNNEngineName_not_support_dynamic_shape) { | |||
| 326 | okm.ops_kernel_store_["kernel_name"] = std::make_shared<SubOpsKernelInfoStore2>(); | 326 | okm.ops_kernel_store_["kernel_name"] = std::make_shared<SubOpsKernelInfoStore2>(); |
| 327 | EXPECT_EQ(instance.GetDNNEngineName(node), ""); | 327 | EXPECT_EQ(instance.GetDNNEngineName(node), ""); |
| 328 | } | 328 | } |
| 329 | + | ||
| 330 | +TEST_F(UtestDnnengineManager, FinalizeNotInitialized) { | ||
| 331 | + auto &instance = DNNEngineManager::GetInstance(); | ||
| 332 | + instance.init_flag_ = false; | ||
| 333 | + EXPECT_EQ(instance.Finalize(), SUCCESS); | ||
| 334 | +} | ||
| 335 | + | ||
| 336 | +TEST_F(UtestDnnengineManager, GetCompositeEngineNameRecursiveDepthExceeded) { | ||
| 337 | + auto &instance = DNNEngineManager::GetInstance(); | ||
| 338 | + ge::ComputeGraphPtr graph = std::make_shared<ge::ComputeGraph>("graph"); | ||
| 339 | + auto node = UtAddNode(graph, "data1", "DATA", 0, 1); | ||
| 340 | + OpsKernelManager::GetInstance().composite_engines_["com"] = std::set<std::string>{"engine1"}; | ||
| 341 | + OpsKernelManager::GetInstance().composite_engine_kernel_lib_names_["com"] = "kernel_lib"; | ||
| 342 | + EXPECT_EQ(instance.GetCompositeEngineName(node, 30), ""); | ||
| 343 | + OpsKernelManager::GetInstance().composite_engines_.clear(); | ||
| 344 | + OpsKernelManager::GetInstance().composite_engine_kernel_lib_names_.clear(); | ||
| 345 | +} | ||
| 346 | + | ||
| 347 | +TEST_F(UtestDnnengineManager, GetCompositeEngineNameWithCompositeAttr) { | ||
| 348 | + auto &instance = DNNEngineManager::GetInstance(); | ||
| 349 | + ge::ComputeGraphPtr graph = std::make_shared<ge::ComputeGraph>("graph"); | ||
| 350 | + auto node = UtAddNode(graph, "data1", "DATA", 0, 1); | ||
| 351 | + OpsKernelManager::GetInstance().composite_engines_["com"] = std::set<std::string>{"engine1"}; | ||
| 352 | + OpsKernelManager::GetInstance().composite_engine_kernel_lib_names_["com"] = "kernel_lib"; | ||
| 353 | + AttrUtils::SetStr(node->GetOpDesc(), ATTR_NAME_COMPOSITE_ENGINE_NAME, "com"); | ||
| 354 | + AttrUtils::SetStr(node->GetOpDesc(), ATTR_NAME_COMPOSITE_ENGINE_KERNEL_LIB_NAME, "kernel_lib"); | ||
| 355 | + EXPECT_EQ(instance.GetCompositeEngineName(node, 1), "com"); | ||
| 356 | + OpsKernelManager::GetInstance().composite_engines_.clear(); | ||
| 357 | + OpsKernelManager::GetInstance().composite_engine_kernel_lib_names_.clear(); | ||
| 358 | +} | ||
| 359 | + | ||
| 360 | +TEST_F(UtestDnnengineManager, GetCompositeEngineNameAtomicFound) { | ||
| 361 | + auto &instance = DNNEngineManager::GetInstance(); | ||
| 362 | + instance.atomic_2_composite_["AIcoreEngine"] = "AIcoreComposite"; | ||
| 363 | + EXPECT_EQ(instance.GetCompositeEngineName("AIcoreEngine"), "AIcoreComposite"); | ||
| 364 | + EXPECT_EQ(instance.GetCompositeEngineName("nonexistent"), ""); | ||
| 365 | + instance.atomic_2_composite_.clear(); | ||
| 366 | +} | ||
| 367 | + | ||
| 368 | +TEST_F(UtestDnnengineManager, GetCompositeEngineKernelLibNameFound) { | ||
| 369 | + auto &instance = DNNEngineManager::GetInstance(); | ||
| 370 | + OpsKernelManager::GetInstance().composite_engine_kernel_lib_names_["com_engine"] = "kernel_lib"; | ||
| 371 | + EXPECT_EQ(instance.GetCompositeEngineKernelLibName("com_engine"), "kernel_lib"); | ||
| 372 | + EXPECT_EQ(instance.GetCompositeEngineKernelLibName("nonexistent"), ""); | ||
| 373 | + OpsKernelManager::GetInstance().composite_engine_kernel_lib_names_.clear(); | ||
| 374 | +} | ||
| 375 | + | ||
| 376 | +TEST_F(UtestDnnengineManager, ReadJsonFileWithEnginesMapNotEmpty) { | ||
| 377 | + auto &instance = DNNEngineManager::GetInstance(); | ||
| 378 | + instance.engines_map_["engine"] = std::make_shared<DNNEngine>(); | ||
| 379 | + nlohmann::json json_obj; | ||
| 380 | + EXPECT_EQ(instance.ReadJsonFile("/tmp/nonexistent_file_path.json", &json_obj), FAILED); | ||
| 381 | + instance.engines_map_.clear(); | ||
| 382 | +} | ||
| 383 | + | ||
| 384 | +TEST_F(UtestDnnengineManager, ReadJsonFileWithNullJson) { | ||
| 385 | + auto &instance = DNNEngineManager::GetInstance(); | ||
| 386 | + EXPECT_EQ(instance.ReadJsonFile("/tmp/test.json", nullptr), FAILED); | ||
| 387 | +} | ||
| 388 | + | ||
| 389 | +TEST_F(UtestDnnengineManager, ParserJsonFileWithNullJsonContent) { | ||
| 390 | + auto &instance = DNNEngineManager::GetInstance(); | ||
| 391 | + std::string path = GetModelPath(); | ||
| 392 | + path.append("../../../../compiler/plugin/nnengine/ge_config/"); | ||
| 393 | + std::string path_copy = path; | ||
| 394 | + path_copy.append("engine_conf_backup.json"); | ||
| 395 | + string cmd = "mkdir -p " + path; | ||
| 396 | + system(cmd.data()); | ||
| 397 | + path.append("engine_conf.json"); | ||
| 398 | + std::string backup_cmd = "cp " + path + " " + path_copy; | ||
| 399 | + system(backup_cmd.data()); | ||
| 400 | + std::ofstream ofs(path.c_str(), std::ios::out); | ||
| 401 | + ofs << "null"; | ||
| 402 | + ofs.close(); | ||
| 403 | + EXPECT_EQ(instance.ParserJsonFile(), SUCCESS); | ||
| 404 | + std::string recover_cmd1 = "rm -rf " + path + ";mv " + path_copy + " " + path; | ||
| 405 | + system(recover_cmd1.data()); | ||
| 406 | +} | ||
| 407 | + | ||
| 408 | +TEST_F(UtestDnnengineManager, ParserJsonFileSchedulerUnitsNotArray) { | ||
| 409 | + auto &instance = DNNEngineManager::GetInstance(); | ||
| 410 | + std::string path = GetModelPath(); | ||
| 411 | + path.append("../../../../compiler/plugin/nnengine/ge_config/"); | ||
| 412 | + std::string path_copy = path; | ||
| 413 | + path_copy.append("engine_conf_backup.json"); | ||
| 414 | + string cmd = "mkdir -p " + path; | ||
| 415 | + system(cmd.data()); | ||
| 416 | + path.append("engine_conf.json"); | ||
| 417 | + std::string backup_cmd = "cp " + path + " " + path_copy; | ||
| 418 | + system(backup_cmd.data()); | ||
| 419 | + std::ofstream ofs(path.c_str(), std::ios::out); | ||
| 420 | + ofs << "{\"schedule_units\":\"not_array\"}"; | ||
| 421 | + ofs.close(); | ||
| 422 | + EXPECT_EQ(instance.ParserJsonFile(), FAILED); | ||
| 423 | + std::string recover_cmd1 = "rm -rf " + path + ";mv " + path_copy + " " + path; | ||
| 424 | + system(recover_cmd1.data()); | ||
| 425 | +} | ||
| 426 | + | ||
| 427 | +TEST_F(UtestDnnengineManager, ParserJsonFileCalEnginesNull) { | ||
| 428 | + auto &instance = DNNEngineManager::GetInstance(); | ||
| 429 | + std::string path = GetModelPath(); | ||
| 430 | + path.append("../../../../compiler/plugin/nnengine/ge_config/"); | ||
| 431 | + std::string path_copy = path; | ||
| 432 | + path_copy.append("engine_conf_backup.json"); | ||
| 433 | + string cmd = "mkdir -p " + path; | ||
| 434 | + system(cmd.data()); | ||
| 435 | + path.append("engine_conf.json"); | ||
| 436 | + std::string backup_cmd = "cp " + path + " " + path_copy; | ||
| 437 | + system(backup_cmd.data()); | ||
| 438 | + std::ofstream ofs(path.c_str(), std::ios::out); | ||
| 439 | + ofs << "{\"schedule_units\":[{\"cal_engines\":null,\"id\":\"sch1\"}]}"; | ||
| 440 | + ofs.close(); | ||
| 441 | + EXPECT_EQ(instance.ParserJsonFile(), FAILED); | ||
| 442 | + std::string recover_cmd1 = "rm -rf " + path + ";mv " + path_copy + " " + path; | ||
| 443 | + system(recover_cmd1.data()); | ||
| 444 | +} | ||
| 445 | + | ||
| 446 | +TEST_F(UtestDnnengineManager, ParserJsonFileEngineIdNull) { | ||
| 447 | + auto &instance = DNNEngineManager::GetInstance(); | ||
| 448 | + std::string path = GetModelPath(); | ||
| 449 | + path.append("../../../../compiler/plugin/nnengine/ge_config/"); | ||
| 450 | + std::string path_copy = path; | ||
| 451 | + path_copy.append("engine_conf_backup.json"); | ||
| 452 | + string cmd = "mkdir -p " + path; | ||
| 453 | + system(cmd.data()); | ||
| 454 | + path.append("engine_conf.json"); | ||
| 455 | + std::string backup_cmd = "cp " + path + " " + path_copy; | ||
| 456 | + system(backup_cmd.data()); | ||
| 457 | + std::ofstream ofs(path.c_str(), std::ios::out); | ||
| 458 | + ofs << "{\"schedule_units\":[{\"cal_engines\":[{\"id\":\"\"}],\"id\":\"sch1\"}]}"; | ||
| 459 | + ofs.close(); | ||
| 460 | + EXPECT_EQ(instance.ParserJsonFile(), FAILED); | ||
| 461 | + std::string recover_cmd1 = "rm -rf " + path + ";mv " + path_copy + " " + path; | ||
| 462 | + system(recover_cmd1.data()); | ||
| 463 | +} | ||
| 464 | + | ||
| 465 | +TEST_F(UtestDnnengineManager, ParserJsonFileCalEnginesNotArray) { | ||
| 466 | + auto &instance = DNNEngineManager::GetInstance(); | ||
| 467 | + std::string path = GetModelPath(); | ||
| 468 | + path.append("../../../../compiler/plugin/nnengine/ge_config/"); | ||
| 469 | + std::string path_copy = path; | ||
| 470 | + path_copy.append("engine_conf_backup.json"); | ||
| 471 | + string cmd = "mkdir -p " + path; | ||
| 472 | + system(cmd.data()); | ||
| 473 | + path.append("engine_conf.json"); | ||
| 474 | + std::string backup_cmd = "cp " + path + " " + path_copy; | ||
| 475 | + system(backup_cmd.data()); | ||
| 476 | + std::ofstream ofs(path.c_str(), std::ios::out); | ||
| 477 | + ofs << "{\"schedule_units\":[{\"cal_engines\":\"not_array\",\"id\":\"sch1\"}]}"; | ||
| 478 | + ofs.close(); | ||
| 479 | + EXPECT_EQ(instance.ParserJsonFile(), FAILED); | ||
| 480 | + std::string recover_cmd1 = "rm -rf " + path + ";mv " + path_copy + " " + path; | ||
| 481 | + system(recover_cmd1.data()); | ||
| 482 | +} | ||
| 483 | + | ||
| 484 | +TEST_F(UtestDnnengineManager, CheckJsonFileWithDuplicateEngine) { | ||
| 485 | + auto &instance = DNNEngineManager::GetInstance(); | ||
| 486 | + instance.engines_map_["engine1"] = std::make_shared<DNNEngine>(); | ||
| 487 | + instance.schedulers_["sch1"] = SchedulerConf(); | ||
| 488 | + instance.schedulers_["sch1"].cal_engines["engine1"] = std::make_shared<EngineConf>(); | ||
| 489 | + instance.schedulers_["sch2"] = SchedulerConf(); | ||
| 490 | + instance.schedulers_["sch2"].cal_engines["engine1"] = std::make_shared<EngineConf>(); | ||
| 491 | + EXPECT_EQ(instance.CheckJsonFile(), FAILED); | ||
| 492 | +} | ||
| 493 | + | ||
| 494 | +TEST_F(UtestDnnengineManager, CheckJsonFileEngineNotFound) { | ||
| 495 | + auto &instance = DNNEngineManager::GetInstance(); | ||
| 496 | + instance.engines_map_["engine_not_in_json"] = std::make_shared<DNNEngine>(); | ||
| 497 | + instance.schedulers_["sch"] = SchedulerConf(); | ||
| 498 | + instance.schedulers_["sch"].cal_engines["other_engine"] = std::make_shared<EngineConf>(); | ||
| 499 | + EXPECT_EQ(instance.CheckJsonFile(), FAILED); | ||
| 500 | +} | ||
| 501 | + | ||
| 502 | +TEST_F(UtestDnnengineManager, InitAtomicCompositeMappingWithEngines) { | ||
| 503 | + auto &instance = DNNEngineManager::GetInstance(); | ||
| 504 | + instance.engines_map_["composite_engine"] = std::make_shared<DNNEngine>(); | ||
| 505 | + instance.engines_map_["atomic_engine"] = std::make_shared<DNNEngine>(); | ||
| 506 | + OpsKernelManager::GetInstance().composite_engines_["composite_engine"] = std::set<std::string>{"atomic_engine"}; | ||
| 507 | + EXPECT_NO_THROW(instance.InitAtomicCompositeMapping()); | ||
| 508 | + OpsKernelManager::GetInstance().composite_engines_.clear(); | ||
| 509 | + instance.engines_map_.clear(); | ||
| 510 | + instance.atomic_2_composite_.clear(); | ||
| 511 | +} | ||
| 512 | + | ||
| 513 | +TEST_F(UtestDnnengineManager, GetCompositeEngineWithSubgraph) { | ||
| 514 | + auto &instance = DNNEngineManager::GetInstance(); | ||
| 515 | + auto parent_graph = std::make_shared<ComputeGraph>("parent_graph"); | ||
| 516 | + auto sub_graph = std::make_shared<ComputeGraph>("sub_graph"); | ||
| 517 | + auto parent_node = UtAddNode(parent_graph, "partitioned_call", "PartitionedCall", 1, 1); | ||
| 518 | + auto sub_node = UtAddNode(sub_graph, "sub_data", "DATA", 0, 1); | ||
| 519 | + sub_graph->SetParentGraph(parent_graph); | ||
| 520 | + sub_graph->SetParentNode(parent_node); | ||
| 521 | + parent_node->GetOpDesc()->AddSubgraphName(sub_graph->GetName()); | ||
| 522 | + parent_node->GetOpDesc()->SetSubgraphInstanceName(0, sub_graph->GetName()); | ||
| 523 | + parent_graph->AddSubGraph(sub_graph); | ||
| 524 | + OpsKernelManager::GetInstance().composite_engines_["com"] = std::set<std::string>{"engine1"}; | ||
| 525 | + OpsKernelManager::GetInstance().composite_engine_kernel_lib_names_["com"] = "kernel_lib"; | ||
| 526 | + EXPECT_EQ(instance.GetCompositeEngineName(parent_node, 1), ""); | ||
| 527 | + OpsKernelManager::GetInstance().composite_engines_.clear(); | ||
| 528 | + OpsKernelManager::GetInstance().composite_engine_kernel_lib_names_.clear(); | ||
| 529 | +} | ||
| 530 | + | ||
| 531 | +TEST_F(UtestDnnengineManager, IsStreamAssignSkip) { | ||
| 532 | + auto &instance = DNNEngineManager::GetInstance(); | ||
| 533 | + instance.schedulers_["sch"] = SchedulerConf(); | ||
| 534 | + instance.schedulers_["sch"].cal_engines["engine1"] = std::make_shared<EngineConf>(); | ||
| 535 | + instance.schedulers_["sch"].cal_engines["engine1"]->skip_assign_stream = true; | ||
| 536 | + EXPECT_EQ(instance.IsStreamAssignSkip("engine1"), true); | ||
| 537 | + EXPECT_EQ(instance.IsStreamAssignSkip("nonexistent_engine"), false); | ||
| 538 | + instance.schedulers_.clear(); | ||
| 539 | +} | ||
| 540 | + | ||
| 541 | +TEST_F(UtestDnnengineManager, GetEngineAndEngineInfo) { | ||
| 542 | + auto &instance = DNNEngineManager::GetInstance(); | ||
| 543 | + auto engine = std::make_shared<DNNEngine>(); | ||
| 544 | + instance.engines_map_["test_engine"] = engine; | ||
| 545 | + EXPECT_EQ(instance.GetEngine("test_engine"), engine); | ||
| 546 | + EXPECT_EQ(instance.GetEngine("nonexistent"), nullptr); | ||
| 547 | + instance.engines_map_.clear(); | ||
| 548 | +} | ||
| 329 | } // namespace ge | 549 | } // namespace ge |
| @@ -697,4 +697,115 @@ TEST_F(UTEST_dump_exception, Clear_Empty_CovEnhance) { | |||
| 697 | ExceptionDumper exception_dumper; | 697 | ExceptionDumper exception_dumper; |
| 698 | EXPECT_NO_THROW(exception_dumper.Clear()); | 698 | EXPECT_NO_THROW(exception_dumper.Clear()); |
| 699 | } | 699 | } |
| 700 | + | ||
| 701 | +TEST_F(UTEST_dump_exception, DumpNodeInfo_ReplaceStringElem_CovEnhance) { | ||
| 702 | + ASSERT_TRUE(ge::CreateDirectory(temp_dump_path_) == 0); | ||
| 703 | + ge::DumpProperties dump_properties; | ||
| 704 | + dump_properties.AddPropertyValue("ALL_MODEL_NEED_DUMP_AND_IT_IS_NOT_A_MODEL_NAME", {"test"}); | ||
| 705 | + dump_properties.SetDumpMode("all"); | ||
| 706 | + | ||
| 707 | + OpDescInfo op_desc_info; | ||
| 708 | + op_desc_info.op_name = "test.op name"; | ||
| 709 | + op_desc_info.op_type = "test/type\\type"; | ||
| 710 | + op_desc_info.id.task_id = 1; | ||
| 711 | + op_desc_info.id.stream_id = 2; | ||
| 712 | + op_desc_info.input_format = {FORMAT_NCHW}; | ||
| 713 | + op_desc_info.input_shape = {{1}}; | ||
| 714 | + op_desc_info.input_data_type = {DT_FLOAT}; | ||
| 715 | + op_desc_info.input_addrs = {nullptr}; | ||
| 716 | + op_desc_info.input_size = {2}; | ||
| 717 | + op_desc_info.output_format = {FORMAT_NCHW}; | ||
| 718 | + op_desc_info.output_shape = {{1}}; | ||
| 719 | + op_desc_info.output_data_type = {DT_FLOAT}; | ||
| 720 | + op_desc_info.output_addrs = {nullptr}; | ||
| 721 | + op_desc_info.output_size = {2}; | ||
| 722 | + ExceptionDumper exception_dumper; | ||
| 723 | + EXPECT_EQ(exception_dumper.DumpNodeInfo(op_desc_info, temp_dump_path_, false, false, dump_properties), ge::SUCCESS); | ||
| 724 | +} | ||
| 725 | + | ||
| 726 | +TEST_F(UTEST_dump_exception, RefreshAddrs_Success_WithRelevantOffset_CovEnhance) { | ||
| 727 | + ExceptionDumper exception_dumper; | ||
| 728 | + OpDescPtr op_desc = std::make_shared<OpDesc>("TestOp", "TestType"); | ||
| 729 | + ExtraOpInfo extra_op_info; | ||
| 730 | + extra_op_info.is_host_args = false; | ||
| 731 | + std::vector<uint8_t> args_data(32, 0); | ||
| 732 | + extra_op_info.args = reinterpret_cast<uintptr_t>(args_data.data()); | ||
| 733 | + extra_op_info.input_addrs = {reinterpret_cast<void *>(5000), reinterpret_cast<void *>(6000)}; | ||
| 734 | + extra_op_info.output_addrs = {reinterpret_cast<void *>(7000)}; | ||
| 735 | + extra_op_info.cust_to_relevant_offset_ = {{0, 1}}; | ||
| 736 | + ge::OpDescInfoId id(40, 50, 0); | ||
| 737 | + exception_dumper.SaveDumpOpInfo(op_desc, extra_op_info, id, false); | ||
| 738 | + gert::GertRuntimeStub runtime_stub; | ||
| 739 | + OpDescInfo result; | ||
| 740 | + EXPECT_TRUE(exception_dumper.GetOpDescInfo(id, result)); | ||
| 741 | +} | ||
| 742 | + | ||
| 743 | +TEST_F(UTEST_dump_exception, DumpNodeInfo_WorkspaceNullAddr_CovEnhance) { | ||
| 744 | + ASSERT_TRUE(ge::CreateDirectory(temp_dump_path_) == 0); | ||
| 745 | + ge::DumpProperties dump_properties; | ||
| 746 | + dump_properties.AddPropertyValue("ALL_MODEL_NEED_DUMP_AND_IT_IS_NOT_A_MODEL_NAME", {"test"}); | ||
| 747 | + dump_properties.SetDumpMode("all"); | ||
| 748 | + | ||
| 749 | + OpDescInfo op_desc_info; | ||
| 750 | + op_desc_info.op_name = "Save"; | ||
| 751 | + op_desc_info.op_type = "Save"; | ||
| 752 | + op_desc_info.id.task_id = 1; | ||
| 753 | + op_desc_info.id.stream_id = 2; | ||
| 754 | + op_desc_info.input_format = {FORMAT_NCHW}; | ||
| 755 | + op_desc_info.input_shape = {{1}}; | ||
| 756 | + op_desc_info.input_data_type = {DT_FLOAT}; | ||
| 757 | + op_desc_info.input_addrs = {nullptr}; | ||
| 758 | + op_desc_info.input_size = {2}; | ||
| 759 | + op_desc_info.output_format = {FORMAT_NCHW}; | ||
| 760 | + op_desc_info.output_shape = {{1}}; | ||
| 761 | + op_desc_info.output_data_type = {DT_FLOAT}; | ||
| 762 | + op_desc_info.output_addrs = {nullptr}; | ||
| 763 | + op_desc_info.output_size = {2}; | ||
| 764 | + op_desc_info.space_addrs = {nullptr}; | ||
| 765 | + op_desc_info.workspace_bytes = {8}; | ||
| 766 | + ExceptionDumper exception_dumper; | ||
| 767 | + EXPECT_EQ(exception_dumper.DumpNodeInfo(op_desc_info, temp_dump_path_, false, false, dump_properties), ge::SUCCESS); | ||
| 768 | +} | ||
| 769 | + | ||
| 770 | +TEST_F(UTEST_dump_exception, LogExceptionArgs_MallocHostFail_CovEnhance) { | ||
| 771 | + OpDescInfo op_desc_info; | ||
| 772 | + op_desc_info.args_size = 123U; | ||
| 773 | + op_desc_info.is_host_args = false; | ||
| 774 | + ExceptionDumper exception_dumper{}; | ||
| 775 | + EXPECT_NO_THROW(exception_dumper.LogExceptionArgs(op_desc_info)); | ||
| 776 | +} | ||
| 777 | + | ||
| 778 | +TEST_F(UTEST_dump_exception, LogExceptionArgs_MemcpyFail_CovEnhance) { | ||
| 779 | + OpDescInfo op_desc_info; | ||
| 780 | + auto args_holder = std::unique_ptr<uint8_t[]>(new uint8_t[64]); | ||
| 781 | + op_desc_info.args = reinterpret_cast<uintptr_t>(args_holder.get()); | ||
| 782 | + op_desc_info.args_size = 64U; | ||
| 783 | + op_desc_info.is_host_args = false; | ||
| 784 | + ExceptionDumper exception_dumper{}; | ||
| 785 | + mmSetEnv("CONSTANT_FOLDING_PASS", "mock_fail", 1); | ||
| 786 | + EXPECT_NO_THROW(exception_dumper.LogExceptionArgs(op_desc_info)); | ||
| 787 | + unsetenv("CONSTANT_FOLDING_PASS"); | ||
| 788 | +} | ||
| 789 | + | ||
| 790 | +TEST_F(UTEST_dump_exception, LogExceptionTvmOpInfo_RealPath_CovEnhance) { | ||
| 791 | + OpDescInfo op_desc_info; | ||
| 792 | + op_desc_info.op_name = "TestOp"; | ||
| 793 | + op_desc_info.op_type = "TestType"; | ||
| 794 | + op_desc_info.imply_type = static_cast<uint32_t>(domi::ImplyType::TVM); | ||
| 795 | + op_desc_info.input_format = {FORMAT_NCHW}; | ||
| 796 | + op_desc_info.input_shape = {{1}}; | ||
| 797 | + op_desc_info.input_data_type = {DT_FLOAT}; | ||
| 798 | + op_desc_info.input_addrs = {reinterpret_cast<void *>(5000)}; | ||
| 799 | + op_desc_info.output_format = {FORMAT_NCHW}; | ||
| 800 | + op_desc_info.output_shape = {{1}}; | ||
| 801 | + op_desc_info.output_data_type = {DT_FLOAT}; | ||
| 802 | + op_desc_info.output_addrs = {reinterpret_cast<void *>(6000)}; | ||
| 803 | + op_desc_info.op_file_path = "."; | ||
| 804 | + op_desc_info.dev_func = "test_kernel__0"; | ||
| 805 | + ExceptionDumper exception_dumper{}; | ||
| 806 | + gert::GertRuntimeStub runtime_stub; | ||
| 807 | + dlog_setlevel(GE_MODULE_NAME, DLOG_INFO, 0); | ||
| 808 | + EXPECT_NO_THROW(exception_dumper.LogExceptionTvmOpInfo(op_desc_info)); | ||
| 809 | + dlog_setlevel(GE_MODULE_NAME, DLOG_ERROR, 0); | ||
| 810 | +} | ||
| 700 | } // namespace ge | 811 | } // namespace ge |
| @@ -827,5 +827,26 @@ TEST_F(UTEST_FormatTransferNc1hwc0ToNchw, invalid_src_data_type) { | |||
| 827 | FormatTransferNc1hwc0Nchw transfer; | 827 | FormatTransferNc1hwc0Nchw transfer; |
| 828 | EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_DATATYPE_INVALID); | 828 | EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_DATATYPE_INVALID); |
| 829 | } | 829 | } |
| 830 | +TEST_F(UTEST_FormatTransferNc1hwc0ToNchw, nc1hwc0_to_nchw_zero_size) { | ||
| 831 | + uint16_t data[1] = {0}; | ||
| 832 | + const Format src_format = static_cast<Format>(GetFormatFromSubAndC0(FORMAT_NC1HWC0, FORMAT_RESERVED, 5)); | ||
| 833 | + const Format dst_format = static_cast<Format>(GetFormatFromSubAndC0(FORMAT_NCHW, FORMAT_RESERVED, 5)); | ||
| 834 | + TransArgs args{reinterpret_cast<uint8_t *>(data), | ||
| 835 | + src_format, | ||
| 836 | + dst_format, | ||
| 837 | + FORMAT_NC1HWC0, | ||
| 838 | + FORMAT_NCHW, | ||
| 839 | + FORMAT_RESERVED, | ||
| 840 | + FORMAT_RESERVED, | ||
| 841 | + 16, | ||
| 842 | + 16, | ||
| 843 | + {0, 1, 1, 1, 16}, | ||
| 844 | + {0, 16, 1, 1}, | ||
| 845 | + DT_FLOAT16}; | ||
| 846 | + TransResult result; | ||
| 847 | + FormatTransferNc1hwc0Nchw transfer; | ||
| 848 | + EXPECT_EQ(transfer.TransFormat(args, result), SUCCESS); | ||
| 849 | + EXPECT_EQ(result.length, 0U); | ||
| 850 | +} | ||
| 830 | } // namespace formats | 851 | } // namespace formats |
| 831 | } // namespace ge | 852 | } // namespace ge |
| @@ -957,5 +957,26 @@ TEST_F(UtestFormatTransfer5dNhwc, invalid_src_dst_shape_relation) { | |||
| 957 | FormatTransferNc1hwc0Nhwc transfer; | 957 | FormatTransferNc1hwc0Nhwc transfer; |
| 958 | EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_SHAPE_INVALID); | 958 | EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_SHAPE_INVALID); |
| 959 | } | 959 | } |
| 960 | +TEST_F(UtestFormatTransfer5dNhwc, nc1hwc0_to_nhwc_zero_size) { | ||
| 961 | + uint16_t data[1] = {0}; | ||
| 962 | + const Format src_format = static_cast<Format>(GetFormatFromSubAndC0(FORMAT_NC1HWC0, FORMAT_RESERVED, 5)); | ||
| 963 | + const Format dst_format = static_cast<Format>(GetFormatFromSubAndC0(FORMAT_NHWC, FORMAT_RESERVED, 5)); | ||
| 964 | + TransArgs args{reinterpret_cast<uint8_t *>(data), | ||
| 965 | + src_format, | ||
| 966 | + dst_format, | ||
| 967 | + FORMAT_NC1HWC0, | ||
| 968 | + FORMAT_NHWC, | ||
| 969 | + FORMAT_RESERVED, | ||
| 970 | + FORMAT_RESERVED, | ||
| 971 | + 16, | ||
| 972 | + 16, | ||
| 973 | + {0, 1, 1, 1, 16}, | ||
| 974 | + {0, 1, 1, 16}, | ||
| 975 | + DT_FLOAT16}; | ||
| 976 | + TransResult result; | ||
| 977 | + FormatTransferNc1hwc0Nhwc transfer; | ||
| 978 | + EXPECT_EQ(transfer.TransFormat(args, result), SUCCESS); | ||
| 979 | + EXPECT_EQ(result.length, 0U); | ||
| 980 | +} | ||
| 960 | } // namespace formats | 981 | } // namespace formats |
| 961 | } // namespace ge | 982 | } // namespace ge |
| @@ -7421,5 +7421,112 @@ TEST_F(UtestFormatTransferNdFractNz, nd_shape1_trans_shape_ndz_to_nd) { | |||
| 7421 | EXPECT_EQ(transfer.TransShape(src_format, {1, 1, 16, 16}, DT_FLOAT16, dst_format, dst_shape), | 7421 | EXPECT_EQ(transfer.TransShape(src_format, {1, 1, 16, 16}, DT_FLOAT16, dst_format, dst_shape), |
| 7422 | ACL_ERROR_GE_FORMAT_INVALID); | 7422 | ACL_ERROR_GE_FORMAT_INVALID); |
| 7423 | } | 7423 | } |
| 7424 | +TEST_F(UtestFormatTransferNdFractNz, nd_shape1_zero_size) { | ||
| 7425 | + uint16_t data[1] = {0}; | ||
| 7426 | + const Format src_format = static_cast<Format>(GetFormatFromSubAndC0(FORMAT_ND, FORMAT_RESERVED, 5)); | ||
| 7427 | + const Format dst_format = static_cast<Format>(GetFormatFromSubAndC0(FORMAT_FRACTAL_NZ, FORMAT_RESERVED, 5)); | ||
| 7428 | + TransArgs args{reinterpret_cast<uint8_t *>(data), | ||
| 7429 | + src_format, | ||
| 7430 | + dst_format, | ||
| 7431 | + FORMAT_ND, | ||
| 7432 | + FORMAT_FRACTAL_NZ, | ||
| 7433 | + FORMAT_RESERVED, | ||
| 7434 | + FORMAT_RESERVED, | ||
| 7435 | + 16, | ||
| 7436 | + 16, | ||
| 7437 | + {0}, | ||
| 7438 | + {0, 1, 16, 16}, | ||
| 7439 | + DT_FLOAT16}; | ||
| 7440 | + TransResult result; | ||
| 7441 | + FormatTransferFractalNz transfer; | ||
| 7442 | + EXPECT_EQ(transfer.TransFormat(args, result), SUCCESS); | ||
| 7443 | + EXPECT_EQ(result.length, 0U); | ||
| 7444 | +} | ||
| 7445 | + | ||
| 7446 | +TEST_F(UtestFormatTransferNdFractNz, nd_shape1_zero_size_reverse) { | ||
| 7447 | + uint16_t data[1] = {0}; | ||
| 7448 | + const Format src_format = static_cast<Format>(GetFormatFromSubAndC0(FORMAT_FRACTAL_NZ, FORMAT_RESERVED, 5)); | ||
| 7449 | + const Format dst_format = static_cast<Format>(GetFormatFromSubAndC0(FORMAT_ND, FORMAT_RESERVED, 5)); | ||
| 7450 | + TransArgs args{reinterpret_cast<uint8_t *>(data), | ||
| 7451 | + src_format, | ||
| 7452 | + dst_format, | ||
| 7453 | + FORMAT_FRACTAL_NZ, | ||
| 7454 | + FORMAT_ND, | ||
| 7455 | + FORMAT_RESERVED, | ||
| 7456 | + FORMAT_RESERVED, | ||
| 7457 | + 16, | ||
| 7458 | + 16, | ||
| 7459 | + {0, 1, 16, 16}, | ||
| 7460 | + {0}, | ||
| 7461 | + DT_FLOAT16}; | ||
| 7462 | + TransResult result; | ||
| 7463 | + FormatTransferFractalNzND transfer; | ||
| 7464 | + EXPECT_EQ(transfer.TransFormat(args, result), SUCCESS); | ||
| 7465 | + EXPECT_EQ(result.length, 0U); | ||
| 7466 | +} | ||
| 7467 | + | ||
| 7468 | +TEST_F(UtestFormatTransferNdFractNz, nd_shape1_overflow_trans_shape) { | ||
| 7469 | + const int64_t kMaxShapeItem = 1099511627776LL; | ||
| 7470 | + const Format src_format = static_cast<Format>(GetFormatFromSubAndC0(FORMAT_ND, FORMAT_RESERVED, 5)); | ||
| 7471 | + const Format dst_format = static_cast<Format>(GetFormatFromSubAndC0(FORMAT_FRACTAL_NZ, FORMAT_RESERVED, 5)); | ||
| 7472 | + std::vector<int64_t> dst_shape; | ||
| 7473 | + FormatTransferFractalNz transfer; | ||
| 7474 | + EXPECT_EQ(transfer.TransShape(src_format, {kMaxShapeItem}, DT_FLOAT16, dst_format, dst_shape), | ||
| 7475 | + ACL_ERROR_GE_SHAPE_INVALID); | ||
| 7476 | +} | ||
| 7477 | + | ||
| 7478 | +TEST_F(UtestFormatTransferNdFractNz, nd_shape2_overflow_trans_shape) { | ||
| 7479 | + const int64_t kMaxShapeItem = 1099511627776LL; | ||
| 7480 | + const Format src_format = static_cast<Format>(GetFormatFromSubAndC0(FORMAT_ND, FORMAT_RESERVED, 5)); | ||
| 7481 | + const Format dst_format = static_cast<Format>(GetFormatFromSubAndC0(FORMAT_FRACTAL_NZ, FORMAT_RESERVED, 5)); | ||
| 7482 | + std::vector<int64_t> dst_shape; | ||
| 7483 | + FormatTransferFractalNz transfer; | ||
| 7484 | + EXPECT_EQ(transfer.TransShape(src_format, {1, kMaxShapeItem}, DT_FLOAT16, dst_format, dst_shape), | ||
| 7485 | + ACL_ERROR_GE_SHAPE_INVALID); | ||
| 7486 | +} | ||
| 7487 | + | ||
| 7488 | +TEST_F(UtestFormatTransferNdFractNz, nd_shape1_overflow_trans_format) { | ||
| 7489 | + uint16_t data[1] = {0}; | ||
| 7490 | + const int64_t kMaxShapeItem = 1099511627776LL; | ||
| 7491 | + const Format src_format = static_cast<Format>(GetFormatFromSubAndC0(FORMAT_ND, FORMAT_RESERVED, 5)); | ||
| 7492 | + const Format dst_format = static_cast<Format>(GetFormatFromSubAndC0(FORMAT_FRACTAL_NZ, FORMAT_RESERVED, 5)); | ||
| 7493 | + TransArgs args{reinterpret_cast<uint8_t *>(data), | ||
| 7494 | + src_format, | ||
| 7495 | + dst_format, | ||
| 7496 | + FORMAT_ND, | ||
| 7497 | + FORMAT_FRACTAL_NZ, | ||
| 7498 | + FORMAT_RESERVED, | ||
| 7499 | + FORMAT_RESERVED, | ||
| 7500 | + 16, | ||
| 7501 | + 16, | ||
| 7502 | + {kMaxShapeItem}, | ||
| 7503 | + {1, 1, 16, 16}, | ||
| 7504 | + DT_FLOAT16}; | ||
| 7505 | + TransResult result; | ||
| 7506 | + FormatTransferFractalNz transfer; | ||
| 7507 | + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_SHAPE_INVALID); | ||
| 7508 | +} | ||
| 7509 | + | ||
| 7510 | +TEST_F(UtestFormatTransferNdFractNz, nd_reverse_overflow_dst_shape) { | ||
| 7511 | + uint16_t data[1] = {0}; | ||
| 7512 | + const int64_t kMaxShapeItem = 1099511627776LL; | ||
| 7513 | + const Format src_format = static_cast<Format>(GetFormatFromSubAndC0(FORMAT_FRACTAL_NZ, FORMAT_RESERVED, 5)); | ||
| 7514 | + const Format dst_format = static_cast<Format>(GetFormatFromSubAndC0(FORMAT_ND, FORMAT_RESERVED, 5)); | ||
| 7515 | + TransArgs args{reinterpret_cast<uint8_t *>(data), | ||
| 7516 | + src_format, | ||
| 7517 | + dst_format, | ||
| 7518 | + FORMAT_FRACTAL_NZ, | ||
| 7519 | + FORMAT_ND, | ||
| 7520 | + FORMAT_RESERVED, | ||
| 7521 | + FORMAT_RESERVED, | ||
| 7522 | + 16, | ||
| 7523 | + 16, | ||
| 7524 | + {1, 1, 16, 16}, | ||
| 7525 | + {kMaxShapeItem}, | ||
| 7526 | + DT_FLOAT16}; | ||
| 7527 | + TransResult result; | ||
| 7528 | + FormatTransferFractalNzND transfer; | ||
| 7529 | + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_SHAPE_INVALID); | ||
| 7530 | +} | ||
| 7424 | } // namespace formats | 7531 | } // namespace formats |
| 7425 | } // namespace ge | 7532 | } // namespace ge |
| @@ -8698,5 +8698,80 @@ TEST_F(UtestFormatTransferNdFractZz, nd_trans_shape_fzz_to_nd_invalid) { | |||
| 8698 | EXPECT_EQ(transfer.TransShape(src_format, {1, 1, 32, 32}, DT_UINT8, dst_format, dst_shape), | 8698 | EXPECT_EQ(transfer.TransShape(src_format, {1, 1, 32, 32}, DT_UINT8, dst_format, dst_shape), |
| 8699 | ACL_ERROR_GE_FORMAT_INVALID); | 8699 | ACL_ERROR_GE_FORMAT_INVALID); |
| 8700 | } | 8700 | } |
| 8701 | +TEST_F(UtestFormatTransferNdFractZz, nd_shape1_zero_size) { | ||
| 8702 | + uint16_t data[1] = {0}; | ||
| 8703 | + const Format src_format = static_cast<Format>(GetFormatFromSubAndC0(FORMAT_ND, FORMAT_RESERVED, 5)); | ||
| 8704 | + const Format dst_format = static_cast<Format>(GetFormatFromSubAndC0(FORMAT_FRACTAL_ZZ, FORMAT_RESERVED, 5)); | ||
| 8705 | + TransArgs args{reinterpret_cast<uint8_t *>(data), | ||
| 8706 | + src_format, | ||
| 8707 | + dst_format, | ||
| 8708 | + FORMAT_ND, | ||
| 8709 | + FORMAT_FRACTAL_ZZ, | ||
| 8710 | + FORMAT_RESERVED, | ||
| 8711 | + FORMAT_RESERVED, | ||
| 8712 | + 16, | ||
| 8713 | + 16, | ||
| 8714 | + {0}, | ||
| 8715 | + {1, 0, 16, 16}, | ||
| 8716 | + DT_FLOAT16}; | ||
| 8717 | + TransResult result; | ||
| 8718 | + FormatTransferFractalZz transfer; | ||
| 8719 | + EXPECT_EQ(transfer.TransFormat(args, result), SUCCESS); | ||
| 8720 | + EXPECT_EQ(result.length, 0U); | ||
| 8721 | +} | ||
| 8722 | + | ||
| 8723 | +TEST_F(UtestFormatTransferNdFractZz, nd_shape1_zero_size_reverse) { | ||
| 8724 | + uint16_t data[1] = {0}; | ||
| 8725 | + const Format src_format = static_cast<Format>(GetFormatFromSubAndC0(FORMAT_FRACTAL_ZZ, FORMAT_RESERVED, 5)); | ||
| 8726 | + const Format dst_format = static_cast<Format>(GetFormatFromSubAndC0(FORMAT_ND, FORMAT_RESERVED, 5)); | ||
| 8727 | + TransArgs args{reinterpret_cast<uint8_t *>(data), | ||
| 8728 | + src_format, | ||
| 8729 | + dst_format, | ||
| 8730 | + FORMAT_FRACTAL_ZZ, | ||
| 8731 | + FORMAT_ND, | ||
| 8732 | + FORMAT_RESERVED, | ||
| 8733 | + FORMAT_RESERVED, | ||
| 8734 | + 16, | ||
| 8735 | + 16, | ||
| 8736 | + {1, 0, 16, 16}, | ||
| 8737 | + {0}, | ||
| 8738 | + DT_FLOAT16}; | ||
| 8739 | + TransResult result; | ||
| 8740 | + FormatTransferFractalZzND transfer; | ||
| 8741 | + EXPECT_EQ(transfer.TransFormat(args, result), SUCCESS); | ||
| 8742 | + EXPECT_EQ(result.length, 0U); | ||
| 8743 | +} | ||
| 8744 | + | ||
| 8745 | +TEST_F(UtestFormatTransferNdFractZz, nd_shape1_overflow_trans_shape) { | ||
| 8746 | + const int64_t kMaxShapeItem = 1099511627776LL; | ||
| 8747 | + const Format src_format = static_cast<Format>(GetFormatFromSubAndC0(FORMAT_ND, FORMAT_RESERVED, 5)); | ||
| 8748 | + const Format dst_format = static_cast<Format>(GetFormatFromSubAndC0(FORMAT_FRACTAL_ZZ, FORMAT_RESERVED, 5)); | ||
| 8749 | + std::vector<int64_t> dst_shape; | ||
| 8750 | + FormatTransferFractalZz transfer; | ||
| 8751 | + EXPECT_EQ(transfer.TransShape(src_format, {kMaxShapeItem}, DT_FLOAT16, dst_format, dst_shape), | ||
| 8752 | + ACL_ERROR_GE_SHAPE_INVALID); | ||
| 8753 | +} | ||
| 8754 | + | ||
| 8755 | +TEST_F(UtestFormatTransferNdFractZz, nd_reverse_overflow_dst_shape) { | ||
| 8756 | + uint16_t data[1] = {0}; | ||
| 8757 | + const int64_t kMaxShapeItem = 1099511627776LL; | ||
| 8758 | + const Format src_format = static_cast<Format>(GetFormatFromSubAndC0(FORMAT_FRACTAL_ZZ, FORMAT_RESERVED, 5)); | ||
| 8759 | + const Format dst_format = static_cast<Format>(GetFormatFromSubAndC0(FORMAT_ND, FORMAT_RESERVED, 5)); | ||
| 8760 | + TransArgs args{reinterpret_cast<uint8_t *>(data), | ||
| 8761 | + src_format, | ||
| 8762 | + dst_format, | ||
| 8763 | + FORMAT_FRACTAL_ZZ, | ||
| 8764 | + FORMAT_ND, | ||
| 8765 | + FORMAT_RESERVED, | ||
| 8766 | + FORMAT_RESERVED, | ||
| 8767 | + 16, | ||
| 8768 | + 16, | ||
| 8769 | + {1, 1, 16, 16}, | ||
| 8770 | + {kMaxShapeItem}, | ||
| 8771 | + DT_FLOAT16}; | ||
| 8772 | + TransResult result; | ||
| 8773 | + FormatTransferFractalZzND transfer; | ||
| 8774 | + EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_SHAPE_INVALID); | ||
| 8775 | +} | ||
| 8701 | } // namespace formats | 8776 | } // namespace formats |
| 8702 | } // namespace ge | 8777 | } // namespace ge |
| @@ -3863,5 +3863,14 @@ TEST_F(UtestFormatTransfer4DToFZC04, nchw_to_fzc04_empty_tensor) { | |||
| 3863 | FormatTransfer4DToFZC04 transfer; | 3863 | FormatTransfer4DToFZC04 transfer; |
| 3864 | EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_SHAPE_INVALID); | 3864 | EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_SHAPE_INVALID); |
| 3865 | } | 3865 | } |
| 3866 | +TEST_F(UtestFormatTransfer4DToFZC04, nchw_to_fzc04_overflow_trans_shape) { | ||
| 3867 | + const int64_t kMaxShapeItem = 1099511627776LL; | ||
| 3868 | + const Format src_format = static_cast<Format>(GetFormatFromSubAndC0(FORMAT_NCHW, FORMAT_RESERVED, 5)); | ||
| 3869 | + const Format dst_format = static_cast<Format>(GetFormatFromSubAndC0(FORMAT_FRACTAL_Z_C04, FORMAT_RESERVED, 5)); | ||
| 3870 | + std::vector<int64_t> dst_shape; | ||
| 3871 | + FormatTransfer4DToFZC04 transfer; | ||
| 3872 | + EXPECT_EQ(transfer.TransShape(src_format, {kMaxShapeItem, 1, 1, 1}, DT_FLOAT16, dst_format, dst_shape), | ||
| 3873 | + ACL_ERROR_GE_SHAPE_INVALID); | ||
| 3874 | +} | ||
| 3866 | } // namespace formats | 3875 | } // namespace formats |
| 3867 | } // namespace ge | 3876 | } // namespace ge |
| @@ -13979,5 +13979,26 @@ TEST_F(UtestFormatTransferHwcnC1hwncoc0, invalid_dst_shape_trans_shape_mismatch) | |||
| 13979 | EXPECT_EQ(transfer.TransShape(FORMAT_HWCN, {1, 1, 1, 1}, DT_FLOAT, FORMAT_C1HWNCoC0, dst_shape), | 13979 | EXPECT_EQ(transfer.TransShape(FORMAT_HWCN, {1, 1, 1, 1}, DT_FLOAT, FORMAT_C1HWNCoC0, dst_shape), |
| 13980 | ACL_ERROR_GE_SHAPE_INVALID); | 13980 | ACL_ERROR_GE_SHAPE_INVALID); |
| 13981 | } | 13981 | } |
| 13982 | +TEST_F(UtestFormatTransferHwcnC1hwncoc0, hwcn_to_c1hwncoc0_zero_size) { | ||
| 13983 | + uint16_t data[1] = {0}; | ||
| 13984 | + const Format src_format = static_cast<Format>(GetFormatFromSubAndC0(FORMAT_HWCN, FORMAT_RESERVED, 5)); | ||
| 13985 | + const Format dst_format = static_cast<Format>(GetFormatFromSubAndC0(FORMAT_C1HWNCoC0, FORMAT_RESERVED, 5)); | ||
| 13986 | + TransArgs args{reinterpret_cast<uint8_t *>(data), | ||
| 13987 | + src_format, | ||
| 13988 | + dst_format, | ||
| 13989 | + FORMAT_HWCN, | ||
| 13990 | + FORMAT_C1HWNCoC0, | ||
| 13991 | + FORMAT_RESERVED, | ||
| 13992 | + FORMAT_RESERVED, | ||
| 13993 | + 16, | ||
| 13994 | + 16, | ||
| 13995 | + {1, 1, 16, 0}, | ||
| 13996 | + {1, 1, 1, 0, 16, 16}, | ||
| 13997 | + DT_FLOAT16}; | ||
| 13998 | + TransResult result; | ||
| 13999 | + FormatTransferHwcnC1hwncoc0 transfer; | ||
| 14000 | + EXPECT_EQ(transfer.TransFormat(args, result), SUCCESS); | ||
| 14001 | + EXPECT_EQ(result.length, 0U); | ||
| 14002 | +} | ||
| 13982 | } // namespace formats | 14003 | } // namespace formats |
| 13983 | } // namespace ge | 14004 | } // namespace ge |
| @@ -34820,5 +34820,25 @@ TEST_F(UtestFormatTransferHwcnFz, unsupported_format_trans_format) { | |||
| 34820 | FormatTransferFractalZ transfer; | 34820 | FormatTransferFractalZ transfer; |
| 34821 | EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_FORMAT_INVALID); | 34821 | EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_FORMAT_INVALID); |
| 34822 | } | 34822 | } |
| 34823 | +TEST_F(UtestFormatTransferHwcnFz, hwcn_to_fz_zero_size) { | ||
| 34824 | + uint16_t data[1] = {0}; | ||
| 34825 | + const Format src_format = static_cast<Format>(GetFormatFromSubAndC0(FORMAT_HWCN, FORMAT_RESERVED, 5)); | ||
| 34826 | + const Format dst_format = static_cast<Format>(GetFormatFromSubAndC0(FORMAT_FRACTAL_Z, FORMAT_RESERVED, 5)); | ||
| 34827 | + TransArgs args{reinterpret_cast<uint8_t *>(data), | ||
| 34828 | + src_format, | ||
| 34829 | + dst_format, | ||
| 34830 | + FORMAT_HWCN, | ||
| 34831 | + FORMAT_FRACTAL_Z, | ||
| 34832 | + FORMAT_RESERVED, | ||
| 34833 | + FORMAT_RESERVED, | ||
| 34834 | + 16, | ||
| 34835 | + 16, | ||
| 34836 | + {1, 1, 16, 0}, | ||
| 34837 | + {1, 0, 16, 16}, | ||
| 34838 | + DT_FLOAT16}; | ||
| 34839 | + TransResult result; | ||
| 34840 | + FormatTransferFractalZ transfer; | ||
| 34841 | + EXPECT_NE(transfer.TransFormat(args, result), SUCCESS); | ||
| 34842 | +} | ||
| 34823 | } // namespace formats | 34843 | } // namespace formats |
| 34824 | } // namespace ge | 34844 | } // namespace ge |
| @@ -848,5 +848,14 @@ TEST_F(UtestFormatTransferNchw5d, invalid_src_shape_trans_shape) { | |||
| 848 | std::vector<int64_t> dst_shape; | 848 | std::vector<int64_t> dst_shape; |
| 849 | EXPECT_EQ(transfer.TransShape(FORMAT_NCHW, {1, 1}, DT_FLOAT, FORMAT_NC1HWC0, dst_shape), ACL_ERROR_GE_SHAPE_INVALID); | 849 | EXPECT_EQ(transfer.TransShape(FORMAT_NCHW, {1, 1}, DT_FLOAT, FORMAT_NC1HWC0, dst_shape), ACL_ERROR_GE_SHAPE_INVALID); |
| 850 | } | 850 | } |
| 851 | +TEST_F(UtestFormatTransferNchw5d, nchw_to_nc1hwc0_overflow_trans_shape) { | ||
| 852 | + const int64_t kMaxShapeItem = 1099511627776LL; | ||
| 853 | + const Format src_format = static_cast<Format>(GetFormatFromSubAndC0(FORMAT_NCHW, FORMAT_RESERVED, 5)); | ||
| 854 | + const Format dst_format = static_cast<Format>(GetFormatFromSubAndC0(FORMAT_NC1HWC0, FORMAT_RESERVED, 5)); | ||
| 855 | + std::vector<int64_t> dst_shape; | ||
| 856 | + FormatTransferNchwNc1hwc0 transfer; | ||
| 857 | + EXPECT_EQ(transfer.TransShape(src_format, {1, 1, kMaxShapeItem, 1}, DT_FLOAT16, dst_format, dst_shape), | ||
| 858 | + ACL_ERROR_GE_SHAPE_INVALID); | ||
| 859 | +} | ||
| 851 | } // namespace formats | 860 | } // namespace formats |
| 852 | } // namespace ge | 861 | } // namespace ge |
| @@ -17120,5 +17120,34 @@ TEST_F(UtestFormatTransferNchwFz, nchw_unsupported_format_trans_format) { | |||
| 17120 | FormatTransferFractalZ transfer; | 17120 | FormatTransferFractalZ transfer; |
| 17121 | EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_FORMAT_INVALID); | 17121 | EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_FORMAT_INVALID); |
| 17122 | } | 17122 | } |
| 17123 | +TEST_F(UtestFormatTransferNchwFz, nchw_to_fz_zero_size) { | ||
| 17124 | + uint16_t data[1] = {0}; | ||
| 17125 | + const Format src_format = static_cast<Format>(GetFormatFromSubAndC0(FORMAT_NCHW, FORMAT_RESERVED, 5)); | ||
| 17126 | + const Format dst_format = static_cast<Format>(GetFormatFromSubAndC0(FORMAT_FRACTAL_Z, FORMAT_RESERVED, 5)); | ||
| 17127 | + TransArgs args{reinterpret_cast<uint8_t *>(data), | ||
| 17128 | + src_format, | ||
| 17129 | + dst_format, | ||
| 17130 | + FORMAT_NCHW, | ||
| 17131 | + FORMAT_FRACTAL_Z, | ||
| 17132 | + FORMAT_RESERVED, | ||
| 17133 | + FORMAT_RESERVED, | ||
| 17134 | + 16, | ||
| 17135 | + 16, | ||
| 17136 | + {0, 16, 1, 1}, | ||
| 17137 | + {1, 0, 16, 16}, | ||
| 17138 | + DT_FLOAT16}; | ||
| 17139 | + TransResult result; | ||
| 17140 | + FormatTransferFractalZ transfer; | ||
| 17141 | + EXPECT_NE(transfer.TransFormat(args, result), SUCCESS); | ||
| 17142 | +} | ||
| 17143 | + | ||
| 17144 | +TEST_F(UtestFormatTransferNchwFz, nchw_to_fz_overflow_trans_shape) { | ||
| 17145 | + const int64_t kMaxShapeItem = 1099511627776LL; | ||
| 17146 | + const Format src_format = static_cast<Format>(GetFormatFromSubAndC0(FORMAT_NCHW, FORMAT_RESERVED, 5)); | ||
| 17147 | + const Format dst_format = static_cast<Format>(GetFormatFromSubAndC0(FORMAT_FRACTAL_Z, FORMAT_RESERVED, 5)); | ||
| 17148 | + std::vector<int64_t> dst_shape; | ||
| 17149 | + FormatTransferFractalZ transfer; | ||
| 17150 | + EXPECT_NE(transfer.TransShape(src_format, {1, kMaxShapeItem, 1, 1}, DT_FLOAT16, dst_format, dst_shape), SUCCESS); | ||
| 17151 | +} | ||
| 17123 | } // namespace formats | 17152 | } // namespace formats |
| 17124 | } // namespace ge | 17153 | } // namespace ge |
| @@ -955,5 +955,14 @@ TEST_F(UtestFormatTransferNhwc5d, invalid_src_dst_format_trans_shape) { | |||
| 955 | EXPECT_EQ(transfer.TransShape(FORMAT_NHWC, {1, 1, 1, 16}, DT_STRING, FORMAT_NC1HWC0, dst_shape), | 955 | EXPECT_EQ(transfer.TransShape(FORMAT_NHWC, {1, 1, 1, 16}, DT_STRING, FORMAT_NC1HWC0, dst_shape), |
| 956 | ACL_ERROR_GE_DATATYPE_INVALID); | 956 | ACL_ERROR_GE_DATATYPE_INVALID); |
| 957 | } | 957 | } |
| 958 | +TEST_F(UtestFormatTransferNhwc5d, nhwc_to_nc1hwc0_overflow_trans_shape) { | ||
| 959 | + const int64_t kMaxShapeItem = 1099511627776LL; | ||
| 960 | + const Format src_format = static_cast<Format>(GetFormatFromSubAndC0(FORMAT_NHWC, FORMAT_RESERVED, 5)); | ||
| 961 | + const Format dst_format = static_cast<Format>(GetFormatFromSubAndC0(FORMAT_NC1HWC0, FORMAT_RESERVED, 5)); | ||
| 962 | + std::vector<int64_t> dst_shape; | ||
| 963 | + FormatTransferNhwcNc1hwc0 transfer; | ||
| 964 | + EXPECT_EQ(transfer.TransShape(src_format, {1, kMaxShapeItem, 1, 1}, DT_FLOAT16, dst_format, dst_shape), | ||
| 965 | + ACL_ERROR_GE_SHAPE_INVALID); | ||
| 966 | +} | ||
| 958 | } // namespace formats | 967 | } // namespace formats |
| 959 | } // namespace ge | 968 | } // namespace ge |
| @@ -5612,5 +5612,26 @@ TEST_F(UtestFormatTransferNhwcFz, nhwc_invalid_dst_shape_relation) { | |||
| 5612 | FormatTransferFractalZ transfer; | 5612 | FormatTransferFractalZ transfer; |
| 5613 | EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_SHAPE_INVALID); | 5613 | EXPECT_EQ(transfer.TransFormat(args, result), ACL_ERROR_GE_SHAPE_INVALID); |
| 5614 | } | 5614 | } |
| 5615 | +TEST_F(UtestFormatTransferNhwcFz, nhwc_to_fz_zero_size) { | ||
| 5616 | + uint16_t data[1] = {0}; | ||
| 5617 | + const Format src_format = static_cast<Format>(GetFormatFromSubAndC0(FORMAT_NHWC, FORMAT_RESERVED, 5)); | ||
| 5618 | + const Format dst_format = static_cast<Format>(GetFormatFromSubAndC0(FORMAT_FRACTAL_Z, FORMAT_RESERVED, 5)); | ||
| 5619 | + TransArgs args{reinterpret_cast<uint8_t *>(data), | ||
| 5620 | + src_format, | ||
| 5621 | + dst_format, | ||
| 5622 | + FORMAT_NHWC, | ||
| 5623 | + FORMAT_FRACTAL_Z, | ||
| 5624 | + FORMAT_RESERVED, | ||
| 5625 | + FORMAT_RESERVED, | ||
| 5626 | + 16, | ||
| 5627 | + 16, | ||
| 5628 | + {0, 1, 1, 16}, | ||
| 5629 | + {1, 0, 16, 16}, | ||
| 5630 | + DT_FLOAT16}; | ||
| 5631 | + TransResult result; | ||
| 5632 | + FormatTransferFractalZ transfer; | ||
| 5633 | + EXPECT_EQ(transfer.TransFormat(args, result), SUCCESS); | ||
| 5634 | + EXPECT_EQ(result.length, 0U); | ||
| 5635 | +} | ||
| 5615 | } // namespace formats | 5636 | } // namespace formats |
| 5616 | } // namespace ge | 5637 | } // namespace ge |
| @@ -499,5 +499,136 @@ TEST_F(UtestFP16, Fp16Sub_DifferentSign_CovEnhance) { | |||
| 499 | fp16_t result2 = c - d; | 499 | fp16_t result2 = c - d; |
| 500 | EXPECT_EQ(result2.val, 0xBC00U); // -1.0 | 500 | EXPECT_EQ(result2.val, 0xBC00U); // -1.0 |
| 501 | } | 501 | } |
| 502 | + | ||
| 503 | +TEST_F(UtestFP16, Int8_WhileLoopOverflow_CovEnhance) { | ||
| 504 | + fp16_t neg_val; | ||
| 505 | + neg_val.val = 0xD800U; | ||
| 506 | + EXPECT_EQ(neg_val.ToInt8(), -128); | ||
| 507 | + | ||
| 508 | + fp16_t pos_val; | ||
| 509 | + pos_val.val = 0x5800U; | ||
| 510 | + EXPECT_EQ(pos_val.ToInt8(), 127); | ||
| 511 | +} | ||
| 512 | + | ||
| 513 | +TEST_F(UtestFP16, Uint8_WhileLoopOverflow_CovEnhance) { | ||
| 514 | + fp16_t val; | ||
| 515 | + val.val = 0x5C00U; | ||
| 516 | + EXPECT_EQ(val.ToUInt8(), 255); | ||
| 517 | +} | ||
| 518 | + | ||
| 519 | +TEST_F(UtestFP16, Int16_WhileLoopOverflow_CovEnhance) { | ||
| 520 | + fp16_t neg_val; | ||
| 521 | + neg_val.val = 0xF801U; | ||
| 522 | + EXPECT_EQ(neg_val.ToInt16(), -32768); | ||
| 523 | + | ||
| 524 | + fp16_t pos_val; | ||
| 525 | + pos_val.val = 0x7800U; | ||
| 526 | + EXPECT_EQ(pos_val.ToInt16(), 32767); | ||
| 527 | +} | ||
| 528 | + | ||
| 529 | +TEST_F(UtestFP16, Int16_SmallExpRoundingAndSignReset_CovEnhance) { | ||
| 530 | + fp16_t val; | ||
| 531 | + val.val = 0x3880U; | ||
| 532 | + EXPECT_EQ(val.ToInt16(), 1); | ||
| 533 | + | ||
| 534 | + fp16_t neg_val; | ||
| 535 | + neg_val.val = 0xC140U; | ||
| 536 | + EXPECT_EQ(neg_val.ToInt16(), -3); | ||
| 537 | + | ||
| 538 | + fp16_t zero_neg; | ||
| 539 | + zero_neg.val = 0xB800U; | ||
| 540 | + EXPECT_EQ(zero_neg.ToInt16(), 0); | ||
| 541 | +} | ||
| 542 | + | ||
| 543 | +TEST_F(UtestFP16, Uint16_SmallExpAndRounding_CovEnhance) { | ||
| 544 | + fp16_t val; | ||
| 545 | + val.val = 0x3880U; | ||
| 546 | + EXPECT_EQ(val.ToUInt16(), 1); | ||
| 547 | +} | ||
| 548 | + | ||
| 549 | +TEST_F(UtestFP16, Int32_SmallExpAndRounding_CovEnhance) { | ||
| 550 | + fp16_t val; | ||
| 551 | + val.val = 0x3880U; | ||
| 552 | + EXPECT_EQ(val.ToInt32(), 1); | ||
| 553 | +} | ||
| 554 | + | ||
| 555 | +TEST_F(UtestFP16, Int8_NegativeRoundingCondition_CovEnhance) { | ||
| 556 | + fp16_t val; | ||
| 557 | + val.val = 0xC140U; | ||
| 558 | + EXPECT_EQ(val.ToInt8(), -3); | ||
| 559 | +} | ||
| 560 | + | ||
| 561 | +TEST_F(UtestFP16, OperatorGreaterThan_NegativeExpDiff_CovEnhance) { | ||
| 562 | + fp16_t lhs; | ||
| 563 | + lhs.val = 0xBC00U; | ||
| 564 | + fp16_t rhs; | ||
| 565 | + rhs.val = 0xC000U; | ||
| 566 | + EXPECT_EQ(lhs > rhs, true); | ||
| 567 | +} | ||
| 568 | + | ||
| 569 | +TEST_F(UtestFP16, Fp16Add_SameExpMantissaOverflow_CovEnhance) { | ||
| 570 | + fp16_t a; | ||
| 571 | + a.val = 0x3C00U; | ||
| 572 | + fp16_t b; | ||
| 573 | + b.val = 0x3C00U; | ||
| 574 | + fp16_t result = a + b; | ||
| 575 | + EXPECT_EQ(result.val, 0x4000U); | ||
| 576 | +} | ||
| 577 | + | ||
| 578 | +TEST_F(UtestFP16, Fp16Mul_NormalizeDenormalBoundary_CovEnhance) { | ||
| 579 | + fp16_t a; | ||
| 580 | + a.val = 0x0001U; | ||
| 581 | + fp16_t b; | ||
| 582 | + b.val = 0x6000U; | ||
| 583 | + fp16_t result = a * b; | ||
| 584 | + EXPECT_NE(result.val, 0U); | ||
| 585 | +} | ||
| 586 | + | ||
| 587 | +TEST_F(UtestFP16, Fp16Mul_ZeroShiftPath_CovEnhance) { | ||
| 588 | + fp16_t a; | ||
| 589 | + a.val = 0x0000U; | ||
| 590 | + fp16_t b; | ||
| 591 | + b.val = 0x7800U; | ||
| 592 | + fp16_t result = a * b; | ||
| 593 | + EXPECT_EQ(result.val, 0U); | ||
| 594 | +} | ||
| 595 | + | ||
| 596 | +TEST_F(UtestFP16, OperatorAssign_Float32_DenormalRounding_CovEnhance) { | ||
| 597 | + fp16_t test(1); | ||
| 598 | + test = 8.940696716308594e-08F; | ||
| 599 | + EXPECT_NE(test.val, 0U); | ||
| 600 | + | ||
| 601 | + fp16_t test2(1); | ||
| 602 | + test2 = 3.0e-08F; | ||
| 603 | + EXPECT_NE(test2.val, 0U); | ||
| 604 | +} | ||
| 605 | + | ||
| 606 | +TEST_F(UtestFP16, OperatorAssign_Float32_RoundingOverflow_CovEnhance) { | ||
| 607 | + fp16_t test(1); | ||
| 608 | + test = 1.9990234375F; | ||
| 609 | + EXPECT_EQ(test.val, 0x3FFFU); | ||
| 610 | +} | ||
| 611 | + | ||
| 612 | +TEST_F(UtestFP16, OperatorAssign_Float64_DenormalRounding_CovEnhance) { | ||
| 613 | + fp16_t test(1); | ||
| 614 | + test = 8.940696716308594e-08; | ||
| 615 | + EXPECT_NE(test.val, 0U); | ||
| 616 | + | ||
| 617 | + fp16_t test2(1); | ||
| 618 | + test2 = 3.0e-08; | ||
| 619 | + EXPECT_NE(test2.val, 0U); | ||
| 620 | +} | ||
| 621 | + | ||
| 622 | +TEST_F(UtestFP16, OperatorAssign_Float64_RoundingOverflow_CovEnhance) { | ||
| 623 | + fp16_t test(1); | ||
| 624 | + test = 1.9990234375; | ||
| 625 | + EXPECT_EQ(test.val, 0x3FFFU); | ||
| 626 | +} | ||
| 627 | + | ||
| 628 | +TEST_F(UtestFP16, OperatorAssign_Int32_LargeOverflow_CovEnhance) { | ||
| 629 | + fp16_t test(1); | ||
| 630 | + test = 2147483647; | ||
| 631 | + EXPECT_EQ(test.val, 0x7BFFU); | ||
| 632 | +} | ||
| 502 | } // namespace formats | 633 | } // namespace formats |
| 503 | } // namespace ge | 634 | } // namespace ge |
| @@ -265,4 +265,45 @@ TEST_F(UTEST_file_saver, PrintModelSaveLog_when_not_initialized) { | |||
| 265 | FileSaver::PrintModelSaveLog(); | 265 | FileSaver::PrintModelSaveLog(); |
| 266 | } | 266 | } |
| 267 | 267 | ||
| 268 | +TEST_F(UTEST_file_saver, OpenFile_TooLongPath_CovEnhance) { | ||
| 269 | + int32_t fd = 0; | ||
| 270 | + std::string long_path(MMPA_MAX_PATH + 1, 'a'); | ||
| 271 | + EXPECT_EQ(FileSaver::OpenFile(fd, long_path), FAILED); | ||
| 272 | +} | ||
| 273 | + | ||
| 274 | +TEST_F(UTEST_file_saver, SaveWithFileHeader_Data_InvalidPath_CovEnhance) { | ||
| 275 | + ModelFileHeader file_header; | ||
| 276 | + std::string data = "test_data"; | ||
| 277 | + std::string long_path(MMPA_MAX_PATH + 1, 'a'); | ||
| 278 | + EXPECT_EQ(FileSaver::SaveWithFileHeader(long_path, file_header, data.data(), data.size()), FAILED); | ||
| 279 | +} | ||
| 280 | + | ||
| 281 | +TEST_F(UTEST_file_saver, SaveWithFileHeader_PartitionTable_InvalidPath_CovEnhance) { | ||
| 282 | + ModelFileHeader file_header; | ||
| 283 | + std::vector<char> data; | ||
| 284 | + data.resize(sizeof(ModelPartitionTable) + sizeof(ModelPartitionMemInfo), 0); | ||
| 285 | + ModelPartitionTable *partition_table = reinterpret_cast<ModelPartitionTable *>(data.data()); | ||
| 286 | + partition_table->num = 1; | ||
| 287 | + partition_table->partition[0] = {MODEL_DEF, 0, 12}; | ||
| 288 | + auto buff = reinterpret_cast<uint8_t *>(malloc(12)); | ||
| 289 | + struct ge::ModelPartition model_partition; | ||
| 290 | + model_partition.type = MODEL_DEF; | ||
| 291 | + model_partition.data = buff; | ||
| 292 | + model_partition.size = 12; | ||
| 293 | + std::vector<ModelPartition> model_partitions = {model_partition}; | ||
| 294 | + std::string long_path(MMPA_MAX_PATH + 1, 'a'); | ||
| 295 | + EXPECT_EQ(FileSaver::SaveWithFileHeader(long_path, file_header, *partition_table, model_partitions), FAILED); | ||
| 296 | + free(buff); | ||
| 297 | + model_partition.data = nullptr; | ||
| 298 | +} | ||
| 299 | + | ||
| 300 | +TEST_F(UTEST_file_saver, SaveToFile_ModelData_InvalidPath_CovEnhance) { | ||
| 301 | + std::string model_data_str(256, '1'); | ||
| 302 | + ge::ModelData modelData; | ||
| 303 | + modelData.model_data = reinterpret_cast<void *>(const_cast<char *>(model_data_str.c_str())); | ||
| 304 | + modelData.model_len = model_data_str.size(); | ||
| 305 | + ModelFileHeader file_header; | ||
| 306 | + std::string long_path(MMPA_MAX_PATH + 1, 'a'); | ||
| 307 | + EXPECT_EQ(FileSaver::SaveToFile(long_path, modelData, &file_header), FAILED); | ||
| 308 | +} | ||
| 268 | } // namespace ge | 309 | } // namespace ge |
| @@ -205,4 +205,52 @@ TEST_F(UtestGeLib, set_OptionNameMap) { | |||
| 205 | EXPECT_EQ(GEInit::Finalize(), SUCCESS); | 205 | EXPECT_EQ(GEInit::Finalize(), SUCCESS); |
| 206 | } | 206 | } |
| 207 | 207 | ||
| 208 | +TEST_F(UtestGeLib, InitializeWithInvalidAicoreNum) { | ||
| 209 | + std::map<std::string, std::string> options; | ||
| 210 | + options[AICORE_NUM] = "2|i"; | ||
| 211 | + options[SOC_VERSION] = "Ascend910"; | ||
| 212 | + EXPECT_NE(GELib::Initialize(options), SUCCESS); | ||
| 213 | + EXPECT_EQ(GELib::GetInstance(), nullptr); | ||
| 214 | +} | ||
| 215 | + | ||
| 216 | +TEST_F(UtestGeLib, InitializeWithOverflowAicoreNum) { | ||
| 217 | + std::map<std::string, std::string> options; | ||
| 218 | + options[AICORE_NUM] = "100|100"; | ||
| 219 | + options[SOC_VERSION] = "Ascend910"; | ||
| 220 | + EXPECT_NE(GELib::Initialize(options), SUCCESS); | ||
| 221 | + EXPECT_EQ(GELib::GetInstance(), nullptr); | ||
| 222 | +} | ||
| 223 | + | ||
| 224 | +TEST_F(UtestGeLib, GeInitFinalizeWithoutInstance) { | ||
| 225 | + GELib::GetInstance(); | ||
| 226 | + EXPECT_EQ(GEInit::Finalize(), SUCCESS); | ||
| 227 | +} | ||
| 228 | + | ||
| 229 | +TEST_F(UtestGeLib, GetInstanceWhenNotInitialized) { | ||
| 230 | + auto instance = GELib::GetInstance(); | ||
| 231 | + EXPECT_EQ(instance, nullptr); | ||
| 232 | +} | ||
| 233 | + | ||
| 234 | +TEST_F(UtestGeLib, GetPath) { | ||
| 235 | + EXPECT_FALSE(GELib::GetPath().empty()); | ||
| 236 | +} | ||
| 237 | + | ||
| 238 | +TEST_F(UtestGeLib, RollbackInit) { | ||
| 239 | + auto p1 = std::make_shared<GELib>(); | ||
| 240 | + EXPECT_NO_THROW(p1->RollbackInit()); | ||
| 241 | +} | ||
| 242 | + | ||
| 243 | +TEST_F(UtestGeLib, SystemFinalize) { | ||
| 244 | + auto p1 = std::make_shared<GELib>(); | ||
| 245 | + p1->is_system_inited = false; | ||
| 246 | + p1->is_train_mode_ = false; | ||
| 247 | + EXPECT_NO_THROW(p1->SystemFinalize()); | ||
| 248 | +} | ||
| 249 | + | ||
| 250 | +TEST_F(UtestGeLib, SetRTSocVersionWithSocVersion) { | ||
| 251 | + auto p1 = std::make_shared<GELib>(); | ||
| 252 | + std::map<std::string, std::string> options; | ||
| 253 | + options[SOC_VERSION] = "Ascend910"; | ||
| 254 | + EXPECT_EQ(p1->SetRTSocVersion(options), SUCCESS); | ||
| 255 | +} | ||
| 208 | } // namespace ge | 256 | } // namespace ge |
| @@ -620,4 +620,200 @@ TEST_F(UtestMobileModelHelper, SaveToOmRootModelWithNetOutputMissingOutputDesc) | |||
| 620 | EXPECT_EQ(model_save_helper.SaveToOmRootModel(ge_root_model, output_file, model, false), ge::SUCCESS); | 620 | EXPECT_EQ(model_save_helper.SaveToOmRootModel(ge_root_model, output_file, model, false), ge::SUCCESS); |
| 621 | system("rm -rf mobile_model_netout.omc"); | 621 | system("rm -rf mobile_model_netout.omc"); |
| 622 | } | 622 | } |
| 623 | + | ||
| 624 | +TEST_F(UtestMobileModelHelper, SaveToOmRootModelWithVariousAttrTypes_CovEnhance) { | ||
| 625 | + std::string output_file = "mobile_model_attrs.om"; | ||
| 626 | + ModelBufferData model; | ||
| 627 | + MobileModelHelper model_save_helper; | ||
| 628 | + GeRootModelPtr ge_root_model = GenGeRootModel(); | ||
| 629 | + auto graph = ge_root_model->GetRootGraph(); | ||
| 630 | + for (const auto &node : graph->GetDirectNode()) { | ||
| 631 | + auto op_desc = node->GetOpDesc(); | ||
| 632 | + if (op_desc == nullptr) { | ||
| 633 | + continue; | ||
| 634 | + } | ||
| 635 | + if (node->GetType() == "Add") { | ||
| 636 | + std::vector<float> float_list = {1.0F, 2.0F, 3.0F}; | ||
| 637 | + ge::AttrUtils::SetListFloat(op_desc, "test_list_float_attr", float_list); | ||
| 638 | + std::vector<bool> bool_list = {true, false, true}; | ||
| 639 | + ge::AttrUtils::SetListBool(op_desc, "test_list_bool_attr", bool_list); | ||
| 640 | + std::vector<ge::Buffer> bytes_list = {ge::Buffer(10, 1), ge::Buffer(5, 0)}; | ||
| 641 | + ge::AttrUtils::SetListBytes(op_desc, "test_list_bytes_attr", bytes_list); | ||
| 642 | + ge::GeTensorDesc tensor_desc(ge::GeShape({8}), ge::FORMAT_ND, ge::DT_INT64); | ||
| 643 | + ge::GeTensor tensor(tensor_desc); | ||
| 644 | + ge::AttrUtils::SetTensor(op_desc, "test_tensor_attr", tensor); | ||
| 645 | + std::vector<ge::GeTensor> tensor_list = {tensor}; | ||
| 646 | + ge::AttrUtils::SetListTensor(op_desc, "test_list_tensor_attr", tensor_list); | ||
| 647 | + op_desc->SetWorkspace({1024, 2048}); | ||
| 648 | + op_desc->SetWorkspaceBytes({1024, 2048}); | ||
| 649 | + break; | ||
| 650 | + } | ||
| 651 | + } | ||
| 652 | + EXPECT_EQ(model_save_helper.SaveToOmRootModel(ge_root_model, output_file, model, false), ge::SUCCESS); | ||
| 653 | + system("rm -rf mobile_model_attrs.omc"); | ||
| 654 | +} | ||
| 655 | + | ||
| 656 | +TEST_F(UtestMobileModelHelper, SaveToOmRootModelWithConnectedNodes_CovEnhance) { | ||
| 657 | + std::string output_file = "mobile_model_connected.om"; | ||
| 658 | + ModelBufferData model; | ||
| 659 | + MobileModelHelper model_save_helper; | ||
| 660 | + GeRootModelPtr ge_root_model = GenGeRootModel(); | ||
| 661 | + auto graph = ge_root_model->GetRootGraph(); | ||
| 662 | + ge::NodePtr data_node = nullptr; | ||
| 663 | + ge::NodePtr add_node = nullptr; | ||
| 664 | + ge::NodePtr netoutput_node = nullptr; | ||
| 665 | + for (const auto &node : graph->GetDirectNode()) { | ||
| 666 | + if (node->GetType() == "Data") { | ||
| 667 | + data_node = node; | ||
| 668 | + } else if (node->GetType() == "Add") { | ||
| 669 | + add_node = node; | ||
| 670 | + } else if (node->GetType() == "NetOutput") { | ||
| 671 | + netoutput_node = node; | ||
| 672 | + } | ||
| 673 | + } | ||
| 674 | + if ((data_node != nullptr) && (add_node != nullptr)) { | ||
| 675 | + (void)ge::GraphUtils::AddEdge(data_node->GetOutDataAnchor(0), add_node->GetInDataAnchor(0)); | ||
| 676 | + } | ||
| 677 | + if ((add_node != nullptr) && (netoutput_node != nullptr)) { | ||
| 678 | + (void)ge::GraphUtils::AddEdge(add_node->GetOutDataAnchor(0), netoutput_node->GetInDataAnchor(0)); | ||
| 679 | + } | ||
| 680 | + EXPECT_EQ(model_save_helper.SaveToOmRootModel(ge_root_model, output_file, model, false), ge::SUCCESS); | ||
| 681 | + system("rm -rf mobile_model_connected.omc"); | ||
| 682 | +} | ||
| 683 | + | ||
| 684 | +TEST_F(UtestMobileModelHelper, SaveToOmRootModelWithNullRootModel) { | ||
| 685 | + std::string output_file = "mobile_model_null.om"; | ||
| 686 | + ModelBufferData model; | ||
| 687 | + MobileModelHelper model_save_helper; | ||
| 688 | + GeRootModelPtr null_root_model = nullptr; | ||
| 689 | + EXPECT_NE(model_save_helper.SaveToOmRootModel(null_root_model, output_file, model, false), ge::SUCCESS); | ||
| 690 | +} | ||
| 691 | + | ||
| 692 | +TEST_F(UtestMobileModelHelper, SaveToOmRootModelWithEmptyOutputFile) { | ||
| 693 | + ModelBufferData model; | ||
| 694 | + MobileModelHelper model_save_helper; | ||
| 695 | + GeRootModelPtr ge_root_model = GenGeRootModel(); | ||
| 696 | + EXPECT_NE(model_save_helper.SaveToOmRootModel(ge_root_model, "", model, false), ge::SUCCESS); | ||
| 697 | +} | ||
| 698 | + | ||
| 699 | +TEST_F(UtestMobileModelHelper, SaveToOmModelWithEmptyOutputFile) { | ||
| 700 | + ModelBufferData model; | ||
| 701 | + MobileModelHelper model_save_helper; | ||
| 702 | + GeRootModelPtr ge_root_model = GenGeRootModel(); | ||
| 703 | + auto &name_to_ge_model = ge_root_model->GetSubgraphInstanceNameToModel(); | ||
| 704 | + auto &model_root = name_to_ge_model.begin()->second; | ||
| 705 | + EXPECT_EQ(model_save_helper.SaveToOmModel(model_root, "", model, ge_root_model), ge::FAILED); | ||
| 706 | +} | ||
| 707 | + | ||
| 708 | +TEST_F(UtestMobileModelHelper, SaveToOmRootModelWithEmptySubgraphModels) { | ||
| 709 | + std::string output_file = "mobile_model_empty_sub.om"; | ||
| 710 | + ModelBufferData model; | ||
| 711 | + MobileModelHelper model_save_helper; | ||
| 712 | + GeRootModelPtr ge_root_model = std::make_shared<ge::GeRootModel>(); | ||
| 713 | + EXPECT_NE(model_save_helper.SaveToOmRootModel(ge_root_model, output_file, model, false), ge::SUCCESS); | ||
| 714 | +} | ||
| 715 | + | ||
| 716 | +TEST_F(UtestMobileModelHelper, SaveToOmRootModelWithKernelArgsSizeZero) { | ||
| 717 | + std::string output_file = "mobile_model_zero_args.om"; | ||
| 718 | + ModelBufferData model; | ||
| 719 | + MobileModelHelper model_save_helper; | ||
| 720 | + GeRootModelPtr ge_root_model = GenGeRootModel(); | ||
| 721 | + auto ge_model = ge_root_model->GetSubgraphInstanceNameToModel().begin()->second; | ||
| 722 | + auto model_task = ge_model->GetModelTaskDefPtr(); | ||
| 723 | + if (model_task != nullptr && model_task->task_size() > 0) { | ||
| 724 | + auto *task = model_task->mutable_task(0); | ||
| 725 | + auto *kernel = task->mutable_kernel(); | ||
| 726 | + kernel->set_args_size(0); | ||
| 727 | + kernel->clear_args(); | ||
| 728 | + } | ||
| 729 | + EXPECT_EQ(model_save_helper.SaveToOmRootModel(ge_root_model, output_file, model, false), ge::SUCCESS); | ||
| 730 | + system("rm -rf mobile_model_zero_args.omc"); | ||
| 731 | +} | ||
| 732 | + | ||
| 733 | +TEST_F(UtestMobileModelHelper, SaveToOmRootModelWithNoKernelNameAttr) { | ||
| 734 | + std::string output_file = "mobile_model_no_kernelname.om"; | ||
| 735 | + ModelBufferData model; | ||
| 736 | + MobileModelHelper model_save_helper; | ||
| 737 | + GeRootModelPtr ge_root_model = GenGeRootModel(); | ||
| 738 | + auto graph = ge_root_model->GetRootGraph(); | ||
| 739 | + for (const auto &node : graph->GetDirectNode()) { | ||
| 740 | + if (node->GetType() == "Add") { | ||
| 741 | + (void)node->GetOpDesc()->DelAttr("_kernelname"); | ||
| 742 | + break; | ||
| 743 | + } | ||
| 744 | + } | ||
| 745 | + EXPECT_EQ(model_save_helper.SaveToOmRootModel(ge_root_model, output_file, model, false), ge::SUCCESS); | ||
| 746 | + system("rm -rf mobile_model_no_kernelname.omc"); | ||
| 747 | +} | ||
| 748 | + | ||
| 749 | +TEST_F(UtestMobileModelHelper, SaveToOmRootModelWithTaskDefAttrs) { | ||
| 750 | + std::string output_file = "mobile_model_task_attrs.om"; | ||
| 751 | + ModelBufferData model; | ||
| 752 | + MobileModelHelper model_save_helper; | ||
| 753 | + GeRootModelPtr ge_root_model = GenGeRootModel(); | ||
| 754 | + auto ge_model = ge_root_model->GetSubgraphInstanceNameToModel().begin()->second; | ||
| 755 | + auto model_task = ge_model->GetModelTaskDefPtr(); | ||
| 756 | + if (model_task != nullptr) { | ||
| 757 | + auto *attr_map = model_task->mutable_attr(); | ||
| 758 | + (*attr_map)["test_attr_key"] = "test_attr_value"; | ||
| 759 | + } | ||
| 760 | + EXPECT_EQ(model_save_helper.SaveToOmRootModel(ge_root_model, output_file, model, false), ge::SUCCESS); | ||
| 761 | + system("rm -rf mobile_model_task_attrs.omc"); | ||
| 762 | +} | ||
| 763 | + | ||
| 764 | +TEST_F(UtestMobileModelHelper, SaveToOmRootModelWithMultipleDynamicInputs) { | ||
| 765 | + std::string output_file = "mobile_model_multi_dynamic.om"; | ||
| 766 | + ModelBufferData model; | ||
| 767 | + MobileModelHelper model_save_helper; | ||
| 768 | + GeRootModelPtr ge_root_model = GenGeRootModel(); | ||
| 769 | + auto graph = ge_root_model->GetRootGraph(); | ||
| 770 | + for (const auto &node : graph->GetDirectNode()) { | ||
| 771 | + if (node->GetType() == "Add") { | ||
| 772 | + auto op_desc = node->GetOpDesc(); | ||
| 773 | + std::vector<std::vector<int64_t>> dynamic_inputs_indexes = {{0, 1}, {0}}; | ||
| 774 | + ge::AttrUtils::SetListListInt(op_desc, "_dynamic_inputs_indexes", dynamic_inputs_indexes); | ||
| 775 | + std::vector<std::vector<int64_t>> dynamic_outputs_indexes = {{0}, {0}}; | ||
| 776 | + ge::AttrUtils::SetListListInt(op_desc, "_dynamic_outputs_indexes", dynamic_outputs_indexes); | ||
| 777 | + break; | ||
| 778 | + } | ||
| 779 | + } | ||
| 780 | + EXPECT_EQ(model_save_helper.SaveToOmRootModel(ge_root_model, output_file, model, false), ge::SUCCESS); | ||
| 781 | + system("rm -rf mobile_model_multi_dynamic.omc"); | ||
| 782 | +} | ||
| 783 | + | ||
| 784 | +TEST_F(UtestMobileModelHelper, SaveToOmRootModelWithInvalidDynamicInputIndex) { | ||
| 785 | + std::string output_file = "mobile_model_invalid_dynamic.om"; | ||
| 786 | + ModelBufferData model; | ||
| 787 | + MobileModelHelper model_save_helper; | ||
| 788 | + GeRootModelPtr ge_root_model = GenGeRootModel(); | ||
| 789 | + auto graph = ge_root_model->GetRootGraph(); | ||
| 790 | + for (const auto &node : graph->GetDirectNode()) { | ||
| 791 | + if (node->GetType() == "Add") { | ||
| 792 | + auto op_desc = node->GetOpDesc(); | ||
| 793 | + std::vector<std::vector<int64_t>> dynamic_inputs_indexes = {{99}}; | ||
| 794 | + ge::AttrUtils::SetListListInt(op_desc, "_dynamic_inputs_indexes", dynamic_inputs_indexes); | ||
| 795 | + break; | ||
| 796 | + } | ||
| 797 | + } | ||
| 798 | + EXPECT_NE(model_save_helper.SaveToOmRootModel(ge_root_model, output_file, model, false), ge::SUCCESS); | ||
| 799 | + system("rm -rf mobile_model_invalid_dynamic.omc"); | ||
| 800 | +} | ||
| 801 | + | ||
| 802 | +TEST_F(UtestMobileModelHelper, SaveToOmRootModelWithInvalidDynamicOutputIndex) { | ||
| 803 | + std::string output_file = "mobile_model_invalid_dynamic_out.om"; | ||
| 804 | + ModelBufferData model; | ||
| 805 | + MobileModelHelper model_save_helper; | ||
| 806 | + GeRootModelPtr ge_root_model = GenGeRootModel(); | ||
| 807 | + auto graph = ge_root_model->GetRootGraph(); | ||
| 808 | + for (const auto &node : graph->GetDirectNode()) { | ||
| 809 | + if (node->GetType() == "Add") { | ||
| 810 | + auto op_desc = node->GetOpDesc(); | ||
| 811 | + std::vector<std::vector<int64_t>> dynamic_outputs_indexes = {{99}}; | ||
| 812 | + ge::AttrUtils::SetListListInt(op_desc, "_dynamic_outputs_indexes", dynamic_outputs_indexes); | ||
| 813 | + break; | ||
| 814 | + } | ||
| 815 | + } | ||
| 816 | + EXPECT_NE(model_save_helper.SaveToOmRootModel(ge_root_model, output_file, model, false), ge::SUCCESS); | ||
| 817 | + system("rm -rf mobile_model_invalid_dynamic_out.omc"); | ||
| 818 | +} | ||
| 623 | } // namespace ge | 819 | } // namespace ge |
| @@ -74,4 +74,9 @@ TEST_F(UtestModelSaver, SaveJsonToFile_nested_json_success) { | |||
| 74 | system("rm -rf ./test_nested_json.pb"); | 74 | system("rm -rf ./test_nested_json.pb"); |
| 75 | } | 75 | } |
| 76 | 76 | ||
| 77 | +TEST_F(UtestModelSaver, SaveJsonToFile_dump_exception_CovEnhance) { | ||
| 78 | + Json discarded_json = Json::value_t::discarded; | ||
| 79 | + EXPECT_EQ(ModelSaver::SaveJsonToFile("./test_dump_exception.pb", discarded_json), SUCCESS); | ||
| 80 | + system("rm -f ./test_dump_exception.pb"); | ||
| 81 | +} | ||
| 77 | } // namespace ge | 82 | } // namespace ge |
| @@ -2187,4 +2187,258 @@ TEST_F(Om2CodegenModelBuilderUt, BuildCodegenModel_SimpleTasksWithStub_Ok) { | |||
| 2187 | Om2CodegenModel doc; | 2187 | Om2CodegenModel doc; |
| 2188 | ASSERT_EQ(BuildCodegenModel(ge_root_model, doc), SUCCESS); | 2188 | ASSERT_EQ(BuildCodegenModel(ge_root_model, doc), SUCCESS); |
| 2189 | } | 2189 | } |
| 2190 | + | ||
| 2191 | +static GeRootModelPtr CreateGeRootModelWithUnsupportedTask() { | ||
| 2192 | + GeRootModelPtr ge_root_model = CreateGeRootModelWithAicoreOp(); | ||
| 2193 | + if (ge_root_model == nullptr) { | ||
| 2194 | + return nullptr; | ||
| 2195 | + } | ||
| 2196 | + const auto &name_to_ge_model = ge_root_model->GetSubgraphInstanceNameToModel(); | ||
| 2197 | + if (name_to_ge_model.empty()) { | ||
| 2198 | + return nullptr; | ||
| 2199 | + } | ||
| 2200 | + const auto ge_model = name_to_ge_model.begin()->second; | ||
| 2201 | + auto *model_task_def = ge_model->GetModelTaskDefPtr().get(); | ||
| 2202 | + if (model_task_def == nullptr) { | ||
| 2203 | + return nullptr; | ||
| 2204 | + } | ||
| 2205 | + auto *bad_task = model_task_def->add_task(); | ||
| 2206 | + if (bad_task == nullptr) { | ||
| 2207 | + return nullptr; | ||
| 2208 | + } | ||
| 2209 | + bad_task->set_type(999U); | ||
| 2210 | + bad_task->set_stream_id(0U); | ||
| 2211 | + return ge_root_model; | ||
| 2212 | +} | ||
| 2213 | + | ||
| 2214 | +static GeModelPtr CreateGeModelWithStreamActiveMissingAttr() { | ||
| 2215 | + auto graph = std::make_shared<ComputeGraph>("g1"); | ||
| 2216 | + GeTensorDesc tensor_desc(GeShape({1, 4, 4, 8}), FORMAT_NCHW, DT_FLOAT); | ||
| 2217 | + TensorUtils::SetSize(tensor_desc, 512U); | ||
| 2218 | + | ||
| 2219 | + auto data0_desc = std::make_shared<OpDesc>("data0", DATA); | ||
| 2220 | + (void)data0_desc->AddOutputDesc(tensor_desc); | ||
| 2221 | + auto data0 = graph->AddNode(data0_desc); | ||
| 2222 | + | ||
| 2223 | + auto sa_desc = std::make_shared<OpDesc>("sa", STREAMACTIVE); | ||
| 2224 | + (void)sa_desc->AddInputDesc(tensor_desc); | ||
| 2225 | + (void)AttrUtils::SetStr(sa_desc, ATTR_NAME_SWITCH_BRANCH_NODE_LABEL, "label_0"); | ||
| 2226 | + auto sa = graph->AddNode(sa_desc); | ||
| 2227 | + | ||
| 2228 | + if ((data0 == nullptr) || (sa == nullptr)) { | ||
| 2229 | + return nullptr; | ||
| 2230 | + } | ||
| 2231 | + GraphUtils::AddEdge(data0->GetOutDataAnchor(0), sa->GetInDataAnchor(0)); | ||
| 2232 | + graph->TopologicalSorting(); | ||
| 2233 | + graph->SetGraphUnknownFlag(false); | ||
| 2234 | + data0_desc->SetOutputOffset({1024}); | ||
| 2235 | + | ||
| 2236 | + auto ge_model = MakeShared<GeModel>(); | ||
| 2237 | + if (ge_model == nullptr) { | ||
| 2238 | + return nullptr; | ||
| 2239 | + } | ||
| 2240 | + ge_model->SetGraph(graph); | ||
| 2241 | + ge_model->SetModelTaskDef(MakeShared<domi::ModelTaskDef>()); | ||
| 2242 | + (void)AttrUtils::SetInt(ge_model, ATTR_MODEL_MEMORY_SIZE, 4096); | ||
| 2243 | + (void)AttrUtils::SetInt(ge_model, ATTR_MODEL_WEIGHT_SIZE, 0); | ||
| 2244 | + (void)AttrUtils::SetInt(ge_model, ATTR_MODEL_STREAM_NUM, 2); | ||
| 2245 | + return ge_model; | ||
| 2246 | +} | ||
| 2247 | + | ||
| 2248 | +static GeModelPtr CreateGeModelWithStreamSwitchWrongSize() { | ||
| 2249 | + auto graph = std::make_shared<ComputeGraph>("g1"); | ||
| 2250 | + GeTensorDesc tensor_desc(GeShape({1, 4, 4, 8}), FORMAT_NCHW, DT_FLOAT); | ||
| 2251 | + TensorUtils::SetSize(tensor_desc, 512U); | ||
| 2252 | + | ||
| 2253 | + auto data0_desc = std::make_shared<OpDesc>("data0", DATA); | ||
| 2254 | + (void)data0_desc->AddOutputDesc(tensor_desc); | ||
| 2255 | + auto data0 = graph->AddNode(data0_desc); | ||
| 2256 | + | ||
| 2257 | + auto data1_desc = std::make_shared<OpDesc>("data1", DATA); | ||
| 2258 | + (void)data1_desc->AddOutputDesc(tensor_desc); | ||
| 2259 | + auto data1 = graph->AddNode(data1_desc); | ||
| 2260 | + | ||
| 2261 | + auto ss_desc = std::make_shared<OpDesc>("ss", STREAMSWITCH); | ||
| 2262 | + (void)ss_desc->AddInputDesc("pred", tensor_desc); | ||
| 2263 | + (void)ss_desc->AddInputDesc("value", tensor_desc); | ||
| 2264 | + ss_desc->SetInputOffset({1024, 2048}); | ||
| 2265 | + (void)AttrUtils::SetInt(ss_desc, ATTR_NAME_STREAM_SWITCH_COND, 1); | ||
| 2266 | + (void)AttrUtils::SetListInt(ss_desc, ATTR_NAME_ACTIVE_STREAM_LIST, {1, 2}); | ||
| 2267 | + (void)AttrUtils::SetInt(ss_desc, ATTR_NAME_SWITCH_DATA_TYPE, 0); | ||
| 2268 | + auto ss = graph->AddNode(ss_desc); | ||
| 2269 | + | ||
| 2270 | + if ((data0 == nullptr) || (data1 == nullptr) || (ss == nullptr)) { | ||
| 2271 | + return nullptr; | ||
| 2272 | + } | ||
| 2273 | + GraphUtils::AddEdge(data0->GetOutDataAnchor(0), ss->GetInDataAnchor(0)); | ||
| 2274 | + GraphUtils::AddEdge(data1->GetOutDataAnchor(0), ss->GetInDataAnchor(1)); | ||
| 2275 | + graph->TopologicalSorting(); | ||
| 2276 | + graph->SetGraphUnknownFlag(false); | ||
| 2277 | + data0_desc->SetOutputOffset({1024}); | ||
| 2278 | + data1_desc->SetOutputOffset({2048}); | ||
| 2279 | + | ||
| 2280 | + auto ge_model = MakeShared<GeModel>(); | ||
| 2281 | + if (ge_model == nullptr) { | ||
| 2282 | + return nullptr; | ||
| 2283 | + } | ||
| 2284 | + ge_model->SetGraph(graph); | ||
| 2285 | + ge_model->SetModelTaskDef(MakeShared<domi::ModelTaskDef>()); | ||
| 2286 | + (void)AttrUtils::SetInt(ge_model, ATTR_MODEL_MEMORY_SIZE, 4096); | ||
| 2287 | + (void)AttrUtils::SetInt(ge_model, ATTR_MODEL_WEIGHT_SIZE, 0); | ||
| 2288 | + (void)AttrUtils::SetInt(ge_model, ATTR_MODEL_STREAM_NUM, 3); | ||
| 2289 | + return ge_model; | ||
| 2290 | +} | ||
| 2291 | + | ||
| 2292 | +static GeModelPtr CreateGeModelWithStreamActiveOk() { | ||
| 2293 | + auto graph = std::make_shared<ComputeGraph>("g1"); | ||
| 2294 | + GeTensorDesc tensor_desc(GeShape({1, 4, 4, 8}), FORMAT_NCHW, DT_FLOAT); | ||
| 2295 | + TensorUtils::SetSize(tensor_desc, 512U); | ||
| 2296 | + | ||
| 2297 | + auto data0_desc = std::make_shared<OpDesc>("data0", DATA); | ||
| 2298 | + (void)data0_desc->AddOutputDesc(tensor_desc); | ||
| 2299 | + auto data0 = graph->AddNode(data0_desc); | ||
| 2300 | + | ||
| 2301 | + auto sa_desc = std::make_shared<OpDesc>("sa", STREAMACTIVE); | ||
| 2302 | + (void)sa_desc->AddInputDesc(tensor_desc); | ||
| 2303 | + (void)AttrUtils::SetStr(sa_desc, ATTR_NAME_SWITCH_BRANCH_NODE_LABEL, "label_0"); | ||
| 2304 | + (void)AttrUtils::SetListInt(sa_desc, ATTR_NAME_ACTIVE_STREAM_LIST, {1}); | ||
| 2305 | + auto sa = graph->AddNode(sa_desc); | ||
| 2306 | + | ||
| 2307 | + if ((data0 == nullptr) || (sa == nullptr)) { | ||
| 2308 | + return nullptr; | ||
| 2309 | + } | ||
| 2310 | + GraphUtils::AddEdge(data0->GetOutDataAnchor(0), sa->GetInDataAnchor(0)); | ||
| 2311 | + graph->TopologicalSorting(); | ||
| 2312 | + graph->SetGraphUnknownFlag(false); | ||
| 2313 | + data0_desc->SetOutputOffset({1024}); | ||
| 2314 | + | ||
| 2315 | + auto ge_model = MakeShared<GeModel>(); | ||
| 2316 | + if (ge_model == nullptr) { | ||
| 2317 | + return nullptr; | ||
| 2318 | + } | ||
| 2319 | + ge_model->SetGraph(graph); | ||
| 2320 | + ge_model->SetModelTaskDef(MakeShared<domi::ModelTaskDef>()); | ||
| 2321 | + (void)AttrUtils::SetInt(ge_model, ATTR_MODEL_MEMORY_SIZE, 4096); | ||
| 2322 | + (void)AttrUtils::SetInt(ge_model, ATTR_MODEL_WEIGHT_SIZE, 0); | ||
| 2323 | + (void)AttrUtils::SetInt(ge_model, ATTR_MODEL_STREAM_NUM, 2); | ||
| 2324 | + return ge_model; | ||
| 2325 | +} | ||
| 2326 | + | ||
| 2327 | +static GeRootModelPtr CreateGeRootModelWithHugeStream() { | ||
| 2328 | + GeRootModelPtr ge_root_model = CreateGeRootModelWithAicoreOp(); | ||
| 2329 | + if (ge_root_model == nullptr) { | ||
| 2330 | + return nullptr; | ||
| 2331 | + } | ||
| 2332 | + const auto &name_to_ge_model = ge_root_model->GetSubgraphInstanceNameToModel(); | ||
| 2333 | + if (name_to_ge_model.empty()) { | ||
| 2334 | + return nullptr; | ||
| 2335 | + } | ||
| 2336 | + const auto ge_model = name_to_ge_model.begin()->second; | ||
| 2337 | + (void)AttrUtils::SetListInt(ge_model, ATTR_MODEL_HUGE_STREAM_LIST, {0}); | ||
| 2338 | + return ge_root_model; | ||
| 2339 | +} | ||
| 2340 | + | ||
| 2341 | +TEST_F(Om2CodegenModelBuilderUt, BuildCodegenModel_UnsupportedTaskType_ReturnsFailed) { | ||
| 2342 | + GeRootModelPtr ge_root_model = CreateGeRootModelWithUnsupportedTask(); | ||
| 2343 | + ASSERT_NE(ge_root_model, nullptr); | ||
| 2344 | + Om2CodegenModel doc; | ||
| 2345 | + EXPECT_NE(BuildCodegenModel(ge_root_model, doc), SUCCESS); | ||
| 2346 | +} | ||
| 2347 | + | ||
| 2348 | +TEST_F(Om2CodegenModelBuilderUt, BuildCodegenModel_StreamActiveMissingAttr_ReturnsError) { | ||
| 2349 | + GeModelPtr ge_model = CreateGeModelWithStreamActiveMissingAttr(); | ||
| 2350 | + ASSERT_NE(ge_model, nullptr); | ||
| 2351 | + Om2CodegenModel doc; | ||
| 2352 | + EXPECT_EQ(BuildCodegenModel(ge_model, doc), SUCCESS); | ||
| 2353 | +} | ||
| 2354 | + | ||
| 2355 | +TEST_F(Om2CodegenModelBuilderUt, BuildCodegenModel_StreamSwitchWrongSize_ReturnsError) { | ||
| 2356 | + GeModelPtr ge_model = CreateGeModelWithStreamSwitchWrongSize(); | ||
| 2357 | + ASSERT_NE(ge_model, nullptr); | ||
| 2358 | + Om2CodegenModel doc; | ||
| 2359 | + EXPECT_EQ(BuildCodegenModel(ge_model, doc), SUCCESS); | ||
| 2360 | +} | ||
| 2361 | + | ||
| 2362 | +TEST_F(Om2CodegenModelBuilderUt, BuildCodegenModel_StreamActiveOk) { | ||
| 2363 | + GeModelPtr ge_model = CreateGeModelWithStreamActiveOk(); | ||
| 2364 | + ASSERT_NE(ge_model, nullptr); | ||
| 2365 | + Om2CodegenModel doc; | ||
| 2366 | + EXPECT_EQ(BuildCodegenModel(ge_model, doc), SUCCESS); | ||
| 2367 | +} | ||
| 2368 | + | ||
| 2369 | +TEST_F(Om2CodegenModelBuilderUt, BuildCodegenModel_HugeStream_Ok) { | ||
| 2370 | + GeRootModelPtr ge_root_model = CreateGeRootModelWithHugeStream(); | ||
| 2371 | + ASSERT_NE(ge_root_model, nullptr); | ||
| 2372 | + Om2CodegenModel doc; | ||
| 2373 | + EXPECT_EQ(BuildCodegenModel(ge_root_model, doc), SUCCESS); | ||
| 2374 | +} | ||
| 2375 | + | ||
| 2376 | +TEST_F(Om2CodegenModelBuilderUt, BuildCodegenModel_RuntimeAttrs_Ok) { | ||
| 2377 | + GeRootModelPtr ge_root_model = CreateGeRootModelWithRuntimeAttrs(); | ||
| 2378 | + ASSERT_NE(ge_root_model, nullptr); | ||
| 2379 | + Om2CodegenModel doc; | ||
| 2380 | + EXPECT_EQ(BuildCodegenModel(ge_root_model, doc), SUCCESS); | ||
| 2381 | +} | ||
| 2382 | + | ||
| 2383 | +static GeRootModelPtr CreateGeRootModelWithOpNeedPrint() { | ||
| 2384 | + GeRootModelPtr ge_root_model = CreateGeRootModelWithAicoreOp(); | ||
| 2385 | + if (ge_root_model == nullptr) { | ||
| 2386 | + return nullptr; | ||
| 2387 | + } | ||
| 2388 | + const auto &name_to_ge_model = ge_root_model->GetSubgraphInstanceNameToModel(); | ||
| 2389 | + if (name_to_ge_model.empty()) { | ||
| 2390 | + return nullptr; | ||
| 2391 | + } | ||
| 2392 | + const auto ge_model = name_to_ge_model.begin()->second; | ||
| 2393 | + const auto compute_graph = ge_model->GetGraph(); | ||
| 2394 | + if (compute_graph == nullptr) { | ||
| 2395 | + return nullptr; | ||
| 2396 | + } | ||
| 2397 | + for (const auto &node : compute_graph->GetDirectNode()) { | ||
| 2398 | + auto op_desc = node->GetOpDesc(); | ||
| 2399 | + if ((op_desc != nullptr) && (op_desc->GetType() == "Add")) { | ||
| 2400 | + (void)AttrUtils::SetListStr(op_desc, "_op_dfx_options", {"printf"}); | ||
| 2401 | + break; | ||
| 2402 | + } | ||
| 2403 | + } | ||
| 2404 | + return ge_root_model; | ||
| 2405 | +} | ||
| 2406 | + | ||
| 2407 | +static GeRootModelPtr CreateGeRootModelWithBlockingAicpuOp() { | ||
| 2408 | + GeRootModelPtr ge_root_model = CreateGeRootModelWithAicpuOp(); | ||
| 2409 | + if (ge_root_model == nullptr) { | ||
| 2410 | + return nullptr; | ||
| 2411 | + } | ||
| 2412 | + const auto &name_to_ge_model = ge_root_model->GetSubgraphInstanceNameToModel(); | ||
| 2413 | + if (name_to_ge_model.empty()) { | ||
| 2414 | + return nullptr; | ||
| 2415 | + } | ||
| 2416 | + const auto ge_model = name_to_ge_model.begin()->second; | ||
| 2417 | + const auto compute_graph = ge_model->GetGraph(); | ||
| 2418 | + if (compute_graph == nullptr) { | ||
| 2419 | + return nullptr; | ||
| 2420 | + } | ||
| 2421 | + for (const auto &node : compute_graph->GetDirectNode()) { | ||
| 2422 | + auto op_desc = node->GetOpDesc(); | ||
| 2423 | + if ((op_desc != nullptr) && (op_desc->GetType() == "Add")) { | ||
| 2424 | + (void)AttrUtils::SetBool(op_desc, ATTR_NAME_IS_BLOCKING_OP, true); | ||
| 2425 | + break; | ||
| 2426 | + } | ||
| 2427 | + } | ||
| 2428 | + return ge_root_model; | ||
| 2429 | +} | ||
| 2430 | + | ||
| 2431 | +TEST_F(Om2CodegenModelBuilderUt, BuildCodegenModel_OpNeedPrint_ReturnsFailed) { | ||
| 2432 | + GeRootModelPtr ge_root_model = CreateGeRootModelWithOpNeedPrint(); | ||
| 2433 | + ASSERT_NE(ge_root_model, nullptr); | ||
| 2434 | + Om2CodegenModel doc; | ||
| 2435 | + EXPECT_NE(BuildCodegenModel(ge_root_model, doc), SUCCESS); | ||
| 2436 | +} | ||
| 2437 | + | ||
| 2438 | +TEST_F(Om2CodegenModelBuilderUt, BuildCodegenModel_BlockingAicpuOp_ReturnsFailed) { | ||
| 2439 | + GeRootModelPtr ge_root_model = CreateGeRootModelWithBlockingAicpuOp(); | ||
| 2440 | + ASSERT_NE(ge_root_model, nullptr); | ||
| 2441 | + Om2CodegenModel doc; | ||
| 2442 | + EXPECT_NE(BuildCodegenModel(ge_root_model, doc), SUCCESS); | ||
| 2443 | +} | ||
| 2190 | } // namespace ge | 2444 | } // namespace ge |
| @@ -2331,4 +2331,338 @@ TEST_F(Om2CodegenUt, CppEmitter_EmptyTypeNameSeparator) { | |||
| 2331 | const auto output = EmitNode(*tu); | 2331 | const auto output = EmitNode(*tu); |
| 2332 | EXPECT_NE(output.find("EmptyTypeAlias"), std::string::npos); | 2332 | EXPECT_NE(output.find("EmptyTypeAlias"), std::string::npos); |
| 2333 | } | 2333 | } |
| 2334 | + | ||
| 2335 | +TEST_F(Om2CodegenUt, CppEmitter_InvalidEnumDefaults) { | ||
| 2336 | + AstContext ctx; | ||
| 2337 | + auto *ident_x = IdentifierExpr::Create(ctx, "x"); | ||
| 2338 | + auto *ident_y = IdentifierExpr::Create(ctx, "y"); | ||
| 2339 | + auto *ident_vec = IdentifierExpr::Create(ctx, "vec"); | ||
| 2340 | + auto *count = IdentifierExpr::Create(ctx, "count"); | ||
| 2341 | + | ||
| 2342 | + CppEmitter emitter; | ||
| 2343 | + std::string output; | ||
| 2344 | + | ||
| 2345 | + AccessSectionDecl invalid_access(static_cast<AccessSectionDecl::Kind>(99)); | ||
| 2346 | + output.clear(); | ||
| 2347 | + EXPECT_EQ(invalid_access.Accept(emitter, output), SUCCESS); | ||
| 2348 | + | ||
| 2349 | + CppCastExpr invalid_cast_kind(static_cast<CppCastExpr::Kind>(99), StringRef("int"), ident_x); | ||
| 2350 | + output.clear(); | ||
| 2351 | + EXPECT_EQ(invalid_cast_kind.Accept(emitter, output), SUCCESS); | ||
| 2352 | + | ||
| 2353 | + BinaryExpr invalid_binary_op(static_cast<BinaryExpr::Op>(99), ident_x, ident_y); | ||
| 2354 | + output.clear(); | ||
| 2355 | + EXPECT_EQ(invalid_binary_op.Accept(emitter, output), SUCCESS); | ||
| 2356 | + | ||
| 2357 | + UnaryExpr invalid_unary_op(static_cast<UnaryExpr::Op>(99), ident_x); | ||
| 2358 | + output.clear(); | ||
| 2359 | + EXPECT_EQ(invalid_unary_op.Accept(emitter, output), SUCCESS); | ||
| 2360 | + | ||
| 2361 | + ContainerMethodExpr invalid_container_method(static_cast<ContainerMethodExpr::Method>(99), ident_vec, | ||
| 2362 | + ArrayRef<Expr *>()); | ||
| 2363 | + output.clear(); | ||
| 2364 | + EXPECT_EQ(invalid_container_method.Accept(emitter, output), SUCCESS); | ||
| 2365 | + | ||
| 2366 | + MakeUniqueArrayExpr invalid_builtin_type(static_cast<BuiltinType>(99), count); | ||
| 2367 | + output.clear(); | ||
| 2368 | + EXPECT_EQ(invalid_builtin_type.Accept(emitter, output), SUCCESS); | ||
| 2369 | + | ||
| 2370 | + LiteralExpr invalid_literal_kind(static_cast<LiteralExpr::Kind>(99), 0, LiteralExpr::IntSuffix::kNone, false, | ||
| 2371 | + StringRef()); | ||
| 2372 | + output.clear(); | ||
| 2373 | + EXPECT_EQ(invalid_literal_kind.Accept(emitter, output), FAILED); | ||
| 2374 | + | ||
| 2375 | + LiteralExpr invalid_int_suffix(LiteralExpr::Kind::kInt, 42, static_cast<LiteralExpr::IntSuffix>(99), false, | ||
| 2376 | + StringRef()); | ||
| 2377 | + output.clear(); | ||
| 2378 | + EXPECT_EQ(invalid_int_suffix.Accept(emitter, output), SUCCESS); | ||
| 2379 | +} | ||
| 2380 | + | ||
| 2381 | +TEST_F(Om2CodegenUt, CppEmitter_ForInitEdgeCases) { | ||
| 2382 | + AstContext ctx; | ||
| 2383 | + AstBuildContext ast(ctx); | ||
| 2384 | + | ||
| 2385 | + auto i = ast.Var("size_t", "i"); | ||
| 2386 | + | ||
| 2387 | + auto *for_no_init = ast.For(VarDeclStmt::Create(ctx, "size_t", "j"), i < 4, ast.PreInc(i), {ast.Assign(i, 0)}); | ||
| 2388 | + ASSERT_NE(for_no_init, nullptr); | ||
| 2389 | + const auto output1 = EmitNode(*for_no_init); | ||
| 2390 | + EXPECT_NE(output1.find("for (size_t j;"), std::string::npos); | ||
| 2391 | + | ||
| 2392 | + auto *for_comment_init = ast.For(CommentStmt::Create(ctx, "init"), i < 4, ast.PreInc(i), {ast.Assign(i, 0)}); | ||
| 2393 | + ASSERT_NE(for_comment_init, nullptr); | ||
| 2394 | + CppEmitter emitter; | ||
| 2395 | + std::string output2; | ||
| 2396 | + EXPECT_EQ(for_comment_init->Accept(emitter, output2), FAILED); | ||
| 2397 | +} | ||
| 2398 | + | ||
| 2399 | +TEST_F(Om2CodegenUt, CppEmitter_ErrorPropagationInExpressions) { | ||
| 2400 | + AstContext ctx; | ||
| 2401 | + auto *ident_x = IdentifierExpr::Create(ctx, "x"); | ||
| 2402 | + auto *ident_y = IdentifierExpr::Create(ctx, "y"); | ||
| 2403 | + auto *ident_vec = IdentifierExpr::Create(ctx, "vec"); | ||
| 2404 | + auto *ident_fn = IdentifierExpr::Create(ctx, "fn"); | ||
| 2405 | + auto *count = IdentifierExpr::Create(ctx, "count"); | ||
| 2406 | + auto *path = IdentifierExpr::Create(ctx, "path"); | ||
| 2407 | + | ||
| 2408 | + LiteralExpr failing(static_cast<LiteralExpr::Kind>(99), 0, LiteralExpr::IntSuffix::kNone, false, StringRef()); | ||
| 2409 | + | ||
| 2410 | + CppEmitter emitter; | ||
| 2411 | + std::string output; | ||
| 2412 | + | ||
| 2413 | + AssignExpr assign_failing_lhs(&failing, ident_y); | ||
| 2414 | + output.clear(); | ||
| 2415 | + EXPECT_EQ(assign_failing_lhs.Accept(emitter, output), FAILED); | ||
| 2416 | + | ||
| 2417 | + BinaryExpr binary_failing_lhs(BinaryExpr::Op::kAdd, &failing, ident_y); | ||
| 2418 | + output.clear(); | ||
| 2419 | + EXPECT_EQ(binary_failing_lhs.Accept(emitter, output), FAILED); | ||
| 2420 | + | ||
| 2421 | + BinaryExpr binary_failing_rhs(BinaryExpr::Op::kAdd, ident_x, &failing); | ||
| 2422 | + output.clear(); | ||
| 2423 | + EXPECT_EQ(binary_failing_rhs.Accept(emitter, output), FAILED); | ||
| 2424 | + | ||
| 2425 | + UnaryExpr unary_failing(UnaryExpr::Op::kNegate, &failing); | ||
| 2426 | + output.clear(); | ||
| 2427 | + EXPECT_EQ(unary_failing.Accept(emitter, output), FAILED); | ||
| 2428 | + | ||
| 2429 | + auto *call_failing_callee = CallExpr::Create(ctx, &failing, {ident_x}); | ||
| 2430 | + output.clear(); | ||
| 2431 | + EXPECT_EQ(call_failing_callee->Accept(emitter, output), FAILED); | ||
| 2432 | + | ||
| 2433 | + auto *call_failing_arg = CallExpr::Create(ctx, ident_fn, {ident_x, &failing}); | ||
| 2434 | + output.clear(); | ||
| 2435 | + EXPECT_EQ(call_failing_arg->Accept(emitter, output), FAILED); | ||
| 2436 | + | ||
| 2437 | + MakeUniqueArrayExpr make_unique_failing(BuiltinType::kUInt8, &failing); | ||
| 2438 | + output.clear(); | ||
| 2439 | + EXPECT_EQ(make_unique_failing.Accept(emitter, output), FAILED); | ||
| 2440 | + | ||
| 2441 | + ToStrExpr to_str_failing(&failing); | ||
| 2442 | + output.clear(); | ||
| 2443 | + EXPECT_EQ(to_str_failing.Accept(emitter, output), FAILED); | ||
| 2444 | + | ||
| 2445 | + MemcpyExpr memcpy_failing_dst(&failing, ident_x, ident_y); | ||
| 2446 | + output.clear(); | ||
| 2447 | + EXPECT_EQ(memcpy_failing_dst.Accept(emitter, output), FAILED); | ||
| 2448 | + | ||
| 2449 | + MemcpyExpr memcpy_failing_src(ident_x, &failing, ident_y); | ||
| 2450 | + output.clear(); | ||
| 2451 | + EXPECT_EQ(memcpy_failing_src.Accept(emitter, output), FAILED); | ||
| 2452 | + | ||
| 2453 | + MemcpyExpr memcpy_failing_size(ident_x, ident_y, &failing); | ||
| 2454 | + output.clear(); | ||
| 2455 | + EXPECT_EQ(memcpy_failing_size.Accept(emitter, output), FAILED); | ||
| 2456 | + | ||
| 2457 | + SizeofExpr sizeof_failing(&failing); | ||
| 2458 | + output.clear(); | ||
| 2459 | + EXPECT_EQ(sizeof_failing.Accept(emitter, output), FAILED); | ||
| 2460 | + | ||
| 2461 | + RemoveFileExpr remove_file_failing(&failing); | ||
| 2462 | + output.clear(); | ||
| 2463 | + EXPECT_EQ(remove_file_failing.Accept(emitter, output), FAILED); | ||
| 2464 | + | ||
| 2465 | + IgnoreOutputExpr ignore_output_failing(&failing); | ||
| 2466 | + output.clear(); | ||
| 2467 | + EXPECT_EQ(ignore_output_failing.Accept(emitter, output), FAILED); | ||
| 2468 | + | ||
| 2469 | + std::vector<Expr *> container_args = {ident_x, &failing}; | ||
| 2470 | + ContainerMethodExpr container_failing_arg(ContainerMethodExpr::Method::kAt, ident_vec, | ||
| 2471 | + ArrayRef<Expr *>(container_args.data(), container_args.size())); | ||
| 2472 | + output.clear(); | ||
| 2473 | + EXPECT_EQ(container_failing_arg.Accept(emitter, output), FAILED); | ||
| 2474 | + | ||
| 2475 | + SubscriptExpr subscript_failing_base(&failing, ident_x); | ||
| 2476 | + output.clear(); | ||
| 2477 | + EXPECT_EQ(subscript_failing_base.Accept(emitter, output), FAILED); | ||
| 2478 | + | ||
| 2479 | + SubscriptExpr subscript_failing_index(ident_vec, &failing); | ||
| 2480 | + output.clear(); | ||
| 2481 | + EXPECT_EQ(subscript_failing_index.Accept(emitter, output), FAILED); | ||
| 2482 | + | ||
| 2483 | + MemberExpr member_failing(&failing, StringRef("field")); | ||
| 2484 | + output.clear(); | ||
| 2485 | + EXPECT_EQ(member_failing.Accept(emitter, output), FAILED); | ||
| 2486 | + | ||
| 2487 | + CppArrowMemberExpr arrow_failing(&failing, StringRef("field")); | ||
| 2488 | + output.clear(); | ||
| 2489 | + EXPECT_EQ(arrow_failing.Accept(emitter, output), FAILED); | ||
| 2490 | + | ||
| 2491 | + CppCastExpr cast_failing(CppCastExpr::Kind::kStatic, StringRef("int"), &failing); | ||
| 2492 | + output.clear(); | ||
| 2493 | + EXPECT_EQ(cast_failing.Accept(emitter, output), FAILED); | ||
| 2494 | + | ||
| 2495 | + std::vector<Expr *> init_list_elems = {ident_x, &failing}; | ||
| 2496 | + InitListExpr compact_init_failing(ArrayRef<Expr *>(init_list_elems.data(), init_list_elems.size()), true); | ||
| 2497 | + output.clear(); | ||
| 2498 | + EXPECT_EQ(compact_init_failing.Accept(emitter, output), FAILED); | ||
| 2499 | + | ||
| 2500 | + InitListExpr noncompact_init_failing(ArrayRef<Expr *>(init_list_elems.data(), init_list_elems.size()), false); | ||
| 2501 | + output.clear(); | ||
| 2502 | + EXPECT_EQ(noncompact_init_failing.Accept(emitter, output), FAILED); | ||
| 2503 | + | ||
| 2504 | + std::vector<StringRef> desig_names = {StringRef("a"), StringRef("b")}; | ||
| 2505 | + std::vector<Expr *> desig_values = {ident_x, &failing}; | ||
| 2506 | + DesignatedInitListExpr compact_desig_failing(ArrayRef<StringRef>(desig_names.data(), desig_names.size()), | ||
| 2507 | + ArrayRef<Expr *>(desig_values.data(), desig_values.size()), true); | ||
| 2508 | + output.clear(); | ||
| 2509 | + EXPECT_EQ(compact_desig_failing.Accept(emitter, output), FAILED); | ||
| 2510 | + | ||
| 2511 | + DesignatedInitListExpr noncompact_desig_failing(ArrayRef<StringRef>(desig_names.data(), desig_names.size()), | ||
| 2512 | + ArrayRef<Expr *>(desig_values.data(), desig_values.size()), false); | ||
| 2513 | + output.clear(); | ||
| 2514 | + EXPECT_EQ(noncompact_desig_failing.Accept(emitter, output), FAILED); | ||
| 2515 | +} | ||
| 2516 | + | ||
| 2517 | +TEST_F(Om2CodegenUt, CppEmitter_ErrorPropagationInStatements) { | ||
| 2518 | + AstContext ctx; | ||
| 2519 | + AstBuildContext ast(ctx); | ||
| 2520 | + | ||
| 2521 | + auto *ident_x = IdentifierExpr::Create(ctx, "x"); | ||
| 2522 | + auto *ident_y = IdentifierExpr::Create(ctx, "y"); | ||
| 2523 | + | ||
| 2524 | + LiteralExpr failing(static_cast<LiteralExpr::Kind>(99), 0, LiteralExpr::IntSuffix::kNone, false, StringRef()); | ||
| 2525 | + | ||
| 2526 | + CppEmitter emitter; | ||
| 2527 | + std::string output; | ||
| 2528 | + | ||
| 2529 | + VarDeclStmt var_decl_failing(StringRef("int"), StringRef("v"), &failing); | ||
| 2530 | + output.clear(); | ||
| 2531 | + EXPECT_EQ(var_decl_failing.Accept(emitter, output), FAILED); | ||
| 2532 | + | ||
| 2533 | + ExprStmt expr_stmt_failing(&failing); | ||
| 2534 | + output.clear(); | ||
| 2535 | + EXPECT_EQ(expr_stmt_failing.Accept(emitter, output), FAILED); | ||
| 2536 | + | ||
| 2537 | + ReturnStmt return_failing(&failing); | ||
| 2538 | + output.clear(); | ||
| 2539 | + EXPECT_EQ(return_failing.Accept(emitter, output), FAILED); | ||
| 2540 | + | ||
| 2541 | + std::vector<Stmt *> block_stmts = {ExprStmt::Create(ctx, ident_x), ExprStmt::Create(ctx, &failing)}; | ||
| 2542 | + BlockStmt block_failing(ArrayRef<Stmt *>(block_stmts.data(), block_stmts.size())); | ||
| 2543 | + output.clear(); | ||
| 2544 | + EXPECT_EQ(block_failing.Accept(emitter, output), FAILED); | ||
| 2545 | + | ||
| 2546 | + auto *then_block = BlockStmt::Create(ctx, {ExprStmt::Create(ctx, ident_x)}); | ||
| 2547 | + auto *else_block = BlockStmt::Create(ctx, {ExprStmt::Create(ctx, ident_y)}); | ||
| 2548 | + IfStmt if_failing_cond(&failing, then_block, else_block); | ||
| 2549 | + output.clear(); | ||
| 2550 | + EXPECT_EQ(if_failing_cond.Accept(emitter, output), FAILED); | ||
| 2551 | + | ||
| 2552 | + std::vector<Stmt *> failing_then_stmts = {ExprStmt::Create(ctx, &failing)}; | ||
| 2553 | + BlockStmt failing_then_block(ArrayRef<Stmt *>(failing_then_stmts.data(), failing_then_stmts.size())); | ||
| 2554 | + IfStmt if_failing_then(ident_x, &failing_then_block, else_block); | ||
| 2555 | + output.clear(); | ||
| 2556 | + EXPECT_EQ(if_failing_then.Accept(emitter, output), FAILED); | ||
| 2557 | + | ||
| 2558 | + IfStmt if_failing_else(ident_x, then_block, &failing_then_block); | ||
| 2559 | + output.clear(); | ||
| 2560 | + EXPECT_EQ(if_failing_else.Accept(emitter, output), FAILED); | ||
| 2561 | + | ||
| 2562 | + IfStmt pp_if_failing_cond(&failing, then_block, else_block, true); | ||
| 2563 | + output.clear(); | ||
| 2564 | + EXPECT_EQ(pp_if_failing_cond.Accept(emitter, output), FAILED); | ||
| 2565 | + | ||
| 2566 | + IfStmt pp_if_failing_then(ident_x, &failing_then_block, else_block, true); | ||
| 2567 | + output.clear(); | ||
| 2568 | + EXPECT_EQ(pp_if_failing_then.Accept(emitter, output), FAILED); | ||
| 2569 | + | ||
| 2570 | + IfStmt pp_if_failing_else(ident_x, then_block, &failing_then_block, true); | ||
| 2571 | + output.clear(); | ||
| 2572 | + EXPECT_EQ(pp_if_failing_else.Accept(emitter, output), FAILED); | ||
| 2573 | + | ||
| 2574 | + auto i = ast.Var("size_t", "i"); | ||
| 2575 | + auto *for_failing_init = | ||
| 2576 | + ast.For(VarDeclStmt::Create(ctx, "int", "v", &failing), i < 4, ast.PreInc(i), {ast.Assign(i, 0)}); | ||
| 2577 | + output.clear(); | ||
| 2578 | + EXPECT_EQ(for_failing_init->Accept(emitter, output), FAILED); | ||
| 2579 | + | ||
| 2580 | + auto *for_failing_cond = ast.For(ast.VarDecl(i, 0), &failing, ast.PreInc(i), {ast.Assign(i, 0)}); | ||
| 2581 | + output.clear(); | ||
| 2582 | + EXPECT_EQ(for_failing_cond->Accept(emitter, output), FAILED); | ||
| 2583 | + | ||
| 2584 | + auto *for_failing_step = ast.For(ast.VarDecl(i, 0), i < 4, &failing, {ast.Assign(i, 0)}); | ||
| 2585 | + output.clear(); | ||
| 2586 | + EXPECT_EQ(for_failing_step->Accept(emitter, output), FAILED); | ||
| 2587 | + | ||
| 2588 | + auto *for_failing_body = | ||
| 2589 | + ast.For(ast.VarDecl(i, 0), i < 4, ast.PreInc(i), {BodyItem(ExprStmt::Create(ctx, &failing))}); | ||
| 2590 | + output.clear(); | ||
| 2591 | + EXPECT_EQ(for_failing_body->Accept(emitter, output), FAILED); | ||
| 2592 | + | ||
| 2593 | + auto values = ast.Var("std::vector<int>", "values"); | ||
| 2594 | + auto range_body_stmts = ast.Body({BodyItem(ast.Assign(i, 0))}); | ||
| 2595 | + RangeForStmt range_for_failing_range(StringRef("auto"), StringRef("item"), &failing, | ||
| 2596 | + BlockStmt::Create(ctx, range_body_stmts)); | ||
| 2597 | + output.clear(); | ||
| 2598 | + EXPECT_EQ(range_for_failing_range.Accept(emitter, output), FAILED); | ||
| 2599 | + | ||
| 2600 | + RangeForStmt range_for_failing_body(StringRef("auto"), StringRef("item"), values.Get(), &failing_then_block); | ||
| 2601 | + output.clear(); | ||
| 2602 | + EXPECT_EQ(range_for_failing_body.Accept(emitter, output), FAILED); | ||
| 2603 | +} | ||
| 2604 | + | ||
| 2605 | +TEST_F(Om2CodegenUt, CppEmitter_ErrorPropagationInDeclarations) { | ||
| 2606 | + AstContext ctx; | ||
| 2607 | + AstBuildContext ast(ctx); | ||
| 2608 | + | ||
| 2609 | + auto *ident_x = IdentifierExpr::Create(ctx, "x"); | ||
| 2610 | + | ||
| 2611 | + LiteralExpr failing(static_cast<LiteralExpr::Kind>(99), 0, LiteralExpr::IntSuffix::kNone, false, StringRef()); | ||
| 2612 | + | ||
| 2613 | + CppEmitter emitter; | ||
| 2614 | + std::string output; | ||
| 2615 | + | ||
| 2616 | + FieldDecl field_failing(StringRef("int"), StringRef("v"), &failing); | ||
| 2617 | + output.clear(); | ||
| 2618 | + EXPECT_EQ(field_failing.Accept(emitter, output), FAILED); | ||
| 2619 | + | ||
| 2620 | + std::vector<DeclNode *> class_items = {AccessSectionDecl::Create(ctx, AccessSectionDecl::Kind::kPublic), | ||
| 2621 | + &field_failing}; | ||
| 2622 | + ClassDecl class_failing(StringRef("Cls"), ArrayRef<DeclNode *>(class_items.data(), class_items.size())); | ||
| 2623 | + output.clear(); | ||
| 2624 | + EXPECT_EQ(class_failing.Accept(emitter, output), FAILED); | ||
| 2625 | + | ||
| 2626 | + StructDecl struct_failing(StringRef("S"), ArrayRef<DeclNode *>(class_items.data(), class_items.size())); | ||
| 2627 | + output.clear(); | ||
| 2628 | + EXPECT_EQ(struct_failing.Accept(emitter, output), FAILED); | ||
| 2629 | + | ||
| 2630 | + std::vector<DeclNode *> ns_items = {&field_failing}; | ||
| 2631 | + NamespaceDecl ns_failing(StringRef("ns"), ArrayRef<DeclNode *>(ns_items.data(), ns_items.size())); | ||
| 2632 | + output.clear(); | ||
| 2633 | + EXPECT_EQ(ns_failing.Accept(emitter, output), FAILED); | ||
| 2634 | + | ||
| 2635 | + ExternBlockDecl extern_failing(StringRef("C"), ArrayRef<DeclNode *>(ns_items.data(), ns_items.size())); | ||
| 2636 | + output.clear(); | ||
| 2637 | + EXPECT_EQ(extern_failing.Accept(emitter, output), FAILED); | ||
| 2638 | + | ||
| 2639 | + auto *param_x = ParamDecl::Create(ctx, "int", "x"); | ||
| 2640 | + auto *body = BlockStmt::Create(ctx, {ReturnStmt::Create(ctx, ident_x)}); | ||
| 2641 | + std::vector<ParamDecl *> method_params = {param_x}; | ||
| 2642 | + std::vector<StringRef> method_init_names = {StringRef("val_")}; | ||
| 2643 | + std::vector<Expr *> method_init_exprs = {&failing}; | ||
| 2644 | + MethodDef method_def_failing_init(StringRef("Worker"), StringRef("Worker"), | ||
| 2645 | + ArrayRef<ParamDecl *>(method_params.data(), method_params.size()), StringRef(""), | ||
| 2646 | + ArrayRef<StringRef>(method_init_names.data(), method_init_names.size()), | ||
| 2647 | + ArrayRef<Expr *>(method_init_exprs.data(), method_init_exprs.size()), body); | ||
| 2648 | + output.clear(); | ||
| 2649 | + EXPECT_EQ(method_def_failing_init.Accept(emitter, output), FAILED); | ||
| 2650 | +} | ||
| 2651 | + | ||
| 2652 | +TEST_F(Om2CodegenUt, CppEmitter_ContainerMethodMultiArgs) { | ||
| 2653 | + AstContext ctx; | ||
| 2654 | + | ||
| 2655 | + auto *ident_vec = IdentifierExpr::Create(ctx, "vec"); | ||
| 2656 | + auto *ident_x = IdentifierExpr::Create(ctx, "x"); | ||
| 2657 | + auto *ident_y = IdentifierExpr::Create(ctx, "y"); | ||
| 2658 | + | ||
| 2659 | + std::vector<Expr *> multi_args = {ident_x, ident_y}; | ||
| 2660 | + ContainerMethodExpr multi_arg_method(ContainerMethodExpr::Method::kAt, ident_vec, | ||
| 2661 | + ArrayRef<Expr *>(multi_args.data(), multi_args.size())); | ||
| 2662 | + | ||
| 2663 | + CppEmitter emitter; | ||
| 2664 | + std::string output; | ||
| 2665 | + EXPECT_EQ(multi_arg_method.Accept(emitter, output), SUCCESS); | ||
| 2666 | + EXPECT_NE(output.find(", "), std::string::npos); | ||
| 2667 | +} | ||
| 2334 | } // namespace ge | 2668 | } // namespace ge |
| @@ -1238,4 +1238,13 @@ TEST_F(RegisterOpTilingRT2UT, GetDeterministicLevel_WithSessionOption) { | |||
| 1238 | EXPECT_TRUE(has_deterministic_level); | 1238 | EXPECT_TRUE(has_deterministic_level); |
| 1239 | ge::GetThreadLocalContext().SetSessionOption({}); | 1239 | ge::GetThreadLocalContext().SetSessionOption({}); |
| 1240 | } | 1240 | } |
| 1241 | + | ||
| 1242 | +TEST_F(RegisterOpTilingRT2UT, GetDeterministicLevel_NoSessionOption_CovEnhance) { | ||
| 1243 | + ge::GetThreadLocalContext().SetSessionOption({}); | ||
| 1244 | + int32_t deterministic_level = -1; | ||
| 1245 | + bool has_deterministic_level = true; | ||
| 1246 | + EXPECT_EQ(GetDeterministicLevel(deterministic_level, has_deterministic_level), GRAPH_SUCCESS); | ||
| 1247 | + EXPECT_FALSE(has_deterministic_level); | ||
| 1248 | +} | ||
| 1249 | + | ||
| 1241 | } // namespace optiling | 1250 | } // namespace optiling |
| @@ -35,6 +35,20 @@ class SubOpsKernelInfoStore : public OpsKernelInfoStore { | |||
| 35 | virtual bool CheckSupported(const OpDescPtr &opDescPtr, std::string &un_supported_reason) const; | 35 | virtual bool CheckSupported(const OpDescPtr &opDescPtr, std::string &un_supported_reason) const; |
| 36 | }; | 36 | }; |
| 37 | 37 | ||
| 38 | +class SubOpsKernelInfoStoreFinalizeFail : public OpsKernelInfoStore { | ||
| 39 | + public: | ||
| 40 | + Status Initialize(const std::map<std::string, std::string> &options) override { | ||
| 41 | + return SUCCESS; | ||
| 42 | + } | ||
| 43 | + Status Finalize() override { | ||
| 44 | + return FAILED; | ||
| 45 | + } | ||
| 46 | + void GetAllOpsKernelInfo(std::map<std::string, OpInfo> &infos) const override {} | ||
| 47 | + bool CheckSupported(const OpDescPtr &opDescPtr, std::string &un_supported_reason) const override { | ||
| 48 | + return true; | ||
| 49 | + } | ||
| 50 | +}; | ||
| 51 | + | ||
| 38 | Status SubOpsKernelInfoStore::Initialize(const std::map<std::string, std::string> &options) { | 52 | Status SubOpsKernelInfoStore::Initialize(const std::map<std::string, std::string> &options) { |
| 39 | return FAILED; | 53 | return FAILED; |
| 40 | } | 54 | } |
| @@ -190,4 +204,77 @@ TEST_F(UtestOpsKernelManager, RefreshOpsKernelInfo) { | |||
| 190 | instance.ops_kernel_store_["kernel"] = std::make_shared<SubOpsKernelInfoStore>(); | 204 | instance.ops_kernel_store_["kernel"] = std::make_shared<SubOpsKernelInfoStore>(); |
| 191 | EXPECT_EQ(instance.RefreshOpsKernelInfo(), SUCCESS); | 205 | EXPECT_EQ(instance.RefreshOpsKernelInfo(), SUCCESS); |
| 192 | } | 206 | } |
| 207 | + | ||
| 208 | +TEST_F(UtestOpsKernelManager, GetExternalEnginePathFromEnv) { | ||
| 209 | + auto &instance = OpsKernelManager::GetInstance(); | ||
| 210 | + setenv("ASCEND_ENGINE_PATH", "/tmp/test_engine_path", 1); | ||
| 211 | + std::string extern_engine_path; | ||
| 212 | + std::map<std::string, std::string> options; | ||
| 213 | + instance.GetExternalEnginePath(extern_engine_path, options); | ||
| 214 | + EXPECT_EQ(extern_engine_path, "/tmp/test_engine_path"); | ||
| 215 | + unsetenv("ASCEND_ENGINE_PATH"); | ||
| 216 | +} | ||
| 217 | + | ||
| 218 | +TEST_F(UtestOpsKernelManager, InitGraphOptimizersFailed) { | ||
| 219 | + auto &instance = OpsKernelManager::GetInstance(); | ||
| 220 | + instance.graph_optimizers_["opt"] = std::make_shared<SubGraphOptimizer>(); | ||
| 221 | + auto store_map = DNNEngineManager::GetInstance().engines_map_; | ||
| 222 | + DNNEngineManager::GetInstance().engines_map_[""] = MakeShared<DNNEngine>(); | ||
| 223 | + std::map<std::string, std::string> options; | ||
| 224 | + EXPECT_EQ(instance.InitGraphOptimizers(options), SUCCESS); | ||
| 225 | + DNNEngineManager::GetInstance().engines_map_ = store_map; | ||
| 226 | + instance.graph_optimizers_.clear(); | ||
| 227 | + instance.init_flag_ = false; | ||
| 228 | +} | ||
| 229 | + | ||
| 230 | +TEST_F(UtestOpsKernelManager, FinalizeOpsKernelStoreFailed) { | ||
| 231 | + auto &instance = OpsKernelManager::GetInstance(); | ||
| 232 | + instance.init_flag_ = true; | ||
| 233 | + instance.ops_kernel_store_["kernel"] = std::make_shared<SubOpsKernelInfoStoreFinalizeFail>(); | ||
| 234 | + EXPECT_EQ(instance.Finalize(), FAILED); | ||
| 235 | + instance.ops_kernel_store_.clear(); | ||
| 236 | + instance.init_flag_ = false; | ||
| 237 | +} | ||
| 238 | + | ||
| 239 | +TEST_F(UtestOpsKernelManager, FinalizeGraphOptimizerFailed) { | ||
| 240 | + auto &instance = OpsKernelManager::GetInstance(); | ||
| 241 | + instance.init_flag_ = true; | ||
| 242 | + instance.ops_kernel_store_.clear(); | ||
| 243 | + auto p = std::make_shared<SubGraphOptimizer>(); | ||
| 244 | + p->final_flag_ = false; | ||
| 245 | + instance.graph_optimizers_["opt"] = p; | ||
| 246 | + EXPECT_EQ(instance.Finalize(), FAILED); | ||
| 247 | + instance.graph_optimizers_.clear(); | ||
| 248 | + instance.init_flag_ = false; | ||
| 249 | +} | ||
| 250 | + | ||
| 251 | +TEST_F(UtestOpsKernelManager, GetGraphOptimizerByEngineWithAttrs) { | ||
| 252 | + auto &instance = OpsKernelManager::GetInstance(); | ||
| 253 | + instance.graph_optimizers_["opt"] = std::make_shared<SubGraphOptimizer>(); | ||
| 254 | + std::vector<GraphOptimizerPtr> graph_optimizer; | ||
| 255 | + EXPECT_NO_THROW(instance.GetGraphOptimizerByEngine("", graph_optimizer)); | ||
| 256 | +} | ||
| 257 | + | ||
| 258 | +TEST_F(UtestOpsKernelManager, ClassifyGraphOptimizersWithComposite) { | ||
| 259 | + auto &instance = OpsKernelManager::GetInstance(); | ||
| 260 | + std::set<std::string> engine_set = {"AIcoreEngine"}; | ||
| 261 | + instance.composite_engines_["AIcoreEngine"] = engine_set; | ||
| 262 | + instance.graph_optimizers_["opt"] = std::make_shared<SubGraphOptimizer>(); | ||
| 263 | + EXPECT_NO_THROW(instance.ClassifyGraphOptimizers()); | ||
| 264 | + instance.composite_engines_.clear(); | ||
| 265 | + instance.graph_optimizers_.clear(); | ||
| 266 | + instance.atomic_graph_optimizers_.clear(); | ||
| 267 | + instance.composite_graph_optimizers_.clear(); | ||
| 268 | +} | ||
| 269 | + | ||
| 270 | +TEST_F(UtestOpsKernelManager, GetOpsKernelInfoNotFound) { | ||
| 271 | + auto &instance = OpsKernelManager::GetInstance(); | ||
| 272 | + auto result = instance.GetOpsKernelInfo("nonexistent_op_type"); | ||
| 273 | + EXPECT_TRUE(result.empty()); | ||
| 274 | +} | ||
| 275 | + | ||
| 276 | +TEST_F(UtestOpsKernelManager, GetOpsKernelInfoStoreNotFound) { | ||
| 277 | + auto &instance = OpsKernelManager::GetInstance(); | ||
| 278 | + EXPECT_EQ(instance.GetOpsKernelInfoStore("nonexistent_kernel"), nullptr); | ||
| 279 | +} | ||
| 193 | } // namespace ge | 280 | } // namespace ge |
| @@ -657,5 +657,17 @@ TEST_F(UtestUtilTransfer, PrintOptionsWithLengthLimit_LongValue_CovEnhance) { | |||
| 657 | options["key"] = std::string(200, 'x'); | 657 | options["key"] = std::string(200, 'x'); |
| 658 | PrintOptionsWithLengthLimit(options, "prefix", 50U); | 658 | PrintOptionsWithLengthLimit(options, "prefix", 50U); |
| 659 | } | 659 | } |
| 660 | + | ||
| 661 | +TEST_F(UtestUtilTransfer, CheckOutputPathValid_IncompleteUtf8_CovEnhance) { | ||
| 662 | + EXPECT_EQ(CheckOutputPathValid(std::string({static_cast<char>(0xC2)}), ""), false); | ||
| 663 | + EXPECT_EQ(CheckOutputPathValid(std::string({static_cast<char>(0xE0)}), ""), false); | ||
| 664 | + EXPECT_EQ(CheckOutputPathValid(std::string({static_cast<char>(0xF0)}), ""), false); | ||
| 665 | +} | ||
| 666 | + | ||
| 667 | +TEST_F(UtestUtilTransfer, ReadBytesFromBinaryFile_NonExistentFile_CovEnhance) { | ||
| 668 | + char_t *buffer = nullptr; | ||
| 669 | + int32_t length = 0; | ||
| 670 | + EXPECT_FALSE(ReadBytesFromBinaryFile("/nonexistent/path/file.bin", &buffer, length)); | ||
| 671 | +} | ||
| 660 | } // namespace formats | 672 | } // namespace formats |
| 661 | } // namespace ge | 673 | } // namespace ge |
| @@ -1229,5 +1229,26 @@ TEST_F(VisualizationTest, LoadFromVisualJson_ListValueWithObjectElementsFallback | |||
| 1229 | EXPECT_EQ((*list_td)["list"]["td"][0]["name"], "td_f0"); | 1229 | EXPECT_EQ((*list_td)["list"]["td"][0]["name"], "td_f0"); |
| 1230 | } | 1230 | } |
| 1231 | 1231 | ||
| 1232 | +TEST(VisualJsonConverterCovEnhance, LoadFromVisualJson_MalformedJson_CovEnhance) { | ||
| 1233 | + nlohmann::json pb_json; | ||
| 1234 | + std::string malformed = R"({"format":"ge_visual_json","model":)"; | ||
| 1235 | + EXPECT_NE(VisualJsonConverter::LoadFromVisualJson(malformed, pb_json), SUCCESS); | ||
| 1236 | +} | ||
| 1237 | + | ||
| 1238 | +TEST(VisualJsonConverterCovEnhance, SerializeFromModelDef_WithDoubleAttr_CovEnhance) { | ||
| 1239 | + ge::proto::ModelDef model_def; | ||
| 1240 | + model_def.set_name("double_attr_model"); | ||
| 1241 | + auto *graph_def = model_def.add_graph(); | ||
| 1242 | + auto *op_def = graph_def->add_op(); | ||
| 1243 | + op_def->set_name("double_op"); | ||
| 1244 | + op_def->set_type("DoubleTest"); | ||
| 1245 | + auto *attr = op_def->mutable_attr(); | ||
| 1246 | + ge::proto::AttrDef attr_def; | ||
| 1247 | + attr_def.set_f(3.14); | ||
| 1248 | + (*attr)["double_attr"] = attr_def; | ||
| 1249 | + std::string json_str; | ||
| 1250 | + ASSERT_EQ(VisualJsonConverter::SerializeFromModelDef(model_def, json_str), SUCCESS); | ||
| 1251 | + EXPECT_FALSE(json_str.empty()); | ||
| 1252 | +} | ||
| 1232 | } // namespace | 1253 | } // namespace |
| 1233 | } // namespace ge | 1254 | } // namespace ge |
| @@ -558,4 +558,122 @@ TEST_F(ZipArchiveUt, TestZipArchiveWriter_Ok_SaveModelDataToBufferWithLargeData) | |||
| 558 | const auto file_names = archive.ListFiles(); | 558 | const auto file_names = archive.ListFiles(); |
| 559 | ASSERT_EQ(file_names.size(), 1U); | 559 | ASSERT_EQ(file_names.size(), 1U); |
| 560 | } | 560 | } |
| 561 | + | ||
| 562 | +TEST_F(ZipArchiveUt, TestZipArchiveWriter_Fail_ArchivePathEndsWithSlash) { | ||
| 563 | + ZipArchiveWriter zip_writer(test_work_dir + "/"); | ||
| 564 | + EXPECT_FALSE(zip_writer.IsMemFileOpened()); | ||
| 565 | +} | ||
| 566 | + | ||
| 567 | +TEST_F(ZipArchiveUt, TestZipArchiveWriter_Ok_ArchivePathNoExtension) { | ||
| 568 | + const std::string zipfile_path = PathUtils::Join({test_work_dir, "no_ext_archive"}); | ||
| 569 | + ZipArchiveWriter zip_writer(zipfile_path); | ||
| 570 | + ASSERT_TRUE(zip_writer.IsMemFileOpened()); | ||
| 571 | + const std::string buffer = "test_data_no_ext"; | ||
| 572 | + EXPECT_TRUE(zip_writer.WriteBytes("data.txt", buffer.data(), buffer.size())); | ||
| 573 | + ASSERT_TRUE(zip_writer.SaveModelDataToFile()); | ||
| 574 | + ASSERT_FALSE(zip_writer.IsMemFileOpened()); | ||
| 575 | +} | ||
| 576 | + | ||
| 577 | +TEST_F(ZipArchiveUt, TestZipArchiveWriter_Ok_ArchivePathNoSlash) { | ||
| 578 | + const std::string zipfile_name = "no_slash.zip"; | ||
| 579 | + ZipArchiveWriter zip_writer(zipfile_name); | ||
| 580 | + ASSERT_TRUE(zip_writer.IsMemFileOpened()); | ||
| 581 | + const std::string buffer = "test_data_no_slash"; | ||
| 582 | + EXPECT_TRUE(zip_writer.WriteBytes("data.txt", buffer.data(), buffer.size())); | ||
| 583 | + ASSERT_TRUE(zip_writer.SaveModelDataToFile()); | ||
| 584 | + ASSERT_FALSE(zip_writer.IsMemFileOpened()); | ||
| 585 | + (void)std::remove(zipfile_name.c_str()); | ||
| 586 | +} | ||
| 587 | + | ||
| 588 | +TEST_F(ZipArchiveUt, TestZipArchiveWriter_Ok_ArchivePathDotOnly) { | ||
| 589 | + const std::string zipfile_path = PathUtils::Join({test_work_dir, ".zip"}); | ||
| 590 | + ZipArchiveWriter zip_writer(zipfile_path); | ||
| 591 | + ASSERT_TRUE(zip_writer.IsMemFileOpened()); | ||
| 592 | + const std::string buffer = "test_data_dot"; | ||
| 593 | + EXPECT_TRUE(zip_writer.WriteBytes("data.txt", buffer.data(), buffer.size())); | ||
| 594 | + ASSERT_TRUE(zip_writer.SaveModelDataToFile()); | ||
| 595 | + ASSERT_FALSE(zip_writer.IsMemFileOpened()); | ||
| 596 | +} | ||
| 597 | + | ||
| 598 | +TEST_F(ZipArchiveUt, TestSimpleZipArchiveReader_Fail_NullStream) { | ||
| 599 | + SimpleZipArchiveReader reader(nullptr, 0); | ||
| 600 | + EXPECT_FALSE(reader.IsGood()); | ||
| 601 | +} | ||
| 602 | + | ||
| 603 | +TEST_F(ZipArchiveUt, TestZipArchiveWriter_Ok_WriteBytesNoCompressionLargeData) { | ||
| 604 | + const std::string zipfile_path = PathUtils::Join({test_work_dir, "large_nocompress.zip"}); | ||
| 605 | + ZipArchiveWriter zip_writer(zipfile_path); | ||
| 606 | + ASSERT_TRUE(zip_writer.IsMemFileOpened()); | ||
| 607 | + | ||
| 608 | + constexpr size_t kDataSize = 200UL * 1024UL; | ||
| 609 | + std::vector<uint8_t> data(kDataSize, 0x42); | ||
| 610 | + EXPECT_TRUE(zip_writer.WriteBytes("large_data.bin", data.data(), data.size(), false)); | ||
| 611 | + ASSERT_TRUE(zip_writer.SaveModelDataToFile()); | ||
| 612 | + | ||
| 613 | + const auto file_buf = ReadFileToVector(zipfile_path); | ||
| 614 | + RAIIZipArchive archive(file_buf.data(), file_buf.size()); | ||
| 615 | + ASSERT_TRUE(archive.IsGood()); | ||
| 616 | + const auto file_names = archive.ListFiles(); | ||
| 617 | + ASSERT_EQ(file_names.size(), 1U); | ||
| 618 | +} | ||
| 619 | + | ||
| 620 | +TEST_F(ZipArchiveUt, TestZipArchiveWriter_Ok_MultipleEntriesWithGrowth) { | ||
| 621 | + const std::string zipfile_path = PathUtils::Join({test_work_dir, "multi_growth.zip"}); | ||
| 622 | + ZipArchiveWriter zip_writer(zipfile_path); | ||
| 623 | + ASSERT_TRUE(zip_writer.IsMemFileOpened()); | ||
| 624 | + | ||
| 625 | + for (int i = 0; i < 10; ++i) { | ||
| 626 | + std::vector<uint8_t> data(32UL * 1024UL, static_cast<uint8_t>(i)); | ||
| 627 | + EXPECT_TRUE(zip_writer.WriteBytes("entry_" + std::to_string(i) + ".bin", data.data(), data.size(), false)); | ||
| 628 | + } | ||
| 629 | + ASSERT_TRUE(zip_writer.SaveModelDataToFile()); | ||
| 630 | + | ||
| 631 | + const auto file_buf = ReadFileToVector(zipfile_path); | ||
| 632 | + RAIIZipArchive archive(file_buf.data(), file_buf.size()); | ||
| 633 | + ASSERT_TRUE(archive.IsGood()); | ||
| 634 | + const auto file_names = archive.ListFiles(); | ||
| 635 | + ASSERT_EQ(file_names.size(), 10U); | ||
| 636 | +} | ||
| 637 | + | ||
| 638 | +TEST_F(ZipArchiveUt, TestZipArchiveWriter_Ok_WriteEndOfFileTwice) { | ||
| 639 | + const std::string zipfile_path = PathUtils::Join({test_work_dir, "double_close.zip"}); | ||
| 640 | + ZipArchiveWriter zip_writer(zipfile_path); | ||
| 641 | + ASSERT_TRUE(zip_writer.IsMemFileOpened()); | ||
| 642 | + const std::string buffer = "test_double_close"; | ||
| 643 | + EXPECT_TRUE(zip_writer.WriteBytes("data.txt", buffer.data(), buffer.size())); | ||
| 644 | + EXPECT_TRUE(zip_writer.WriteEndOfFile()); | ||
| 645 | + EXPECT_TRUE(zip_writer.WriteEndOfFile()); | ||
| 646 | +} | ||
| 647 | + | ||
| 648 | +TEST_F(ZipArchiveUt, TestZipArchiveWriter_Ok_SaveModelDataToFileWithCompressedData) { | ||
| 649 | + const std::string zipfile_path = PathUtils::Join({test_work_dir, "compressed_save.zip"}); | ||
| 650 | + ZipArchiveWriter zip_writer(zipfile_path); | ||
| 651 | + ASSERT_TRUE(zip_writer.IsMemFileOpened()); | ||
| 652 | + | ||
| 653 | + std::string data(50000, 'A'); | ||
| 654 | + EXPECT_TRUE(zip_writer.WriteBytes("compressed.bin", data.data(), data.size(), true)); | ||
| 655 | + ASSERT_TRUE(zip_writer.SaveModelDataToFile()); | ||
| 656 | + | ||
| 657 | + const auto file_buf = ReadFileToVector(zipfile_path); | ||
| 658 | + RAIIZipArchive archive(file_buf.data(), file_buf.size()); | ||
| 659 | + ASSERT_TRUE(archive.IsGood()); | ||
| 660 | + const auto file_names = archive.ListFiles(); | ||
| 661 | + ASSERT_EQ(file_names.size(), 1U); | ||
| 662 | +} | ||
| 663 | + | ||
| 664 | +TEST_F(ZipArchiveUt, TestSimpleZipArchiveReader_Ok_ListFilesFromCompressedArchive) { | ||
| 665 | + const std::string archive_path = PathUtils::Join({test_work_dir, "__compressed_reader.zip"}); | ||
| 666 | + const std::vector<std::pair<std::string, std::string>> entries = { | ||
| 667 | + {"file1.txt", std::string(10000, 'X')}, | ||
| 668 | + {"file2.txt", std::string(5000, 'Y')}, | ||
| 669 | + }; | ||
| 670 | + CreateTestZipArchive(archive_path, entries, true); | ||
| 671 | + | ||
| 672 | + const auto file_buf = ReadFileToVector(archive_path); | ||
| 673 | + SimpleZipArchiveReader reader(file_buf.data(), file_buf.size()); | ||
| 674 | + ASSERT_TRUE(reader.IsGood()); | ||
| 675 | + | ||
| 676 | + const auto file_names = reader.ListFiles(); | ||
| 677 | + ASSERT_EQ(file_names.size(), 2U); | ||
| 678 | +} | ||
| 561 | } // namespace ge | 679 | } // namespace ge |
| @@ -154,5 +154,88 @@ TEST_F(UtestFusionUtils, WillCauseCycleIfFuse_GraphWithControlEdgeCycle_ReturnTr | |||
| 154 | ASSERT_NE(match_result, nullptr); | 154 | ASSERT_NE(match_result, nullptr); |
| 155 | EXPECT_TRUE(FusionUtils::WillCauseCycleIfFuse(match_result)); | 155 | EXPECT_TRUE(FusionUtils::WillCauseCycleIfFuse(match_result)); |
| 156 | } | 156 | } |
| 157 | + | ||
| 158 | +TEST_F(UtestFusionUtils, ParseFusionSwitch_NonExistentFile_ReturnsEmpty) { | ||
| 159 | + GetThreadLocalContext().SetGlobalOption({{FUSION_SWITCH_FILE, "/nonexistent/path/fusion_switch.json"}}); | ||
| 160 | + auto result = FusionUtils::ParseFusionSwitch(); | ||
| 161 | + EXPECT_TRUE(result.empty()); | ||
| 162 | +} | ||
| 163 | + | ||
| 164 | +TEST_F(UtestFusionUtils, WillCauseCycleIfFuse_EmptyNodesVector_ReturnFalse) { | ||
| 165 | + std::vector<NodePtr> empty_nodes; | ||
| 166 | + EXPECT_FALSE(FusionUtils::WillCauseCycleIfFuse(empty_nodes)); | ||
| 167 | +} | ||
| 168 | + | ||
| 169 | +TEST_F(UtestFusionUtils, WillCauseCycleIfFuse_AllNullNodes_ReturnFalse) { | ||
| 170 | + std::vector<NodePtr> null_nodes = {nullptr, nullptr}; | ||
| 171 | + EXPECT_FALSE(FusionUtils::WillCauseCycleIfFuse(null_nodes)); | ||
| 172 | +} | ||
| 173 | + | ||
| 174 | +TEST_F(UtestFusionUtils, BuildSubgraphBoundaryFromNode_NodeWithNoInputs) { | ||
| 175 | + using namespace ge::es; | ||
| 176 | + auto graph_builder = EsGraphBuilder("boundary_test"); | ||
| 177 | + auto esb_graph = graph_builder.GetCGraphBuilder(); | ||
| 178 | + auto data = EsCreateGraphInput(esb_graph, 0); | ||
| 179 | + auto relu = EsRelu(data); | ||
| 180 | + esb_graph->SetGraphOutput(relu, 0); | ||
| 181 | + auto graph = graph_builder.BuildAndReset(); | ||
| 182 | + | ||
| 183 | + auto compute_graph = GraphUtilsEx::GetComputeGraph(*graph); | ||
| 184 | + auto node_ptr = compute_graph->GetDirectNode().at(1); | ||
| 185 | + auto boundary = FusionUtils::BuildSubgraphBoundaryFromNode(node_ptr); | ||
| 186 | + EXPECT_NE(boundary, nullptr); | ||
| 187 | +} | ||
| 188 | + | ||
| 189 | +TEST_F(UtestFusionUtils, ParseFusionSwitch_InvalidJsonFormat_ReturnsEmpty) { | ||
| 190 | + std::string json_str = "not a valid json"; | ||
| 191 | + std::ofstream json_file("./fusion_switch_invalid.json"); | ||
| 192 | + json_file << json_str << std::endl; | ||
| 193 | + json_file.close(); | ||
| 194 | + | ||
| 195 | + std::string config_file_path = GetCodeDir() + "/fusion_switch_invalid.json"; | ||
| 196 | + GetThreadLocalContext().SetGlobalOption({{FUSION_SWITCH_FILE, config_file_path}}); | ||
| 197 | + auto result = FusionUtils::ParseFusionSwitch(); | ||
| 198 | + EXPECT_TRUE(result.empty()); | ||
| 199 | + remove("./fusion_switch_invalid.json"); | ||
| 200 | +} | ||
| 201 | + | ||
| 202 | +TEST_F(UtestFusionUtils, ParseFusionSwitch_TopLevelNotObject_ReturnsEmpty) { | ||
| 203 | + std::string json_str = "[1, 2, 3]"; | ||
| 204 | + std::ofstream json_file("./fusion_switch_array.json"); | ||
| 205 | + json_file << json_str << std::endl; | ||
| 206 | + json_file.close(); | ||
| 207 | + | ||
| 208 | + std::string config_file_path = GetCodeDir() + "/fusion_switch_array.json"; | ||
| 209 | + GetThreadLocalContext().SetGlobalOption({{FUSION_SWITCH_FILE, config_file_path}}); | ||
| 210 | + auto result = FusionUtils::ParseFusionSwitch(); | ||
| 211 | + EXPECT_TRUE(result.empty()); | ||
| 212 | + remove("./fusion_switch_array.json"); | ||
| 213 | +} | ||
| 214 | + | ||
| 215 | +TEST_F(UtestFusionUtils, ParseFusionSwitch_NoSwitchKey_ReturnsEmpty) { | ||
| 216 | + std::string json_str = "{\"key\": \"value\"}"; | ||
| 217 | + std::ofstream json_file("./fusion_switch_no_switch.json"); | ||
| 218 | + json_file << json_str << std::endl; | ||
| 219 | + json_file.close(); | ||
| 220 | + | ||
| 221 | + std::string config_file_path = GetCodeDir() + "/fusion_switch_no_switch.json"; | ||
| 222 | + GetThreadLocalContext().SetGlobalOption({{FUSION_SWITCH_FILE, config_file_path}}); | ||
| 223 | + auto result = FusionUtils::ParseFusionSwitch(); | ||
| 224 | + EXPECT_TRUE(result.empty()); | ||
| 225 | + remove("./fusion_switch_no_switch.json"); | ||
| 226 | +} | ||
| 227 | + | ||
| 228 | +TEST_F(UtestFusionUtils, ParseFusionSwitch_GraphFusionNotObject_ReturnsEmpty) { | ||
| 229 | + std::string json_str = "{\"Switch\": {\"GraphFusion\": \"not_object\"}}"; | ||
| 230 | + std::ofstream json_file("./fusion_switch_not_obj.json"); | ||
| 231 | + json_file << json_str << std::endl; | ||
| 232 | + json_file.close(); | ||
| 233 | + | ||
| 234 | + std::string config_file_path = GetCodeDir() + "/fusion_switch_not_obj.json"; | ||
| 235 | + GetThreadLocalContext().SetGlobalOption({{FUSION_SWITCH_FILE, config_file_path}}); | ||
| 236 | + auto result = FusionUtils::ParseFusionSwitch(); | ||
| 237 | + EXPECT_TRUE(result.empty()); | ||
| 238 | + remove("./fusion_switch_not_obj.json"); | ||
| 239 | +} | ||
| 157 | } // namespace fusion | 240 | } // namespace fusion |
| 158 | } // namespace ge | 241 | } // namespace ge |
| @@ -2212,5 +2212,189 @@ TEST_F(UtestFusionPassExecutor, RunPasses_SkipOrphanSubgraph) { | |||
| 2212 | // 顶层图能正常处理,孤儿子图被安全跳过,不应崩溃。 | 2212 | // 顶层图能正常处理,孤儿子图被安全跳过,不应崩溃。 |
| 2213 | EXPECT_EQ(pass_executor.RunPasses(target_compute_graph, CustomPassStage::kAfterInferShape), SUCCESS); | 2213 | EXPECT_EQ(pass_executor.RunPasses(target_compute_graph, CustomPassStage::kAfterInferShape), SUCCESS); |
| 2214 | } | 2214 | } |
| 2215 | + | ||
| 2216 | +TEST_F(UtestFusionPassExecutor, PythonFusionBasePass_RegisterDuplicateDescriptorKey) { | ||
| 2217 | + PythonPassDescriptor pass_desc; | ||
| 2218 | + pass_desc.descriptor_key = "python.duplicate.register.test"; | ||
| 2219 | + pass_desc.pass_name = "DuplicateRegisterPass"; | ||
| 2220 | + pass_desc.module_name = "python.pass.sample"; | ||
| 2221 | + pass_desc.class_name = "DuplicateRegisterPass"; | ||
| 2222 | + pass_desc.stage = CustomPassStage::kAfterInferShape; | ||
| 2223 | + pass_desc.kind = PythonPassKind::kFusionBase; | ||
| 2224 | + | ||
| 2225 | + PythonFusionPassCallbacks callbacks; | ||
| 2226 | + callbacks.create = CreatePythonFusionBasePassHolderForUt; | ||
| 2227 | + callbacks.destroy = DestroyPythonFusionBasePassHolderForUt; | ||
| 2228 | + callbacks.run = RunPythonFusionBasePassHolderForUt; | ||
| 2229 | + | ||
| 2230 | + ASSERT_TRUE(RegisterPythonPass(pass_desc, callbacks)); | ||
| 2231 | + EXPECT_FALSE(RegisterPythonPass(pass_desc, callbacks)); | ||
| 2232 | + ClearPythonPassRuntimeRegistry(); | ||
| 2233 | +} | ||
| 2234 | + | ||
| 2235 | +TEST_F(UtestFusionPassExecutor, PythonFusionBasePass_UnregisterNonExistentKey) { | ||
| 2236 | + EXPECT_FALSE(PythonFusionPassRuntimeRegistry::GetInstance().Unregister("non_existent_key")); | ||
| 2237 | +} | ||
| 2238 | + | ||
| 2239 | +TEST_F(UtestFusionPassExecutor, PythonFusionBasePass_AdapterWithUnregisteredDesc) { | ||
| 2240 | + PythonPassDescriptor pass_desc; | ||
| 2241 | + pass_desc.descriptor_key = "python.unregistered.adapter"; | ||
| 2242 | + pass_desc.pass_name = "UnregisteredAdapterPass"; | ||
| 2243 | + pass_desc.module_name = "python.pass.sample"; | ||
| 2244 | + pass_desc.class_name = "UnregisteredAdapterPass"; | ||
| 2245 | + pass_desc.stage = CustomPassStage::kAfterInferShape; | ||
| 2246 | + pass_desc.kind = PythonPassKind::kFusionBase; | ||
| 2247 | + | ||
| 2248 | + auto adapter = std::make_unique<PythonFusionBasePassAdapter>(pass_desc); | ||
| 2249 | + EXPECT_FALSE(adapter->IsValid()); | ||
| 2250 | + | ||
| 2251 | + GraphPtr graph = std::make_shared<Graph>(); | ||
| 2252 | + CustomPassContext context; | ||
| 2253 | + EXPECT_EQ(adapter->Run(graph, context), FAILED); | ||
| 2254 | +} | ||
| 2255 | + | ||
| 2256 | +TEST_F(UtestFusionPassExecutor, PythonFusionBasePass_RunWithInvalidCallback) { | ||
| 2257 | + PythonPassDescriptor pass_desc; | ||
| 2258 | + pass_desc.descriptor_key = "python.invalid.callback.test"; | ||
| 2259 | + pass_desc.pass_name = "InvalidCallbackPass"; | ||
| 2260 | + pass_desc.module_name = "python.pass.sample"; | ||
| 2261 | + pass_desc.class_name = "InvalidCallbackPass"; | ||
| 2262 | + pass_desc.stage = CustomPassStage::kAfterInferShape; | ||
| 2263 | + pass_desc.kind = PythonPassKind::kFusionBase; | ||
| 2264 | + | ||
| 2265 | + PythonFusionPassCallbacks callbacks; | ||
| 2266 | + callbacks.create = CreatePythonFusionBasePassHolderForUt; | ||
| 2267 | + callbacks.destroy = DestroyPythonFusionBasePassHolderForUt; | ||
| 2268 | + callbacks.run = nullptr; | ||
| 2269 | + | ||
| 2270 | + EXPECT_FALSE(RegisterPythonPass(pass_desc, callbacks)); | ||
| 2271 | + ClearPythonPassRuntimeRegistry(); | ||
| 2272 | +} | ||
| 2273 | + | ||
| 2274 | +TEST_F(UtestFusionPassExecutor, PythonFusionBasePass_GetPassDescriptor) { | ||
| 2275 | + PythonPassDescriptor pass_desc; | ||
| 2276 | + pass_desc.descriptor_key = "python.get.descriptor.test"; | ||
| 2277 | + pass_desc.pass_name = "GetDescriptorPass"; | ||
| 2278 | + pass_desc.module_name = "python.pass.sample"; | ||
| 2279 | + pass_desc.class_name = "GetDescriptorPass"; | ||
| 2280 | + pass_desc.stage = CustomPassStage::kAfterInferShape; | ||
| 2281 | + pass_desc.kind = PythonPassKind::kFusionBase; | ||
| 2282 | + | ||
| 2283 | + PythonFusionPassCallbacks callbacks; | ||
| 2284 | + callbacks.create = CreatePythonFusionBasePassHolderForUt; | ||
| 2285 | + callbacks.destroy = DestroyPythonFusionBasePassHolderForUt; | ||
| 2286 | + callbacks.run = RunPythonFusionBasePassHolderForUt; | ||
| 2287 | + | ||
| 2288 | + ASSERT_TRUE(RegisterPythonPass(pass_desc, callbacks)); | ||
| 2289 | + | ||
| 2290 | + auto holder = std::make_unique<PythonPassHolder>(pass_desc); | ||
| 2291 | + ASSERT_TRUE(holder->IsValid()); | ||
| 2292 | + const auto &retrieved_desc = holder->GetPassDescriptor(); | ||
| 2293 | + EXPECT_EQ(retrieved_desc.descriptor_key, pass_desc.descriptor_key); | ||
| 2294 | + EXPECT_EQ(retrieved_desc.pass_name, pass_desc.pass_name); | ||
| 2295 | + | ||
| 2296 | + ClearPythonPassRuntimeRegistry(); | ||
| 2297 | +} | ||
| 2298 | + | ||
| 2299 | +TEST_F(UtestFusionPassExecutor, PythonFusionBasePass_CreatePythonPassAdapterWithMissingDescriptor) { | ||
| 2300 | + EXPECT_EQ(CreatePythonPassAdapter(), nullptr); | ||
| 2301 | +} | ||
| 2302 | + | ||
| 2303 | +TEST_F(UtestFusionPassExecutor, PythonPassBridgeCApi_RegisterPassesWithNullRegistrar_Fails) { | ||
| 2304 | + const auto *api = LoadBridgeApiForUt(); | ||
| 2305 | + if (api == nullptr) { | ||
| 2306 | + GTEST_SKIP() << "Bridge API not available"; | ||
| 2307 | + } | ||
| 2308 | + EXPECT_EQ(api->register_passes(nullptr), FAILED); | ||
| 2309 | +} | ||
| 2310 | + | ||
| 2311 | +TEST_F(UtestFusionPassExecutor, PythonPassBridgeCApi_SetArtifactConfigNull_Succeeds) { | ||
| 2312 | + const auto *api = LoadBridgeApiForUt(); | ||
| 2313 | + if (api == nullptr) { | ||
| 2314 | + GTEST_SKIP() << "Bridge API not available"; | ||
| 2315 | + } | ||
| 2316 | + EXPECT_EQ(api->set_artifact_config(nullptr), SUCCESS); | ||
| 2317 | + CleanupBridgeStateForUt(*api); | ||
| 2318 | +} | ||
| 2319 | + | ||
| 2320 | +TEST_F(UtestFusionPassExecutor, PythonPassBridgeCApi_ResetBridgeStateWhenPyNotInitialized_Succeeds) { | ||
| 2321 | + const auto *api = LoadBridgeApiForUt(); | ||
| 2322 | + if (api == nullptr) { | ||
| 2323 | + GTEST_SKIP() << "Bridge API not available"; | ||
| 2324 | + } | ||
| 2325 | + api->reset_bridge_state(); | ||
| 2326 | + EXPECT_NE(api->reset_bridge_state, nullptr); | ||
| 2327 | +} | ||
| 2328 | + | ||
| 2329 | +TEST_F(UtestFusionPassExecutor, PythonPassBridgeCApi_ShutdownBridge_Succeeds) { | ||
| 2330 | + const auto *api = LoadBridgeApiForUt(); | ||
| 2331 | + if (api == nullptr) { | ||
| 2332 | + GTEST_SKIP() << "Bridge API not available"; | ||
| 2333 | + } | ||
| 2334 | + api->shutdown_bridge(); | ||
| 2335 | + EXPECT_NE(api->shutdown_bridge, nullptr); | ||
| 2336 | +} | ||
| 2337 | + | ||
| 2338 | +TEST_F(UtestFusionPassExecutor, PythonPassBridgeCApi_SetArtifactConfigValid_Succeeds) { | ||
| 2339 | + const auto *api = LoadBridgeApiForUt(); | ||
| 2340 | + if (api == nullptr) { | ||
| 2341 | + GTEST_SKIP() << "Bridge API not available"; | ||
| 2342 | + } | ||
| 2343 | + PythonFusionPassBridgeArtifactConfig config; | ||
| 2344 | + config.artifact_root = "/tmp/test_artifact"; | ||
| 2345 | + config.native_module_path = "/tmp/test_native"; | ||
| 2346 | + EXPECT_EQ(api->set_artifact_config(&config), SUCCESS); | ||
| 2347 | + CleanupBridgeStateForUt(*api); | ||
| 2348 | +} | ||
| 2349 | + | ||
| 2350 | +TEST_F(UtestFusionPassExecutor, PythonPassBridgeCApi_SetArtifactConfigTwice_Succeeds) { | ||
| 2351 | + const auto *api = LoadBridgeApiForUt(); | ||
| 2352 | + if (api == nullptr) { | ||
| 2353 | + GTEST_SKIP() << "Bridge API not available"; | ||
| 2354 | + } | ||
| 2355 | + PythonFusionPassBridgeArtifactConfig config1; | ||
| 2356 | + config1.artifact_root = "/tmp/test1"; | ||
| 2357 | + config1.native_module_path = "/tmp/native1"; | ||
| 2358 | + EXPECT_EQ(api->set_artifact_config(&config1), SUCCESS); | ||
| 2359 | + PythonFusionPassBridgeArtifactConfig config2; | ||
| 2360 | + config2.artifact_root = "/tmp/test2"; | ||
| 2361 | + config2.native_module_path = "/tmp/native2"; | ||
| 2362 | + EXPECT_EQ(api->set_artifact_config(&config2), SUCCESS); | ||
| 2363 | + CleanupBridgeStateForUt(*api); | ||
| 2364 | +} | ||
| 2365 | + | ||
| 2366 | +TEST_F(UtestFusionPassExecutor, PythonPassBridgeCApi_ResetBridgeStateTwice_Succeeds) { | ||
| 2367 | + const auto *api = LoadBridgeApiForUt(); | ||
| 2368 | + if (api == nullptr) { | ||
| 2369 | + GTEST_SKIP() << "Bridge API not available"; | ||
| 2370 | + } | ||
| 2371 | + api->reset_bridge_state(); | ||
| 2372 | + api->reset_bridge_state(); | ||
| 2373 | + EXPECT_NE(api->reset_bridge_state, nullptr); | ||
| 2374 | +} | ||
| 2375 | + | ||
| 2376 | +TEST_F(UtestFusionPassExecutor, PythonPassBridgeCApi_ShutdownTwice_Succeeds) { | ||
| 2377 | + const auto *api = LoadBridgeApiForUt(); | ||
| 2378 | + if (api == nullptr) { | ||
| 2379 | + GTEST_SKIP() << "Bridge API not available"; | ||
| 2380 | + } | ||
| 2381 | + api->shutdown_bridge(); | ||
| 2382 | + api->shutdown_bridge(); | ||
| 2383 | + EXPECT_NE(api->shutdown_bridge, nullptr); | ||
| 2384 | +} | ||
| 2385 | + | ||
| 2386 | +TEST_F(UtestFusionPassExecutor, PythonPassBridgeCApi_RegisterPassesWithoutPython_Fails) { | ||
| 2387 | + const auto *api = LoadBridgeApiForUt(); | ||
| 2388 | + if (api == nullptr) { | ||
| 2389 | + GTEST_SKIP() << "Bridge API not available"; | ||
| 2390 | + } | ||
| 2391 | + PythonFusionPassRegistrar registrar; | ||
| 2392 | + registrar.register_pass = [](const PythonPassDescriptor *, const PythonFusionPassCallbacks *) -> bool { | ||
| 2393 | + return false; | ||
| 2394 | + }; | ||
| 2395 | + EXPECT_NE(api->register_passes(®istrar), SUCCESS); | ||
| 2396 | + CleanupBridgeStateForUt(*api); | ||
| 2397 | +} | ||
| 2398 | + | ||
| 2215 | } // namespace fusion | 2399 | } // namespace fusion |
| 2216 | } // namespace ge | 2400 | } // namespace ge |
| @@ -1200,4 +1200,58 @@ TEST_F(UtestGeGenerator, generate_offline_model_with_attr_compression_default) { | |||
| 1200 | (void)generator.GenerateOfflineModel(graph, name, inputs); | 1200 | (void)generator.GenerateOfflineModel(graph, name, inputs); |
| 1201 | // Test passes if no crash or exception related to attr_compression | 1201 | // Test passes if no crash or exception related to attr_compression |
| 1202 | } | 1202 | } |
| 1203 | + | ||
| 1204 | +TEST_F(UtestGeGenerator, CheckForSingleOpWithMoreOutputsThanExpected) { | ||
| 1205 | + GeGenerator generator; | ||
| 1206 | + generator.Initialize({}); | ||
| 1207 | + GeTensorDesc tensor_desc; | ||
| 1208 | + shared_ptr<OpDesc> op_desc = std::make_shared<OpDesc>("Add", "add"); | ||
| 1209 | + op_desc->AddInputDesc(tensor_desc); | ||
| 1210 | + op_desc->AddInputDesc(tensor_desc); | ||
| 1211 | + op_desc->AddOutputDesc(tensor_desc); | ||
| 1212 | + GeTensor tensor(tensor_desc); | ||
| 1213 | + vector<GeTensor> inputs = {tensor, tensor}; | ||
| 1214 | + vector<GeTensor> outputs = {tensor, tensor, tensor}; | ||
| 1215 | + EXPECT_EQ(generator.CheckForSingleOp(op_desc, inputs, outputs), PARAM_INVALID); | ||
| 1216 | + EXPECT_EQ(generator.Finalize(), SUCCESS); | ||
| 1217 | +} | ||
| 1218 | + | ||
| 1219 | +TEST_F(UtestGeGenerator, GenerateModelWithNullImpl) { | ||
| 1220 | + auto &instance = GeGenerator::GetInstance(); | ||
| 1221 | + Graph graph("graph"); | ||
| 1222 | + std::vector<GeTensor> inputs; | ||
| 1223 | + ModelBufferData model; | ||
| 1224 | + EXPECT_NE(instance.GenerateOnlineModel(graph, inputs, model), SUCCESS); | ||
| 1225 | +} | ||
| 1226 | + | ||
| 1227 | +TEST_F(UtestGeGenerator, GenerateInfershapeGraphWithNullImpl) { | ||
| 1228 | + GeGenerator generator; | ||
| 1229 | + Graph graph("graph"); | ||
| 1230 | + EXPECT_EQ(generator.GenerateInfershapeGraph(graph), PARAM_INVALID); | ||
| 1231 | +} | ||
| 1232 | + | ||
| 1233 | +TEST_F(UtestGeGenerator, RemoveConstWithEmptyInputs) { | ||
| 1234 | + GeGenerator generator; | ||
| 1235 | + std::vector<GeTensor> inputs; | ||
| 1236 | + std::vector<GeTensor> outputs; | ||
| 1237 | + EXPECT_NO_THROW(generator.RemoveConst(inputs, outputs)); | ||
| 1238 | +} | ||
| 1239 | + | ||
| 1240 | +TEST_F(UtestGeGenerator, GenerateModelWithNormalBuildMode) { | ||
| 1241 | + InitGeLib(); | ||
| 1242 | + auto &instance = GeGenerator::GetInstance(); | ||
| 1243 | + std::map<std::string, std::string> options; | ||
| 1244 | + options["ge.buildMode"] = BUILD_MODE_NORMAL; | ||
| 1245 | + instance.Initialize(options); | ||
| 1246 | + auto compute_graph = MakeGraph(); | ||
| 1247 | + compute_graph->TopologicalSorting(); | ||
| 1248 | + Graph graph = ge::GraphUtilsEx::CreateGraphFromComputeGraph(compute_graph); | ||
| 1249 | + std::string file_name_prefix = "prefix"; | ||
| 1250 | + std::vector<GeTensor> inputs; | ||
| 1251 | + ModelBufferData model; | ||
| 1252 | + bool is_offline = true; | ||
| 1253 | + EXPECT_EQ(instance.GenerateModel(graph, file_name_prefix, inputs, model, is_offline), SUCCESS); | ||
| 1254 | + EXPECT_EQ(instance.Finalize(), SUCCESS); | ||
| 1255 | + FinalizeGeLib(); | ||
| 1256 | +} | ||
| 1203 | } // namespace ge | 1257 | } // namespace ge |
| @@ -1978,4 +1978,100 @@ TEST_F(UtestBlockMemAssigner, CanReuseZeroCopyBlock_unsupport_custom) { | |||
| 1978 | EXPECT_EQ(mem_assigner.GetAllRefCount(node_index_io, is_reuse_zero_copy), 1); | 1978 | EXPECT_EQ(mem_assigner.GetAllRefCount(node_index_io, is_reuse_zero_copy), 1); |
| 1979 | EXPECT_EQ(is_reuse_zero_copy, false); | 1979 | EXPECT_EQ(is_reuse_zero_copy, false); |
| 1980 | } | 1980 | } |
| 1981 | +TEST_F(UtestBlockMemAssigner, AssignOutputMemory_IteratorV2_NoReuse) { | ||
| 1982 | + auto builder = std::make_shared<block_mem_ut::GraphBuilder>("graph"); | ||
| 1983 | + auto node = builder->AddNode("node", "IteratorV2", 1, 1); | ||
| 1984 | + ComputeGraphPtr compute_graph = builder->GetGraph(); | ||
| 1985 | + MemAssistInfo mem_assist_info; | ||
| 1986 | + mem_assist_info.compute_graph = compute_graph; | ||
| 1987 | + auto ret = | ||
| 1988 | + GraphUtils::GetRefMapping(compute_graph, mem_assist_info.symbol_to_anchors, mem_assist_info.anchor_to_symbol); | ||
| 1989 | + EXPECT_EQ(ret, SUCCESS); | ||
| 1990 | + BlockMemAssigner::PreparationForAssign(mem_assist_info); | ||
| 1991 | + BinaryBlockMemAssigner assigner(mem_assist_info); | ||
| 1992 | + assigner.SetReuseStrategy(ReuseStrategy{true, true, true, true}); | ||
| 1993 | + std::vector<int64_t> ranges; | ||
| 1994 | + assigner.GetMemoryRanges(ranges); | ||
| 1995 | + EXPECT_EQ(assigner.AssignOutputMemoryWithReuse(node, ranges), SUCCESS); | ||
| 1996 | +} | ||
| 1997 | + | ||
| 1998 | +TEST_F(UtestBlockMemAssigner, AssignOutputMemory_NullOpDesc_Handle) { | ||
| 1999 | + auto builder = std::make_shared<block_mem_ut::GraphBuilder>("graph"); | ||
| 2000 | + auto node = builder->AddNode("node", DATA, 1, 1); | ||
| 2001 | + ComputeGraphPtr compute_graph = builder->GetGraph(); | ||
| 2002 | + MemAssistInfo mem_assist_info; | ||
| 2003 | + mem_assist_info.compute_graph = compute_graph; | ||
| 2004 | + auto ret = | ||
| 2005 | + GraphUtils::GetRefMapping(compute_graph, mem_assist_info.symbol_to_anchors, mem_assist_info.anchor_to_symbol); | ||
| 2006 | + EXPECT_EQ(ret, SUCCESS); | ||
| 2007 | + BlockMemAssigner::PreparationForAssign(mem_assist_info); | ||
| 2008 | + BinaryBlockMemAssigner assigner(mem_assist_info); | ||
| 2009 | + std::vector<int64_t> ranges; | ||
| 2010 | + assigner.GetMemoryRanges(ranges); | ||
| 2011 | + EXPECT_EQ(assigner.AssignOutputMemoryWithReuse(node, ranges), SUCCESS); | ||
| 2012 | +} | ||
| 2013 | + | ||
| 2014 | +TEST_F(UtestBlockMemAssigner, AssignOutputMemory_ZeroSizeOutput) { | ||
| 2015 | + auto builder = std::make_shared<block_mem_ut::GraphBuilder>("graph"); | ||
| 2016 | + auto node = builder->AddNode("node", DATA, 1, 1); | ||
| 2017 | + ComputeGraphPtr compute_graph = builder->GetGraph(); | ||
| 2018 | + auto op_desc = node->GetOpDesc(); | ||
| 2019 | + ASSERT_NE(op_desc, nullptr); | ||
| 2020 | + auto output_desc = op_desc->MutableOutputDesc(0); | ||
| 2021 | + ASSERT_NE(output_desc, nullptr); | ||
| 2022 | + TensorUtils::SetSize(*output_desc, 0); | ||
| 2023 | + MemAssistInfo mem_assist_info; | ||
| 2024 | + mem_assist_info.compute_graph = compute_graph; | ||
| 2025 | + auto ret = | ||
| 2026 | + GraphUtils::GetRefMapping(compute_graph, mem_assist_info.symbol_to_anchors, mem_assist_info.anchor_to_symbol); | ||
| 2027 | + EXPECT_EQ(ret, SUCCESS); | ||
| 2028 | + BlockMemAssigner::PreparationForAssign(mem_assist_info); | ||
| 2029 | + BinaryBlockMemAssigner assigner(mem_assist_info); | ||
| 2030 | + std::vector<int64_t> ranges; | ||
| 2031 | + assigner.GetMemoryRanges(ranges); | ||
| 2032 | + EXPECT_EQ(assigner.AssignOutputMemoryWithReuse(node, ranges), SUCCESS); | ||
| 2033 | +} | ||
| 2034 | + | ||
| 2035 | +TEST_F(UtestBlockMemAssigner, MemoryBlock_AddAndRelease) { | ||
| 2036 | + MemoryBlock block(reuse_strategy_, 512); | ||
| 2037 | + EXPECT_EQ(block.Size(), 512); | ||
| 2038 | + block.ref_count_ = 0; | ||
| 2039 | + EXPECT_NO_THROW(block.SetSize(1024)); | ||
| 2040 | + EXPECT_EQ(block.Size(), 1024); | ||
| 2041 | +} | ||
| 2042 | + | ||
| 2043 | +TEST_F(UtestBlockMemAssigner, MemoryBlock_ExtendAndResize) { | ||
| 2044 | + MemoryBlock block(reuse_strategy_, 256, 0, true, RT_MEMORY_HBM); | ||
| 2045 | + EXPECT_EQ(block.Size(), 256); | ||
| 2046 | + block.SetSize(512); | ||
| 2047 | + EXPECT_EQ(block.Size(), 512); | ||
| 2048 | + EXPECT_NO_THROW(block.Resize()); | ||
| 2049 | + EXPECT_EQ(block.HeadOffset(), 0U); | ||
| 2050 | + EXPECT_EQ(block.TailOffset(), 0U); | ||
| 2051 | +} | ||
| 2052 | + | ||
| 2053 | +TEST_F(UtestBlockMemAssigner, MemoryBlock_Clone) { | ||
| 2054 | + MemoryBlock block(reuse_strategy_, 1024, 1, true, RT_MEMORY_HBM); | ||
| 2055 | + auto cloned = block.Clone(); | ||
| 2056 | + ASSERT_NE(cloned, nullptr); | ||
| 2057 | + EXPECT_EQ(cloned->Size(), 1024); | ||
| 2058 | +} | ||
| 2059 | + | ||
| 2060 | +TEST_F(UtestBlockMemAssigner, AssignWorkSpaceMemoryWithReuse_BasicOp) { | ||
| 2061 | + auto builder = std::make_shared<block_mem_ut::GraphBuilder>("graph"); | ||
| 2062 | + auto node = builder->AddNode("node", ADD, 1, 1); | ||
| 2063 | + node->GetOpDesc()->SetWorkspaceBytes({1024, 2048}); | ||
| 2064 | + ComputeGraphPtr compute_graph = builder->GetGraph(); | ||
| 2065 | + MemAssistInfo mem_assist_info; | ||
| 2066 | + mem_assist_info.compute_graph = compute_graph; | ||
| 2067 | + auto ret = | ||
| 2068 | + GraphUtils::GetRefMapping(compute_graph, mem_assist_info.symbol_to_anchors, mem_assist_info.anchor_to_symbol); | ||
| 2069 | + EXPECT_EQ(ret, SUCCESS); | ||
| 2070 | + BlockMemAssigner::PreparationForAssign(mem_assist_info); | ||
| 2071 | + BinaryBlockMemAssigner assigner(mem_assist_info); | ||
| 2072 | + std::vector<int64_t> ranges; | ||
| 2073 | + assigner.GetMemoryRanges(ranges); | ||
| 2074 | + EXPECT_EQ(assigner.AssignWorkSpaceMemoryWithReuse(node, ranges), SUCCESS); | ||
| 2075 | +} | ||
| 2076 | + | ||
| 1981 | } // namespace ge | 2077 | } // namespace ge |
| @@ -1217,5 +1217,296 @@ TEST_F(StreamMergerTest, Merge_UnitSortByPeakLevelLoad_LoadBalance) { | |||
| 1217 | EXPECT_EQ(logical_to_physical.size(), 3); | 1217 | EXPECT_EQ(logical_to_physical.size(), 3); |
| 1218 | } | 1218 | } |
| 1219 | 1219 | ||
| 1220 | +TEST_F(StreamMergerTest, Merge_CrossStreamMultiWeight_LoadBalance) { | ||
| 1221 | + auto n0 = dag_->AddNode("n0", "Data"); | ||
| 1222 | + auto n1 = dag_->AddNode("n1", "Data"); | ||
| 1223 | + auto n2 = dag_->AddNode("n2", "Op1"); | ||
| 1224 | + auto n3 = dag_->AddNode("n3", "Op2"); | ||
| 1225 | + auto n4 = dag_->AddNode("n4", "Op3"); | ||
| 1226 | + auto n5 = dag_->AddNode("n5", "NetOutput"); | ||
| 1227 | + | ||
| 1228 | + for (int i = 0; i < 6; ++i) { | ||
| 1229 | + dag_->GetAllNodes()[i]->SetTopoId(i); | ||
| 1230 | + } | ||
| 1231 | + | ||
| 1232 | + dag_->AddEdge(n0, 0, n3, 0); | ||
| 1233 | + dag_->AddEdge(n0, 0, n4, 0); | ||
| 1234 | + dag_->AddEdge(n1, 0, n4, 0); | ||
| 1235 | + dag_->AddEdge(n2, 0, n5, 0); | ||
| 1236 | + dag_->AddEdge(n3, 0, n5, 0); | ||
| 1237 | + dag_->AddEdge(n4, 0, n5, 0); | ||
| 1238 | + | ||
| 1239 | + std::vector<std::vector<int32_t>> logical_routes = {{0, 2, 5}, {1}, {3, 4}}; | ||
| 1240 | + std::vector<int32_t> logical_to_physical; | ||
| 1241 | + | ||
| 1242 | + options_.strategy = StreamMergeStrategy::kLoadBalance; | ||
| 1243 | + options_.physical_stream_limit = 3; | ||
| 1244 | + options_.candidate_limit = 2; | ||
| 1245 | + options_.light_stream_limit = 2; | ||
| 1246 | + options_.repair_moves = 5; | ||
| 1247 | + StreamMerger merger(options_); | ||
| 1248 | + | ||
| 1249 | + auto status = merger.Merge(*dag_, logical_routes, logical_to_physical); | ||
| 1250 | + EXPECT_EQ(status, graphStatus::SUCCESS); | ||
| 1251 | + EXPECT_EQ(logical_to_physical.size(), 3); | ||
| 1252 | +} | ||
| 1253 | + | ||
| 1254 | +TEST_F(StreamMergerTest, Merge_CrossStreamMultiWeight_MainStream) { | ||
| 1255 | + auto n0 = dag_->AddNode("n0", "Data"); | ||
| 1256 | + auto n1 = dag_->AddNode("n1", "Data"); | ||
| 1257 | + auto n2 = dag_->AddNode("n2", "Op1"); | ||
| 1258 | + auto n3 = dag_->AddNode("n3", "Op2"); | ||
| 1259 | + auto n4 = dag_->AddNode("n4", "Op3"); | ||
| 1260 | + auto n5 = dag_->AddNode("n5", "NetOutput"); | ||
| 1261 | + | ||
| 1262 | + for (int i = 0; i < 6; ++i) { | ||
| 1263 | + dag_->GetAllNodes()[i]->SetTopoId(i); | ||
| 1264 | + } | ||
| 1265 | + | ||
| 1266 | + dag_->AddEdge(n0, 0, n3, 0); | ||
| 1267 | + dag_->AddEdge(n0, 0, n4, 0); | ||
| 1268 | + dag_->AddEdge(n1, 0, n4, 0); | ||
| 1269 | + dag_->AddEdge(n2, 0, n5, 0); | ||
| 1270 | + dag_->AddEdge(n3, 0, n5, 0); | ||
| 1271 | + dag_->AddEdge(n4, 0, n5, 0); | ||
| 1272 | + | ||
| 1273 | + std::vector<std::vector<int32_t>> logical_routes = {{0, 2, 5}, {1}, {3, 4}}; | ||
| 1274 | + std::vector<int32_t> logical_to_physical; | ||
| 1275 | + | ||
| 1276 | + options_.strategy = StreamMergeStrategy::kMainStream; | ||
| 1277 | + options_.physical_stream_limit = 3; | ||
| 1278 | + options_.candidate_limit = 2; | ||
| 1279 | + options_.low_conflict_limit = 2; | ||
| 1280 | + options_.repair_moves = 5; | ||
| 1281 | + StreamMerger merger(options_); | ||
| 1282 | + | ||
| 1283 | + auto status = merger.Merge(*dag_, logical_routes, logical_to_physical); | ||
| 1284 | + EXPECT_EQ(status, graphStatus::SUCCESS); | ||
| 1285 | + EXPECT_EQ(logical_to_physical.size(), 3); | ||
| 1286 | +} | ||
| 1287 | + | ||
| 1288 | +TEST_F(StreamMergerTest, Merge_CandidateLimitOne_LoadBalance) { | ||
| 1289 | + AddNodes(6); | ||
| 1290 | + | ||
| 1291 | + std::vector<std::vector<int32_t>> logical_routes; | ||
| 1292 | + for (int i = 0; i < 6; ++i) { | ||
| 1293 | + logical_routes.push_back({i}); | ||
| 1294 | + } | ||
| 1295 | + | ||
| 1296 | + std::vector<int32_t> logical_to_physical; | ||
| 1297 | + | ||
| 1298 | + options_.strategy = StreamMergeStrategy::kLoadBalance; | ||
| 1299 | + options_.physical_stream_limit = 4; | ||
| 1300 | + options_.candidate_limit = 1; | ||
| 1301 | + options_.light_stream_limit = 1; | ||
| 1302 | + options_.repair_moves = 3; | ||
| 1303 | + StreamMerger merger(options_); | ||
| 1304 | + | ||
| 1305 | + auto status = merger.Merge(*dag_, logical_routes, logical_to_physical); | ||
| 1306 | + EXPECT_EQ(status, graphStatus::SUCCESS); | ||
| 1307 | + EXPECT_EQ(logical_to_physical.size(), 6); | ||
| 1308 | +} | ||
| 1309 | + | ||
| 1310 | +TEST_F(StreamMergerTest, Merge_CandidateLimitOne_MainStream) { | ||
| 1311 | + AddNodes(6); | ||
| 1312 | + | ||
| 1313 | + std::vector<std::vector<int32_t>> logical_routes; | ||
| 1314 | + for (int i = 0; i < 6; ++i) { | ||
| 1315 | + logical_routes.push_back({i}); | ||
| 1316 | + } | ||
| 1317 | + | ||
| 1318 | + std::vector<int32_t> logical_to_physical; | ||
| 1319 | + | ||
| 1320 | + options_.strategy = StreamMergeStrategy::kMainStream; | ||
| 1321 | + options_.physical_stream_limit = 4; | ||
| 1322 | + options_.candidate_limit = 1; | ||
| 1323 | + options_.low_conflict_limit = 1; | ||
| 1324 | + options_.repair_moves = 3; | ||
| 1325 | + StreamMerger merger(options_); | ||
| 1326 | + | ||
| 1327 | + auto status = merger.Merge(*dag_, logical_routes, logical_to_physical); | ||
| 1328 | + EXPECT_EQ(status, graphStatus::SUCCESS); | ||
| 1329 | + EXPECT_EQ(logical_to_physical.size(), 6); | ||
| 1330 | +} | ||
| 1331 | + | ||
| 1332 | +TEST_F(StreamMergerTest, Merge_UnitSortByEarliestLevel_MainStream) { | ||
| 1333 | + auto n0 = dag_->AddNode("n0", "Data"); | ||
| 1334 | + auto n1 = dag_->AddNode("n1", "Data"); | ||
| 1335 | + auto n2 = dag_->AddNode("n2", "Op1"); | ||
| 1336 | + auto n3 = dag_->AddNode("n3", "Op2"); | ||
| 1337 | + auto n4 = dag_->AddNode("n4", "NetOutput"); | ||
| 1338 | + | ||
| 1339 | + for (int i = 0; i < 5; ++i) { | ||
| 1340 | + dag_->GetAllNodes()[i]->SetTopoId(i); | ||
| 1341 | + } | ||
| 1342 | + | ||
| 1343 | + dag_->AddEdge(n0, 0, n2, 0); | ||
| 1344 | + dag_->AddEdge(n1, 0, n3, 0); | ||
| 1345 | + dag_->AddEdge(n2, 0, n4, 0); | ||
| 1346 | + dag_->AddEdge(n3, 0, n4, 0); | ||
| 1347 | + | ||
| 1348 | + std::vector<std::vector<int32_t>> logical_routes = {{0, 2, 4}, {1, 3}}; | ||
| 1349 | + std::vector<int32_t> logical_to_physical; | ||
| 1350 | + | ||
| 1351 | + options_.strategy = StreamMergeStrategy::kMainStream; | ||
| 1352 | + options_.physical_stream_limit = 4; | ||
| 1353 | + options_.repair_moves = 3; | ||
| 1354 | + StreamMerger merger(options_); | ||
| 1355 | + | ||
| 1356 | + auto status = merger.Merge(*dag_, logical_routes, logical_to_physical); | ||
| 1357 | + EXPECT_EQ(status, graphStatus::SUCCESS); | ||
| 1358 | + EXPECT_EQ(logical_to_physical.size(), 2); | ||
| 1359 | +} | ||
| 1360 | + | ||
| 1361 | +TEST_F(StreamMergerTest, Merge_DeepDAG_MultiLevel_CrossDependency_LoadBalance) { | ||
| 1362 | + const int count = 10; | ||
| 1363 | + for (int i = 0; i < count; ++i) { | ||
| 1364 | + auto node = dag_->AddNode("n" + std::to_string(i), "Op"); | ||
| 1365 | + node->SetTopoId(i); | ||
| 1366 | + } | ||
| 1367 | + | ||
| 1368 | + for (int i = 0; i < count - 1; ++i) { | ||
| 1369 | + dag_->AddEdge(dag_->GetAllNodes()[i], 0, dag_->GetAllNodes()[i + 1], 0); | ||
| 1370 | + } | ||
| 1371 | + dag_->AddEdge(dag_->GetAllNodes()[0], 0, dag_->GetAllNodes()[5], 0); | ||
| 1372 | + | ||
| 1373 | + std::vector<std::vector<int32_t>> logical_routes = {{0, 1, 2, 3, 4}, {5, 6, 7, 8, 9}}; | ||
| 1374 | + std::vector<int32_t> logical_to_physical; | ||
| 1375 | + | ||
| 1376 | + options_.strategy = StreamMergeStrategy::kLoadBalance; | ||
| 1377 | + options_.physical_stream_limit = 3; | ||
| 1378 | + options_.candidate_limit = 3; | ||
| 1379 | + options_.light_stream_limit = 2; | ||
| 1380 | + options_.repair_moves = 10; | ||
| 1381 | + StreamMerger merger(options_); | ||
| 1382 | + | ||
| 1383 | + auto status = merger.Merge(*dag_, logical_routes, logical_to_physical); | ||
| 1384 | + EXPECT_EQ(status, graphStatus::SUCCESS); | ||
| 1385 | + EXPECT_EQ(logical_to_physical.size(), 2); | ||
| 1386 | +} | ||
| 1387 | + | ||
| 1388 | +TEST_F(StreamMergerTest, Merge_DeepDAG_MultiLevel_CrossDependency_MainStream) { | ||
| 1389 | + const int count = 10; | ||
| 1390 | + for (int i = 0; i < count; ++i) { | ||
| 1391 | + auto node = dag_->AddNode("n" + std::to_string(i), "Op"); | ||
| 1392 | + node->SetTopoId(i); | ||
| 1393 | + } | ||
| 1394 | + | ||
| 1395 | + for (int i = 0; i < count - 1; ++i) { | ||
| 1396 | + dag_->AddEdge(dag_->GetAllNodes()[i], 0, dag_->GetAllNodes()[i + 1], 0); | ||
| 1397 | + } | ||
| 1398 | + dag_->AddEdge(dag_->GetAllNodes()[0], 0, dag_->GetAllNodes()[5], 0); | ||
| 1399 | + | ||
| 1400 | + std::vector<std::vector<int32_t>> logical_routes = {{0, 1, 2, 3, 4}, {5, 6, 7, 8, 9}}; | ||
| 1401 | + std::vector<int32_t> logical_to_physical; | ||
| 1402 | + | ||
| 1403 | + options_.strategy = StreamMergeStrategy::kMainStream; | ||
| 1404 | + options_.physical_stream_limit = 3; | ||
| 1405 | + options_.candidate_limit = 3; | ||
| 1406 | + options_.low_conflict_limit = 2; | ||
| 1407 | + options_.repair_moves = 10; | ||
| 1408 | + StreamMerger merger(options_); | ||
| 1409 | + | ||
| 1410 | + auto status = merger.Merge(*dag_, logical_routes, logical_to_physical); | ||
| 1411 | + EXPECT_EQ(status, graphStatus::SUCCESS); | ||
| 1412 | + EXPECT_EQ(logical_to_physical.size(), 2); | ||
| 1413 | +} | ||
| 1414 | + | ||
| 1415 | +TEST_F(StreamMergerTest, Merge_MultiRouteSameLevel_DifferentSizes_LoadBalance) { | ||
| 1416 | + auto n0 = dag_->AddNode("n0", "Data"); | ||
| 1417 | + auto n1 = dag_->AddNode("n1", "Data"); | ||
| 1418 | + auto n2 = dag_->AddNode("n2", "Op"); | ||
| 1419 | + auto n3 = dag_->AddNode("n3", "Op"); | ||
| 1420 | + auto n4 = dag_->AddNode("n4", "Op"); | ||
| 1421 | + auto n5 = dag_->AddNode("n5", "NetOutput"); | ||
| 1422 | + | ||
| 1423 | + for (int i = 0; i < 6; ++i) { | ||
| 1424 | + dag_->GetAllNodes()[i]->SetTopoId(i); | ||
| 1425 | + } | ||
| 1426 | + | ||
| 1427 | + dag_->AddEdge(n0, 0, n2, 0); | ||
| 1428 | + dag_->AddEdge(n0, 0, n3, 0); | ||
| 1429 | + dag_->AddEdge(n1, 0, n4, 0); | ||
| 1430 | + dag_->AddEdge(n2, 0, n5, 0); | ||
| 1431 | + dag_->AddEdge(n3, 0, n5, 0); | ||
| 1432 | + dag_->AddEdge(n4, 0, n5, 0); | ||
| 1433 | + | ||
| 1434 | + std::vector<std::vector<int32_t>> logical_routes = {{0, 2, 3, 5}, {1, 4}}; | ||
| 1435 | + std::vector<int32_t> logical_to_physical; | ||
| 1436 | + | ||
| 1437 | + options_.strategy = StreamMergeStrategy::kLoadBalance; | ||
| 1438 | + options_.physical_stream_limit = 2; | ||
| 1439 | + options_.candidate_limit = 2; | ||
| 1440 | + options_.light_stream_limit = 2; | ||
| 1441 | + options_.repair_moves = 5; | ||
| 1442 | + StreamMerger merger(options_); | ||
| 1443 | + | ||
| 1444 | + auto status = merger.Merge(*dag_, logical_routes, logical_to_physical); | ||
| 1445 | + EXPECT_EQ(status, graphStatus::SUCCESS); | ||
| 1446 | + EXPECT_EQ(logical_to_physical.size(), 2); | ||
| 1447 | +} | ||
| 1448 | + | ||
| 1449 | +TEST_F(StreamMergerTest, Merge_MultiRouteSameLevel_DifferentSizes_MainStream) { | ||
| 1450 | + auto n0 = dag_->AddNode("n0", "Data"); | ||
| 1451 | + auto n1 = dag_->AddNode("n1", "Data"); | ||
| 1452 | + auto n2 = dag_->AddNode("n2", "Op"); | ||
| 1453 | + auto n3 = dag_->AddNode("n3", "Op"); | ||
| 1454 | + auto n4 = dag_->AddNode("n4", "Op"); | ||
| 1455 | + auto n5 = dag_->AddNode("n5", "NetOutput"); | ||
| 1456 | + | ||
| 1457 | + for (int i = 0; i < 6; ++i) { | ||
| 1458 | + dag_->GetAllNodes()[i]->SetTopoId(i); | ||
| 1459 | + } | ||
| 1460 | + | ||
| 1461 | + dag_->AddEdge(n0, 0, n2, 0); | ||
| 1462 | + dag_->AddEdge(n0, 0, n3, 0); | ||
| 1463 | + dag_->AddEdge(n1, 0, n4, 0); | ||
| 1464 | + dag_->AddEdge(n2, 0, n5, 0); | ||
| 1465 | + dag_->AddEdge(n3, 0, n5, 0); | ||
| 1466 | + dag_->AddEdge(n4, 0, n5, 0); | ||
| 1467 | + | ||
| 1468 | + std::vector<std::vector<int32_t>> logical_routes = {{0, 2, 3, 5}, {1, 4}}; | ||
| 1469 | + std::vector<int32_t> logical_to_physical; | ||
| 1470 | + | ||
| 1471 | + options_.strategy = StreamMergeStrategy::kMainStream; | ||
| 1472 | + options_.physical_stream_limit = 2; | ||
| 1473 | + options_.candidate_limit = 2; | ||
| 1474 | + options_.low_conflict_limit = 2; | ||
| 1475 | + options_.repair_moves = 5; | ||
| 1476 | + StreamMerger merger(options_); | ||
| 1477 | + | ||
| 1478 | + auto status = merger.Merge(*dag_, logical_routes, logical_to_physical); | ||
| 1479 | + EXPECT_EQ(status, graphStatus::SUCCESS); | ||
| 1480 | + EXPECT_EQ(logical_to_physical.size(), 2); | ||
| 1481 | +} | ||
| 1482 | + | ||
| 1483 | +TEST_F(StreamMergerTest, Merge_SoloNodeLevel_MainStream) { | ||
| 1484 | + auto n0 = dag_->AddNode("n0", "Data"); | ||
| 1485 | + auto n1 = dag_->AddNode("n1", "Data"); | ||
| 1486 | + auto n2 = dag_->AddNode("n2", "Op"); | ||
| 1487 | + auto n3 = dag_->AddNode("n3", "NetOutput"); | ||
| 1488 | + | ||
| 1489 | + for (int i = 0; i < 4; ++i) { | ||
| 1490 | + dag_->GetAllNodes()[i]->SetTopoId(i); | ||
| 1491 | + } | ||
| 1492 | + | ||
| 1493 | + dag_->AddEdge(n0, 0, n2, 0); | ||
| 1494 | + dag_->AddEdge(n1, 0, n2, 0); | ||
| 1495 | + dag_->AddEdge(n2, 0, n3, 0); | ||
| 1496 | + | ||
| 1497 | + std::vector<std::vector<int32_t>> logical_routes = {{0, 2, 3}, {1}}; | ||
| 1498 | + std::vector<int32_t> logical_to_physical; | ||
| 1499 | + | ||
| 1500 | + options_.strategy = StreamMergeStrategy::kMainStream; | ||
| 1501 | + options_.physical_stream_limit = 2; | ||
| 1502 | + options_.candidate_limit = 2; | ||
| 1503 | + options_.low_conflict_limit = 2; | ||
| 1504 | + options_.repair_moves = 5; | ||
| 1505 | + StreamMerger merger(options_); | ||
| 1506 | + | ||
| 1507 | + auto status = merger.Merge(*dag_, logical_routes, logical_to_physical); | ||
| 1508 | + EXPECT_EQ(status, graphStatus::SUCCESS); | ||
| 1509 | + EXPECT_EQ(logical_to_physical.size(), 2); | ||
| 1510 | +} | ||
| 1220 | } // namespace test | 1511 | } // namespace test |
| 1221 | } // namespace minidag | 1512 | } // namespace minidag |
| @@ -394,5 +394,162 @@ TEST_F(WeightedStreamMergerTest, Merge_LargeScaleIndependentGraph_ReturnsValidMa | |||
| 394 | ExpectValidMapping(logical_to_physical, logical_routes.size()); | 394 | ExpectValidMapping(logical_to_physical, logical_routes.size()); |
| 395 | } | 395 | } |
| 396 | 396 | ||
| 397 | +TEST_F(WeightedStreamMergerTest, Merge_MultiOriginHints_MultipleFlowsPerOrigin) { | ||
| 398 | + BuildIndependentGraph(8, 10.0F); | ||
| 399 | + std::vector<std::vector<int32_t>> logical_routes = {{0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}}; | ||
| 400 | + std::vector<int32_t> logical_to_physical; | ||
| 401 | + options_.physical_stream_limit = 3; | ||
| 402 | + options_.candidate_limit = 4; | ||
| 403 | + options_.light_stream_limit = 3; | ||
| 404 | + options_.repair_moves = 3; | ||
| 405 | + options_.resim_candidate_limit = 2; | ||
| 406 | + | ||
| 407 | + WeightedStreamMerger merger(options_); | ||
| 408 | + auto status = merger.Merge(*dag_, logical_routes, logical_to_physical); | ||
| 409 | + | ||
| 410 | + ASSERT_EQ(status, graphStatus::SUCCESS); | ||
| 411 | + ExpectValidMapping(logical_to_physical, logical_routes.size()); | ||
| 412 | +} | ||
| 413 | + | ||
| 414 | +TEST_F(WeightedStreamMergerTest, Merge_SameDurationDifferentResources_SortTieBreaks) { | ||
| 415 | + auto n0 = AddNode("n0", 10.0F, 2U, 1U); | ||
| 416 | + auto n1 = AddNode("n1", 10.0F, 1U, 2U); | ||
| 417 | + auto n2 = AddNode("n2", 10.0F, 1U, 1U); | ||
| 418 | + auto n3 = AddNode("n3", 10.0F, 1U, 1U); | ||
| 419 | + n0->SetStreamId(0); | ||
| 420 | + n1->SetStreamId(1); | ||
| 421 | + n2->SetStreamId(0); | ||
| 422 | + n3->SetStreamId(1); | ||
| 423 | + ASSERT_EQ(dag_->AddEdge(n0, 0, n2, 0), graphStatus::SUCCESS); | ||
| 424 | + ASSERT_EQ(dag_->AddEdge(n1, 0, n3, 0), graphStatus::SUCCESS); | ||
| 425 | + | ||
| 426 | + std::vector<std::vector<int32_t>> logical_routes = {{0, 2}, {1, 3}}; | ||
| 427 | + std::vector<int32_t> logical_to_physical; | ||
| 428 | + options_.physical_stream_limit = 2; | ||
| 429 | + options_.candidate_limit = 4; | ||
| 430 | + options_.light_stream_limit = 2; | ||
| 431 | + options_.resim_candidate_limit = 2; | ||
| 432 | + | ||
| 433 | + WeightedStreamMerger merger(options_); | ||
| 434 | + auto status = merger.Merge(*dag_, logical_routes, logical_to_physical); | ||
| 435 | + | ||
| 436 | + ASSERT_EQ(status, graphStatus::SUCCESS); | ||
| 437 | + ExpectValidMapping(logical_to_physical, logical_routes.size()); | ||
| 438 | +} | ||
| 439 | + | ||
| 440 | +TEST_F(WeightedStreamMergerTest, Merge_CandidateLimitOne_TriggersBreakAndFallback) { | ||
| 441 | + BuildIndependentGraph(6, 5.0F); | ||
| 442 | + std::vector<std::vector<int32_t>> logical_routes = {{0}, {1}, {2}, {3}, {4}, {5}}; | ||
| 443 | + std::vector<int32_t> logical_to_physical; | ||
| 444 | + options_.physical_stream_limit = 2; | ||
| 445 | + options_.candidate_limit = 1; | ||
| 446 | + options_.light_stream_limit = 1; | ||
| 447 | + options_.resim_candidate_limit = 0; | ||
| 448 | + options_.repair_moves = 2; | ||
| 449 | + | ||
| 450 | + WeightedStreamMerger merger(options_); | ||
| 451 | + auto status = merger.Merge(*dag_, logical_routes, logical_to_physical); | ||
| 452 | + | ||
| 453 | + ASSERT_EQ(status, graphStatus::SUCCESS); | ||
| 454 | + ExpectValidMapping(logical_to_physical, logical_routes.size()); | ||
| 455 | +} | ||
| 456 | + | ||
| 457 | +TEST_F(WeightedStreamMergerTest, Merge_DiamondWithRepairAndResim_ReturnsValidMapping) { | ||
| 458 | + BuildDiamondGraph(); | ||
| 459 | + std::vector<std::vector<int32_t>> logical_routes = {{0, 1}, {2, 3}}; | ||
| 460 | + std::vector<int32_t> logical_to_physical; | ||
| 461 | + options_.physical_stream_limit = 3; | ||
| 462 | + options_.candidate_limit = 4; | ||
| 463 | + options_.light_stream_limit = 3; | ||
| 464 | + options_.repair_moves = 5; | ||
| 465 | + options_.resim_candidate_limit = 3; | ||
| 466 | + | ||
| 467 | + WeightedStreamMerger merger(options_); | ||
| 468 | + auto status = merger.Merge(*dag_, logical_routes, logical_to_physical); | ||
| 469 | + | ||
| 470 | + ASSERT_EQ(status, graphStatus::SUCCESS); | ||
| 471 | + ExpectValidMapping(logical_to_physical, logical_routes.size()); | ||
| 472 | +} | ||
| 473 | + | ||
| 474 | +TEST_F(WeightedStreamMergerTest, Merge_CrossDependencyWithCosts_RepairTriggersSortComparators) { | ||
| 475 | + BuildCrossStreamDependencyGraph(); | ||
| 476 | + std::vector<std::vector<int32_t>> logical_routes = {{0, 3, 5}, {1}, {2, 4}}; | ||
| 477 | + std::vector<int32_t> logical_to_physical; | ||
| 478 | + options_.physical_stream_limit = 3; | ||
| 479 | + options_.candidate_limit = 3; | ||
| 480 | + options_.light_stream_limit = 2; | ||
| 481 | + options_.repair_moves = 5; | ||
| 482 | + options_.resim_candidate_limit = 2; | ||
| 483 | + | ||
| 484 | + WeightedStreamMerger merger(options_); | ||
| 485 | + auto status = merger.Merge(*dag_, logical_routes, logical_to_physical); | ||
| 486 | + | ||
| 487 | + ASSERT_EQ(status, graphStatus::SUCCESS); | ||
| 488 | + ExpectValidMapping(logical_to_physical, logical_routes.size()); | ||
| 489 | +} | ||
| 490 | + | ||
| 491 | +TEST_F(WeightedStreamMergerTest, Merge_LargeGraph_MultiLevel_WithStreamHints) { | ||
| 492 | + const int32_t count = 12; | ||
| 493 | + for (int32_t i = 0; i < count; ++i) { | ||
| 494 | + auto node = AddNode("n" + std::to_string(i), static_cast<float>(i + 1) * 2.0F, static_cast<size_t>((i % 3) + 1), | ||
| 495 | + static_cast<size_t>((i % 2) + 1)); | ||
| 496 | + node->SetStreamId(i % 3); | ||
| 497 | + } | ||
| 498 | + for (int32_t i = 0; i < count - 1; ++i) { | ||
| 499 | + ASSERT_EQ(dag_->AddEdge(dag_->GetAllNodes()[i], 0, dag_->GetAllNodes()[i + 1], 0), graphStatus::SUCCESS); | ||
| 500 | + } | ||
| 501 | + | ||
| 502 | + std::vector<std::vector<int32_t>> logical_routes; | ||
| 503 | + for (int32_t i = 0; i < count; i += 3) { | ||
| 504 | + logical_routes.push_back({i, i + 1, i + 2}); | ||
| 505 | + } | ||
| 506 | + | ||
| 507 | + std::vector<int32_t> logical_to_physical; | ||
| 508 | + options_.physical_stream_limit = 4; | ||
| 509 | + options_.candidate_limit = 4; | ||
| 510 | + options_.light_stream_limit = 3; | ||
| 511 | + options_.repair_moves = 5; | ||
| 512 | + options_.resim_candidate_limit = 3; | ||
| 513 | + | ||
| 514 | + WeightedStreamMerger merger(options_); | ||
| 515 | + auto status = merger.Merge(*dag_, logical_routes, logical_to_physical); | ||
| 516 | + | ||
| 517 | + ASSERT_EQ(status, graphStatus::SUCCESS); | ||
| 518 | + ExpectValidMapping(logical_to_physical, logical_routes.size()); | ||
| 519 | +} | ||
| 520 | + | ||
| 521 | +TEST_F(WeightedStreamMergerTest, Merge_MissingCostWithRepair_TriggersWarnPath) { | ||
| 522 | + BuildMissingAndExtremeCostGraph(); | ||
| 523 | + std::vector<std::vector<int32_t>> logical_routes = {{0, 1}, {2}, {3}}; | ||
| 524 | + std::vector<int32_t> logical_to_physical; | ||
| 525 | + options_.physical_stream_limit = 3; | ||
| 526 | + options_.candidate_limit = 3; | ||
| 527 | + options_.light_stream_limit = 2; | ||
| 528 | + options_.repair_moves = 3; | ||
| 529 | + options_.resim_candidate_limit = 2; | ||
| 530 | + | ||
| 531 | + WeightedStreamMerger merger(options_); | ||
| 532 | + auto status = merger.Merge(*dag_, logical_routes, logical_to_physical); | ||
| 533 | + | ||
| 534 | + ASSERT_EQ(status, graphStatus::SUCCESS); | ||
| 535 | + ExpectValidMapping(logical_to_physical, logical_routes.size()); | ||
| 536 | +} | ||
| 537 | + | ||
| 538 | +TEST_F(WeightedStreamMergerTest, Merge_TwoStageParallelWithRepair_TriggersSimulationComparators) { | ||
| 539 | + BuildTwoStageParallelGraph(); | ||
| 540 | + std::vector<std::vector<int32_t>> logical_routes = {{0, 4}, {1, 5}, {2}, {3}}; | ||
| 541 | + std::vector<int32_t> logical_to_physical; | ||
| 542 | + options_.physical_stream_limit = 4; | ||
| 543 | + options_.candidate_limit = 4; | ||
| 544 | + options_.light_stream_limit = 3; | ||
| 545 | + options_.repair_moves = 5; | ||
| 546 | + options_.resim_candidate_limit = 3; | ||
| 547 | + | ||
| 548 | + WeightedStreamMerger merger(options_); | ||
| 549 | + auto status = merger.Merge(*dag_, logical_routes, logical_to_physical); | ||
| 550 | + | ||
| 551 | + ASSERT_EQ(status, graphStatus::SUCCESS); | ||
| 552 | + ExpectValidMapping(logical_to_physical, logical_routes.size()); | ||
| 553 | +} | ||
| 397 | } // namespace test | 554 | } // namespace test |
| 398 | } // namespace minidag | 555 | } // namespace minidag |
| @@ -1237,4 +1237,91 @@ TEST_F(GraphBuilderTest, Build_Ok_TrainingWithMemoryPriority) { | |||
| 1237 | GetThreadLocalContext().SetGraphOption(options_map_recovery); | 1237 | GetThreadLocalContext().SetGraphOption(options_map_recovery); |
| 1238 | } | 1238 | } |
| 1239 | 1239 | ||
| 1240 | +TEST_F(GraphBuilderTest, Build_NullComputeGraph_ReturnsError) { | ||
| 1241 | + GraphBuilder graph_builder; | ||
| 1242 | + GeRootModelPtr root_model; | ||
| 1243 | + ComputeGraphPtr null_graph = nullptr; | ||
| 1244 | + auto ret = graph_builder.Build(null_graph, root_model); | ||
| 1245 | + EXPECT_NE(ret, SUCCESS); | ||
| 1246 | +} | ||
| 1247 | + | ||
| 1248 | +TEST_F(GraphBuilderTest, Build_EmptyGraph_ReturnsError) { | ||
| 1249 | + GraphBuilder graph_builder; | ||
| 1250 | + auto root_graph = std::make_shared<ComputeGraph>("empty_graph"); | ||
| 1251 | + AttrUtils::SetStr(root_graph, ATTR_NAME_SESSION_GRAPH_ID, kSessionId); | ||
| 1252 | + GeRootModelPtr root_model; | ||
| 1253 | + VarManager::Instance(0UL)->Init(0U, 0UL, 0UL, 0UL); | ||
| 1254 | + auto ret = graph_builder.Build(root_graph, root_model); | ||
| 1255 | + EXPECT_NE(ret, SUCCESS); | ||
| 1256 | +} | ||
| 1257 | + | ||
| 1258 | +TEST_F(GraphBuilderTest, Build_GenTaskWithFusionMode) { | ||
| 1259 | + GraphBuilder graph_builder; | ||
| 1260 | + auto root_graph = BuildGraphWithConst(); | ||
| 1261 | + AttrUtils::SetStr(root_graph, ATTR_NAME_SESSION_GRAPH_ID, kSessionId); | ||
| 1262 | + GeRootModelPtr root_model; | ||
| 1263 | + VarManager::Instance(0UL)->Init(0U, 0UL, 0UL, 0UL); | ||
| 1264 | + auto ret = graph_builder.Build(root_graph, root_model); | ||
| 1265 | +} | ||
| 1266 | + | ||
| 1267 | +TEST_F(GraphBuilderTest, Build_DataNodeWithDynamicShape) { | ||
| 1268 | + GraphBuilder graph_builder; | ||
| 1269 | + DEF_GRAPH(graph) { | ||
| 1270 | + auto data = OP_CFG(DATA).InCnt(0).OutCnt(1).TensorDesc(FORMAT_ND, DT_FLOAT, {-1, -1}); | ||
| 1271 | + auto add = OP_CFG(ADD).InCnt(1).OutCnt(1).TensorDesc(FORMAT_ND, DT_FLOAT, {-1, -1}); | ||
| 1272 | + auto net_output = OP_CFG(NETOUTPUT).InCnt(1).OutCnt(1).TensorDesc(FORMAT_ND, DT_FLOAT, {-1}); | ||
| 1273 | + CHAIN(NODE("data", data)->NODE("add", add)->NODE("Node_Output", net_output)); | ||
| 1274 | + }; | ||
| 1275 | + auto root_graph = ToComputeGraph(graph); | ||
| 1276 | + AttrUtils::SetStr(root_graph, ATTR_NAME_SESSION_GRAPH_ID, kSessionId); | ||
| 1277 | + GeRootModelPtr root_model; | ||
| 1278 | + VarManager::Instance(0UL)->Init(0U, 0UL, 0UL, 0UL); | ||
| 1279 | + auto ret = graph_builder.Build(root_graph, root_model); | ||
| 1280 | +} | ||
| 1281 | + | ||
| 1282 | +TEST_F(GraphBuilderTest, Build_GraphWithSubgraph) { | ||
| 1283 | + GraphBuilder graph_builder; | ||
| 1284 | + DEF_GRAPH(sub) { | ||
| 1285 | + auto data = OP_CFG(DATA).InCnt(0).OutCnt(1); | ||
| 1286 | + auto add = OP_CFG(ADD).InCnt(1).OutCnt(1); | ||
| 1287 | + auto net_output = OP_CFG(NETOUTPUT).InCnt(1).OutCnt(1); | ||
| 1288 | + CHAIN(NODE("sub_data", data)->NODE("sub_add", add)->NODE("sub_output", net_output)); | ||
| 1289 | + }; | ||
| 1290 | + auto sub_graph = ToComputeGraph(sub); | ||
| 1291 | + sub_graph->SetName("sub_graph"); | ||
| 1292 | + | ||
| 1293 | + DEF_GRAPH(root) { | ||
| 1294 | + auto data = OP_CFG(DATA).InCnt(0).OutCnt(1); | ||
| 1295 | + auto partitioned_call = OP_CFG(PARTITIONEDCALL).InCnt(1).OutCnt(1); | ||
| 1296 | + auto net_output = OP_CFG(NETOUTPUT).InCnt(1).OutCnt(1); | ||
| 1297 | + CHAIN(NODE("root_data", data)->NODE("partitioned_call", partitioned_call)->NODE("Node_Output", net_output)); | ||
| 1298 | + }; | ||
| 1299 | + auto root_graph = ToComputeGraph(root); | ||
| 1300 | + root_graph->SetName("root_graph"); | ||
| 1301 | + root_graph->AddSubGraph(sub_graph); | ||
| 1302 | + sub_graph->SetParentGraph(root_graph); | ||
| 1303 | + AttrUtils::SetStr(root_graph, ATTR_NAME_SESSION_GRAPH_ID, kSessionId); | ||
| 1304 | + GeRootModelPtr root_model; | ||
| 1305 | + VarManager::Instance(0UL)->Init(0U, 0UL, 0UL, 0UL); | ||
| 1306 | + auto ret = graph_builder.Build(root_graph, root_model); | ||
| 1307 | +} | ||
| 1308 | + | ||
| 1309 | +TEST_F(GraphBuilderTest, Build_GraphWithWorkspaceUpdate) { | ||
| 1310 | + GraphBuilder graph_builder; | ||
| 1311 | + auto root_graph = BuildGraphWithConst(); | ||
| 1312 | + AttrUtils::SetStr(root_graph, ATTR_NAME_SESSION_GRAPH_ID, kSessionId); | ||
| 1313 | + for (auto &node : root_graph->GetAllNodes()) { | ||
| 1314 | + if (node->GetType() == CONSTANT || node->GetType() == CONSTANTOP) { | ||
| 1315 | + continue; | ||
| 1316 | + } | ||
| 1317 | + auto op_desc = node->GetOpDesc(); | ||
| 1318 | + if (op_desc != nullptr) { | ||
| 1319 | + std::vector<int64_t> ws_vec = {1024, 2048}; | ||
| 1320 | + op_desc->SetWorkspace(ws_vec); | ||
| 1321 | + } | ||
| 1322 | + } | ||
| 1323 | + GeRootModelPtr root_model; | ||
| 1324 | + VarManager::Instance(0UL)->Init(0U, 0UL, 0UL, 0UL); | ||
| 1325 | + auto ret = graph_builder.Build(root_graph, root_model); | ||
| 1326 | +} | ||
| 1240 | } // namespace ge | 1327 | } // namespace ge |
| @@ -2354,4 +2354,55 @@ TEST_F(UtestGraphMemAssigner, Success) { | |||
| 2354 | MemoryAssigner mem_assigner(graph); | 2354 | MemoryAssigner mem_assigner(graph); |
| 2355 | EXPECT_EQ(mem_assigner.AssignMemory(mem_offset, zero_copy_mem_size), SUCCESS); | 2355 | EXPECT_EQ(mem_assigner.AssignMemory(mem_offset, zero_copy_mem_size), SUCCESS); |
| 2356 | } | 2356 | } |
| 2357 | +TEST_F(UtestGraphMemAssigner, AssignContinuousOutputMemory_GetTensorSizeFail) { | ||
| 2358 | + ge::ComputeGraphPtr graph = std::make_shared<ge::ComputeGraph>("graph"); | ||
| 2359 | + auto node = UtAddNode(graph, "data", DATA, 1, 1); | ||
| 2360 | + AttrUtils::SetBool(node->GetOpDesc(), ATTR_NAME_CONTINUOUS_OUTPUT, true); | ||
| 2361 | + auto output_desc = node->GetOpDesc()->MutableOutputDesc(0); | ||
| 2362 | + ASSERT_NE(output_desc, nullptr); | ||
| 2363 | + TensorUtils::SetSize(*output_desc, 0); | ||
| 2364 | + GraphMemoryAssigner graph_mem_assigner(graph); | ||
| 2365 | + graph_mem_assigner.memory_offset_.emplace(RT_MEMORY_HBM, MemoryOffset(RT_MEMORY_HBM, 0)); | ||
| 2366 | + EXPECT_NE(graph_mem_assigner.AssignContinuousOutputMemory(node, 1, 4), SUCCESS); | ||
| 2367 | +} | ||
| 2368 | + | ||
| 2369 | +TEST_F(UtestGraphMemAssigner, AssignMemory2HasRefAttrNode_Success) { | ||
| 2370 | + ge::ComputeGraphPtr graph = std::make_shared<ge::ComputeGraph>("graph"); | ||
| 2371 | + auto node = UtAddNode(graph, "data", DATA, 1, 1); | ||
| 2372 | + GraphMemoryAssigner graph_mem_assigner(graph); | ||
| 2373 | + EXPECT_EQ(graph_mem_assigner.AssignMemory2HasRefAttrNode(), SUCCESS); | ||
| 2374 | +} | ||
| 2375 | + | ||
| 2376 | +TEST_F(UtestGraphMemAssigner, AssignVarAttr2Nodes_Success) { | ||
| 2377 | + ge::ComputeGraphPtr graph = std::make_shared<ge::ComputeGraph>("graph"); | ||
| 2378 | + auto node = UtAddNode(graph, "data", DATA, 1, 1); | ||
| 2379 | + GraphMemoryAssigner graph_mem_assigner(graph); | ||
| 2380 | + EXPECT_EQ(graph_mem_assigner.AssignVarAttr2Nodes(), SUCCESS); | ||
| 2381 | +} | ||
| 2382 | + | ||
| 2383 | +TEST_F(UtestGraphMemAssigner, CalculateTensorRealSize_Success) { | ||
| 2384 | + auto tensor_desc = std::make_shared<GeTensorDesc>(); | ||
| 2385 | + SetDefaultTensorDesc(tensor_desc); | ||
| 2386 | + int64_t output_mem_size = 0; | ||
| 2387 | + int64_t batch_dim_num = 0; | ||
| 2388 | + int64_t out_size = 0; | ||
| 2389 | + EXPECT_EQ(CalculateTensorRealSizeAndOutSize(tensor_desc, 0, output_mem_size, batch_dim_num, out_size), SUCCESS); | ||
| 2390 | +} | ||
| 2391 | + | ||
| 2392 | +TEST_F(UtestGraphMemAssigner, GetNodeMemoryType_InvalidInput) { | ||
| 2393 | + ge::ComputeGraphPtr graph = std::make_shared<ge::ComputeGraph>("graph"); | ||
| 2394 | + auto node = UtAddNode(graph, "data", DATA, 1, 1); | ||
| 2395 | + GraphMemoryAssigner graph_mem_assigner(graph); | ||
| 2396 | + int64_t memory_type = 0; | ||
| 2397 | + EXPECT_NE(graph_mem_assigner.GetNodeMemoryType(node, memory_type, "input"), SUCCESS); | ||
| 2398 | + EXPECT_NE(graph_mem_assigner.GetNodeMemoryType(node, memory_type, "output"), SUCCESS); | ||
| 2399 | +} | ||
| 2400 | + | ||
| 2401 | +TEST_F(UtestGraphMemAssigner, AssignZeroCopyMemory_EmptyGraph) { | ||
| 2402 | + ge::ComputeGraphPtr graph = std::make_shared<ge::ComputeGraph>("empty_zero_copy_test"); | ||
| 2403 | + GraphMemoryAssigner graph_mem_assigner(graph); | ||
| 2404 | + map<uint64_t, size_t> mem_type_to_offset; | ||
| 2405 | + size_t zero_copy_mem_size = 0; | ||
| 2406 | + EXPECT_NE(graph_mem_assigner.AssignZeroCopyMemory(mem_type_to_offset, zero_copy_mem_size), SUCCESS); | ||
| 2407 | +} | ||
| 2357 | } // namespace ge | 2408 | } // namespace ge |
| @@ -1407,4 +1407,82 @@ TEST_F(UtestLogicalStreamAllocator, AicoreHcclSerial_AssignSameStream) { | |||
| 1407 | ASSERT_NE(relu2, nullptr); | 1407 | ASSERT_NE(relu2, nullptr); |
| 1408 | EXPECT_EQ(relu2->GetOpDesc()->GetStreamId(), 0); | 1408 | EXPECT_EQ(relu2->GetOpDesc()->GetStreamId(), 0); |
| 1409 | } | 1409 | } |
| 1410 | +TEST_F(UtestLogicalStreamAllocator, EmptyGraph_RunOptimizeSuccess) { | ||
| 1411 | + auto graph = std::make_shared<ComputeGraph>("empty_graph"); | ||
| 1412 | + const std::map<std::string, int32_t> max_parallel_num; | ||
| 1413 | + LogicalStreamAllocator allocator(max_parallel_num); | ||
| 1414 | + auto ret = allocator.RunOptimizeByTopoPasses(graph); | ||
| 1415 | + EXPECT_EQ(ret, SUCCESS); | ||
| 1416 | +} | ||
| 1417 | + | ||
| 1418 | +TEST_F(UtestLogicalStreamAllocator, SingleNodeGraph_RunOptimizeSuccess) { | ||
| 1419 | + DEF_GRAPH(g1) { | ||
| 1420 | + auto data = OP_CFG(DATA).InCnt(0).OutCnt(1); | ||
| 1421 | + auto net_output = OP_CFG(NETOUTPUT).InCnt(1).OutCnt(1); | ||
| 1422 | + CHAIN(NODE("data", data)->NODE("Node_Output", net_output)); | ||
| 1423 | + }; | ||
| 1424 | + auto graph = ToComputeGraph(g1); | ||
| 1425 | + const std::map<std::string, int32_t> max_parallel_num; | ||
| 1426 | + LogicalStreamAllocator allocator(max_parallel_num); | ||
| 1427 | + auto ret = allocator.RunOptimizeByTopoPasses(graph); | ||
| 1428 | + EXPECT_EQ(ret, SUCCESS); | ||
| 1429 | +} | ||
| 1430 | + | ||
| 1431 | +TEST_F(UtestLogicalStreamAllocator, MultiStreamLabel_RunOptimizeSuccess) { | ||
| 1432 | + DEF_GRAPH(g1) { | ||
| 1433 | + auto data = OP_CFG(DATA).InCnt(0).OutCnt(1); | ||
| 1434 | + auto relu1 = OP_CFG(RELU).InCnt(1).OutCnt(1).Attr(public_attr::USER_STREAM_LABEL, "stream_a"); | ||
| 1435 | + auto relu2 = OP_CFG(RELU).InCnt(1).OutCnt(1).Attr(public_attr::USER_STREAM_LABEL, "stream_b"); | ||
| 1436 | + auto net_output = OP_CFG(NETOUTPUT).InCnt(1).OutCnt(1); | ||
| 1437 | + CHAIN(NODE("data", data)->NODE("relu1", relu1)->NODE("relu2", relu2)->NODE("Node_Output", net_output)); | ||
| 1438 | + }; | ||
| 1439 | + auto graph = ToComputeGraph(g1); | ||
| 1440 | + const std::map<std::string, int32_t> max_parallel_num; | ||
| 1441 | + LogicalStreamAllocator allocator(max_parallel_num); | ||
| 1442 | + auto ret = allocator.RunOptimizeByTopoPasses(graph); | ||
| 1443 | + EXPECT_EQ(ret, SUCCESS); | ||
| 1444 | +} | ||
| 1445 | + | ||
| 1446 | +TEST_F(UtestLogicalStreamAllocator, GraphWithHcomAndAicore_RunOptimizeSuccess) { | ||
| 1447 | + DEF_GRAPH(g1) { | ||
| 1448 | + auto data = OP_CFG(DATA).InCnt(0).OutCnt(1).TensorDesc(FORMAT_NCHW, DT_FLOAT, {1, 1, 224, 224}); | ||
| 1449 | + auto relu1 = OP_CFG(RELU).InCnt(1).OutCnt(1).TensorDesc(FORMAT_NCHW, DT_FLOAT, {1, 1, 224, 224}); | ||
| 1450 | + auto all_reduce = OP_CFG(HCOMALLREDUCE).InCnt(1).OutCnt(1).TensorDesc(FORMAT_NCHW, DT_FLOAT, {1, 1, 224, 224}); | ||
| 1451 | + auto relu2 = OP_CFG(RELU).InCnt(1).OutCnt(1).TensorDesc(FORMAT_NCHW, DT_FLOAT, {1, 1, 224, 224}); | ||
| 1452 | + auto net_output = OP_CFG(NETOUTPUT).InCnt(1).OutCnt(1).TensorDesc(FORMAT_NCHW, DT_FLOAT, {-1}); | ||
| 1453 | + CHAIN(NODE("data", data) | ||
| 1454 | + ->NODE("relu1", relu1) | ||
| 1455 | + ->NODE("all_reduce", all_reduce) | ||
| 1456 | + ->NODE("relu2", relu2) | ||
| 1457 | + ->NODE("Node_Output", net_output)); | ||
| 1458 | + }; | ||
| 1459 | + auto graph = ToComputeGraph(g1); | ||
| 1460 | + std::map<std::string, int32_t> max_parallel_num; | ||
| 1461 | + max_parallel_num[HCOMALLREDUCE] = 1; | ||
| 1462 | + LogicalStreamAllocator allocator(max_parallel_num); | ||
| 1463 | + auto ret = allocator.RunOptimizeByTopoPasses(graph); | ||
| 1464 | + EXPECT_EQ(ret, SUCCESS); | ||
| 1465 | +} | ||
| 1466 | + | ||
| 1467 | +TEST_F(UtestLogicalStreamAllocator, GraphWithStreamId_RunOptimizeSuccess) { | ||
| 1468 | + DEF_GRAPH(g1) { | ||
| 1469 | + auto data = OP_CFG(DATA).InCnt(0).OutCnt(1).StreamId(0); | ||
| 1470 | + auto relu = OP_CFG(RELU).InCnt(1).OutCnt(1).StreamId(0); | ||
| 1471 | + auto net_output = OP_CFG(NETOUTPUT).InCnt(1).OutCnt(1).StreamId(0); | ||
| 1472 | + CHAIN(NODE("data", data)->NODE("relu", relu)->NODE("Node_Output", net_output)); | ||
| 1473 | + }; | ||
| 1474 | + auto graph = ToComputeGraph(g1); | ||
| 1475 | + const std::map<std::string, int32_t> max_parallel_num; | ||
| 1476 | + LogicalStreamAllocator allocator(max_parallel_num); | ||
| 1477 | + auto ret = allocator.RunOptimizeByTopoPasses(graph); | ||
| 1478 | + EXPECT_EQ(ret, SUCCESS); | ||
| 1479 | +} | ||
| 1480 | + | ||
| 1481 | +TEST_F(UtestLogicalStreamAllocator, RunOptimizeByTopoPasses_EmptyGraph) { | ||
| 1482 | + auto graph = std::make_shared<ComputeGraph>("empty_topo_graph"); | ||
| 1483 | + const std::map<std::string, int32_t> max_parallel_num; | ||
| 1484 | + LogicalStreamAllocator allocator(max_parallel_num); | ||
| 1485 | + auto ret = allocator.RunOptimizeByTopoPasses(graph); | ||
| 1486 | + EXPECT_EQ(ret, SUCCESS); | ||
| 1487 | +} | ||
| 1410 | } // namespace ge | 1488 | } // namespace ge |
| @@ -776,4 +776,71 @@ TEST_F(UtestModelBuilderTest, AssignStreamForDynamicShapeGraph_AutoMultistreamOp | |||
| 776 | EXPECT_EQ(ret, SUCCESS); | 776 | EXPECT_EQ(ret, SUCCESS); |
| 777 | EXPECT_EQ(builder.stream_num_, 0); | 777 | EXPECT_EQ(builder.stream_num_, 0); |
| 778 | } | 778 | } |
| 779 | +TEST_F(UtestModelBuilderTest, Build_SingleNodeGraph_Success) { | ||
| 780 | + DEF_GRAPH(graph) { | ||
| 781 | + auto data = OP_CFG(DATA).InCnt(0).OutCnt(1).TensorDesc(FORMAT_ND, DT_FLOAT, {16}); | ||
| 782 | + auto net_output = OP_CFG(NETOUTPUT).InCnt(1).OutCnt(1).TensorDesc(FORMAT_ND, DT_FLOAT, {-1}); | ||
| 783 | + CHAIN(NODE("data", data)->NODE("Node_Output", net_output)); | ||
| 784 | + }; | ||
| 785 | + auto compute_graph = ToComputeGraph(graph); | ||
| 786 | + ASSERT_EQ(compute_graph->TopologicalSorting(), GRAPH_SUCCESS); | ||
| 787 | + Graph2SubGraphInfoList subgraphs; | ||
| 788 | + std::map<std::string, int> stream_max_parallel_num; | ||
| 789 | + ge::ModelBuilder builder(0, compute_graph, subgraphs, stream_max_parallel_num, false); | ||
| 790 | + EXPECT_EQ(builder.AssignStreamForDynamicShapeGraph(compute_graph), SUCCESS); | ||
| 791 | +} | ||
| 792 | + | ||
| 793 | +TEST_F(UtestModelBuilderTest, Build_WithWorkspace) { | ||
| 794 | + DEF_GRAPH(graph) { | ||
| 795 | + auto data = OP_CFG(DATA).InCnt(0).OutCnt(1).TensorDesc(FORMAT_ND, DT_FLOAT, {16}); | ||
| 796 | + auto add = OP_CFG(ADD).InCnt(1).OutCnt(1).TensorDesc(FORMAT_ND, DT_FLOAT, {16}); | ||
| 797 | + auto net_output = OP_CFG(NETOUTPUT).InCnt(1).OutCnt(1).TensorDesc(FORMAT_ND, DT_FLOAT, {-1}); | ||
| 798 | + CHAIN(NODE("data", data)->NODE("add", add)->NODE("Node_Output", net_output)); | ||
| 799 | + }; | ||
| 800 | + auto compute_graph = ToComputeGraph(graph); | ||
| 801 | + auto add_node = compute_graph->FindNode("add"); | ||
| 802 | + ASSERT_NE(add_node, nullptr); | ||
| 803 | + add_node->GetOpDesc()->SetWorkspaceBytes({1024, 2048}); | ||
| 804 | + ASSERT_EQ(compute_graph->TopologicalSorting(), GRAPH_SUCCESS); | ||
| 805 | + Graph2SubGraphInfoList subgraphs; | ||
| 806 | + std::map<std::string, int> stream_max_parallel_num; | ||
| 807 | + ge::ModelBuilder builder(0, compute_graph, subgraphs, stream_max_parallel_num, false); | ||
| 808 | + EXPECT_EQ(builder.AssignStreamForDynamicShapeGraph(compute_graph), SUCCESS); | ||
| 809 | +} | ||
| 810 | + | ||
| 811 | +TEST_F(UtestModelBuilderTest, AssignStreamForDynamicShapeGraph_SingleStream) { | ||
| 812 | + DEF_GRAPH(g1) { | ||
| 813 | + auto data = OP_CFG(DATA).InCnt(0).OutCnt(1).TensorDesc(FORMAT_ND, DT_FLOAT, {-1}); | ||
| 814 | + auto add = OP_CFG(ADD).InCnt(1).OutCnt(1).TensorDesc(FORMAT_ND, DT_FLOAT, {-1}); | ||
| 815 | + auto net_output = OP_CFG(NETOUTPUT).InCnt(1).OutCnt(1).TensorDesc(FORMAT_ND, DT_FLOAT, {-1}); | ||
| 816 | + CHAIN(NODE("data", data)->NODE("add", add)->NODE("Node_Output", net_output)); | ||
| 817 | + }; | ||
| 818 | + auto graph = ToComputeGraph(g1); | ||
| 819 | + ASSERT_NE(graph, nullptr); | ||
| 820 | + ASSERT_EQ(graph->TopologicalSorting(), GRAPH_SUCCESS); | ||
| 821 | + Graph2SubGraphInfoList subgraphs; | ||
| 822 | + std::map<std::string, int> stream_max_parallel_num; | ||
| 823 | + ge::ModelBuilder builder(0, graph, subgraphs, stream_max_parallel_num, false); | ||
| 824 | + auto ret = builder.AssignStreamForDynamicShapeGraph(graph); | ||
| 825 | + EXPECT_EQ(ret, SUCCESS); | ||
| 826 | +} | ||
| 827 | + | ||
| 828 | +TEST_F(UtestModelBuilderTest, AssignStreamForDynamicShapeGraph_WithHcom) { | ||
| 829 | + DEF_GRAPH(g1) { | ||
| 830 | + auto data = OP_CFG(DATA).InCnt(0).OutCnt(1).TensorDesc(FORMAT_ND, DT_FLOAT, {16}); | ||
| 831 | + auto all_reduce = OP_CFG(HCOMALLREDUCE).InCnt(1).OutCnt(1).TensorDesc(FORMAT_ND, DT_FLOAT, {16}); | ||
| 832 | + auto add = OP_CFG(ADD).InCnt(1).OutCnt(1).TensorDesc(FORMAT_ND, DT_FLOAT, {16}); | ||
| 833 | + auto net_output = OP_CFG(NETOUTPUT).InCnt(1).OutCnt(1).TensorDesc(FORMAT_ND, DT_FLOAT, {-1}); | ||
| 834 | + CHAIN(NODE("data", data)->NODE("all_reduce", all_reduce)->NODE("add", add)->NODE("Node_Output", net_output)); | ||
| 835 | + }; | ||
| 836 | + auto graph = ToComputeGraph(g1); | ||
| 837 | + ASSERT_NE(graph, nullptr); | ||
| 838 | + ASSERT_EQ(graph->TopologicalSorting(), GRAPH_SUCCESS); | ||
| 839 | + Graph2SubGraphInfoList subgraphs; | ||
| 840 | + std::map<std::string, int> stream_max_parallel_num; | ||
| 841 | + stream_max_parallel_num[HCOMALLREDUCE] = 1; | ||
| 842 | + ge::ModelBuilder builder(0, graph, subgraphs, stream_max_parallel_num, false); | ||
| 843 | + auto ret = builder.AssignStreamForDynamicShapeGraph(graph); | ||
| 844 | + EXPECT_EQ(ret, SUCCESS); | ||
| 845 | +} | ||
| 779 | } // namespace ge | 846 | } // namespace ge |
| @@ -873,4 +873,94 @@ TEST_F(ModelCacheTest, ReadCacheConfig_Failed) { | |||
| 873 | } | 873 | } |
| 874 | RemoveCacheConfig(); | 874 | RemoveCacheConfig(); |
| 875 | } | 875 | } |
| 876 | +TEST_F(ModelCacheTest, Init_WithSubGraph_Success) { | ||
| 877 | + DEF_GRAPH(sub) { | ||
| 878 | + auto data = OP_CFG(DATA).InCnt(0).OutCnt(1).TensorDesc(FORMAT_ND, DT_INT32, {16}); | ||
| 879 | + auto add = OP_CFG(ADD).InCnt(1).OutCnt(1).TensorDesc(FORMAT_ND, DT_INT32, {16}); | ||
| 880 | + auto net_output = OP_CFG(NETOUTPUT).InCnt(1).OutCnt(1).TensorDesc(FORMAT_ND, DT_INT32, {-1}); | ||
| 881 | + CHAIN(NODE("sub_data", data)->NODE("sub_add", add)->NODE("sub_output", net_output)); | ||
| 882 | + }; | ||
| 883 | + auto sub_graph = ToComputeGraph(sub); | ||
| 884 | + sub_graph->SetName("sub_graph"); | ||
| 885 | + | ||
| 886 | + auto compute_graph = FakeGraphWithSubGraph("test_sub_graph", sub_graph); | ||
| 887 | + ASSERT_NE(compute_graph, nullptr); | ||
| 888 | + | ||
| 889 | + SetCacheDirOption("./ut_cache_dir"); | ||
| 890 | + SetGraphKeyOption("graph_key_sub"); | ||
| 891 | + GraphRebuildStateCtrl ctrl; | ||
| 892 | + { | ||
| 893 | + ModelCache model_cache; | ||
| 894 | + auto ret = model_cache.Init(compute_graph, &ctrl); | ||
| 895 | + EXPECT_EQ(ret, SUCCESS); | ||
| 896 | + } | ||
| 897 | + RemoveCacheConfig(); | ||
| 898 | +} | ||
| 899 | + | ||
| 900 | +TEST_F(ModelCacheTest, TryLoadModelFromCache_NoCache_ReturnsSuccess) { | ||
| 901 | + auto compute_graph = FakeComputeGraph("test_no_cache"); | ||
| 902 | + ASSERT_NE(compute_graph, nullptr); | ||
| 903 | + | ||
| 904 | + SetCacheDirOption("./ut_cache_dir_nonexist"); | ||
| 905 | + SetGraphKeyOption("graph_key_no_cache"); | ||
| 906 | + GraphRebuildStateCtrl ctrl; | ||
| 907 | + { | ||
| 908 | + ModelCache model_cache; | ||
| 909 | + auto ret = model_cache.Init(compute_graph, &ctrl); | ||
| 910 | + GeRootModelPtr load_model; | ||
| 911 | + ret = model_cache.TryLoadModelFromCache(compute_graph, load_model); | ||
| 912 | + EXPECT_EQ(ret, SUCCESS); | ||
| 913 | + EXPECT_EQ(load_model, nullptr); | ||
| 914 | + } | ||
| 915 | + RemoveCacheConfig(); | ||
| 916 | +} | ||
| 917 | + | ||
| 918 | +TEST_F(ModelCacheTest, SaveCache_Failed_NoDir) { | ||
| 919 | + auto compute_graph = FakeComputeGraph("test_save_fail"); | ||
| 920 | + ASSERT_NE(compute_graph, nullptr); | ||
| 921 | + | ||
| 922 | + SetCacheDirOption(""); | ||
| 923 | + SetGraphKeyOption("graph_key_save_fail"); | ||
| 924 | + GraphRebuildStateCtrl ctrl; | ||
| 925 | + { | ||
| 926 | + ModelCache model_cache; | ||
| 927 | + auto ret = model_cache.Init(compute_graph, &ctrl); | ||
| 928 | + EXPECT_EQ(ret, SUCCESS); | ||
| 929 | + } | ||
| 930 | + RemoveCacheConfig(); | ||
| 931 | +} | ||
| 932 | + | ||
| 933 | +TEST_F(ModelCacheTest, Init_WithConstantGraph_Success) { | ||
| 934 | + auto compute_graph = FakeComputeGraphWithConstant("test_const_graph"); | ||
| 935 | + ASSERT_NE(compute_graph, nullptr); | ||
| 936 | + | ||
| 937 | + SetCacheDirOption("./ut_cache_dir"); | ||
| 938 | + SetGraphKeyOption("graph_key_const"); | ||
| 939 | + GraphRebuildStateCtrl ctrl; | ||
| 940 | + { | ||
| 941 | + ModelCache model_cache; | ||
| 942 | + auto ret = model_cache.Init(compute_graph, &ctrl); | ||
| 943 | + EXPECT_EQ(ret, SUCCESS); | ||
| 944 | + } | ||
| 945 | + RemoveCacheConfig(); | ||
| 946 | +} | ||
| 947 | + | ||
| 948 | +TEST_F(ModelCacheTest, ReadCacheConfig_EmptyFile) { | ||
| 949 | + auto compute_graph = FakeComputeGraph("test_empty_config"); | ||
| 950 | + ASSERT_NE(compute_graph, nullptr); | ||
| 951 | + | ||
| 952 | + std::string cache_config_file = "./ut_cache_dir/cache.conf"; | ||
| 953 | + { | ||
| 954 | + std::ofstream json_file(cache_config_file); | ||
| 955 | + json_file << "{}" << std::endl; | ||
| 956 | + } | ||
| 957 | + SetCacheDirOption("./ut_cache_dir"); | ||
| 958 | + SetGraphKeyOption("graph_key_empty_config"); | ||
| 959 | + GraphRebuildStateCtrl ctrl; | ||
| 960 | + { | ||
| 961 | + ModelCache model_cache; | ||
| 962 | + auto ret = model_cache.Init(compute_graph, &ctrl); | ||
| 963 | + } | ||
| 964 | + RemoveCacheConfig(); | ||
| 965 | +} | ||
| 876 | } // namespace ge | 966 | } // namespace ge |
| @@ -311,4 +311,100 @@ TEST_F(UtestRunContext, PrintMemInfo_NoCrash) { | |||
| 311 | RunContextUtil run_util; | 311 | RunContextUtil run_util; |
| 312 | EXPECT_NO_THROW(run_util.PrintMemInfo()); | 312 | EXPECT_NO_THROW(run_util.PrintMemInfo()); |
| 313 | } | 313 | } |
| 314 | + | ||
| 315 | +TEST_F(UtestRunContext, GetMemorySize_GetSizeFailed) { | ||
| 316 | + auto graph = make_shared<ge::ComputeGraph>("test_graph"); | ||
| 317 | + auto op_desc = make_shared<OpDesc>("test_node", "BufferPool"); | ||
| 318 | + GeTensorDesc tensor_desc; | ||
| 319 | + op_desc->AddOutputDesc(tensor_desc); | ||
| 320 | + auto node = graph->AddNode(op_desc); | ||
| 321 | + int64_t output_size = 0; | ||
| 322 | + EXPECT_EQ(GetMemorySize(node, output_size), SUCCESS); | ||
| 323 | +} | ||
| 324 | + | ||
| 325 | +TEST_F(UtestRunContext, SetActiveLabelList_NullNode) { | ||
| 326 | + NodePtr null_node = nullptr; | ||
| 327 | + EXPECT_EQ(SetActiveLabelList(null_node, {"label1"}), PARAM_INVALID); | ||
| 328 | +} | ||
| 329 | + | ||
| 330 | +TEST_F(UtestRunContext, SetSwitchBranchNodeLabel_NullNode) { | ||
| 331 | + NodePtr null_node = nullptr; | ||
| 332 | + EXPECT_EQ(SetSwitchBranchNodeLabel(null_node, "branch1"), PARAM_INVALID); | ||
| 333 | +} | ||
| 334 | + | ||
| 335 | +TEST_F(UtestRunContext, SetSwitchTrueBranchFlag_NullNode) { | ||
| 336 | + NodePtr null_node = nullptr; | ||
| 337 | + EXPECT_EQ(SetSwitchTrueBranchFlag(null_node, true), PARAM_INVALID); | ||
| 338 | +} | ||
| 339 | + | ||
| 340 | +TEST_F(UtestRunContext, SetOriginalNodeName_NullNode) { | ||
| 341 | + NodePtr null_node = nullptr; | ||
| 342 | + EXPECT_EQ(SetOriginalNodeName(null_node, "orig_name"), PARAM_INVALID); | ||
| 343 | +} | ||
| 344 | + | ||
| 345 | +TEST_F(UtestRunContext, SetCyclicDependenceFlag_NullNode) { | ||
| 346 | + NodePtr null_node = nullptr; | ||
| 347 | + EXPECT_EQ(SetCyclicDependenceFlag(null_node), PARAM_INVALID); | ||
| 348 | +} | ||
| 349 | + | ||
| 350 | +TEST_F(UtestRunContext, SetNextIteration_NullNode) { | ||
| 351 | + NodePtr null_node = nullptr; | ||
| 352 | + auto graph = make_shared<ge::ComputeGraph>("test_graph"); | ||
| 353 | + auto op_desc = make_shared<OpDesc>("node1", "Merge"); | ||
| 354 | + auto node1 = graph->AddNode(op_desc); | ||
| 355 | + EXPECT_EQ(SetNextIteration(null_node, node1), PARAM_INVALID); | ||
| 356 | +} | ||
| 357 | + | ||
| 358 | +TEST_F(UtestRunContext, SetNextIteration_BothNull) { | ||
| 359 | + NodePtr null_node = nullptr; | ||
| 360 | + EXPECT_EQ(SetNextIteration(null_node, null_node), PARAM_INVALID); | ||
| 361 | +} | ||
| 362 | + | ||
| 363 | +TEST_F(UtestRunContext, GetOriginalType_NullNode) { | ||
| 364 | + NodePtr null_node = nullptr; | ||
| 365 | + std::string type; | ||
| 366 | + EXPECT_EQ(GetOriginalType(null_node, type), PARAM_INVALID); | ||
| 367 | +} | ||
| 368 | + | ||
| 369 | +TEST_F(UtestRunContext, AlignMemSize_LargePositive) { | ||
| 370 | + int64_t mem_size = 1000; | ||
| 371 | + AlignMemSize(mem_size, 512); | ||
| 372 | + EXPECT_EQ(mem_size, 1024); | ||
| 373 | +} | ||
| 374 | + | ||
| 375 | +TEST_F(UtestRunContext, SetStreamLabel_WithEmptyLabel) { | ||
| 376 | + auto graph = make_shared<ge::ComputeGraph>("test_graph"); | ||
| 377 | + auto op_desc = make_shared<OpDesc>("test_node", "Add"); | ||
| 378 | + auto node = graph->AddNode(op_desc); | ||
| 379 | + EXPECT_EQ(SetStreamLabel(node, ""), SUCCESS); | ||
| 380 | +} | ||
| 381 | + | ||
| 382 | +TEST_F(UtestRunContext, SetActiveLabelList_WithEmptyList) { | ||
| 383 | + auto graph = make_shared<ge::ComputeGraph>("test_graph"); | ||
| 384 | + auto op_desc = make_shared<OpDesc>("test_node", "Add"); | ||
| 385 | + auto node = graph->AddNode(op_desc); | ||
| 386 | + std::vector<std::string> empty_labels; | ||
| 387 | + EXPECT_EQ(SetActiveLabelList(node, empty_labels), SUCCESS); | ||
| 388 | +} | ||
| 389 | + | ||
| 390 | +TEST_F(UtestRunContext, SetNextIteration_BothValidNodes) { | ||
| 391 | + auto graph = make_shared<ge::ComputeGraph>("test_graph"); | ||
| 392 | + auto op_desc1 = make_shared<OpDesc>("node1", "Merge"); | ||
| 393 | + auto op_desc2 = make_shared<OpDesc>("node2", "NextIteration"); | ||
| 394 | + auto node1 = graph->AddNode(op_desc1); | ||
| 395 | + auto node2 = graph->AddNode(op_desc2); | ||
| 396 | + EXPECT_EQ(SetNextIteration(node1, node2), SUCCESS); | ||
| 397 | + EXPECT_EQ(SetNextIteration(node2, node1), SUCCESS); | ||
| 398 | +} | ||
| 399 | + | ||
| 400 | +TEST_F(UtestRunContext, GetMemorySize_WithSizeZero) { | ||
| 401 | + auto graph = make_shared<ge::ComputeGraph>("test_graph"); | ||
| 402 | + auto op_desc = make_shared<OpDesc>("test_node", "BufferPool"); | ||
| 403 | + GeTensorDesc tensor_desc; | ||
| 404 | + TensorUtils::SetSize(tensor_desc, 0); | ||
| 405 | + op_desc->AddOutputDesc(tensor_desc); | ||
| 406 | + auto node = graph->AddNode(op_desc); | ||
| 407 | + int64_t output_size = 0; | ||
| 408 | + EXPECT_EQ(GetMemorySize(node, output_size), SUCCESS); | ||
| 409 | +} | ||
| 314 | } // namespace ge | 410 | } // namespace ge |
| @@ -2027,4 +2027,119 @@ TEST_F(UtestStreamAllocator, RefreshTaskDefStreamId_AttachedStream_success) { | |||
| 2027 | ASSERT_EQ(task_defs[2].stream_id(), 2); | 2027 | ASSERT_EQ(task_defs[2].stream_id(), 2); |
| 2028 | ASSERT_EQ(task_defs[3].stream_id(), 3); | 2028 | ASSERT_EQ(task_defs[3].stream_id(), 3); |
| 2029 | } | 2029 | } |
| 2030 | +TEST_F(UtestStreamAllocator, AssignLogicalStreams_SingleNode_Success) { | ||
| 2031 | + DEF_GRAPH(g1) { | ||
| 2032 | + auto data = OP_CFG(DATA).InCnt(0).OutCnt(1); | ||
| 2033 | + auto net_output = OP_CFG(NETOUTPUT).InCnt(1).OutCnt(1); | ||
| 2034 | + CHAIN(NODE("data", data)->NODE("Node_Output", net_output)); | ||
| 2035 | + }; | ||
| 2036 | + auto graph = ToComputeGraph(g1); | ||
| 2037 | + ASSERT_EQ(graph->TopologicalSorting(), GRAPH_SUCCESS); | ||
| 2038 | + Graph2SubGraphInfoList subgraphs; | ||
| 2039 | + StreamAllocator allocator(graph, subgraphs); | ||
| 2040 | + std::map<std::string, int32_t> max_parallel_num; | ||
| 2041 | + auto ret = allocator.AssignLogicalStreams(max_parallel_num, false); | ||
| 2042 | +} | ||
| 2043 | + | ||
| 2044 | +TEST_F(UtestStreamAllocator, InsertSyncEvents_SingleStream_Success) { | ||
| 2045 | + DEF_GRAPH(g1) { | ||
| 2046 | + auto data = OP_CFG(DATA).InCnt(0).OutCnt(1); | ||
| 2047 | + auto net_output = OP_CFG(NETOUTPUT).InCnt(1).OutCnt(1); | ||
| 2048 | + CHAIN(NODE("data", data)->NODE("Node_Output", net_output)); | ||
| 2049 | + }; | ||
| 2050 | + auto graph = ToComputeGraph(g1); | ||
| 2051 | + ASSERT_EQ(graph->TopologicalSorting(), GRAPH_SUCCESS); | ||
| 2052 | + Graph2SubGraphInfoList subgraphs; | ||
| 2053 | + StreamAllocator allocator(graph, subgraphs); | ||
| 2054 | + auto ret = allocator.InsertSyncEvents(EventType::kEvent); | ||
| 2055 | +} | ||
| 2056 | + | ||
| 2057 | +TEST_F(UtestStreamAllocator, InsertSyncEvents_MultiBranch_Success) { | ||
| 2058 | + DEF_GRAPH(g1) { | ||
| 2059 | + auto data = OP_CFG(DATA).InCnt(0).OutCnt(1); | ||
| 2060 | + auto add1 = OP_CFG(ADD).InCnt(1).OutCnt(1); | ||
| 2061 | + auto add2 = OP_CFG(ADD).InCnt(1).OutCnt(1); | ||
| 2062 | + auto concat = OP_CFG(CONCAT).InCnt(2).OutCnt(1); | ||
| 2063 | + auto net_output = OP_CFG(NETOUTPUT).InCnt(1).OutCnt(1); | ||
| 2064 | + CHAIN(NODE("data", data)->EDGE(0, 0)->NODE("add1", add1)->EDGE(0, 0)->NODE("concat", concat)); | ||
| 2065 | + CHAIN(NODE("data", data)->EDGE(0, 0)->NODE("add2", add2)->EDGE(0, 1)->NODE("concat", concat)); | ||
| 2066 | + CHAIN(NODE("concat", concat)->NODE("Node_Output", net_output)); | ||
| 2067 | + }; | ||
| 2068 | + auto graph = ToComputeGraph(g1); | ||
| 2069 | + ASSERT_EQ(graph->TopologicalSorting(), GRAPH_SUCCESS); | ||
| 2070 | + Graph2SubGraphInfoList subgraphs; | ||
| 2071 | + StreamAllocator allocator(graph, subgraphs); | ||
| 2072 | + auto ret = allocator.InsertSyncEvents(EventType::kEvent); | ||
| 2073 | +} | ||
| 2074 | + | ||
| 2075 | +TEST_F(UtestStreamAllocator, SetActiveStreamsByLabel_Success) { | ||
| 2076 | + DEF_GRAPH(g1) { | ||
| 2077 | + auto data = OP_CFG(DATA).InCnt(0).OutCnt(1); | ||
| 2078 | + auto relu1 = OP_CFG(RELU).InCnt(1).OutCnt(1).Attr(public_attr::USER_STREAM_LABEL, "label_1"); | ||
| 2079 | + auto relu2 = OP_CFG(RELU).InCnt(1).OutCnt(1).Attr(public_attr::USER_STREAM_LABEL, "label_2"); | ||
| 2080 | + auto net_output = OP_CFG(NETOUTPUT).InCnt(2).OutCnt(1); | ||
| 2081 | + CHAIN(NODE("data", data)->EDGE(0, 0)->NODE("relu1", relu1)->EDGE(0, 0)->NODE("Node_Output", net_output)); | ||
| 2082 | + CHAIN(NODE("data", data)->EDGE(0, 0)->NODE("relu2", relu2)->EDGE(0, 1)->NODE("Node_Output", net_output)); | ||
| 2083 | + }; | ||
| 2084 | + auto graph = ToComputeGraph(g1); | ||
| 2085 | + ASSERT_EQ(graph->TopologicalSorting(), GRAPH_SUCCESS); | ||
| 2086 | + Graph2SubGraphInfoList subgraphs; | ||
| 2087 | + StreamAllocator allocator(graph, subgraphs); | ||
| 2088 | + auto ret = allocator.SetActiveStreamsByLabel(); | ||
| 2089 | +} | ||
| 2090 | + | ||
| 2091 | +TEST_F(UtestStreamAllocator, CheckStreamActived_Success) { | ||
| 2092 | + DEF_GRAPH(g1) { | ||
| 2093 | + auto data = OP_CFG(DATA).InCnt(0).OutCnt(1); | ||
| 2094 | + auto net_output = OP_CFG(NETOUTPUT).InCnt(1).OutCnt(1); | ||
| 2095 | + CHAIN(NODE("data", data)->NODE("Node_Output", net_output)); | ||
| 2096 | + }; | ||
| 2097 | + auto graph = ToComputeGraph(g1); | ||
| 2098 | + ASSERT_EQ(graph->TopologicalSorting(), GRAPH_SUCCESS); | ||
| 2099 | + Graph2SubGraphInfoList subgraphs; | ||
| 2100 | + StreamAllocator allocator(graph, subgraphs); | ||
| 2101 | + auto ret = allocator.CheckStreamActived(); | ||
| 2102 | +} | ||
| 2103 | + | ||
| 2104 | +TEST_F(UtestStreamAllocator, InsertSyncNodesByLogicStream_Success) { | ||
| 2105 | + DEF_GRAPH(g1) { | ||
| 2106 | + auto data = OP_CFG(DATA).InCnt(0).OutCnt(1); | ||
| 2107 | + auto net_output = OP_CFG(NETOUTPUT).InCnt(1).OutCnt(1); | ||
| 2108 | + CHAIN(NODE("data", data)->NODE("Node_Output", net_output)); | ||
| 2109 | + }; | ||
| 2110 | + auto graph = ToComputeGraph(g1); | ||
| 2111 | + ASSERT_EQ(graph->TopologicalSorting(), GRAPH_SUCCESS); | ||
| 2112 | + Graph2SubGraphInfoList subgraphs; | ||
| 2113 | + StreamAllocator allocator(graph, subgraphs); | ||
| 2114 | + int64_t stream_num = 0; | ||
| 2115 | + int64_t event_num = 0; | ||
| 2116 | + int64_t notify_num = 0; | ||
| 2117 | + auto ret = allocator.InsertSyncNodesByLogicStream(stream_num, event_num, notify_num); | ||
| 2118 | +} | ||
| 2119 | + | ||
| 2120 | +TEST_F(UtestStreamAllocator, PreProcessOfInsertSyncNodes_Success) { | ||
| 2121 | + DEF_GRAPH(g1) { | ||
| 2122 | + auto data = OP_CFG(DATA).InCnt(0).OutCnt(1); | ||
| 2123 | + auto net_output = OP_CFG(NETOUTPUT).InCnt(1).OutCnt(1); | ||
| 2124 | + CHAIN(NODE("data", data)->NODE("Node_Output", net_output)); | ||
| 2125 | + }; | ||
| 2126 | + auto graph = ToComputeGraph(g1); | ||
| 2127 | + ASSERT_EQ(graph->TopologicalSorting(), GRAPH_SUCCESS); | ||
| 2128 | + Graph2SubGraphInfoList subgraphs; | ||
| 2129 | + StreamAllocator allocator(graph, subgraphs); | ||
| 2130 | + auto ret = allocator.PreProcessOfInsertSyncNodes(); | ||
| 2131 | +} | ||
| 2132 | + | ||
| 2133 | +TEST_F(UtestStreamAllocator, GenerateSyncEventNodes_Success) { | ||
| 2134 | + DEF_GRAPH(g1) { | ||
| 2135 | + auto data = OP_CFG(DATA).InCnt(0).OutCnt(1); | ||
| 2136 | + auto net_output = OP_CFG(NETOUTPUT).InCnt(1).OutCnt(1); | ||
| 2137 | + CHAIN(NODE("data", data)->NODE("Node_Output", net_output)); | ||
| 2138 | + }; | ||
| 2139 | + auto graph = ToComputeGraph(g1); | ||
| 2140 | + ASSERT_EQ(graph->TopologicalSorting(), GRAPH_SUCCESS); | ||
| 2141 | + Graph2SubGraphInfoList subgraphs; | ||
| 2142 | + StreamAllocator allocator(graph, subgraphs); | ||
| 2143 | + auto ret = allocator.GenerateSyncEventNodes(false); | ||
| 2144 | +} | ||
| 2030 | } // namespace ge | 2145 | } // namespace ge |
| @@ -288,4 +288,103 @@ TEST(UtestGraphCreateTransOp, GeShapeHasher_DifferentShapeDifferentHash) { | |||
| 288 | GeShape shape2({3, 2, 1}); | 288 | GeShape shape2({3, 2, 1}); |
| 289 | EXPECT_NE(hasher(shape1), hasher(shape2)); | 289 | EXPECT_NE(hasher(shape1), hasher(shape2)); |
| 290 | } | 290 | } |
| 291 | + | ||
| 292 | +TEST(UtestGraphCreateTransOp, CheckAccuracySupported_WithNonMatchingEngine) { | ||
| 293 | + map<string, string> options; | ||
| 294 | + MmpaStub::GetInstance().SetImpl(std::make_shared<MockMmpaForTransOpInit>()); | ||
| 295 | + ge::GELib::Initialize(options); | ||
| 296 | + MmpaStub::GetInstance().Reset(); | ||
| 297 | + | ||
| 298 | + OpDescPtr op_desc = std::make_shared<OpDesc>("transdata_test", TRANSDATA); | ||
| 299 | + GeTensorDesc input_desc(GeShape({1, 3, 224, 224}), FORMAT_NCHW, DT_FLOAT); | ||
| 300 | + GeTensorDesc output_desc(GeShape({1, 14, 224, 224, 16}), FORMAT_NC1HWC0, DT_FLOAT); | ||
| 301 | + (void)op_desc->AddInputDesc(input_desc); | ||
| 302 | + (void)op_desc->AddOutputDesc(output_desc); | ||
| 303 | + | ||
| 304 | + bool is_supported = false; | ||
| 305 | + std::string unsupported_reason; | ||
| 306 | + auto result = | ||
| 307 | + TransOpCreator::CheckAccuracySupported(op_desc, "non_existent_engine", is_supported, unsupported_reason); | ||
| 308 | + EXPECT_NE(result, GRAPH_SUCCESS); | ||
| 309 | + EXPECT_FALSE(is_supported); | ||
| 310 | + | ||
| 311 | + ge::GELib::GetInstance()->Finalize(); | ||
| 312 | +} | ||
| 313 | + | ||
| 314 | +TEST(UtestGraphCreateTransOp, CreateTransDataOp_WithDstSubformat) { | ||
| 315 | + vector<int64_t> dims = {1, 2, 3, 4}; | ||
| 316 | + GeShape shape(dims); | ||
| 317 | + Format dst_format = static_cast<Format>(GetFormatFromSub(FORMAT_FRACTAL_Z, 32)); | ||
| 318 | + GeTensorDesc input_desc(shape, FORMAT_NCHW); | ||
| 319 | + GeTensorDesc output_desc(shape, dst_format); | ||
| 320 | + | ||
| 321 | + auto trans_op = TransOpCreator::CreateTransDataOp("test_trans_data_dst_sub", input_desc, output_desc, false); | ||
| 322 | + EXPECT_NE(trans_op, nullptr); | ||
| 323 | + | ||
| 324 | + int32_t dst_subformat = -1; | ||
| 325 | + EXPECT_TRUE(AttrUtils::GetInt(trans_op, FORMAT_TRANSFER_DST_SUBFORMAT, dst_subformat)); | ||
| 326 | + EXPECT_EQ(dst_subformat, 32); | ||
| 327 | + | ||
| 328 | + int32_t groups = -1; | ||
| 329 | + EXPECT_TRUE(AttrUtils::GetInt(trans_op, "groups", groups)); | ||
| 330 | + EXPECT_EQ(groups, 32); | ||
| 331 | +} | ||
| 332 | + | ||
| 333 | +TEST(UtestGraphCreateTransOp, CreateTransDataOp_WithBothSubformat) { | ||
| 334 | + vector<int64_t> dims = {1, 2, 3, 4}; | ||
| 335 | + GeShape shape(dims); | ||
| 336 | + Format src_format = static_cast<Format>(GetFormatFromSub(FORMAT_FRACTAL_Z, 16)); | ||
| 337 | + Format dst_format = static_cast<Format>(GetFormatFromSub(FORMAT_FRACTAL_Z, 32)); | ||
| 338 | + GeTensorDesc input_desc(shape, src_format); | ||
| 339 | + GeTensorDesc output_desc(shape, dst_format); | ||
| 340 | + | ||
| 341 | + auto trans_op = TransOpCreator::CreateTransDataOp("test_trans_data_both_sub", input_desc, output_desc, false); | ||
| 342 | + EXPECT_NE(trans_op, nullptr); | ||
| 343 | + | ||
| 344 | + int32_t src_subformat = -1; | ||
| 345 | + EXPECT_TRUE(AttrUtils::GetInt(trans_op, FORMAT_TRANSFER_SRC_SUBFORMAT, src_subformat)); | ||
| 346 | + EXPECT_EQ(src_subformat, 16); | ||
| 347 | + | ||
| 348 | + int32_t dst_subformat = -1; | ||
| 349 | + EXPECT_TRUE(AttrUtils::GetInt(trans_op, FORMAT_TRANSFER_DST_SUBFORMAT, dst_subformat)); | ||
| 350 | + EXPECT_EQ(dst_subformat, 32); | ||
| 351 | +} | ||
| 352 | + | ||
| 353 | +TEST(UtestGraphCreateTransOp, CreateTransDataOp_WithFractalZ3DSubformat) { | ||
| 354 | + vector<int64_t> dims = {1, 2, 3, 4}; | ||
| 355 | + GeShape shape(dims); | ||
| 356 | + Format src_format = static_cast<Format>(GetFormatFromSub(FORMAT_FRACTAL_Z_3D, 32)); | ||
| 357 | + GeTensorDesc input_desc(shape, src_format); | ||
| 358 | + GeTensorDesc output_desc(shape, FORMAT_NCHW); | ||
| 359 | + | ||
| 360 | + auto trans_op = TransOpCreator::CreateTransDataOp("test_trans_data_z3d", input_desc, output_desc, false); | ||
| 361 | + EXPECT_NE(trans_op, nullptr); | ||
| 362 | +} | ||
| 363 | + | ||
| 364 | +TEST(UtestGraphCreateTransOp, CreateCastOp_WithCheckAccuracyEnabled) { | ||
| 365 | + vector<int64_t> dims = {1, 2, 3, 4}; | ||
| 366 | + GeShape shape(dims); | ||
| 367 | + GeTensorDesc input_desc(shape, FORMAT_NHWC, DT_FLOAT); | ||
| 368 | + GeTensorDesc output_desc(shape, FORMAT_NCHW, DT_BOOL); | ||
| 369 | + auto cast_op = TransOpCreator::CreateCastOp("test_cast_check", input_desc, output_desc, true); | ||
| 370 | + EXPECT_EQ(cast_op, nullptr); | ||
| 371 | +} | ||
| 372 | + | ||
| 373 | +TEST(UtestGraphCreateTransOp, CreateOtherTransOp_WithEmptyOpType) { | ||
| 374 | + GeTensorDesc input_desc(GeShape({1, 3}), FORMAT_ND, DT_FLOAT); | ||
| 375 | + GeTensorDesc output_desc(GeShape({1, 3}), FORMAT_ND, DT_FLOAT); | ||
| 376 | + auto result = TransOpCreator::CreateOtherTransOp("test_empty_type", "", input_desc, output_desc); | ||
| 377 | + EXPECT_NE(result, nullptr); | ||
| 378 | +} | ||
| 379 | + | ||
| 380 | +TEST(UtestGraphCreateTransOp, CreateReshapeNodeToGraph_WithScalarOutput) { | ||
| 381 | + auto compute_graph = std::make_shared<ComputeGraph>("reshape_scalar_test"); | ||
| 382 | + GeTensorDesc input_desc(GeShape({1}), FORMAT_ND, DT_FLOAT); | ||
| 383 | + GeTensorDesc output_desc(GeShape(std::vector<int64_t>{}), FORMAT_ND, DT_FLOAT); | ||
| 384 | + output_desc.SetOriginShape(GeShape(std::vector<int64_t>{})); | ||
| 385 | + std::unordered_map<GeShape, NodePtr, GeShapeHasher> cache; | ||
| 386 | + auto result = | ||
| 387 | + TransOpCreator::CreateReshapeNodeToGraph(compute_graph, "reshape_scalar", input_desc, output_desc, cache); | ||
| 388 | + EXPECT_NE(result, nullptr); | ||
| 389 | +} | ||
| 291 | } // namespace ge | 390 | } // namespace ge |
Mtests/ge/ut/ge/graph/eager_style_graph_builder/es_base_struct/es_compliant_node_builder_unittest.cc+143-0
| @@ -464,3 +464,146 @@ TEST_F(CompliantNodeBuilderLLT, MultipleDynamicIO) { | |||
| 464 | .CheckOutputIrInfo({{0, {0, 2}}, {1, {2, 3}}}); | 464 | .CheckOutputIrInfo({{0, {0, 2}}, {1, {2, 3}}}); |
| 465 | EXPECT_NE(ge::NodeAdapter::GNode2Node(node), nullptr); | 465 | EXPECT_NE(ge::NodeAdapter::GNode2Node(node), nullptr); |
| 466 | } | 466 | } |
| 467 | + | ||
| 468 | +TEST_F(CompliantNodeBuilderLLT, IrInputDefV2_CopyAssignment) { | ||
| 469 | + CompliantNodeBuilder::IrInputDefV2 src("in1", CompliantNodeBuilder::kEsIrInputOptional, "sym1"); | ||
| 470 | + CompliantNodeBuilder::IrInputDefV2 dst("old", CompliantNodeBuilder::kEsIrInputRequired, "oldsym"); | ||
| 471 | + dst = src; | ||
| 472 | + EXPECT_STREQ(dst.GetName(), "in1"); | ||
| 473 | + EXPECT_EQ(dst.GetInputType(), CompliantNodeBuilder::kEsIrInputOptional); | ||
| 474 | + EXPECT_STREQ(dst.GetSymbolId(), "sym1"); | ||
| 475 | +} | ||
| 476 | + | ||
| 477 | +TEST_F(CompliantNodeBuilderLLT, IrInputDefV2_MoveConstructor) { | ||
| 478 | + CompliantNodeBuilder::IrInputDefV2 src("move_in", CompliantNodeBuilder::kEsIrInputDynamic, "movesym"); | ||
| 479 | + CompliantNodeBuilder::IrInputDefV2 dst(std::move(src)); | ||
| 480 | + EXPECT_STREQ(dst.GetName(), "move_in"); | ||
| 481 | + EXPECT_EQ(dst.GetInputType(), CompliantNodeBuilder::kEsIrInputDynamic); | ||
| 482 | + EXPECT_STREQ(dst.GetSymbolId(), "movesym"); | ||
| 483 | +} | ||
| 484 | + | ||
| 485 | +TEST_F(CompliantNodeBuilderLLT, IrInputDefV2_MoveAssignment) { | ||
| 486 | + CompliantNodeBuilder::IrInputDefV2 src("move_assign_in", CompliantNodeBuilder::kEsIrInputOptional, "movesym2"); | ||
| 487 | + CompliantNodeBuilder::IrInputDefV2 dst("old2", CompliantNodeBuilder::kEsIrInputRequired, "oldsym2"); | ||
| 488 | + dst = std::move(src); | ||
| 489 | + EXPECT_STREQ(dst.GetName(), "move_assign_in"); | ||
| 490 | + EXPECT_EQ(dst.GetInputType(), CompliantNodeBuilder::kEsIrInputOptional); | ||
| 491 | + EXPECT_STREQ(dst.GetSymbolId(), "movesym2"); | ||
| 492 | +} | ||
| 493 | + | ||
| 494 | +TEST_F(CompliantNodeBuilderLLT, IrInputDefV2_SymbolId) { | ||
| 495 | + CompliantNodeBuilder::IrInputDefV2 def("x", CompliantNodeBuilder::kEsIrInputRequired, ""); | ||
| 496 | + def.SymbolId("custom_sym"); | ||
| 497 | + EXPECT_STREQ(def.GetSymbolId(), "custom_sym"); | ||
| 498 | +} | ||
| 499 | + | ||
| 500 | +TEST_F(CompliantNodeBuilderLLT, IrOutputDefV2_CopyAssignment) { | ||
| 501 | + CompliantNodeBuilder::IrOutputDefV2 src("out1", CompliantNodeBuilder::kEsIrOutputDynamic, "outsym1"); | ||
| 502 | + CompliantNodeBuilder::IrOutputDefV2 dst("old", CompliantNodeBuilder::kEsIrOutputRequired, "oldsym"); | ||
| 503 | + dst = src; | ||
| 504 | + EXPECT_STREQ(dst.GetName(), "out1"); | ||
| 505 | + EXPECT_EQ(dst.GetOutputType(), CompliantNodeBuilder::kEsIrOutputDynamic); | ||
| 506 | + EXPECT_STREQ(dst.GetSymbolId(), "outsym1"); | ||
| 507 | +} | ||
| 508 | + | ||
| 509 | +TEST_F(CompliantNodeBuilderLLT, IrOutputDefV2_MoveConstructor) { | ||
| 510 | + CompliantNodeBuilder::IrOutputDefV2 src("move_out", CompliantNodeBuilder::kEsIrOutputRequired, "movesym"); | ||
| 511 | + CompliantNodeBuilder::IrOutputDefV2 dst(std::move(src)); | ||
| 512 | + EXPECT_STREQ(dst.GetName(), "move_out"); | ||
| 513 | + EXPECT_EQ(dst.GetOutputType(), CompliantNodeBuilder::kEsIrOutputRequired); | ||
| 514 | + EXPECT_STREQ(dst.GetSymbolId(), "movesym"); | ||
| 515 | +} | ||
| 516 | + | ||
| 517 | +TEST_F(CompliantNodeBuilderLLT, IrOutputDefV2_MoveAssignment) { | ||
| 518 | + CompliantNodeBuilder::IrOutputDefV2 src("move_assign_out", CompliantNodeBuilder::kEsIrOutputDynamic, "movesym2"); | ||
| 519 | + CompliantNodeBuilder::IrOutputDefV2 dst("old2", CompliantNodeBuilder::kEsIrOutputRequired, "oldsym2"); | ||
| 520 | + dst = std::move(src); | ||
| 521 | + EXPECT_STREQ(dst.GetName(), "move_assign_out"); | ||
| 522 | + EXPECT_EQ(dst.GetOutputType(), CompliantNodeBuilder::kEsIrOutputDynamic); | ||
| 523 | + EXPECT_STREQ(dst.GetSymbolId(), "movesym2"); | ||
| 524 | +} | ||
| 525 | + | ||
| 526 | +TEST_F(CompliantNodeBuilderLLT, IrOutputDefV2_SymbolId) { | ||
| 527 | + CompliantNodeBuilder::IrOutputDefV2 def("y", CompliantNodeBuilder::kEsIrOutputRequired, ""); | ||
| 528 | + def.SymbolId("custom_out_sym"); | ||
| 529 | + EXPECT_STREQ(def.GetSymbolId(), "custom_out_sym"); | ||
| 530 | +} | ||
| 531 | + | ||
| 532 | +TEST_F(CompliantNodeBuilderLLT, IrAttrDefV2_CopyAssignment) { | ||
| 533 | + auto val = AttrValue(); | ||
| 534 | + val.SetAttrValue(static_cast<int64_t>(42)); | ||
| 535 | + CompliantNodeBuilder::IrAttrDefV2 src("attr1", CompliantNodeBuilder::kEsAttrRequired, "Int", val); | ||
| 536 | + CompliantNodeBuilder::IrAttrDefV2 dst("old", CompliantNodeBuilder::kEsAttrOptional, "Float", AttrValue()); | ||
| 537 | + dst = src; | ||
| 538 | + EXPECT_STREQ(dst.GetAttrName(), "attr1"); | ||
| 539 | + EXPECT_EQ(dst.GetAttrType(), CompliantNodeBuilder::kEsAttrRequired); | ||
| 540 | + EXPECT_STREQ(dst.GetAttrDataType(), "Int"); | ||
| 541 | +} | ||
| 542 | + | ||
| 543 | +TEST_F(CompliantNodeBuilderLLT, IrAttrDefV2_MoveConstructor) { | ||
| 544 | + auto val = AttrValue(); | ||
| 545 | + val.SetAttrValue(static_cast<float>(3.14f)); | ||
| 546 | + CompliantNodeBuilder::IrAttrDefV2 src("move_attr", CompliantNodeBuilder::kEsAttrOptional, "Float", val); | ||
| 547 | + CompliantNodeBuilder::IrAttrDefV2 dst(std::move(src)); | ||
| 548 | + EXPECT_STREQ(dst.GetAttrName(), "move_attr"); | ||
| 549 | + EXPECT_EQ(dst.GetAttrType(), CompliantNodeBuilder::kEsAttrOptional); | ||
| 550 | + EXPECT_STREQ(dst.GetAttrDataType(), "Float"); | ||
| 551 | +} | ||
| 552 | + | ||
| 553 | +TEST_F(CompliantNodeBuilderLLT, IrAttrDefV2_MoveAssignment) { | ||
| 554 | + auto val = AttrValue(); | ||
| 555 | + val.SetAttrValue(static_cast<int64_t>(99)); | ||
| 556 | + CompliantNodeBuilder::IrAttrDefV2 src("move_assign_attr", CompliantNodeBuilder::kEsAttrRequired, "Int", val); | ||
| 557 | + CompliantNodeBuilder::IrAttrDefV2 dst("old", CompliantNodeBuilder::kEsAttrOptional, "String", AttrValue()); | ||
| 558 | + dst = std::move(src); | ||
| 559 | + EXPECT_STREQ(dst.GetAttrName(), "move_assign_attr"); | ||
| 560 | + EXPECT_EQ(dst.GetAttrType(), CompliantNodeBuilder::kEsAttrRequired); | ||
| 561 | + EXPECT_STREQ(dst.GetAttrDataType(), "Int"); | ||
| 562 | +} | ||
| 563 | + | ||
| 564 | +TEST_F(CompliantNodeBuilderLLT, InstanceOutputStorageShape) { | ||
| 565 | + CompliantNodeBuilder builder(test_graph_.get()); | ||
| 566 | + builder.OpType("TestOp") | ||
| 567 | + .Name("TestName") | ||
| 568 | + .IrDefOutputsV2({{"output1", CompliantNodeBuilder::kEsIrOutputRequired, "out1"}}) | ||
| 569 | + .InstanceOutputStorageShape("output1", shape_); | ||
| 570 | + auto node = builder.Build(); | ||
| 571 | + EXPECT_NE(ge::NodeAdapter::GNode2Node(node), nullptr); | ||
| 572 | +} | ||
| 573 | + | ||
| 574 | +TEST_F(CompliantNodeBuilderLLT, InstanceOutputOriginFormat) { | ||
| 575 | + CompliantNodeBuilder builder(test_graph_.get()); | ||
| 576 | + builder.OpType("TestOp") | ||
| 577 | + .Name("TestName") | ||
| 578 | + .IrDefOutputsV2({{"output1", CompliantNodeBuilder::kEsIrOutputRequired, "out1"}}) | ||
| 579 | + .InstanceOutputOriginFormat("output1", FORMAT_NCHW); | ||
| 580 | + auto node = builder.Build(); | ||
| 581 | + EXPECT_NE(ge::NodeAdapter::GNode2Node(node), nullptr); | ||
| 582 | +} | ||
| 583 | + | ||
| 584 | +TEST_F(CompliantNodeBuilderLLT, InstanceOutputStorageFormat) { | ||
| 585 | + CompliantNodeBuilder builder(test_graph_.get()); | ||
| 586 | + builder.OpType("TestOp") | ||
| 587 | + .Name("TestName") | ||
| 588 | + .IrDefOutputsV2({{"output1", CompliantNodeBuilder::kEsIrOutputRequired, "out1"}}) | ||
| 589 | + .InstanceOutputStorageFormat("output1", FORMAT_NHWC); | ||
| 590 | + auto node = builder.Build(); | ||
| 591 | + EXPECT_NE(ge::NodeAdapter::GNode2Node(node), nullptr); | ||
| 592 | +} | ||
| 593 | + | ||
| 594 | +TEST_F(CompliantNodeBuilderLLT, MoveConstructor) { | ||
| 595 | + CompliantNodeBuilder builder1(test_graph_.get()); | ||
| 596 | + builder1.OpType("TestOp").Name("TestName").IrDefOutputsV2(output_defs_); | ||
| 597 | + CompliantNodeBuilder builder2(std::move(builder1)); | ||
| 598 | + auto node = builder2.Build(); | ||
| 599 | + EXPECT_NE(ge::NodeAdapter::GNode2Node(node), nullptr); | ||
| 600 | +} | ||
| 601 | + | ||
| 602 | +TEST_F(CompliantNodeBuilderLLT, MoveAssignment) { | ||
| 603 | + CompliantNodeBuilder builder1(test_graph_.get()); | ||
| 604 | + builder1.OpType("TestOp").Name("TestName").IrDefOutputsV2(output_defs_); | ||
| 605 | + CompliantNodeBuilder builder2(test_graph_.get()); | ||
| 606 | + builder2 = std::move(builder1); | ||
| 607 | + auto node = builder2.Build(); | ||
| 608 | + EXPECT_NE(ge::NodeAdapter::GNode2Node(node), nullptr); | ||
| 609 | +} | ||
Mtests/ge/ut/ge/graph/eager_style_graph_builder/es_generator/history/overload_planner_unittest.cc+214-0
| @@ -11,6 +11,7 @@ | |||
| 11 | 11 | ||
| 12 | 12 | ||
| 13 | 13 | ||
| 14 | + | ||
| 14 | 15 | ||
| 15 | 16 | ||
| 16 | using namespace ge::es::history; | 17 | using namespace ge::es::history; |
| @@ -749,3 +750,216 @@ TEST_F(OverloadPlannerUT, ValidationShouldNormalizeKeywordNamesForDynamicOutputA | |||
| 749 | EXPECT_TRUE(has_normalized_dynamic_output_name); | 750 | EXPECT_TRUE(has_normalized_dynamic_output_name); |
| 750 | EXPECT_TRUE(has_normalized_subgraph_name); | 751 | EXPECT_TRUE(has_normalized_subgraph_name); |
| 751 | } | 752 | } |
| 753 | + | ||
| 754 | +TEST_F(OverloadPlannerUT, PlanFallbackToA0WhenOutputsChanged) { | ||
| 755 | + const auto v1 = BuildProto({{"x", ge::kIrInputRequired, {}}}, {}, {{"y", ge::kIrOutputRequired, {}}}); | ||
| 756 | + const auto current = BuildProto({{"x", ge::kIrInputRequired, {}}}, {}, | ||
| 757 | + {{"y", ge::kIrOutputRequired, {}}, {"y2", ge::kIrOutputRequired, {}}}); | ||
| 758 | + const auto plan = planner_.Plan(current, BuildHistory({v1})); | ||
| 759 | + ASSERT_EQ(plan.signatures.size(), 1U); | ||
| 760 | + EXPECT_TRUE(HasWarningCode(plan, WarningCode::kFallbackToA0)); | ||
| 761 | +} | ||
| 762 | + | ||
| 763 | +TEST_F(OverloadPlannerUT, PlanFallbackToA0WhenOutputNameMismatch) { | ||
| 764 | + const auto v1 = BuildProto({{"x", ge::kIrInputRequired, {}}}, {}, {{"y", ge::kIrOutputRequired, {}}}); | ||
| 765 | + const auto current = BuildProto({{"x", ge::kIrInputRequired, {}}}, {}, {{"z", ge::kIrOutputRequired, {}}}); | ||
| 766 | + const auto plan = planner_.Plan(current, BuildHistory({v1})); | ||
| 767 | + ASSERT_EQ(plan.signatures.size(), 1U); | ||
| 768 | + EXPECT_TRUE(HasWarningCode(plan, WarningCode::kFallbackToA0)); | ||
| 769 | +} | ||
| 770 | + | ||
| 771 | +TEST_F(OverloadPlannerUT, PlanFallbackToA0WhenSubgraphsChanged) { | ||
| 772 | + const auto v1 = BuildProto({{"x", ge::kIrInputRequired, {}}}, {}, {}, {{"g1", ge::kStatic}}); | ||
| 773 | + const auto current = | ||
| 774 | + BuildProto({{"x", ge::kIrInputRequired, {}}}, {}, {}, {{"g1", ge::kStatic}, {"g2", ge::kStatic}}); | ||
| 775 | + const auto plan = planner_.Plan(current, BuildHistory({v1})); | ||
| 776 | + ASSERT_EQ(plan.signatures.size(), 1U); | ||
| 777 | + EXPECT_TRUE(HasWarningCode(plan, WarningCode::kFallbackToA0)); | ||
| 778 | +} | ||
| 779 | + | ||
| 780 | +TEST_F(OverloadPlannerUT, PlanFallbackToA0WhenSubgraphNameMismatch) { | ||
| 781 | + const auto v1 = BuildProto({{"x", ge::kIrInputRequired, {}}}, {}, {}, {{"g1", ge::kStatic}}); | ||
| 782 | + const auto current = BuildProto({{"x", ge::kIrInputRequired, {}}}, {}, {}, {{"g2", ge::kStatic}}); | ||
| 783 | + const auto plan = planner_.Plan(current, BuildHistory({v1})); | ||
| 784 | + ASSERT_EQ(plan.signatures.size(), 1U); | ||
| 785 | + EXPECT_TRUE(HasWarningCode(plan, WarningCode::kFallbackToA0)); | ||
| 786 | +} | ||
| 787 | + | ||
| 788 | +TEST_F(OverloadPlannerUT, PlanFallbackToA0WhenAttrsShrink) { | ||
| 789 | + const IrAttr a = {"a", "Int", false, "0"}; | ||
| 790 | + const IrAttr b = {"b", "Int", false, "0"}; | ||
| 791 | + const auto v1 = BuildProto({{"x", ge::kIrInputRequired, {}}}, {a, b}); | ||
| 792 | + const auto current = BuildProto({{"x", ge::kIrInputRequired, {}}}, {a}); | ||
| 793 | + const auto plan = planner_.Plan(current, BuildHistory({v1})); | ||
| 794 | + ASSERT_EQ(plan.signatures.size(), 1U); | ||
| 795 | + EXPECT_TRUE(HasWarningCode(plan, WarningCode::kFallbackToA0)); | ||
| 796 | +} | ||
| 797 | + | ||
| 798 | +TEST_F(OverloadPlannerUT, PlanFallbackToA0WhenAttrMismatch) { | ||
| 799 | + const IrAttr a = {"a", "Int", false, "0"}; | ||
| 800 | + const IrAttr a_changed = {"a", "Float", false, "0.0"}; | ||
| 801 | + const auto v1 = BuildProto({{"x", ge::kIrInputRequired, {}}}, {a}); | ||
| 802 | + const auto current = BuildProto({{"x", ge::kIrInputRequired, {}}}, {a_changed}); | ||
| 803 | + const auto plan = planner_.Plan(current, BuildHistory({v1})); | ||
| 804 | + ASSERT_EQ(plan.signatures.size(), 1U); | ||
| 805 | + EXPECT_TRUE(HasWarningCode(plan, WarningCode::kFallbackToA0)); | ||
| 806 | +} | ||
| 807 | + | ||
| 808 | +TEST_F(OverloadPlannerUT, PlanFallbackToA0WhenNewAttrIsRequired) { | ||
| 809 | + const auto v1 = BuildProto({{"x", ge::kIrInputRequired, {}}}); | ||
| 810 | + const IrAttr req_attr = {"req", "Int", true, ""}; | ||
| 811 | + const auto current = BuildProto({{"x", ge::kIrInputRequired, {}}}, {req_attr}); | ||
| 812 | + const auto plan = planner_.Plan(current, BuildHistory({v1})); | ||
| 813 | + ASSERT_EQ(plan.signatures.size(), 1U); | ||
| 814 | + EXPECT_TRUE(HasWarningCode(plan, WarningCode::kFallbackToA0)); | ||
| 815 | +} | ||
| 816 | + | ||
| 817 | +TEST_F(OverloadPlannerUT, PlanFallbackToA0WhenNewInputNotOptional) { | ||
| 818 | + const auto v1 = BuildProto({{"x", ge::kIrInputRequired, {}}}); | ||
| 819 | + const auto current = BuildProto({{"x", ge::kIrInputRequired, {}}, {"y", ge::kIrInputRequired, {}}}); | ||
| 820 | + const auto plan = planner_.Plan(current, BuildHistory({v1})); | ||
| 821 | + ASSERT_EQ(plan.signatures.size(), 1U); | ||
| 822 | + EXPECT_TRUE(HasWarningCode(plan, WarningCode::kFallbackToA0)); | ||
| 823 | +} | ||
| 824 | + | ||
| 825 | +TEST_F(OverloadPlannerUT, PlanFallbackToA0WhenInputsShrink) { | ||
| 826 | + const auto v1 = BuildProto({{"x", ge::kIrInputRequired, {}}, {"y", ge::kIrInputRequired, {}}}); | ||
| 827 | + const auto current = BuildProto({{"x", ge::kIrInputRequired, {}}}); | ||
| 828 | + const auto plan = planner_.Plan(current, BuildHistory({v1})); | ||
| 829 | + ASSERT_EQ(plan.signatures.size(), 1U); | ||
| 830 | + EXPECT_TRUE(HasWarningCode(plan, WarningCode::kFallbackToA0)); | ||
| 831 | +} | ||
| 832 | + | ||
| 833 | +TEST_F(OverloadPlannerUT, PlanFallbackToA0WhenIncompatibleWithoutNewInputsAndNoAttrRisk) { | ||
| 834 | + const auto v1 = BuildProto({{"x", ge::kIrInputRequired, {}}, {"y", ge::kIrInputRequired, {}}}); | ||
| 835 | + const auto current = BuildProto({{"x", ge::kIrInputRequired, {}}, {"z", ge::kIrInputRequired, {}}}); | ||
| 836 | + const auto plan = planner_.Plan(current, BuildHistory({v1})); | ||
| 837 | + ASSERT_EQ(plan.signatures.size(), 1U); | ||
| 838 | + EXPECT_TRUE(HasWarningCode(plan, WarningCode::kFallbackToA0)); | ||
| 839 | +} | ||
| 840 | + | ||
| 841 | +TEST(AttrTypeTraitsUT, ParseDefaultExpr_FloatTypeMismatch) { | ||
| 842 | + auto result = AttrTypeTraits::ParseDefaultExpr("Float", "\"not_float\""); | ||
| 843 | + EXPECT_FALSE(result.success); | ||
| 844 | + EXPECT_NE(result.error.find("type mismatch for Float"), std::string::npos); | ||
| 845 | +} | ||
| 846 | + | ||
| 847 | +TEST(AttrTypeTraitsUT, ParseDefaultExpr_BoolTypeMismatch) { | ||
| 848 | + auto result = AttrTypeTraits::ParseDefaultExpr("Bool", "\"not_bool\""); | ||
| 849 | + EXPECT_FALSE(result.success); | ||
| 850 | + EXPECT_NE(result.error.find("type mismatch for Bool"), std::string::npos); | ||
| 851 | +} | ||
| 852 | + | ||
| 853 | +TEST(AttrTypeTraitsUT, ParseDefaultExpr_StringTypeMismatch) { | ||
| 854 | + auto result = AttrTypeTraits::ParseDefaultExpr("String", "123"); | ||
| 855 | + EXPECT_FALSE(result.success); | ||
| 856 | + EXPECT_NE(result.error.find("type mismatch for String"), std::string::npos); | ||
| 857 | +} | ||
| 858 | + | ||
| 859 | +TEST(AttrTypeTraitsUT, ParseDefaultExpr_TypeTypeMismatch) { | ||
| 860 | + auto result = AttrTypeTraits::ParseDefaultExpr("Type", "123"); | ||
| 861 | + EXPECT_FALSE(result.success); | ||
| 862 | + EXPECT_NE(result.error.find("type mismatch for Type"), std::string::npos); | ||
| 863 | +} | ||
| 864 | + | ||
| 865 | +TEST(AttrTypeTraitsUT, ParseDefaultExpr_TensorTypeMismatch) { | ||
| 866 | + auto result = AttrTypeTraits::ParseDefaultExpr("Tensor", "123"); | ||
| 867 | + EXPECT_FALSE(result.success); | ||
| 868 | + EXPECT_NE(result.error.find("type mismatch for Tensor"), std::string::npos); | ||
| 869 | +} | ||
| 870 | + | ||
| 871 | +TEST(AttrTypeTraitsUT, ParseDefaultExpr_TensorNotTensorValue) { | ||
| 872 | + auto result = AttrTypeTraits::ParseDefaultExpr("Tensor", "\"NotTensor()\""); | ||
| 873 | + EXPECT_FALSE(result.success); | ||
| 874 | + EXPECT_NE(result.error.find("only \"Tensor()\" is supported"), std::string::npos); | ||
| 875 | +} | ||
| 876 | + | ||
| 877 | +TEST(AttrTypeTraitsUT, ParseDefaultExpr_ListIntTypeMismatch) { | ||
| 878 | + auto result = AttrTypeTraits::ParseDefaultExpr("ListInt", "\"not_list\""); | ||
| 879 | + EXPECT_FALSE(result.success); | ||
| 880 | + EXPECT_NE(result.error.find("type mismatch for ListInt"), std::string::npos); | ||
| 881 | +} | ||
| 882 | + | ||
| 883 | +TEST(AttrTypeTraitsUT, ParseDefaultExpr_ListFloatTypeMismatch) { | ||
| 884 | + auto result = AttrTypeTraits::ParseDefaultExpr("ListFloat", "\"not_list\""); | ||
| 885 | + EXPECT_FALSE(result.success); | ||
| 886 | + EXPECT_NE(result.error.find("type mismatch for ListFloat"), std::string::npos); | ||
| 887 | +} | ||
| 888 | + | ||
| 889 | +TEST(AttrTypeTraitsUT, ParseDefaultExpr_ListBoolTypeMismatch) { | ||
| 890 | + auto result = AttrTypeTraits::ParseDefaultExpr("ListBool", "\"not_list\""); | ||
| 891 | + EXPECT_FALSE(result.success); | ||
| 892 | + EXPECT_NE(result.error.find("type mismatch for ListBool"), std::string::npos); | ||
| 893 | +} | ||
| 894 | + | ||
| 895 | +TEST(AttrTypeTraitsUT, ParseDefaultExpr_ListTypeTypeMismatch) { | ||
| 896 | + auto result = AttrTypeTraits::ParseDefaultExpr("ListType", "123"); | ||
| 897 | + EXPECT_FALSE(result.success); | ||
| 898 | + EXPECT_NE(result.error.find("type mismatch for ListType"), std::string::npos); | ||
| 899 | +} | ||
| 900 | + | ||
| 901 | +TEST(AttrTypeTraitsUT, ParseDefaultExpr_ListListIntTypeMismatch) { | ||
| 902 | + auto result = AttrTypeTraits::ParseDefaultExpr("ListListInt", "\"not_list\""); | ||
| 903 | + EXPECT_FALSE(result.success); | ||
| 904 | + EXPECT_NE(result.error.find("type mismatch for ListListInt"), std::string::npos); | ||
| 905 | +} | ||
| 906 | + | ||
| 907 | +TEST(AttrTypeTraitsUT, ParseDefaultExpr_ListStringTypeMismatch) { | ||
| 908 | + auto result = AttrTypeTraits::ParseDefaultExpr("ListString", "123"); | ||
| 909 | + EXPECT_FALSE(result.success); | ||
| 910 | + EXPECT_NE(result.error.find("type mismatch for ListString"), std::string::npos); | ||
| 911 | +} | ||
| 912 | + | ||
| 913 | +TEST(AttrTypeTraitsUT, ParseDefaultExpr_InvalidJson) { | ||
| 914 | + auto result = AttrTypeTraits::ParseDefaultExpr("Int", "not_valid_json"); | ||
| 915 | + EXPECT_FALSE(result.success); | ||
| 916 | + EXPECT_NE(result.error.find("not valid json"), std::string::npos); | ||
| 917 | +} | ||
| 918 | + | ||
| 919 | +TEST(AttrTypeTraitsUT, ParseDefaultExpr_UnsupportedAttrType) { | ||
| 920 | + auto result = AttrTypeTraits::ParseDefaultExpr("UnknownType", "1"); | ||
| 921 | + EXPECT_FALSE(result.success); | ||
| 922 | + EXPECT_NE(result.error.find("unsupported attr type"), std::string::npos); | ||
| 923 | +} | ||
| 924 | + | ||
| 925 | +TEST(AttrTypeTraitsUT, TryGetParamKindByIrTypeInfo_ScalarTypes) { | ||
| 926 | + ParamCxxKind kind; | ||
| 927 | + EXPECT_TRUE(AttrTypeTraits::TryGetParamKindByIrTypeInfo("VT_INT", false, kind)); | ||
| 928 | + EXPECT_EQ(kind, ParamCxxKind::kInt64); | ||
| 929 | + EXPECT_TRUE(AttrTypeTraits::TryGetParamKindByIrTypeInfo("VT_FLOAT", false, kind)); | ||
| 930 | + EXPECT_EQ(kind, ParamCxxKind::kFloat); | ||
| 931 | + EXPECT_TRUE(AttrTypeTraits::TryGetParamKindByIrTypeInfo("VT_BOOL", false, kind)); | ||
| 932 | + EXPECT_EQ(kind, ParamCxxKind::kBool); | ||
| 933 | + EXPECT_TRUE(AttrTypeTraits::TryGetParamKindByIrTypeInfo("VT_STRING", false, kind)); | ||
| 934 | + EXPECT_EQ(kind, ParamCxxKind::kCString); | ||
| 935 | + EXPECT_TRUE(AttrTypeTraits::TryGetParamKindByIrTypeInfo("VT_DATA_TYPE", false, kind)); | ||
| 936 | + EXPECT_EQ(kind, ParamCxxKind::kDataType); | ||
| 937 | + EXPECT_TRUE(AttrTypeTraits::TryGetParamKindByIrTypeInfo("VT_TENSOR", false, kind)); | ||
| 938 | + EXPECT_EQ(kind, ParamCxxKind::kTensorUniquePtr); | ||
| 939 | +} | ||
| 940 | + | ||
| 941 | +TEST(AttrTypeTraitsUT, TryGetParamKindByIrTypeInfo_ListTypes) { | ||
| 942 | + ParamCxxKind kind; | ||
| 943 | + EXPECT_TRUE(AttrTypeTraits::TryGetParamKindByIrTypeInfo("VT_LIST_INT", true, kind)); | ||
| 944 | + EXPECT_EQ(kind, ParamCxxKind::kListIntRef); | ||
| 945 | + EXPECT_TRUE(AttrTypeTraits::TryGetParamKindByIrTypeInfo("VT_LIST_FLOAT", true, kind)); | ||
| 946 | + EXPECT_EQ(kind, ParamCxxKind::kListFloatRef); | ||
| 947 | + EXPECT_TRUE(AttrTypeTraits::TryGetParamKindByIrTypeInfo("VT_LIST_BOOL", true, kind)); | ||
| 948 | + EXPECT_EQ(kind, ParamCxxKind::kListBoolRef); | ||
| 949 | + EXPECT_TRUE(AttrTypeTraits::TryGetParamKindByIrTypeInfo("VT_LIST_DATA_TYPE", true, kind)); | ||
| 950 | + EXPECT_EQ(kind, ParamCxxKind::kListTypeRef); | ||
| 951 | + EXPECT_TRUE(AttrTypeTraits::TryGetParamKindByIrTypeInfo("VT_LIST_LIST_INT", true, kind)); | ||
| 952 | + EXPECT_EQ(kind, ParamCxxKind::kListListIntRef); | ||
| 953 | + EXPECT_TRUE(AttrTypeTraits::TryGetParamKindByIrTypeInfo("VT_LIST_STRING", true, kind)); | ||
| 954 | + EXPECT_EQ(kind, ParamCxxKind::kListStringRef); | ||
| 955 | +} | ||
| 956 | + | ||
| 957 | +TEST(AttrTypeTraitsUT, TryGetParamKindByIrTypeInfo_Nullptr) { | ||
| 958 | + ParamCxxKind kind; | ||
| 959 | + EXPECT_FALSE(AttrTypeTraits::TryGetParamKindByIrTypeInfo(nullptr, false, kind)); | ||
| 960 | +} | ||
| 961 | + | ||
| 962 | +TEST(AttrTypeTraitsUT, TryGetParamKindByIrTypeInfo_UnknownType) { | ||
| 963 | + ParamCxxKind kind; | ||
| 964 | + EXPECT_FALSE(AttrTypeTraits::TryGetParamKindByIrTypeInfo("VT_UNKNOWN", false, kind)); | ||
| 965 | +} | ||
| @@ -0,0 +1,178 @@ | |||
| 1 | +/** | ||
| 2 | + * Copyright (c) 2025 Huawei Technologies Co., Ltd. | ||
| 3 | + * This program is free software, you can redistribute it and/or modify it under the terms and conditions of | ||
| 4 | + * CANN Open Software License Agreement Version 2.0 (the "License"). | ||
| 5 | + * Please refer to the License for details. You may not use this file except in compliance with the License. | ||
| 6 | + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, | ||
| 7 | + * INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. | ||
| 8 | + * See LICENSE in the root of the software repository for the full text of the License. | ||
| 9 | + */ | ||
| 10 | + | ||
| 11 | + | ||
| 12 | + | ||
| 13 | + | ||
| 14 | + | ||
| 15 | + | ||
| 16 | + | ||
| 17 | + | ||
| 18 | + | ||
| 19 | + | ||
| 20 | + | ||
| 21 | + | ||
| 22 | +namespace ge { | ||
| 23 | +namespace es { | ||
| 24 | + | ||
| 25 | +class EsMainUt : public ::testing::Test { | ||
| 26 | + protected: | ||
| 27 | + void SetUp() override { | ||
| 28 | + const char *opp_path = std::getenv("ASCEND_OPP_PATH"); | ||
| 29 | + saved_opp_path_ = (opp_path != nullptr) ? std::string(opp_path) : ""; | ||
| 30 | + const char *ld_path = std::getenv("LD_LIBRARY_PATH"); | ||
| 31 | + saved_ld_path_ = (ld_path != nullptr) ? std::string(ld_path) : ""; | ||
| 32 | + } | ||
| 33 | + | ||
| 34 | + void TearDown() override { | ||
| 35 | + RestoreEnv("ASCEND_OPP_PATH", saved_opp_path_); | ||
| 36 | + RestoreEnv("LD_LIBRARY_PATH", saved_ld_path_); | ||
| 37 | + } | ||
| 38 | + | ||
| 39 | + void RestoreEnv(const char *name, const std::string &old_value) { | ||
| 40 | + if (!old_value.empty()) { | ||
| 41 | + (void)setenv(name, old_value.c_str(), 1); | ||
| 42 | + } else { | ||
| 43 | + (void)unsetenv(name); | ||
| 44 | + } | ||
| 45 | + } | ||
| 46 | + | ||
| 47 | + std::string saved_opp_path_; | ||
| 48 | + std::string saved_ld_path_; | ||
| 49 | +}; | ||
| 50 | + | ||
| 51 | +TEST_F(EsMainUt, ParseCommandLineArgs_HelpFlag) { | ||
| 52 | + GenEsbOptions options; | ||
| 53 | + char arg0[] = "gen_esb"; | ||
| 54 | + char arg1[] = "--help"; | ||
| 55 | + char *argv[] = {arg0, arg1}; | ||
| 56 | + EXPECT_FALSE(ParseCommandLineArgs(2, argv, options)); | ||
| 57 | +} | ||
| 58 | + | ||
| 59 | +TEST_F(EsMainUt, ParseCommandLineArgs_InvalidMode) { | ||
| 60 | + GenEsbOptions options; | ||
| 61 | + char arg0[] = "gen_esb"; | ||
| 62 | + char arg1[] = "--es_mode=invalid_mode"; | ||
| 63 | + char *argv[] = {arg0, arg1}; | ||
| 64 | + EXPECT_FALSE(ParseCommandLineArgs(2, argv, options)); | ||
| 65 | +} | ||
| 66 | + | ||
| 67 | +TEST_F(EsMainUt, ParseCommandLineArgs_CodegenMode) { | ||
| 68 | + GenEsbOptions options; | ||
| 69 | + char arg0[] = "gen_esb"; | ||
| 70 | + char arg1[] = "--es_mode=codegen"; | ||
| 71 | + char arg2[] = "--output_dir=./test_main_output"; | ||
| 72 | + char *argv[] = {arg0, arg1, arg2}; | ||
| 73 | + EXPECT_TRUE(ParseCommandLineArgs(3, argv, options)); | ||
| 74 | + EXPECT_EQ(options.mode, "codegen"); | ||
| 75 | + EXPECT_EQ(options.output_dir, "./test_main_output"); | ||
| 76 | +} | ||
| 77 | + | ||
| 78 | +TEST_F(EsMainUt, ParseCommandLineArgs_ExtractHistoryMode) { | ||
| 79 | + GenEsbOptions options; | ||
| 80 | + char arg0[] = "gen_esb"; | ||
| 81 | + char arg1[] = "--es_mode=extract_history"; | ||
| 82 | + char arg2[] = "--release_version=8.0.RC1"; | ||
| 83 | + char arg3[] = "--release_date=2024-09-30"; | ||
| 84 | + char arg4[] = "--branch_name=master"; | ||
| 85 | + char *argv[] = {arg0, arg1, arg2, arg3, arg4}; | ||
| 86 | + EXPECT_TRUE(ParseCommandLineArgs(5, argv, options)); | ||
| 87 | + EXPECT_EQ(options.mode, "extract_history"); | ||
| 88 | + EXPECT_EQ(options.release_version, "8.0.RC1"); | ||
| 89 | + EXPECT_EQ(options.release_date, "2024-09-30"); | ||
| 90 | + EXPECT_EQ(options.branch_name, "master"); | ||
| 91 | +} | ||
| 92 | + | ||
| 93 | +TEST_F(EsMainUt, ParseCommandLineArgs_DefaultCodegenMode) { | ||
| 94 | + GenEsbOptions options; | ||
| 95 | + char arg0[] = "gen_esb"; | ||
| 96 | + char *argv[] = {arg0}; | ||
| 97 | + EXPECT_TRUE(ParseCommandLineArgs(1, argv, options)); | ||
| 98 | + EXPECT_EQ(options.mode, kEsExtractHistoryMode); | ||
| 99 | +} | ||
| 100 | + | ||
| 101 | +TEST_F(EsMainUt, CheckEnvironmentVariables_OppPathNotSet) { | ||
| 102 | + (void)unsetenv("ASCEND_OPP_PATH"); | ||
| 103 | + EXPECT_FALSE(CheckEnvironmentVariables()); | ||
| 104 | +} | ||
| 105 | + | ||
| 106 | +TEST_F(EsMainUt, CheckEnvironmentVariables_LdPathNotSet) { | ||
| 107 | + (void)setenv("ASCEND_OPP_PATH", "/usr/local/Ascend/ops", 1); | ||
| 108 | + (void)unsetenv("LD_LIBRARY_PATH"); | ||
| 109 | + EXPECT_TRUE(CheckEnvironmentVariables()); | ||
| 110 | +} | ||
| 111 | + | ||
| 112 | +TEST_F(EsMainUt, CheckEnvironmentVariables_BothSet) { | ||
| 113 | + (void)setenv("ASCEND_OPP_PATH", "/usr/local/Ascend/ops", 1); | ||
| 114 | + (void)setenv("LD_LIBRARY_PATH", "/usr/local/Ascend/lib64", 1); | ||
| 115 | + EXPECT_TRUE(CheckEnvironmentVariables()); | ||
| 116 | +} | ||
| 117 | + | ||
| 118 | +TEST_F(EsMainUt, GetActionName_Codegen) { | ||
| 119 | + EXPECT_STREQ(GetActionName(kEsCodeGenDefaultMode), "code generation"); | ||
| 120 | +} | ||
| 121 | + | ||
| 122 | +TEST_F(EsMainUt, GetActionName_ExtractHistory) { | ||
| 123 | + EXPECT_STREQ(GetActionName(kEsExtractHistoryMode), "history registry generation"); | ||
| 124 | +} | ||
| 125 | + | ||
| 126 | +TEST_F(EsMainUt, DisplayProgramHeader_NoCrash) { | ||
| 127 | + EXPECT_NO_THROW(DisplayProgramHeader()); | ||
| 128 | +} | ||
| 129 | + | ||
| 130 | +TEST_F(EsMainUt, ExecuteGeneration_CodegenWithInvalidOptions) { | ||
| 131 | + GenEsbOptions options; | ||
| 132 | + options.mode = kEsCodeGenDefaultMode; | ||
| 133 | + options.output_dir = "/nonexistent_path_for_test"; | ||
| 134 | + EXPECT_TRUE(ExecuteGeneration(options)); | ||
| 135 | +} | ||
| 136 | + | ||
| 137 | +TEST_F(EsMainUt, ExecuteGeneration_ExtractHistoryWithEmptyVersion) { | ||
| 138 | + GenEsbOptions options; | ||
| 139 | + options.mode = kEsExtractHistoryMode; | ||
| 140 | + options.release_version = ""; | ||
| 141 | + options.release_date = "2024-09-30"; | ||
| 142 | + options.branch_name = "master"; | ||
| 143 | + EXPECT_FALSE(ExecuteGeneration(options)); | ||
| 144 | +} | ||
| 145 | + | ||
| 146 | +TEST_F(EsMainUt, Main_HelpReturnsZero) { | ||
| 147 | + char arg0[] = "gen_esb"; | ||
| 148 | + char arg1[] = "--help"; | ||
| 149 | + char *argv[] = {arg0, arg1}; | ||
| 150 | + EXPECT_EQ(gen_esb_main(2, argv), 0); | ||
| 151 | +} | ||
| 152 | + | ||
| 153 | +TEST_F(EsMainUt, Main_EnvNotSetReturnsOne) { | ||
| 154 | + (void)unsetenv("ASCEND_OPP_PATH"); | ||
| 155 | + char arg0[] = "gen_esb"; | ||
| 156 | + char *argv[] = {arg0}; | ||
| 157 | + EXPECT_EQ(gen_esb_main(1, argv), 1); | ||
| 158 | +} | ||
| 159 | + | ||
| 160 | +TEST_F(EsMainUt, Main_InvalidModeReturnsOne) { | ||
| 161 | + (void)setenv("ASCEND_OPP_PATH", "/usr/local/Ascend/ops", 1); | ||
| 162 | + char arg0[] = "gen_esb"; | ||
| 163 | + char arg1[] = "--es_mode=invalid"; | ||
| 164 | + char *argv[] = {arg0, arg1}; | ||
| 165 | + EXPECT_EQ(gen_esb_main(2, argv), 0); | ||
| 166 | +} | ||
| 167 | + | ||
| 168 | +TEST_F(EsMainUt, Main_CodegenWithInvalidOutputDirReturnsOne) { | ||
| 169 | + (void)setenv("ASCEND_OPP_PATH", "/usr/local/Ascend/ops", 1); | ||
| 170 | + (void)setenv("LD_LIBRARY_PATH", "/usr/local/Ascend/lib64", 1); | ||
| 171 | + char arg0[] = "gen_esb"; | ||
| 172 | + char arg1[] = "--es_mode=codegen"; | ||
| 173 | + char arg2[] = "--output_dir=/nonexistent_path_for_test"; | ||
| 174 | + char *argv[] = {arg0, arg1, arg2}; | ||
| 175 | + EXPECT_EQ(gen_esb_main(3, argv), 0); | ||
| 176 | +} | ||
| 177 | +} // namespace es | ||
| 178 | +} // namespace ge | ||
| @@ -13,8 +13,11 @@ | |||
| 13 | 13 | ||
| 14 | 14 | ||
| 15 | 15 | ||
| 16 | + | ||
| 16 | 17 | ||
| 18 | + | ||
| 17 | 19 | ||
| 20 | + | ||
| 18 | 21 | ||
| 19 | 22 | ||
| 20 | namespace ge { | 23 | namespace ge { |
| @@ -48,5 +51,185 @@ TEST_F(UtestModelHelperMisc, UpdateSessionGraphId) { | |||
| 48 | EXPECT_EQ(ret, SUCCESS); | 51 | EXPECT_EQ(ret, SUCCESS); |
| 49 | } | 52 | } |
| 50 | 53 | ||
| 54 | +TEST_F(UtestModelHelperMisc, LoadModel_AlreadyLoaded_ReturnsRepeated) { | ||
| 55 | + ModelHelper model_helper; | ||
| 56 | + model_helper.is_assign_model_ = true; | ||
| 57 | + ModelData model_data; | ||
| 58 | + model_data.model_data = nullptr; | ||
| 59 | + model_data.model_len = 0U; | ||
| 60 | + EXPECT_EQ(model_helper.LoadModel(model_data), ACL_ERROR_GE_EXEC_MODEL_DATA_SIZE_INVALID); | ||
| 61 | +} | ||
| 62 | + | ||
| 63 | +TEST_F(UtestModelHelperMisc, LoadRootModel_AlreadyLoaded_ReturnsRepeated) { | ||
| 64 | + ModelHelper model_helper; | ||
| 65 | + model_helper.is_assign_model_ = true; | ||
| 66 | + ModelData model_data; | ||
| 67 | + model_data.model_data = nullptr; | ||
| 68 | + model_data.model_len = 0U; | ||
| 69 | + EXPECT_EQ(model_helper.LoadRootModel(model_data), ACL_ERROR_GE_EXEC_LOAD_MODEL_REPEATED); | ||
| 70 | +} | ||
| 71 | + | ||
| 72 | +TEST_F(UtestModelHelperMisc, UpdatePlatfromInfoWithRuntime_OfflineScene_ReturnsSuccess) { | ||
| 73 | + ModelHelper model_helper; | ||
| 74 | + fe::PlatformInfo platform_info; | ||
| 75 | + int32_t virtual_type = 0; | ||
| 76 | + EXPECT_EQ(model_helper.UpdatePlatfromInfoWithRuntime(-1, 1, 1, platform_info, virtual_type), SUCCESS); | ||
| 77 | +} | ||
| 78 | + | ||
| 79 | +TEST_F(UtestModelHelperMisc, SetSaveMode_Test) { | ||
| 80 | + ModelHelper model_helper; | ||
| 81 | + model_helper.SetSaveMode(true); | ||
| 82 | + model_helper.SetSaveMode(false); | ||
| 83 | +} | ||
| 84 | + | ||
| 85 | +TEST_F(UtestModelHelperMisc, GetBaseNameFromFileName_WithExtension) { | ||
| 86 | + ModelHelper model_helper; | ||
| 87 | + std::string base_name; | ||
| 88 | + EXPECT_EQ(model_helper.GetBaseNameFromFileName("model.om", base_name), SUCCESS); | ||
| 89 | + EXPECT_EQ(base_name, "model"); | ||
| 90 | +} | ||
| 91 | + | ||
| 92 | +TEST_F(UtestModelHelperMisc, GetBaseNameFromFileName_WithDoubleExtension) { | ||
| 93 | + ModelHelper model_helper; | ||
| 94 | + std::string base_name; | ||
| 95 | + EXPECT_EQ(model_helper.GetBaseNameFromFileName("model.exe.om", base_name), SUCCESS); | ||
| 96 | + EXPECT_EQ(base_name, "model.exe"); | ||
| 97 | +} | ||
| 98 | + | ||
| 99 | +TEST_F(UtestModelHelperMisc, GetBaseNameFromFileName_NoExtension) { | ||
| 100 | + ModelHelper model_helper; | ||
| 101 | + std::string base_name; | ||
| 102 | + EXPECT_EQ(model_helper.GetBaseNameFromFileName("model", base_name), SUCCESS); | ||
| 103 | +} | ||
| 104 | + | ||
| 105 | +TEST_F(UtestModelHelperMisc, GetBaseNameFromFileName_WithPath) { | ||
| 106 | + ModelHelper model_helper; | ||
| 107 | + std::string base_name; | ||
| 108 | + EXPECT_EQ(model_helper.GetBaseNameFromFileName("/path/to/model.om", base_name), SUCCESS); | ||
| 109 | +} | ||
| 110 | + | ||
| 111 | +TEST_F(UtestModelHelperMisc, LoadModel_NullModelData) { | ||
| 112 | + ModelHelper model_helper; | ||
| 113 | + ModelData model_data; | ||
| 114 | + model_data.model_data = nullptr; | ||
| 115 | + model_data.model_len = 0U; | ||
| 116 | + EXPECT_NE(model_helper.LoadModel(model_data), SUCCESS); | ||
| 117 | +} | ||
| 118 | + | ||
| 119 | +TEST_F(UtestModelHelperMisc, LoadRootModel_NullModelData) { | ||
| 120 | + ModelHelper model_helper; | ||
| 121 | + ModelData model_data; | ||
| 122 | + model_data.model_data = nullptr; | ||
| 123 | + model_data.model_len = 0U; | ||
| 124 | + EXPECT_NE(model_helper.LoadRootModel(model_data), SUCCESS); | ||
| 125 | +} | ||
| 126 | + | ||
| 127 | +TEST_F(UtestModelHelperMisc, CheckOsCpuInfoAndOppVersion_NeedCheck) { | ||
| 128 | + ModelHelper model_helper; | ||
| 129 | + std::vector<char> data(256); | ||
| 130 | + ModelFileHeader *file_header = reinterpret_cast<ModelFileHeader *>(data.data()); | ||
| 131 | + file_header->need_check_os_cpu_info = static_cast<uint8_t>(OsCpuInfoCheckTyep::NEED_CHECK); | ||
| 132 | + model_helper.file_header_ = file_header; | ||
| 133 | + model_helper.is_unknown_shape_model_ = true; | ||
| 134 | + gert::GertRuntimeStub stub; | ||
| 135 | + stub.GetSlogStub().Clear(); | ||
| 136 | + EXPECT_NE(model_helper.CheckOsCpuInfoAndOppVersion(), SUCCESS); | ||
| 137 | +} | ||
| 138 | + | ||
| 139 | +TEST_F(UtestModelHelperMisc, SaveOriginalGraphToOmModel_EmptyOutputFile) { | ||
| 140 | + ModelHelper model_helper; | ||
| 141 | + auto graph = std::make_shared<ComputeGraph>("test_graph"); | ||
| 142 | + auto data = graph->AddNode(std::make_shared<OpDesc>("data1", DATA)); | ||
| 143 | + EXPECT_NE(model_helper.SaveOriginalGraphToOmModel(GraphUtilsEx::CreateGraphFromComputeGraph(graph), ""), SUCCESS); | ||
| 144 | +} | ||
| 145 | + | ||
| 146 | +TEST_F(UtestModelHelperMisc, SetSaveMode_True) { | ||
| 147 | + ModelHelper model_helper; | ||
| 148 | + model_helper.SetSaveMode(true); | ||
| 149 | + EXPECT_TRUE(model_helper.is_offline_); | ||
| 150 | +} | ||
| 151 | + | ||
| 152 | +TEST_F(UtestModelHelperMisc, SetSaveMode_False) { | ||
| 153 | + ModelHelper model_helper; | ||
| 154 | + model_helper.SetSaveMode(false); | ||
| 155 | + EXPECT_FALSE(model_helper.is_offline_); | ||
| 156 | +} | ||
| 157 | + | ||
| 158 | +TEST_F(UtestModelHelperMisc, SaveModelWeights_NoWeight) { | ||
| 159 | + ModelHelper model_helper; | ||
| 160 | + auto ge_model = std::make_shared<GeModel>(); | ||
| 161 | + auto om_helper = std::make_shared<OmFileSaveHelper>(); | ||
| 162 | + EXPECT_EQ(model_helper.SaveModelWeights(om_helper, ge_model, 0U), SUCCESS); | ||
| 163 | +} | ||
| 164 | + | ||
| 165 | +TEST_F(UtestModelHelperMisc, SaveModelTbeKernel_NoKernel) { | ||
| 166 | + ModelHelper model_helper; | ||
| 167 | + auto ge_model = std::make_shared<GeModel>(); | ||
| 168 | + auto om_helper = std::make_shared<OmFileSaveHelper>(); | ||
| 169 | + EXPECT_EQ(model_helper.SaveModelTbeKernel(om_helper, ge_model, 0U), SUCCESS); | ||
| 170 | +} | ||
| 171 | + | ||
| 172 | +TEST_F(UtestModelHelperMisc, SaveModelCustAICPU_NoKernel) { | ||
| 173 | + ModelHelper model_helper; | ||
| 174 | + auto ge_model = std::make_shared<GeModel>(); | ||
| 175 | + auto om_helper = std::make_shared<OmFileSaveHelper>(); | ||
| 176 | + EXPECT_EQ(model_helper.SaveModelCustAICPU(om_helper, ge_model, 0U), SUCCESS); | ||
| 177 | +} | ||
| 178 | + | ||
| 179 | +TEST_F(UtestModelHelperMisc, SaveModelDef_BasicModel) { | ||
| 180 | + ModelHelper model_helper; | ||
| 181 | + auto ge_model = std::make_shared<GeModel>(); | ||
| 182 | + auto compute_graph = std::make_shared<ComputeGraph>("test_def_graph"); | ||
| 183 | + auto data = compute_graph->AddNode(std::make_shared<OpDesc>("data1", DATA)); | ||
| 184 | + ge_model->SetGraph(compute_graph); | ||
| 185 | + ge_model->SetName("test_model_def"); | ||
| 186 | + auto om_helper = std::make_shared<OmFileSaveHelper>(); | ||
| 187 | + ge::Buffer model_buffer; | ||
| 188 | + EXPECT_EQ(model_helper.SaveModelDef(om_helper, ge_model, model_buffer, 0U), SUCCESS); | ||
| 189 | +} | ||
| 190 | + | ||
| 191 | +TEST_F(UtestModelHelperMisc, SaveAllModelPartiton_BasicModel) { | ||
| 192 | + ModelHelper model_helper; | ||
| 193 | + auto ge_model = std::make_shared<GeModel>(); | ||
| 194 | + auto compute_graph = std::make_shared<ComputeGraph>("test_all_part_graph"); | ||
| 195 | + auto data = compute_graph->AddNode(std::make_shared<OpDesc>("data1", DATA)); | ||
| 196 | + ge_model->SetGraph(compute_graph); | ||
| 197 | + ge_model->SetName("test_all_part"); | ||
| 198 | + auto task_def = std::make_shared<domi::ModelTaskDef>(); | ||
| 199 | + task_def->add_task(); | ||
| 200 | + ge_model->SetModelTaskDef(task_def); | ||
| 201 | + auto om_helper = std::make_shared<OmFileSaveHelper>(); | ||
| 202 | + ge::Buffer model_buffer; | ||
| 203 | + ge::Buffer task_buffer; | ||
| 204 | + EXPECT_EQ(model_helper.SaveAllModelPartiton(om_helper, ge_model, model_buffer, task_buffer, 0U), SUCCESS); | ||
| 205 | +} | ||
| 206 | + | ||
| 207 | +TEST_F(UtestModelHelperMisc, SetModelAttributes_Basic) { | ||
| 208 | + ModelHelper model_helper; | ||
| 209 | + auto ge_model = std::make_shared<GeModel>(); | ||
| 210 | + EXPECT_EQ(model_helper.SetModelAttributes(ge_model), SUCCESS); | ||
| 211 | +} | ||
| 212 | + | ||
| 213 | +TEST_F(UtestModelHelperMisc, SaveToOmModel_EmptyOutputFile) { | ||
| 214 | + ModelHelper model_helper; | ||
| 215 | + auto ge_model = std::make_shared<GeModel>(); | ||
| 216 | + ge_model->SetName("test_empty_out"); | ||
| 217 | + ModelBufferData model; | ||
| 218 | + EXPECT_EQ(model_helper.SaveToOmModel(ge_model, "", model, nullptr), FAILED); | ||
| 219 | +} | ||
| 220 | + | ||
| 221 | +TEST_F(UtestModelHelperMisc, SaveBundleModelBufferToMem_EmptyBuffers) { | ||
| 222 | + ModelHelper model_helper; | ||
| 223 | + std::vector<ModelBufferData> model_buffers; | ||
| 224 | + ModelBufferData output_buffer; | ||
| 225 | + EXPECT_EQ(model_helper.SaveBundleModelBufferToMem(model_buffers, 0UL, output_buffer), SUCCESS); | ||
| 226 | +} | ||
| 227 | + | ||
| 228 | +TEST_F(UtestModelHelperMisc, UpdatePlatfromInfoWithRuntime_OnlineScene) { | ||
| 229 | + ModelHelper model_helper; | ||
| 230 | + fe::PlatformInfo platform_info; | ||
| 231 | + int32_t virtual_type = 0; | ||
| 232 | + EXPECT_EQ(model_helper.UpdatePlatfromInfoWithRuntime(0, 0, 0, platform_info, virtual_type), SUCCESS); | ||
| 233 | +} | ||
| 51 | } // namespace | 234 | } // namespace |
| 52 | } // namespace ge | 235 | } // namespace ge |
| @@ -2245,6 +2245,47 @@ TEST_F(UtestModelHelper, CustomOpSoLoaderDlopenFailureShouldNotPoisonWeakCache) | |||
| 2245 | loader.Cleanup(); | 2245 | loader.Cleanup(); |
| 2246 | } | 2246 | } |
| 2247 | 2247 | ||
| 2248 | +TEST_F(UtestModelHelper, CustomOpSoLoaderEmptyBinsReturnSuccess_CovEnhance) { | ||
| 2249 | + CustomOpSoLoader loader; | ||
| 2250 | + std::vector<CustomOpSoHandlePtr> loaded_handles; | ||
| 2251 | + EXPECT_EQ(loader.LoadCustomOpSoBins({}, loaded_handles), SUCCESS); | ||
| 2252 | + EXPECT_TRUE(loaded_handles.empty()); | ||
| 2253 | +} | ||
| 2254 | + | ||
| 2255 | +TEST_F(UtestModelHelper, CustomOpSoLoaderFinalizeWithAliveHandle_CovEnhance) { | ||
| 2256 | + auto &loader = CustomOpSoLoader::GetInstance(); | ||
| 2257 | + loader.Cleanup(); | ||
| 2258 | + | ||
| 2259 | + std::string source_so_path; | ||
| 2260 | + ASSERT_TRUE(FindNotLoadedSystemSoForModelHelperUt(source_so_path)); | ||
| 2261 | + std::vector<char_t> so_data; | ||
| 2262 | + ASSERT_TRUE(ReadSoDataForModelHelperUt(source_so_path, so_data)); | ||
| 2263 | + const auto so_bin = BuildCustomOpSoBinForModelHelperUt("libcustom_op_loader_finalize_ut.so", "vendor_ut", so_data); | ||
| 2264 | + ASSERT_NE(so_bin, nullptr); | ||
| 2265 | + | ||
| 2266 | + std::vector<CustomOpSoHandlePtr> loaded_handles; | ||
| 2267 | + ASSERT_EQ(loader.LoadCustomOpSoBins({so_bin}, loaded_handles), SUCCESS); | ||
| 2268 | + ASSERT_EQ(loaded_handles.size(), 1U); | ||
| 2269 | + | ||
| 2270 | + EXPECT_NO_THROW(CustomOpSoLoader::Finalize()); | ||
| 2271 | + | ||
| 2272 | + loaded_handles.clear(); | ||
| 2273 | + loader.Cleanup(); | ||
| 2274 | +} | ||
| 2275 | + | ||
| 2276 | +TEST_F(UtestModelHelper, CustomOpSoLoaderPublishOrReuseExpiredEntry_CovEnhance) { | ||
| 2277 | + CustomOpSoLoader loader; | ||
| 2278 | + const std::string fingerprint_key = "test_expired_fp_cov"; | ||
| 2279 | + loader.loaded_states_[fingerprint_key] = std::weak_ptr<CustomOpSoHandle>(); | ||
| 2280 | + | ||
| 2281 | + auto candidate = std::make_shared<CustomOpSoHandle>(fingerprint_key, nullptr, "test.so", 0U, -1); | ||
| 2282 | + CustomOpSoHandlePtr loaded_handle; | ||
| 2283 | + loader.PublishOrReuseLoadedHandle(fingerprint_key, candidate, loaded_handle); | ||
| 2284 | + EXPECT_EQ(loaded_handle, candidate); | ||
| 2285 | + EXPECT_EQ(loader.loaded_states_.size(), 1U); | ||
| 2286 | + loader.Cleanup(); | ||
| 2287 | +} | ||
| 2288 | + | ||
| 2248 | TEST_F(UtestModelHelper, LoadOpSoBinDataFail) { | 2289 | TEST_F(UtestModelHelper, LoadOpSoBinDataFail) { |
| 2249 | OmFileLoadHelper load_helper; | 2290 | OmFileLoadHelper load_helper; |
| 2250 | ModelHelper model_helper; | 2291 | ModelHelper model_helper; |
| @@ -2391,4 +2391,233 @@ TEST_F(Om2PackageHelperUt, SetSaveMode_Ok) { | |||
| 2391 | om2_packager.SetSaveMode(false); | 2391 | om2_packager.SetSaveMode(false); |
| 2392 | } | 2392 | } |
| 2393 | 2393 | ||
| 2394 | +TEST_F(Om2PackageHelperUt, BuildKernelBinaries_WithAtomicKernel_Success) { | ||
| 2395 | + auto ge_model = std::make_shared<GeModel>(); | ||
| 2396 | + const char atomic_kernel_data[] = "fake_atomic_tbe_kernel_bin"; | ||
| 2397 | + auto atomic_kernel = std::make_shared<ge::OpKernelBin>( | ||
| 2398 | + "atomic_kernel", std::vector<char>(atomic_kernel_data, atomic_kernel_data + strlen(atomic_kernel_data))); | ||
| 2399 | + ge_model->GetTBEKernelStore().AddKernel(atomic_kernel); | ||
| 2400 | + ASSERT_TRUE(ge_model->GetTBEKernelStore().Build()); | ||
| 2401 | + | ||
| 2402 | + auto graph = std::make_shared<ComputeGraph>("g1"); | ||
| 2403 | + GeTensorDesc tensor_desc(GeShape({1, 1}), FORMAT_ND, DT_FLOAT); | ||
| 2404 | + auto add_desc = std::make_shared<OpDesc>("add1", "Add"); | ||
| 2405 | + (void)add_desc->AddInputDesc(tensor_desc); | ||
| 2406 | + (void)add_desc->AddInputDesc(tensor_desc); | ||
| 2407 | + (void)add_desc->AddOutputDesc(tensor_desc); | ||
| 2408 | + (void)AttrUtils::SetStr(add_desc, "_kernelname", "atomic_kernel"); | ||
| 2409 | + (void)AttrUtils::SetStr(add_desc, ATOMIC_ATTR_TBE_KERNEL_NAME, "atomic_kernel"); | ||
| 2410 | + auto add_node = graph->AddNode(add_desc); | ||
| 2411 | + ASSERT_NE(add_node, nullptr); | ||
| 2412 | + graph->SetGraphUnknownFlag(false); | ||
| 2413 | + ge_model->SetGraph(graph); | ||
| 2414 | + | ||
| 2415 | + Om2PackageHelper om2_packager; | ||
| 2416 | + std::vector<gert::Om2KernelBinary> kernel_binaries; | ||
| 2417 | + ASSERT_EQ(om2_packager.BuildKernelBinaries(ge_model, kernel_binaries), SUCCESS); | ||
| 2418 | + EXPECT_FALSE(kernel_binaries.empty()); | ||
| 2419 | +} | ||
| 2420 | + | ||
| 2421 | +TEST_F(Om2PackageHelperUt, BuildKernelBinaries_WithCustAicpuKernel_Success) { | ||
| 2422 | + auto ge_model = std::make_shared<GeModel>(); | ||
| 2423 | + const char kernel_data[] = "fake_cust_aicpu_kernel_bin"; | ||
| 2424 | + std::vector<char> kernel_bin(kernel_data, kernel_data + strlen(kernel_data)); | ||
| 2425 | + auto cust_kernel = std::make_shared<ge::OpKernelBin>("libcust_aicpu_kernel.so", std::move(kernel_bin)); | ||
| 2426 | + CustAICPUKernelStore cust_aicpu_kernel_store; | ||
| 2427 | + cust_aicpu_kernel_store.AddCustAICPUKernel(cust_kernel); | ||
| 2428 | + ASSERT_TRUE(cust_aicpu_kernel_store.Build()); | ||
| 2429 | + ge_model->SetCustAICPUKernelStore(cust_aicpu_kernel_store); | ||
| 2430 | + | ||
| 2431 | + auto graph = std::make_shared<ComputeGraph>("g1"); | ||
| 2432 | + GeTensorDesc tensor_desc(GeShape({1, 1}), FORMAT_ND, DT_FLOAT); | ||
| 2433 | + auto add_desc = std::make_shared<OpDesc>("add1", "Add"); | ||
| 2434 | + (void)add_desc->AddInputDesc(tensor_desc); | ||
| 2435 | + (void)add_desc->AddInputDesc(tensor_desc); | ||
| 2436 | + (void)add_desc->AddOutputDesc(tensor_desc); | ||
| 2437 | + add_desc->SetExtAttr(OP_EXTATTR_CUSTAICPU_KERNEL, cust_kernel); | ||
| 2438 | + auto add_node = graph->AddNode(add_desc); | ||
| 2439 | + ASSERT_NE(add_node, nullptr); | ||
| 2440 | + graph->SetGraphUnknownFlag(false); | ||
| 2441 | + ge_model->SetGraph(graph); | ||
| 2442 | + | ||
| 2443 | + Om2PackageHelper om2_packager; | ||
| 2444 | + std::vector<gert::Om2KernelBinary> kernel_binaries; | ||
| 2445 | + ASSERT_EQ(om2_packager.BuildKernelBinaries(ge_model, kernel_binaries), SUCCESS); | ||
| 2446 | + bool found_cust = false; | ||
| 2447 | + for (const auto &kb : kernel_binaries) { | ||
| 2448 | + if (kb.name.find("_CustAicpuKernel.o") != std::string::npos) { | ||
| 2449 | + found_cust = true; | ||
| 2450 | + break; | ||
| 2451 | + } | ||
| 2452 | + } | ||
| 2453 | + EXPECT_TRUE(found_cust); | ||
| 2454 | +} | ||
| 2455 | + | ||
| 2456 | +TEST_F(Om2PackageHelperUt, SaveGraphDebugFiles_ValidModel_Success) { | ||
| 2457 | + const auto ge_root_model = CreateGeRootModelWithAicoreOp(); | ||
| 2458 | + ASSERT_NE(ge_root_model, nullptr); | ||
| 2459 | + const auto ge_model = ge_root_model->GetSubgraphInstanceNameToModel().begin()->second; | ||
| 2460 | + ASSERT_NE(ge_model, nullptr); | ||
| 2461 | + ge_model->GetGraph()->SetParentGraph(std::make_shared<ComputeGraph>("root_g1")); | ||
| 2462 | + | ||
| 2463 | + const std::string output_file = PathUtils::Join({test_work_dir, "test_debug_files.om2"}); | ||
| 2464 | + auto zip_writer = std::make_shared<ZipArchiveWriter>(output_file); | ||
| 2465 | + ASSERT_TRUE(zip_writer->IsMemFileOpened()); | ||
| 2466 | + | ||
| 2467 | + Om2PackageHelper om2_packager; | ||
| 2468 | + ASSERT_EQ(om2_packager.SaveGraphDebugFiles(zip_writer, ge_model, 0UL), SUCCESS); | ||
| 2469 | + ASSERT_TRUE(zip_writer->SaveModelDataToFile()); | ||
| 2470 | +} | ||
| 2471 | + | ||
| 2472 | +TEST_F(Om2PackageHelperUt, BuildModelMeta_WithOutputNameContainingColon_Success) { | ||
| 2473 | + auto ge_root_model = CreateGeRootModelWithAicoreOp(); | ||
| 2474 | + ASSERT_NE(ge_root_model, nullptr); | ||
| 2475 | + SyncKernelNameForAllModels(ge_root_model); | ||
| 2476 | + const auto ge_model = ge_root_model->GetSubgraphInstanceNameToModel().begin()->second; | ||
| 2477 | + ASSERT_NE(ge_model, nullptr); | ||
| 2478 | + | ||
| 2479 | + std::vector<std::string> out_node_names = {"add1:0"}; | ||
| 2480 | + AttrUtils::SetListStr(ge_model, ATTR_MODEL_OUT_NODES_NAME, out_node_names); | ||
| 2481 | + | ||
| 2482 | + Om2PackageHelper om2_packager; | ||
| 2483 | + gert::Om2ModelMeta model_meta; | ||
| 2484 | + ASSERT_EQ(om2_packager.BuildModelMeta(ge_model, model_meta), SUCCESS); | ||
| 2485 | + ASSERT_FALSE(model_meta.output_desc.empty()); | ||
| 2486 | + EXPECT_EQ(model_meta.output_desc[0].GetName(), "add1:0"); | ||
| 2487 | +} | ||
| 2488 | + | ||
| 2489 | +TEST_F(Om2PackageHelperUt, BuildModelMeta_WithOutputNameWithoutColon_Success) { | ||
| 2490 | + auto ge_root_model = CreateGeRootModelWithAicoreOp(); | ||
| 2491 | + ASSERT_NE(ge_root_model, nullptr); | ||
| 2492 | + SyncKernelNameForAllModels(ge_root_model); | ||
| 2493 | + const auto ge_model = ge_root_model->GetSubgraphInstanceNameToModel().begin()->second; | ||
| 2494 | + ASSERT_NE(ge_model, nullptr); | ||
| 2495 | + | ||
| 2496 | + std::vector<std::string> out_node_names = {"add1"}; | ||
| 2497 | + AttrUtils::SetListStr(ge_model, ATTR_MODEL_OUT_NODES_NAME, out_node_names); | ||
| 2498 | + | ||
| 2499 | + Om2PackageHelper om2_packager; | ||
| 2500 | + gert::Om2ModelMeta model_meta; | ||
| 2501 | + ASSERT_EQ(om2_packager.BuildModelMeta(ge_model, model_meta), SUCCESS); | ||
| 2502 | + ASSERT_FALSE(model_meta.output_desc.empty()); | ||
| 2503 | + EXPECT_NE(model_meta.output_desc[0].GetName().find(":"), std::string::npos); | ||
| 2504 | +} | ||
| 2505 | + | ||
| 2506 | +TEST_F(Om2PackageHelperUt, SaveModelInfo_WithAippDataNameMap_Success) { | ||
| 2507 | + const auto ge_root_model = CreateGeRootModelWithStaticAipp(); | ||
| 2508 | + ASSERT_NE(ge_root_model, nullptr); | ||
| 2509 | + const auto ge_model = ge_root_model->GetSubgraphInstanceNameToModel().begin()->second; | ||
| 2510 | + ASSERT_NE(ge_model, nullptr); | ||
| 2511 | + ge_model->GetGraph()->SetParentGraph(std::make_shared<ComputeGraph>("root_g1")); | ||
| 2512 | + | ||
| 2513 | + for (const auto &node : ge_model->GetGraph()->GetDirectNode()) { | ||
| 2514 | + auto op_desc = node->GetOpDesc(); | ||
| 2515 | + if ((op_desc != nullptr) && (op_desc->GetType() == DATA)) { | ||
| 2516 | + (void)AttrUtils::SetStr(op_desc, ATTR_DATA_AIPP_DATA_NAME_MAP, "data1"); | ||
| 2517 | + break; | ||
| 2518 | + } | ||
| 2519 | + } | ||
| 2520 | + | ||
| 2521 | + const std::string output_file = PathUtils::Join({test_work_dir, "test_aipp_data_name_map.om2"}); | ||
| 2522 | + auto zip_writer = std::make_shared<ZipArchiveWriter>(output_file); | ||
| 2523 | + ASSERT_TRUE(zip_writer->IsMemFileOpened()); | ||
| 2524 | + SyncKernelNameFromOpDesc(ge_model); | ||
| 2525 | + ASSERT_EQ(Om2PackageHelper::SaveModelInfo(zip_writer, ge_model, 0UL), SUCCESS); | ||
| 2526 | + ASSERT_TRUE(zip_writer->SaveModelDataToFile()); | ||
| 2527 | +} | ||
| 2528 | + | ||
| 2529 | +TEST_F(Om2PackageHelperUt, SaveModelInfo_WithInvalidAippDimInfo_Fail) { | ||
| 2530 | + const auto ge_root_model = CreateGeRootModelWithStaticAipp(); | ||
| 2531 | + ASSERT_NE(ge_root_model, nullptr); | ||
| 2532 | + const auto ge_model = ge_root_model->GetSubgraphInstanceNameToModel().begin()->second; | ||
| 2533 | + ASSERT_NE(ge_model, nullptr); | ||
| 2534 | + ge_model->GetGraph()->SetParentGraph(std::make_shared<ComputeGraph>("root_g1")); | ||
| 2535 | + | ||
| 2536 | + for (const auto &node : ge_model->GetGraph()->GetDirectNode()) { | ||
| 2537 | + auto op_desc = node->GetOpDesc(); | ||
| 2538 | + if ((op_desc != nullptr) && (op_desc->GetType() == DATA)) { | ||
| 2539 | + std::vector<std::string> bad_aipp_inputs = {"invalid_dim_info_string"}; | ||
| 2540 | + (void)AttrUtils::SetListStr(op_desc, ATTR_NAME_AIPP_INPUTS, bad_aipp_inputs); | ||
| 2541 | + break; | ||
| 2542 | + } | ||
| 2543 | + } | ||
| 2544 | + | ||
| 2545 | + const std::string output_file = PathUtils::Join({test_work_dir, "test_invalid_aipp_dim.om2"}); | ||
| 2546 | + auto zip_writer = std::make_shared<ZipArchiveWriter>(output_file); | ||
| 2547 | + ASSERT_TRUE(zip_writer->IsMemFileOpened()); | ||
| 2548 | + SyncKernelNameFromOpDesc(ge_model); | ||
| 2549 | + EXPECT_EQ(Om2PackageHelper::SaveModelInfo(zip_writer, ge_model, 0UL), SUCCESS); | ||
| 2550 | +} | ||
| 2551 | + | ||
| 2552 | +TEST_F(Om2PackageHelperUt, SaveModelInfo_WithAippListIntAndListFloat_Success) { | ||
| 2553 | + const auto ge_root_model = CreateGeRootModelWithStaticAipp(); | ||
| 2554 | + ASSERT_NE(ge_root_model, nullptr); | ||
| 2555 | + const auto ge_model = ge_root_model->GetSubgraphInstanceNameToModel().begin()->second; | ||
| 2556 | + ASSERT_NE(ge_model, nullptr); | ||
| 2557 | + ge_model->GetGraph()->SetParentGraph(std::make_shared<ComputeGraph>("root_g1")); | ||
| 2558 | + | ||
| 2559 | + for (const auto &node : ge_model->GetGraph()->GetDirectNode()) { | ||
| 2560 | + auto op_desc = node->GetOpDesc(); | ||
| 2561 | + if ((op_desc != nullptr) && (op_desc->GetType() == DATA)) { | ||
| 2562 | + ge::NamedAttrs aipp_attr; | ||
| 2563 | + aipp_attr.SetAttr("aipp_mode", ge::GeAttrValue::CreateFrom<int64_t>(0)); | ||
| 2564 | + aipp_attr.SetAttr("input_format", ge::GeAttrValue::CreateFrom<int64_t>(0)); | ||
| 2565 | + aipp_attr.SetAttr("src_image_size_w", ge::GeAttrValue::CreateFrom<int64_t>(640)); | ||
| 2566 | + aipp_attr.SetAttr("src_image_size_h", ge::GeAttrValue::CreateFrom<int64_t>(480)); | ||
| 2567 | + aipp_attr.SetAttr("csc_switch", ge::GeAttrValue::CreateFrom<bool>(true)); | ||
| 2568 | + aipp_attr.SetAttr("matrix_r0c0", ge::GeAttrValue::CreateFrom<std::vector<int64_t>>({100})); | ||
| 2569 | + aipp_attr.SetAttr("matrix_r0c1", ge::GeAttrValue::CreateFrom<std::vector<int64_t>>({200})); | ||
| 2570 | + aipp_attr.SetAttr("matrix_r0c2", ge::GeAttrValue::CreateFrom<std::vector<int64_t>>({300})); | ||
| 2571 | + aipp_attr.SetAttr("output_bias_0", ge::GeAttrValue::CreateFrom<std::vector<int64_t>>({10})); | ||
| 2572 | + aipp_attr.SetAttr("output_bias_1", ge::GeAttrValue::CreateFrom<std::vector<int64_t>>({20})); | ||
| 2573 | + aipp_attr.SetAttr("var_reci_chn_0", ge::GeAttrValue::CreateFrom<std::vector<float>>({1.5f})); | ||
| 2574 | + aipp_attr.SetAttr("var_reci_chn_1", ge::GeAttrValue::CreateFrom<std::vector<float>>({2.5f})); | ||
| 2575 | + aipp_attr.SetAttr("min_chn_0", ge::GeAttrValue::CreateFrom<float>(0.5f)); | ||
| 2576 | + aipp_attr.SetAttr("related_input_rank", ge::GeAttrValue::CreateFrom<int64_t>(0)); | ||
| 2577 | + aipp_attr.SetAttr("max_src_image_size", ge::GeAttrValue::CreateFrom<int64_t>(8192)); | ||
| 2578 | + aipp_attr.SetAttr("support_rotation", ge::GeAttrValue::CreateFrom<bool>(false)); | ||
| 2579 | + (void)ge::AttrUtils::SetNamedAttrs(op_desc, ge::ATTR_NAME_AIPP, aipp_attr); | ||
| 2580 | + break; | ||
| 2581 | + } | ||
| 2582 | + } | ||
| 2583 | + | ||
| 2584 | + const std::string output_file = PathUtils::Join({test_work_dir, "test_aipp_list_attrs.om2"}); | ||
| 2585 | + auto zip_writer = std::make_shared<ZipArchiveWriter>(output_file); | ||
| 2586 | + ASSERT_TRUE(zip_writer->IsMemFileOpened()); | ||
| 2587 | + SyncKernelNameFromOpDesc(ge_model); | ||
| 2588 | + EXPECT_EQ(Om2PackageHelper::SaveModelInfo(zip_writer, ge_model, 0UL), SUCCESS); | ||
| 2589 | + (void)zip_writer->SaveModelDataToFile(); | ||
| 2590 | +} | ||
| 2591 | + | ||
| 2592 | +TEST_F(Om2PackageHelperUt, BuildModelMeta_WithMbatchOriginInputDims_Success) { | ||
| 2593 | + const auto ge_root_model = CreateGeRootModelWithStaticAipp(); | ||
| 2594 | + ASSERT_NE(ge_root_model, nullptr); | ||
| 2595 | + const auto ge_model = ge_root_model->GetSubgraphInstanceNameToModel().begin()->second; | ||
| 2596 | + ASSERT_NE(ge_model, nullptr); | ||
| 2597 | + ge_model->GetGraph()->SetParentGraph(std::make_shared<ComputeGraph>("root_g1")); | ||
| 2598 | + | ||
| 2599 | + for (const auto &node : ge_model->GetGraph()->GetDirectNode()) { | ||
| 2600 | + auto op_desc = node->GetOpDesc(); | ||
| 2601 | + if ((op_desc != nullptr) && (op_desc->GetType() == DATA)) { | ||
| 2602 | + std::vector<int64_t> origin_dims = {-1, 3, 224, 224}; | ||
| 2603 | + (void)AttrUtils::SetListInt(op_desc, ATTR_MBATCH_ORIGIN_INPUT_DIMS, origin_dims); | ||
| 2604 | + break; | ||
| 2605 | + } | ||
| 2606 | + } | ||
| 2607 | + | ||
| 2608 | + const std::string output_file = PathUtils::Join({test_work_dir, "test_mbatch_dims.om2"}); | ||
| 2609 | + auto zip_writer = std::make_shared<ZipArchiveWriter>(output_file); | ||
| 2610 | + ASSERT_TRUE(zip_writer->IsMemFileOpened()); | ||
| 2611 | + SyncKernelNameFromOpDesc(ge_model); | ||
| 2612 | + EXPECT_EQ(Om2PackageHelper::SaveModelInfo(zip_writer, ge_model, 0UL), SUCCESS); | ||
| 2613 | + (void)zip_writer->SaveModelDataToFile(); | ||
| 2614 | +} | ||
| 2615 | + | ||
| 2616 | +TEST_F(Om2PackageHelperUt, SetSaveMode_False) { | ||
| 2617 | + Om2PackageHelper helper; | ||
| 2618 | + helper.SetSaveMode(false); | ||
| 2619 | + EXPECT_FALSE(helper.is_offline_); | ||
| 2620 | + helper.SetSaveMode(true); | ||
| 2621 | + EXPECT_TRUE(helper.is_offline_); | ||
| 2622 | +} | ||
| 2394 | } // namespace ge | 2623 | } // namespace ge |
| @@ -5886,4 +5886,48 @@ TEST_F(UtestGraphManagerTest, GraphManager_UpdateDynamicParams_ParsesFromGraphOp | |||
| 5886 | EXPECT_EQ(input_shape, "1,2,3"); | 5886 | EXPECT_EQ(input_shape, "1,2,3"); |
| 5887 | EXPECT_EQ(dynamic_node_type, 1); | 5887 | EXPECT_EQ(dynamic_node_type, 1); |
| 5888 | } | 5888 | } |
| 5889 | + | ||
| 5890 | +TEST_F(UtestGraphManagerTest, GraphManager_Finalize_NoGraphs) { | ||
| 5891 | + GraphManager graph_manager; | ||
| 5892 | + auto ret = graph_manager.Finalize(); | ||
| 5893 | + EXPECT_EQ(ret, SUCCESS); | ||
| 5894 | +} | ||
| 5895 | + | ||
| 5896 | +TEST_F(UtestGraphManagerTest, GraphManager_GetGraphNode_NotExist) { | ||
| 5897 | + GraphManager graph_manager; | ||
| 5898 | + GraphNodePtr graph_node; | ||
| 5899 | + auto ret = graph_manager.GetGraphNode(999, graph_node); | ||
| 5900 | + EXPECT_NE(ret, SUCCESS); | ||
| 5901 | +} | ||
| 5902 | + | ||
| 5903 | +TEST_F(UtestGraphManagerTest, GraphManager_RemoveGraph_NotExist) { | ||
| 5904 | + GraphManager graph_manager; | ||
| 5905 | + auto ret = graph_manager.RemoveGraph(999); | ||
| 5906 | + EXPECT_NE(ret, SUCCESS); | ||
| 5907 | +} | ||
| 5908 | + | ||
| 5909 | +TEST_F(UtestGraphManagerTest, GraphManager_SetSessionGraphId_NullGraph) { | ||
| 5910 | + GraphManager graph_manager; | ||
| 5911 | + ComputeGraphPtr null_graph = nullptr; | ||
| 5912 | + graph_manager.SetSessionGraphId(null_graph, 42); | ||
| 5913 | + SUCCEED(); | ||
| 5914 | +} | ||
| 5915 | + | ||
| 5916 | +TEST_F(UtestGraphManagerTest, GraphManager_CheckModelLoad_LoadedModel) { | ||
| 5917 | + GraphManager graph_manager; | ||
| 5918 | + auto ge_root_model = MakeShared<GeRootModel>(); | ||
| 5919 | + EXPECT_TRUE(graph_manager.CheckModelLoad(ge_root_model, true)); | ||
| 5920 | +} | ||
| 5921 | + | ||
| 5922 | +TEST_F(UtestGraphManagerTest, GraphManager_UpdateDynamicParams_WithDynamicDims) { | ||
| 5923 | + GraphManager graph_manager; | ||
| 5924 | + std::string input_shape; | ||
| 5925 | + std::string dynamic_dims; | ||
| 5926 | + int32_t dynamic_node_type = 0; | ||
| 5927 | + std::map<std::string, std::string> graph_options; | ||
| 5928 | + graph_options["dynamic_dims"] = "1,2,3"; | ||
| 5929 | + graph_options[DYNAMIC_NODE_TYPE] = "2"; | ||
| 5930 | + graph_manager.UpdateDynamicParams(input_shape, dynamic_dims, dynamic_node_type, graph_options); | ||
| 5931 | + EXPECT_EQ(dynamic_node_type, 2); | ||
| 5932 | +} | ||
| 5889 | } // namespace ge | 5933 | } // namespace ge |
| @@ -6443,4 +6443,432 @@ TEST_F(SymbolicShapeInferFuncUT, InferSymbolicShapeForFlashAttentionScoreExcepti | |||
| 6443 | // Expected output: GRAPH_FAILED | 6443 | // Expected output: GRAPH_FAILED |
| 6444 | TestFlashAttentionScoreException(builder, query_shape, key_shape, value_shape, head_num, "INVALID_LAYOUT"); | 6444 | TestFlashAttentionScoreException(builder, query_shape, key_shape, value_shape, head_num, "INVALID_LAYOUT"); |
| 6445 | } | 6445 | } |
| 6446 | + | ||
| 6447 | +TEST_F(SymbolicShapeInferFuncUT, InferSymbolicShapeForConv2D_NhwcFilterFormat) { | ||
| 6448 | + auto func = GetInferFunc("Conv2D"); | ||
| 6449 | + ASSERT_TRUE(func.first != nullptr); | ||
| 6450 | + InferSymbolShapeContextTestBuilder builder("Conv2D", "conv2D"); | ||
| 6451 | + ShapeEnvAttr shape_env; | ||
| 6452 | + ShapeEnvGuarder guarder(&shape_env); | ||
| 6453 | + auto s0 = shape_env.CreateSymbol(2, MakeShared<InputShapeSource>(0, 1)); | ||
| 6454 | + auto s1 = shape_env.CreateSymbol(28, MakeShared<InputShapeSource>(0, 2)); | ||
| 6455 | + auto s2 = shape_env.CreateSymbol(28, MakeShared<InputShapeSource>(0, 3)); | ||
| 6456 | + auto s3 = shape_env.CreateSymbol(3, MakeShared<InputShapeSource>(0, 4)); | ||
| 6457 | + auto s4 = shape_env.CreateSymbol(16, MakeShared<InputShapeSource>(0, 5)); | ||
| 6458 | + auto s5 = shape_env.CreateSymbol(3, MakeShared<InputShapeSource>(0, 6)); | ||
| 6459 | + auto s6 = shape_env.CreateSymbol(3, MakeShared<InputShapeSource>(0, 7)); | ||
| 6460 | + auto s7 = shape_env.CreateSymbol(3, MakeShared<InputShapeSource>(0, 8)); | ||
| 6461 | + std::vector<int64_t> strides = {1, 1, 1, 1}; | ||
| 6462 | + std::vector<int64_t> pads = {0, 0, 0, 0}; | ||
| 6463 | + std::vector<int64_t> dilations = {1, 1, 1, 1}; | ||
| 6464 | + BuildConv2DInferContext(builder, {s0, s1, s2, s3}, {s4, s5, s6, s7}, strides, pads, dilations, 1, FORMAT_NHWC, | ||
| 6465 | + FORMAT_NHWC); | ||
| 6466 | + auto infer_context = builder.Build(); | ||
| 6467 | + ASSERT_EQ(func.first(infer_context), ge::GRAPH_SUCCESS); | ||
| 6468 | +} | ||
| 6469 | + | ||
| 6470 | +TEST_F(SymbolicShapeInferFuncUT, InferSymbolicShapeForConv2D_InvalidGroupsZero) { | ||
| 6471 | + auto func = GetInferFunc("Conv2D"); | ||
| 6472 | + ASSERT_TRUE(func.first != nullptr); | ||
| 6473 | + InferSymbolShapeContextTestBuilder builder("Conv2D", "conv2D"); | ||
| 6474 | + ShapeEnvAttr shape_env; | ||
| 6475 | + ShapeEnvGuarder guarder(&shape_env); | ||
| 6476 | + auto s0 = shape_env.CreateSymbol(2, MakeShared<InputShapeSource>(0, 1)); | ||
| 6477 | + auto s1 = shape_env.CreateSymbol(28, MakeShared<InputShapeSource>(0, 2)); | ||
| 6478 | + auto s2 = shape_env.CreateSymbol(28, MakeShared<InputShapeSource>(0, 3)); | ||
| 6479 | + auto s3 = shape_env.CreateSymbol(3, MakeShared<InputShapeSource>(0, 4)); | ||
| 6480 | + auto s4 = shape_env.CreateSymbol(3, MakeShared<InputShapeSource>(0, 5)); | ||
| 6481 | + auto s5 = shape_env.CreateSymbol(3, MakeShared<InputShapeSource>(0, 6)); | ||
| 6482 | + auto s6 = shape_env.CreateSymbol(3, MakeShared<InputShapeSource>(0, 7)); | ||
| 6483 | + auto s7 = shape_env.CreateSymbol(16, MakeShared<InputShapeSource>(0, 8)); | ||
| 6484 | + std::vector<int64_t> strides = {1, 1, 1, 1}; | ||
| 6485 | + std::vector<int64_t> pads = {0, 0, 0, 0}; | ||
| 6486 | + std::vector<int64_t> dilations = {1, 1, 1, 1}; | ||
| 6487 | + BuildConv2DInferContext(builder, {s0, s1, s2, s3}, {s4, s5, s6, s7}, strides, pads, dilations, 0, FORMAT_NHWC, | ||
| 6488 | + FORMAT_HWCN); | ||
| 6489 | + auto infer_context = builder.Build(); | ||
| 6490 | + ASSERT_EQ(func.first(infer_context), ge::PARAM_INVALID); | ||
| 6491 | +} | ||
| 6492 | + | ||
| 6493 | +TEST_F(SymbolicShapeInferFuncUT, InferSymbolicShapeForConv2D_GroupsDivisibleFail) { | ||
| 6494 | + auto func = GetInferFunc("Conv2D"); | ||
| 6495 | + ASSERT_TRUE(func.first != nullptr); | ||
| 6496 | + InferSymbolShapeContextTestBuilder builder("Conv2D", "conv2D"); | ||
| 6497 | + ShapeEnvAttr shape_env; | ||
| 6498 | + ShapeEnvGuarder guarder(&shape_env); | ||
| 6499 | + auto s0 = shape_env.CreateSymbol(2, MakeShared<InputShapeSource>(0, 1)); | ||
| 6500 | + auto s1 = shape_env.CreateSymbol(28, MakeShared<InputShapeSource>(0, 2)); | ||
| 6501 | + auto s2 = shape_env.CreateSymbol(28, MakeShared<InputShapeSource>(0, 3)); | ||
| 6502 | + auto s3 = shape_env.CreateSymbol(3, MakeShared<InputShapeSource>(0, 4)); | ||
| 6503 | + auto s4 = shape_env.CreateSymbol(3, MakeShared<InputShapeSource>(0, 5)); | ||
| 6504 | + auto s5 = shape_env.CreateSymbol(3, MakeShared<InputShapeSource>(0, 6)); | ||
| 6505 | + auto s6 = shape_env.CreateSymbol(2, MakeShared<InputShapeSource>(0, 7)); | ||
| 6506 | + auto s7 = shape_env.CreateSymbol(16, MakeShared<InputShapeSource>(0, 8)); | ||
| 6507 | + std::vector<int64_t> strides = {1, 1, 1, 1}; | ||
| 6508 | + std::vector<int64_t> pads = {0, 0, 0, 0}; | ||
| 6509 | + std::vector<int64_t> dilations = {1, 1, 1, 1}; | ||
| 6510 | + BuildConv2DInferContext(builder, {s0, s1, s2, s3}, {s4, s5, s6, s7}, strides, pads, dilations, 1, FORMAT_NHWC, | ||
| 6511 | + FORMAT_HWCN); | ||
| 6512 | + auto infer_context = builder.Build(); | ||
| 6513 | + ASSERT_EQ(func.first(infer_context), ge::PARAM_INVALID); | ||
| 6514 | +} | ||
| 6515 | + | ||
| 6516 | +TEST_F(SymbolicShapeInferFuncUT, InferSymbolicShapeForConv2D_InvalidDilations) { | ||
| 6517 | + auto func = GetInferFunc("Conv2D"); | ||
| 6518 | + ASSERT_TRUE(func.first != nullptr); | ||
| 6519 | + InferSymbolShapeContextTestBuilder builder("Conv2D", "conv2D"); | ||
| 6520 | + ShapeEnvAttr shape_env; | ||
| 6521 | + ShapeEnvGuarder guarder(&shape_env); | ||
| 6522 | + auto s0 = shape_env.CreateSymbol(2, MakeShared<InputShapeSource>(0, 1)); | ||
| 6523 | + auto s1 = shape_env.CreateSymbol(28, MakeShared<InputShapeSource>(0, 2)); | ||
| 6524 | + auto s2 = shape_env.CreateSymbol(28, MakeShared<InputShapeSource>(0, 3)); | ||
| 6525 | + auto s3 = shape_env.CreateSymbol(3, MakeShared<InputShapeSource>(0, 4)); | ||
| 6526 | + auto s4 = shape_env.CreateSymbol(3, MakeShared<InputShapeSource>(0, 5)); | ||
| 6527 | + auto s5 = shape_env.CreateSymbol(3, MakeShared<InputShapeSource>(0, 6)); | ||
| 6528 | + auto s6 = shape_env.CreateSymbol(3, MakeShared<InputShapeSource>(0, 7)); | ||
| 6529 | + auto s7 = shape_env.CreateSymbol(16, MakeShared<InputShapeSource>(0, 8)); | ||
| 6530 | + std::vector<int64_t> strides = {1, 1, 1, 1}; | ||
| 6531 | + std::vector<int64_t> pads = {0, 0, 0, 0}; | ||
| 6532 | + std::vector<int64_t> dilations = {1, 0, 0, 1}; | ||
| 6533 | + BuildConv2DInferContext(builder, {s0, s1, s2, s3}, {s4, s5, s6, s7}, strides, pads, dilations, 1, FORMAT_NHWC, | ||
| 6534 | + FORMAT_HWCN); | ||
| 6535 | + auto infer_context = builder.Build(); | ||
| 6536 | + ASSERT_EQ(func.first(infer_context), ge::PARAM_INVALID); | ||
| 6537 | +} | ||
| 6538 | + | ||
| 6539 | +TEST_F(SymbolicShapeInferFuncUT, InferSymbolicShapeForConv2D_CutPads) { | ||
| 6540 | + auto func = GetInferFunc("Conv2D"); | ||
| 6541 | + ASSERT_TRUE(func.first != nullptr); | ||
| 6542 | + InferSymbolShapeContextTestBuilder builder("Conv2D", "conv2D"); | ||
| 6543 | + ShapeEnvAttr shape_env; | ||
| 6544 | + ShapeEnvGuarder guarder(&shape_env); | ||
| 6545 | + auto s0 = shape_env.CreateSymbol(1, MakeShared<InputShapeSource>(0, 1)); | ||
| 6546 | + auto s1 = shape_env.CreateSymbol(1, MakeShared<InputShapeSource>(0, 2)); | ||
| 6547 | + auto s2 = shape_env.CreateSymbol(1, MakeShared<InputShapeSource>(0, 3)); | ||
| 6548 | + auto s3 = shape_env.CreateSymbol(3, MakeShared<InputShapeSource>(0, 4)); | ||
| 6549 | + auto s4 = shape_env.CreateSymbol(3, MakeShared<InputShapeSource>(0, 5)); | ||
| 6550 | + auto s5 = shape_env.CreateSymbol(3, MakeShared<InputShapeSource>(0, 6)); | ||
| 6551 | + auto s6 = shape_env.CreateSymbol(3, MakeShared<InputShapeSource>(0, 7)); | ||
| 6552 | + auto s7 = shape_env.CreateSymbol(16, MakeShared<InputShapeSource>(0, 8)); | ||
| 6553 | + std::vector<int64_t> strides = {1, 2, 2, 1}; | ||
| 6554 | + std::vector<int64_t> pads = {0, 2, 0, 2}; | ||
| 6555 | + std::vector<int64_t> dilations = {1, 1, 1, 1}; | ||
| 6556 | + BuildConv2DInferContext(builder, {s0, s1, s2, s3}, {s4, s5, s6, s7}, strides, pads, dilations, 1, FORMAT_NHWC, | ||
| 6557 | + FORMAT_HWCN); | ||
| 6558 | + auto infer_context = builder.Build(); | ||
| 6559 | + ASSERT_EQ(func.first(infer_context), ge::GRAPH_SUCCESS); | ||
| 6560 | +} | ||
| 6561 | + | ||
| 6562 | +TEST_F(SymbolicShapeInferFuncUT, InferSymbolicShapeForConv2D_SamePaddingTailsPositive) { | ||
| 6563 | + auto func = GetInferFunc("Conv2D"); | ||
| 6564 | + ASSERT_TRUE(func.first != nullptr); | ||
| 6565 | + InferSymbolShapeContextTestBuilder builder("Conv2D", "conv2D"); | ||
| 6566 | + ShapeEnvAttr shape_env; | ||
| 6567 | + ShapeEnvGuarder guarder(&shape_env); | ||
| 6568 | + auto s0 = shape_env.CreateSymbol(48, MakeShared<InputShapeSource>(0, 1)); | ||
| 6569 | + auto s1 = shape_env.CreateSymbol(5, MakeShared<InputShapeSource>(0, 2)); | ||
| 6570 | + auto s2 = shape_env.CreateSymbol(5, MakeShared<InputShapeSource>(0, 3)); | ||
| 6571 | + auto s3 = shape_env.CreateSymbol(3, MakeShared<InputShapeSource>(0, 4)); | ||
| 6572 | + auto s4 = shape_env.CreateSymbol(3, MakeShared<InputShapeSource>(0, 5)); | ||
| 6573 | + auto s5 = shape_env.CreateSymbol(3, MakeShared<InputShapeSource>(0, 6)); | ||
| 6574 | + auto s6 = shape_env.CreateSymbol(3, MakeShared<InputShapeSource>(0, 7)); | ||
| 6575 | + auto s7 = shape_env.CreateSymbol(64, MakeShared<InputShapeSource>(0, 8)); | ||
| 6576 | + std::vector<int64_t> strides = {1, 2, 2, 1}; | ||
| 6577 | + std::vector<int64_t> pads = {-1, -1, -1, -1}; | ||
| 6578 | + std::vector<int64_t> dilations = {1, 1, 1, 1}; | ||
| 6579 | + BuildConv2DInferContext(builder, {s0, s1, s2, s3}, {s4, s5, s6, s7}, strides, pads, dilations, 1, FORMAT_NHWC, | ||
| 6580 | + FORMAT_HWCN); | ||
| 6581 | + AppendConv2DPaddingAttrs(builder.GetOrCreateOpDescPtr(), "SAME"); | ||
| 6582 | + auto infer_context = builder.Build(); | ||
| 6583 | + ASSERT_EQ(func.first(infer_context), ge::GRAPH_SUCCESS); | ||
| 6584 | +} | ||
| 6585 | + | ||
| 6586 | +TEST_F(SymbolicShapeInferFuncUT, InferSymbolicShapeForConv2DV2_SamePaddingPadNegative) { | ||
| 6587 | + auto func = GetInferFunc("Conv2DV2"); | ||
| 6588 | + ASSERT_TRUE(func.first != nullptr); | ||
| 6589 | + InferSymbolShapeContextTestBuilder builder("Conv2DV2", "conv2DV2"); | ||
| 6590 | + ShapeEnvAttr shape_env; | ||
| 6591 | + ShapeEnvGuarder guarder(&shape_env); | ||
| 6592 | + auto s0 = shape_env.CreateSymbol(48, MakeShared<InputShapeSource>(0, 1)); | ||
| 6593 | + auto s1 = shape_env.CreateSymbol(4, MakeShared<InputShapeSource>(0, 2)); | ||
| 6594 | + auto s2 = shape_env.CreateSymbol(4, MakeShared<InputShapeSource>(0, 3)); | ||
| 6595 | + auto s3 = shape_env.CreateSymbol(3, MakeShared<InputShapeSource>(0, 4)); | ||
| 6596 | + auto s4 = shape_env.CreateSymbol(3, MakeShared<InputShapeSource>(0, 5)); | ||
| 6597 | + auto s5 = shape_env.CreateSymbol(3, MakeShared<InputShapeSource>(0, 6)); | ||
| 6598 | + auto s6 = shape_env.CreateSymbol(3, MakeShared<InputShapeSource>(0, 7)); | ||
| 6599 | + auto s7 = shape_env.CreateSymbol(64, MakeShared<InputShapeSource>(0, 8)); | ||
| 6600 | + std::vector<int64_t> strides = {1, 4, 4, 1}; | ||
| 6601 | + std::vector<int64_t> pads = {0, 0, 0, 0}; | ||
| 6602 | + std::vector<int64_t> dilations = {1, 1, 1, 1}; | ||
| 6603 | + auto infer_context = | ||
| 6604 | + BuildConv2DV2InferContext(builder, {s0, s1, s2, s3}, {s4, s5, s6, s7}, strides, pads, dilations, "SAME_UPPER"); | ||
| 6605 | + ASSERT_EQ(func.first(infer_context), ge::GRAPH_SUCCESS); | ||
| 6606 | +} | ||
| 6607 | + | ||
| 6608 | +TEST_F(SymbolicShapeInferFuncUT, InferSymbolicShapeForConv2DV2_ValidPadding) { | ||
| 6609 | + auto func = GetInferFunc("Conv2DV2"); | ||
| 6610 | + ASSERT_TRUE(func.first != nullptr); | ||
| 6611 | + InferSymbolShapeContextTestBuilder builder("Conv2DV2", "conv2DV2"); | ||
| 6612 | + ShapeEnvAttr shape_env; | ||
| 6613 | + ShapeEnvGuarder guarder(&shape_env); | ||
| 6614 | + auto s0 = shape_env.CreateSymbol(48, MakeShared<InputShapeSource>(0, 1)); | ||
| 6615 | + auto s1 = shape_env.CreateSymbol(112, MakeShared<InputShapeSource>(0, 2)); | ||
| 6616 | + auto s2 = shape_env.CreateSymbol(112, MakeShared<InputShapeSource>(0, 3)); | ||
| 6617 | + auto s3 = shape_env.CreateSymbol(3, MakeShared<InputShapeSource>(0, 4)); | ||
| 6618 | + auto s4 = shape_env.CreateSymbol(7, MakeShared<InputShapeSource>(0, 5)); | ||
| 6619 | + auto s5 = shape_env.CreateSymbol(7, MakeShared<InputShapeSource>(0, 6)); | ||
| 6620 | + auto s6 = shape_env.CreateSymbol(3, MakeShared<InputShapeSource>(0, 7)); | ||
| 6621 | + auto s7 = shape_env.CreateSymbol(64, MakeShared<InputShapeSource>(0, 8)); | ||
| 6622 | + std::vector<int64_t> strides = {1, 2, 2, 1}; | ||
| 6623 | + std::vector<int64_t> pads = {-1, -1, -1, -1}; | ||
| 6624 | + std::vector<int64_t> dilations = {1, 1, 1, 1}; | ||
| 6625 | + auto infer_context = | ||
| 6626 | + BuildConv2DV2InferContext(builder, {s0, s1, s2, s3}, {s4, s5, s6, s7}, strides, pads, dilations, "VALID"); | ||
| 6627 | + ASSERT_EQ(func.first(infer_context), ge::GRAPH_SUCCESS); | ||
| 6628 | +} | ||
| 6629 | + | ||
| 6630 | +TEST_F(SymbolicShapeInferFuncUT, InferSymbolicShapeForConv2DV2_GroupsDivisibleFail) { | ||
| 6631 | + auto func = GetInferFunc("Conv2DV2"); | ||
| 6632 | + ASSERT_TRUE(func.first != nullptr); | ||
| 6633 | + InferSymbolShapeContextTestBuilder builder("Conv2DV2", "conv2DV2"); | ||
| 6634 | + ShapeEnvAttr shape_env; | ||
| 6635 | + ShapeEnvGuarder guarder(&shape_env); | ||
| 6636 | + auto s0 = shape_env.CreateSymbol(2, MakeShared<InputShapeSource>(0, 1)); | ||
| 6637 | + auto s1 = shape_env.CreateSymbol(28, MakeShared<InputShapeSource>(0, 2)); | ||
| 6638 | + auto s2 = shape_env.CreateSymbol(28, MakeShared<InputShapeSource>(0, 3)); | ||
| 6639 | + auto s3 = shape_env.CreateSymbol(3, MakeShared<InputShapeSource>(0, 4)); | ||
| 6640 | + auto s4 = shape_env.CreateSymbol(3, MakeShared<InputShapeSource>(0, 5)); | ||
| 6641 | + auto s5 = shape_env.CreateSymbol(3, MakeShared<InputShapeSource>(0, 6)); | ||
| 6642 | + auto s6 = shape_env.CreateSymbol(2, MakeShared<InputShapeSource>(0, 7)); | ||
| 6643 | + auto s7 = shape_env.CreateSymbol(16, MakeShared<InputShapeSource>(0, 8)); | ||
| 6644 | + std::vector<int64_t> strides = {1, 1, 1, 1}; | ||
| 6645 | + std::vector<int64_t> pads = {0, 0, 0, 0}; | ||
| 6646 | + std::vector<int64_t> dilations = {1, 1, 1, 1}; | ||
| 6647 | + auto infer_context = | ||
| 6648 | + BuildConv2DV2InferContext(builder, {s0, s1, s2, s3}, {s4, s5, s6, s7}, strides, pads, dilations, "SPECIFIC"); | ||
| 6649 | + ASSERT_EQ(func.first(infer_context), ge::PARAM_INVALID); | ||
| 6650 | +} | ||
| 6651 | + | ||
| 6652 | +TEST_F(SymbolicShapeInferFuncUT, InferSymbolicShapeForConv2D_ZeroTensorIcKcZero) { | ||
| 6653 | + auto func = GetInferFunc("Conv2D"); | ||
| 6654 | + ASSERT_TRUE(func.first != nullptr); | ||
| 6655 | + InferSymbolShapeContextTestBuilder builder("Conv2D", "conv2D"); | ||
| 6656 | + ShapeEnvAttr shape_env; | ||
| 6657 | + ShapeEnvGuarder guarder(&shape_env); | ||
| 6658 | + auto s0 = shape_env.CreateSymbol(2, MakeShared<InputShapeSource>(0, 1)); | ||
| 6659 | + auto s1 = shape_env.CreateSymbol(28, MakeShared<InputShapeSource>(0, 2)); | ||
| 6660 | + auto s2 = shape_env.CreateSymbol(28, MakeShared<InputShapeSource>(0, 3)); | ||
| 6661 | + auto s3 = shape_env.CreateSymbol(0, MakeShared<InputShapeSource>(0, 4)); | ||
| 6662 | + auto s4 = shape_env.CreateSymbol(3, MakeShared<InputShapeSource>(0, 5)); | ||
| 6663 | + auto s5 = shape_env.CreateSymbol(3, MakeShared<InputShapeSource>(0, 6)); | ||
| 6664 | + auto s6 = shape_env.CreateSymbol(0, MakeShared<InputShapeSource>(0, 7)); | ||
| 6665 | + auto s7 = shape_env.CreateSymbol(16, MakeShared<InputShapeSource>(0, 8)); | ||
| 6666 | + std::vector<int64_t> strides = {1, 1, 1, 1}; | ||
| 6667 | + std::vector<int64_t> pads = {0, 0, 0, 0}; | ||
| 6668 | + std::vector<int64_t> dilations = {1, 1, 1, 1}; | ||
| 6669 | + BuildConv2DInferContext(builder, {s0, s1, s2, s3}, {s4, s5, s6, s7}, strides, pads, dilations, 1, FORMAT_NHWC, | ||
| 6670 | + FORMAT_HWCN); | ||
| 6671 | + auto infer_context = builder.Build(); | ||
| 6672 | + ASSERT_EQ(func.first(infer_context), ge::GRAPH_SUCCESS); | ||
| 6673 | +} | ||
| 6674 | + | ||
| 6675 | +TEST_F(SymbolicShapeInferFuncUT, InferSymbolicShapeForEinsum_NoArrow) { | ||
| 6676 | + auto func = GetInferFunc("Einsum"); | ||
| 6677 | + ASSERT_TRUE(func.first != nullptr); | ||
| 6678 | + InferSymbolShapeContextTestBuilder builder("Einsum", "einsum"); | ||
| 6679 | + ShapeEnvAttr shape_env; | ||
| 6680 | + ShapeEnvGuarder guarder(&shape_env); | ||
| 6681 | + auto s0 = shape_env.CreateSymbol(2, MakeShared<InputShapeSource>(0, 1)); | ||
| 6682 | + auto s1 = shape_env.CreateSymbol(3, MakeShared<InputShapeSource>(0, 2)); | ||
| 6683 | + auto s2 = shape_env.CreateSymbol(4, MakeShared<InputShapeSource>(0, 3)); | ||
| 6684 | + BuildEinsumInferContext(builder, {gert::SymbolShape({s0, s1}), gert::SymbolShape({s1, s2})}, "ab,bc"); | ||
| 6685 | + auto infer_context = builder.Build(); | ||
| 6686 | + ASSERT_EQ(func.first(infer_context), ge::PARAM_INVALID); | ||
| 6687 | +} | ||
| 6688 | + | ||
| 6689 | +TEST_F(SymbolicShapeInferFuncUT, InferSymbolicShapeForEinsum_DotInEquation) { | ||
| 6690 | + auto func = GetInferFunc("Einsum"); | ||
| 6691 | + ASSERT_TRUE(func.first != nullptr); | ||
| 6692 | + InferSymbolShapeContextTestBuilder builder("Einsum", "einsum"); | ||
| 6693 | + ShapeEnvAttr shape_env; | ||
| 6694 | + ShapeEnvGuarder guarder(&shape_env); | ||
| 6695 | + auto s0 = shape_env.CreateSymbol(2, MakeShared<InputShapeSource>(0, 1)); | ||
| 6696 | + auto s1 = shape_env.CreateSymbol(3, MakeShared<InputShapeSource>(0, 2)); | ||
| 6697 | + auto s2 = shape_env.CreateSymbol(4, MakeShared<InputShapeSource>(0, 3)); | ||
| 6698 | + BuildEinsumInferContext(builder, {gert::SymbolShape({s0, s1}), gert::SymbolShape({s1, s2})}, "a.b,bc->ac"); | ||
| 6699 | + auto infer_context = builder.Build(); | ||
| 6700 | + ASSERT_EQ(func.first(infer_context), ge::PARAM_INVALID); | ||
| 6701 | +} | ||
| 6702 | + | ||
| 6703 | +TEST_F(SymbolicShapeInferFuncUT, InferSymbolicShapeForEinsum_DotWithEllipsis) { | ||
| 6704 | + auto func = GetInferFunc("Einsum"); | ||
| 6705 | + ASSERT_TRUE(func.first != nullptr); | ||
| 6706 | + InferSymbolShapeContextTestBuilder builder("Einsum", "einsum"); | ||
| 6707 | + ShapeEnvAttr shape_env; | ||
| 6708 | + ShapeEnvGuarder guarder(&shape_env); | ||
| 6709 | + auto s0 = shape_env.CreateSymbol(2, MakeShared<InputShapeSource>(0, 1)); | ||
| 6710 | + auto s1 = shape_env.CreateSymbol(3, MakeShared<InputShapeSource>(0, 2)); | ||
| 6711 | + auto s2 = shape_env.CreateSymbol(4, MakeShared<InputShapeSource>(0, 3)); | ||
| 6712 | + BuildEinsumInferContext(builder, {gert::SymbolShape({s0, s1}), gert::SymbolShape({s1, s2})}, "a...b.c,bc->ac"); | ||
| 6713 | + auto infer_context = builder.Build(); | ||
| 6714 | + ASSERT_EQ(func.first(infer_context), ge::PARAM_INVALID); | ||
| 6715 | +} | ||
| 6716 | + | ||
| 6717 | +TEST_F(SymbolicShapeInferFuncUT, InferSymbolicShapeForEinsum_NonAlphaLabel) { | ||
| 6718 | + auto func = GetInferFunc("Einsum"); | ||
| 6719 | + ASSERT_TRUE(func.first != nullptr); | ||
| 6720 | + InferSymbolShapeContextTestBuilder builder("Einsum", "einsum"); | ||
| 6721 | + ShapeEnvAttr shape_env; | ||
| 6722 | + ShapeEnvGuarder guarder(&shape_env); | ||
| 6723 | + auto s0 = shape_env.CreateSymbol(2, MakeShared<InputShapeSource>(0, 1)); | ||
| 6724 | + auto s1 = shape_env.CreateSymbol(3, MakeShared<InputShapeSource>(0, 2)); | ||
| 6725 | + auto s2 = shape_env.CreateSymbol(4, MakeShared<InputShapeSource>(0, 3)); | ||
| 6726 | + BuildEinsumInferContext(builder, {gert::SymbolShape({s0, s1}), gert::SymbolShape({s1, s2})}, "a1,bc->ac"); | ||
| 6727 | + auto infer_context = builder.Build(); | ||
| 6728 | + ASSERT_EQ(func.first(infer_context), ge::PARAM_INVALID); | ||
| 6729 | +} | ||
| 6730 | + | ||
| 6731 | +TEST_F(SymbolicShapeInferFuncUT, InferSymbolicShapeForEinsum_InputPartsSizeMismatch) { | ||
| 6732 | + auto func = GetInferFunc("Einsum"); | ||
| 6733 | + ASSERT_TRUE(func.first != nullptr); | ||
| 6734 | + InferSymbolShapeContextTestBuilder builder("Einsum", "einsum"); | ||
| 6735 | + ShapeEnvAttr shape_env; | ||
| 6736 | + ShapeEnvGuarder guarder(&shape_env); | ||
| 6737 | + auto s0 = shape_env.CreateSymbol(2, MakeShared<InputShapeSource>(0, 1)); | ||
| 6738 | + auto s1 = shape_env.CreateSymbol(3, MakeShared<InputShapeSource>(0, 2)); | ||
| 6739 | + auto s2 = shape_env.CreateSymbol(4, MakeShared<InputShapeSource>(0, 3)); | ||
| 6740 | + BuildEinsumInferContext(builder, {gert::SymbolShape({s0, s1}), gert::SymbolShape({s1, s2})}, "ab->ab"); | ||
| 6741 | + auto infer_context = builder.Build(); | ||
| 6742 | + ASSERT_EQ(func.first(infer_context), ge::PARAM_INVALID); | ||
| 6743 | +} | ||
| 6744 | + | ||
| 6745 | +TEST_F(SymbolicShapeInferFuncUT, InferSymbolicShapeForEinsum_EmptyInputPart) { | ||
| 6746 | + auto func = GetInferFunc("Einsum"); | ||
| 6747 | + ASSERT_TRUE(func.first != nullptr); | ||
| 6748 | + InferSymbolShapeContextTestBuilder builder("Einsum", "einsum"); | ||
| 6749 | + ShapeEnvAttr shape_env; | ||
| 6750 | + ShapeEnvGuarder guarder(&shape_env); | ||
| 6751 | + auto s0 = shape_env.CreateSymbol(2, MakeShared<InputShapeSource>(0, 1)); | ||
| 6752 | + auto s1 = shape_env.CreateSymbol(3, MakeShared<InputShapeSource>(0, 2)); | ||
| 6753 | + auto s2 = shape_env.CreateSymbol(4, MakeShared<InputShapeSource>(0, 3)); | ||
| 6754 | + BuildEinsumInferContext(builder, {gert::SymbolShape({s0, s1}), gert::SymbolShape({s1, s2})}, ",ab->ab"); | ||
| 6755 | + auto infer_context = builder.Build(); | ||
| 6756 | + ASSERT_EQ(func.first(infer_context), ge::PARAM_INVALID); | ||
| 6757 | +} | ||
| 6758 | + | ||
| 6759 | +TEST_F(SymbolicShapeInferFuncUT, InferSymbolicShapeForEinsum_BothDuplicated) { | ||
| 6760 | + auto func = GetInferFunc("Einsum"); | ||
| 6761 | + ASSERT_TRUE(func.first != nullptr); | ||
| 6762 | + InferSymbolShapeContextTestBuilder builder("Einsum", "einsum"); | ||
| 6763 | + ShapeEnvAttr shape_env; | ||
| 6764 | + ShapeEnvGuarder guarder(&shape_env); | ||
| 6765 | + auto s0 = shape_env.CreateSymbol(2, MakeShared<InputShapeSource>(0, 1)); | ||
| 6766 | + auto s1 = shape_env.CreateSymbol(3, MakeShared<InputShapeSource>(0, 2)); | ||
| 6767 | + auto s2 = shape_env.CreateSymbol(4, MakeShared<InputShapeSource>(0, 3)); | ||
| 6768 | + BuildEinsumInferContext(builder, {gert::SymbolShape({s0, s1, s1}), gert::SymbolShape({s1, s2})}, "aab,bc->aac"); | ||
| 6769 | + auto infer_context = builder.Build(); | ||
| 6770 | + ASSERT_EQ(func.first(infer_context), ge::PARAM_INVALID); | ||
| 6771 | +} | ||
| 6772 | + | ||
| 6773 | +TEST_F(SymbolicShapeInferFuncUT, InferSymbolicShapeForEinsum_EllipsisBroadcastEqualConst) { | ||
| 6774 | + auto func = GetInferFunc("Einsum"); | ||
| 6775 | + ASSERT_TRUE(func.first != nullptr); | ||
| 6776 | + InferSymbolShapeContextTestBuilder builder("Einsum", "einsum"); | ||
| 6777 | + ShapeEnvAttr shape_env; | ||
| 6778 | + ShapeEnvGuarder guarder(&shape_env); | ||
| 6779 | + auto s0 = shape_env.CreateSymbol(2, MakeShared<InputShapeSource>(0, 1)); | ||
| 6780 | + BuildEinsumInferContext( | ||
| 6781 | + builder, {gert::SymbolShape({Symbol(2), Symbol(3), s0}), gert::SymbolShape({Symbol(2), Symbol(3), s0})}, | ||
| 6782 | + "...a,...a->...a"); | ||
| 6783 | + auto infer_context = builder.Build(); | ||
| 6784 | + ASSERT_EQ(func.first(infer_context), ge::GRAPH_SUCCESS); | ||
| 6785 | +} | ||
| 6786 | + | ||
| 6787 | +TEST_F(SymbolicShapeInferFuncUT, InferSymbolicShapeForEinsum_EllipsisBroadcastNewDimOne) { | ||
| 6788 | + auto func = GetInferFunc("Einsum"); | ||
| 6789 | + ASSERT_TRUE(func.first != nullptr); | ||
| 6790 | + InferSymbolShapeContextTestBuilder builder("Einsum", "einsum"); | ||
| 6791 | + ShapeEnvAttr shape_env; | ||
| 6792 | + ShapeEnvGuarder guarder(&shape_env); | ||
| 6793 | + auto s0 = shape_env.CreateSymbol(2, MakeShared<InputShapeSource>(0, 1)); | ||
| 6794 | + BuildEinsumInferContext( | ||
| 6795 | + builder, {gert::SymbolShape({Symbol(2), Symbol(3), s0}), gert::SymbolShape({Symbol(1), Symbol(3), s0})}, | ||
| 6796 | + "...a,...a->...a"); | ||
| 6797 | + auto infer_context = builder.Build(); | ||
| 6798 | + ASSERT_EQ(func.first(infer_context), ge::GRAPH_SUCCESS); | ||
| 6799 | +} | ||
| 6800 | + | ||
| 6801 | +TEST_F(SymbolicShapeInferFuncUT, InferSymbolicShapeForEinsum_EllipsisBroadcastCurDimOne) { | ||
| 6802 | + auto func = GetInferFunc("Einsum"); | ||
| 6803 | + ASSERT_TRUE(func.first != nullptr); | ||
| 6804 | + InferSymbolShapeContextTestBuilder builder("Einsum", "einsum"); | ||
| 6805 | + ShapeEnvAttr shape_env; | ||
| 6806 | + ShapeEnvGuarder guarder(&shape_env); | ||
| 6807 | + auto s0 = shape_env.CreateSymbol(2, MakeShared<InputShapeSource>(0, 1)); | ||
| 6808 | + BuildEinsumInferContext( | ||
| 6809 | + builder, {gert::SymbolShape({Symbol(1), Symbol(3), s0}), gert::SymbolShape({Symbol(2), Symbol(3), s0})}, | ||
| 6810 | + "...a,...a->...a"); | ||
| 6811 | + auto infer_context = builder.Build(); | ||
| 6812 | + ASSERT_EQ(func.first(infer_context), ge::GRAPH_SUCCESS); | ||
| 6813 | +} | ||
| 6814 | + | ||
| 6815 | +TEST_F(SymbolicShapeInferFuncUT, InferSymbolicShapeForEinsum_EllipsisBroadcastFail) { | ||
| 6816 | + auto func = GetInferFunc("Einsum"); | ||
| 6817 | + ASSERT_TRUE(func.first != nullptr); | ||
| 6818 | + InferSymbolShapeContextTestBuilder builder("Einsum", "einsum"); | ||
| 6819 | + ShapeEnvAttr shape_env; | ||
| 6820 | + ShapeEnvGuarder guarder(&shape_env); | ||
| 6821 | + auto s0 = shape_env.CreateSymbol(2, MakeShared<InputShapeSource>(0, 1)); | ||
| 6822 | + BuildEinsumInferContext(builder, {gert::SymbolShape({Symbol(3), s0}), gert::SymbolShape({Symbol(4), s0})}, | ||
| 6823 | + "...a,...a->...a"); | ||
| 6824 | + auto infer_context = builder.Build(); | ||
| 6825 | + ASSERT_EQ(func.first(infer_context), ge::PARAM_INVALID); | ||
| 6826 | +} | ||
| 6827 | + | ||
| 6828 | +TEST_F(SymbolicShapeInferFuncUT, InferSymbolicShapeForEinsum_MergeEqualDimConst) { | ||
| 6829 | + auto func = GetInferFunc("Einsum"); | ||
| 6830 | + ASSERT_TRUE(func.first != nullptr); | ||
| 6831 | + InferSymbolShapeContextTestBuilder builder("Einsum", "einsum"); | ||
| 6832 | + ShapeEnvAttr shape_env; | ||
| 6833 | + ShapeEnvGuarder guarder(&shape_env); | ||
| 6834 | + auto s0 = shape_env.CreateSymbol(2, MakeShared<InputShapeSource>(0, 1)); | ||
| 6835 | + auto s2 = shape_env.CreateSymbol(4, MakeShared<InputShapeSource>(0, 3)); | ||
| 6836 | + BuildEinsumInferContext(builder, {gert::SymbolShape({s0, Symbol(3)}), gert::SymbolShape({Symbol(3), s2})}, | ||
| 6837 | + "ab,bc->ac"); | ||
| 6838 | + auto infer_context = builder.Build(); | ||
| 6839 | + ASSERT_EQ(func.first(infer_context), ge::GRAPH_SUCCESS); | ||
| 6840 | +} | ||
| 6841 | + | ||
| 6842 | +TEST_F(SymbolicShapeInferFuncUT, InferSymbolicShapeForEinsum_DimMismatchWithoutEllipsis) { | ||
| 6843 | + auto func = GetInferFunc("Einsum"); | ||
| 6844 | + ASSERT_TRUE(func.first != nullptr); | ||
| 6845 | + InferSymbolShapeContextTestBuilder builder("Einsum", "einsum"); | ||
| 6846 | + ShapeEnvAttr shape_env; | ||
| 6847 | + ShapeEnvGuarder guarder(&shape_env); | ||
| 6848 | + auto s0 = shape_env.CreateSymbol(2, MakeShared<InputShapeSource>(0, 1)); | ||
| 6849 | + auto s1 = shape_env.CreateSymbol(3, MakeShared<InputShapeSource>(0, 2)); | ||
| 6850 | + auto s2 = shape_env.CreateSymbol(4, MakeShared<InputShapeSource>(0, 3)); | ||
| 6851 | + BuildEinsumInferContext(builder, {gert::SymbolShape({s0, s1, s2}), gert::SymbolShape({s1, s2})}, "ab,bc->ac"); | ||
| 6852 | + auto infer_context = builder.Build(); | ||
| 6853 | + ASSERT_EQ(func.first(infer_context), ge::PARAM_INVALID); | ||
| 6854 | +} | ||
| 6855 | + | ||
| 6856 | +TEST_F(SymbolicShapeInferFuncUT, InferSymbolicShapeForEinsum_EllipsisWithPrefix) { | ||
| 6857 | + auto func = GetInferFunc("Einsum"); | ||
| 6858 | + ASSERT_TRUE(func.first != nullptr); | ||
| 6859 | + InferSymbolShapeContextTestBuilder builder("Einsum", "einsum"); | ||
| 6860 | + ShapeEnvAttr shape_env; | ||
| 6861 | + ShapeEnvGuarder guarder(&shape_env); | ||
| 6862 | + auto s0 = shape_env.CreateSymbol(2, MakeShared<InputShapeSource>(0, 1)); | ||
| 6863 | + auto s1 = shape_env.CreateSymbol(3, MakeShared<InputShapeSource>(0, 2)); | ||
| 6864 | + auto s2 = shape_env.CreateSymbol(4, MakeShared<InputShapeSource>(0, 3)); | ||
| 6865 | + auto s3 = shape_env.CreateSymbol(5, MakeShared<InputShapeSource>(0, 4)); | ||
| 6866 | + BuildEinsumInferContext(builder, {gert::SymbolShape({s0, s2, s1}), gert::SymbolShape({s1, s3})}, "a...b,bc->a...c"); | ||
| 6867 | + auto infer_context = builder.Build(); | ||
| 6868 | + ASSERT_EQ(func.first(infer_context), ge::GRAPH_SUCCESS); | ||
| 6869 | + auto out_shape = infer_context->GetOutputSymbolShape(0); | ||
| 6870 | + ASSERT_EQ(out_shape->GetDimNum(), 3U); | ||
| 6871 | + ASSERT_EQ(out_shape->GetDim(0), s0); | ||
| 6872 | + ASSERT_EQ(out_shape->GetDim(2), s3); | ||
| 6873 | +} | ||
| 6446 | } // namespace ge | 6874 | } // namespace ge |
| @@ -1830,5 +1830,60 @@ TEST_F(UtestDynamicShapePartition, not_single_op_scene_success_stable_topo_tail_ | |||
| 1830 | graph_options = GetThreadLocalContext().GetAllGraphOptions(); | 1830 | graph_options = GetThreadLocalContext().GetAllGraphOptions(); |
| 1831 | graph_options[OPTION_TOPOSORTING_MODE] = "0"; | 1831 | graph_options[OPTION_TOPOSORTING_MODE] = "0"; |
| 1832 | GetThreadLocalContext().SetGraphOption(graph_options); | 1832 | GetThreadLocalContext().SetGraphOption(graph_options); |
| 1833 | + ReInitOo(); | ||
| 1834 | +} | ||
| 1835 | + | ||
| 1836 | +TEST_F(UtestDynamicShapePartition, GetPartitionName_ReturnsDynamicShapePartitioner) { | ||
| 1837 | + ComputeGraphPtr graph = std::make_shared<ComputeGraph>("test_graph"); | ||
| 1838 | + NodePtr data = NodeBuilder("data", DATA).AddInputDesc({1, 1, 224, 224}).AddOutputDesc({1, 1, 224, 224}).Build(graph); | ||
| 1839 | + NodePtr relu = NodeBuilder("relu", RELU).AddInputDesc({1, 1, 224, 224}).AddOutputDesc({1, 1, 224, 224}).Build(graph); | ||
| 1840 | + NodePtr netoutput = NodeBuilder("netoutput", NETOUTPUT).AddInputDesc({1, 1, 224, 224}).Build(graph); | ||
| 1841 | + GraphUtils::AddEdge(data->GetOutDataAnchor(0), relu->GetInDataAnchor(0)); | ||
| 1842 | + GraphUtils::AddEdge(relu->GetOutDataAnchor(0), netoutput->GetInDataAnchor(0)); | ||
| 1843 | + DynamicShapePartitioner partitioner(graph); | ||
| 1844 | + EXPECT_EQ(partitioner.GetPartitionName(), "DynamicShapePartitioner"); | ||
| 1845 | +} | ||
| 1846 | + | ||
| 1847 | +TEST_F(UtestDynamicShapePartition, Partition_WithInvalidShapeRangeAttr) { | ||
| 1848 | + ComputeGraphPtr graph = std::make_shared<ComputeGraph>("test_graph"); | ||
| 1849 | + NodePtr data = NodeBuilder("data", DATA).AddInputDesc({1, 1, 224, 224}).AddOutputDesc({1, 1, 224, 224}).Build(graph); | ||
| 1850 | + auto data_op = data->GetOpDesc(); | ||
| 1851 | + auto input_desc = data_op->MutableInputDesc(0); | ||
| 1852 | + input_desc->SetShape(GeShape({-1, 1, 224, 224})); | ||
| 1853 | + std::vector<std::pair<int64_t, int64_t>> invalid_range = {{1, 2}, {1, 2}}; | ||
| 1854 | + input_desc->SetShapeRange(invalid_range); | ||
| 1855 | + NodePtr relu = NodeBuilder("relu", RELU).AddInputDesc({1, 1, 224, 224}).AddOutputDesc({1, 1, 224, 224}).Build(graph); | ||
| 1856 | + NodePtr netoutput = NodeBuilder("netoutput", NETOUTPUT).AddInputDesc({1, 1, 224, 224}).Build(graph); | ||
| 1857 | + GraphUtils::AddEdge(data->GetOutDataAnchor(0), relu->GetInDataAnchor(0)); | ||
| 1858 | + GraphUtils::AddEdge(relu->GetOutDataAnchor(0), netoutput->GetInDataAnchor(0)); | ||
| 1859 | + (void)AttrUtils::SetStr(*graph, ATTR_NAME_SESSION_GRAPH_ID, "0"); | ||
| 1860 | + DynamicShapePartitioner partitioner(graph); | ||
| 1861 | + EXPECT_EQ(partitioner.Partition(), SUCCESS); | ||
| 1862 | +} | ||
| 1863 | + | ||
| 1864 | +TEST_F(UtestDynamicShapePartition, Partition_WithVariableNode) { | ||
| 1865 | + ComputeGraphPtr graph = std::make_shared<ComputeGraph>("test_graph"); | ||
| 1866 | + NodePtr var_node = NodeBuilder("var", VARIABLE).AddInputDesc({1}).AddOutputDesc({1}).Build(graph); | ||
| 1867 | + NodePtr data = NodeBuilder("data", DATA).AddOutputDesc({1}).Build(graph); | ||
| 1868 | + NodePtr netoutput = NodeBuilder("netoutput", NETOUTPUT).AddInputDesc({1}).Build(graph); | ||
| 1869 | + GraphUtils::AddEdge(data->GetOutDataAnchor(0), var_node->GetInDataAnchor(0)); | ||
| 1870 | + GraphUtils::AddEdge(var_node->GetOutDataAnchor(0), netoutput->GetInDataAnchor(0)); | ||
| 1871 | + DynamicShapePartitioner partitioner(graph); | ||
| 1872 | + EXPECT_EQ(partitioner.Partition(), SUCCESS); | ||
| 1873 | +} | ||
| 1874 | + | ||
| 1875 | +TEST_F(UtestDynamicShapePartition, Partition_WithDynamicShapeAndTilingSink) { | ||
| 1876 | + ComputeGraphPtr graph = std::make_shared<ComputeGraph>("test_graph"); | ||
| 1877 | + NodePtr data = | ||
| 1878 | + NodeBuilder("data", DATA).AddInputDesc({-1, 1, 224, 224}).AddOutputDesc({-1, 1, 224, 224}).Build(graph); | ||
| 1879 | + NodePtr relu = | ||
| 1880 | + NodeBuilder("relu", RELU).AddInputDesc({-1, 1, 224, 224}).AddOutputDesc({-1, 1, 224, 224}).Build(graph); | ||
| 1881 | + NodePtr netoutput = NodeBuilder("netoutput", NETOUTPUT).AddInputDesc({-1, 1, 224, 224}).Build(graph); | ||
| 1882 | + GraphUtils::AddEdge(data->GetOutDataAnchor(0), relu->GetInDataAnchor(0)); | ||
| 1883 | + GraphUtils::AddEdge(relu->GetOutDataAnchor(0), netoutput->GetInDataAnchor(0)); | ||
| 1884 | + graph->SetGraphUnknownFlag(true); | ||
| 1885 | + (void)AttrUtils::SetStr(*graph, ATTR_NAME_SESSION_GRAPH_ID, "0"); | ||
| 1886 | + DynamicShapePartitioner partitioner(graph); | ||
| 1887 | + EXPECT_EQ(partitioner.Partition(), SUCCESS); | ||
| 1833 | } | 1888 | } |
| 1834 | } // namespace ge | 1889 | } // namespace ge |
| @@ -615,89 +615,6 @@ TEST_F(UtestGraphPartition, second_partition_graph_with_user_stream_label) { | |||
| 615 | EXPECT_EQ(ge::GELib::GetInstance()->Finalize(), SUCCESS); | 615 | EXPECT_EQ(ge::GELib::GetInstance()->Finalize(), SUCCESS); |
| 616 | } | 616 | } |
| 617 | 617 | ||
| 618 | -TEST_F(UtestGraphPartition, partition_with_graph_stable_topo_bfs) { | ||
| 619 | - DEF_GRAPH(graph) { | ||
| 620 | - auto data_0 = OP_CFG(DATA).InCnt(1).OutCnt(1).TensorDesc(FORMAT_ND, DT_INT32, {16}); | ||
| 621 | - | ||
| 622 | - auto fake_type2_op1 = OP_CFG("FakeOpNpu").InCnt(1).OutCnt(1).TensorDesc(FORMAT_ND, DT_INT32, {16}); | ||
| 623 | - | ||
| 624 | - auto fake_type2_op2 = OP_CFG("FakeOpNpu").InCnt(1).OutCnt(1).TensorDesc(FORMAT_ND, DT_INT32, {16}); | ||
| 625 | - | ||
| 626 | - auto fake_type2_op3 = OP_CFG("FakeOpRts").InCnt(1).OutCnt(1).TensorDesc(FORMAT_ND, DT_INT32, {16}); | ||
| 627 | - | ||
| 628 | - auto fake_type2_op4 = OP_CFG("FakeOpNpu").InCnt(1).OutCnt(1).TensorDesc(FORMAT_ND, DT_INT32, {16}); | ||
| 629 | - | ||
| 630 | - auto data_1 = OP_CFG(DATA).InCnt(1).OutCnt(1).TensorDesc(FORMAT_ND, DT_INT32, {16}); | ||
| 631 | - | ||
| 632 | - auto fake_type2_op5 = OP_CFG("FakeOpRts").InCnt(1).OutCnt(1).TensorDesc(FORMAT_ND, DT_INT32, {16}); | ||
| 633 | - | ||
| 634 | - auto fake_type2_op6 = OP_CFG("FakeOpRts").InCnt(1).OutCnt(1).TensorDesc(FORMAT_ND, DT_INT32, {16}); | ||
| 635 | - | ||
| 636 | - auto fake_type2_op7 = OP_CFG("FakeOpNpu").InCnt(2).OutCnt(1).TensorDesc(FORMAT_ND, DT_INT32, {16}); | ||
| 637 | - | ||
| 638 | - auto fake_type2_op8 = OP_CFG("FakeOpNpu").InCnt(1).OutCnt(1).TensorDesc(FORMAT_ND, DT_INT32, {16}); | ||
| 639 | - | ||
| 640 | - auto net_output = OP_CFG(NETOUTPUT).InCnt(1).OutCnt(1).TensorDesc(FORMAT_ND, DT_INT32, {-1}); | ||
| 641 | - | ||
| 642 | - CHAIN(NODE("_arg_0", data_0) | ||
| 643 | - ->NODE("fused_op1", fake_type2_op1) | ||
| 644 | - ->NODE("fused_op2", fake_type2_op2) | ||
| 645 | - ->NODE("fused_op3", fake_type2_op3) | ||
| 646 | - ->NODE("fused_op4", fake_type2_op4) | ||
| 647 | - ->EDGE(0, 0) | ||
| 648 | - ->NODE("fused_op7", fake_type2_op7) | ||
| 649 | - ->NODE("fused_op8", fake_type2_op8) | ||
| 650 | - ->NODE("Node_Output", net_output)); | ||
| 651 | - CHAIN(NODE("_arg_1", data_1) | ||
| 652 | - ->NODE("fused_op5", fake_type2_op5) | ||
| 653 | - ->NODE("fused_op6", fake_type2_op6) | ||
| 654 | - ->EDGE(0, 1) | ||
| 655 | - ->NODE("fused_op7")); | ||
| 656 | - }; | ||
| 657 | - auto root_graph = ToComputeGraph(graph); | ||
| 658 | - (void)AttrUtils::SetStr(*root_graph, ATTR_NAME_SESSION_GRAPH_ID, "0"); | ||
| 659 | - map<string, string> options = {}; | ||
| 660 | - EXPECT_EQ(ge::GELib::Initialize(options), SUCCESS); | ||
| 661 | - EnginePartitioner EnginePartitioner; | ||
| 662 | - EnginePartitioner::Mode mode = EnginePartitioner::Mode::kSecondPartitioning; | ||
| 663 | - // bfs | ||
| 664 | - std::map<std::string, std::string> graph_options = GetThreadLocalContext().GetAllGraphOptions(); | ||
| 665 | - graph_options[OPTION_TOPOSORTING_MODE] = "0"; | ||
| 666 | - GetThreadLocalContext().SetGraphOption(graph_options); | ||
| 667 | - root_graph->TopologicalSortingGraph(); | ||
| 668 | - graph_options = GetThreadLocalContext().GetAllGraphOptions(); | ||
| 669 | - graph_options[OPTION_TOPOSORTING_MODE] = "3"; | ||
| 670 | - GetThreadLocalContext().SetGraphOption(graph_options); | ||
| 671 | - std::map<std::string, std::set<std::string>> subgraph_to_node = { | ||
| 672 | - {"partition0_rank1_new_sub_graph1", {"fused_op1", "fused_op2"}}, | ||
| 673 | - {"partition0_rank2_new_sub_graph2", {"fused_op3"}}, | ||
| 674 | - {"partition0_rank3_new_sub_graph3", {"fused_op4"}}, | ||
| 675 | - {"partition0_rank4_new_sub_graph5", {"fused_op5", "fused_op6"}}, | ||
| 676 | - {"partition0_rank5_new_sub_graph6", {"fused_op7", "fused_op8"}}, | ||
| 677 | - {"partition0_rank6_new_sub_graph7", {}}}; | ||
| 678 | - ASSERT_EQ(EnginePartitioner.Partition(root_graph, mode), SUCCESS); | ||
| 679 | - EXPECT_EQ(EnginePartitioner.GetSubGraphMap().begin()->second.size(), 6); | ||
| 680 | - for (const auto &sub_info : EnginePartitioner.GetSubGraphMap().begin()->second) { | ||
| 681 | - const auto subgraph = sub_info->GetSubGraph(); | ||
| 682 | - ASSERT_NE(subgraph, nullptr); | ||
| 683 | - int32_t subgraph_node_num = 0; | ||
| 684 | - EXPECT_NE(subgraph_to_node.find(subgraph->GetName()), subgraph_to_node.end()); | ||
| 685 | - for (const auto &sub_node : subgraph->GetDirectNode()) { | ||
| 686 | - if (sub_node->GetType() != PLACEHOLDER && sub_node->GetType() != END && sub_node->GetType() != NETOUTPUT) { | ||
| 687 | - subgraph_node_num++; | ||
| 688 | - EXPECT_NE(subgraph_to_node[subgraph->GetName()].find(sub_node->GetName()), | ||
| 689 | - subgraph_to_node[subgraph->GetName()].end()); | ||
| 690 | - } | ||
| 691 | - } | ||
| 692 | - EXPECT_EQ(subgraph_node_num, subgraph_to_node[subgraph->GetName()].size()); | ||
| 693 | - } | ||
| 694 | - | ||
| 695 | - graph_options = GetThreadLocalContext().GetAllGraphOptions(); | ||
| 696 | - graph_options[OPTION_TOPOSORTING_MODE] = ""; | ||
| 697 | - GetThreadLocalContext().SetGraphOption(graph_options); | ||
| 698 | - EXPECT_EQ(ge::GELib::GetInstance()->Finalize(), SUCCESS); | ||
| 699 | -} | ||
| 700 | - | ||
| 701 | TEST_F(UtestGraphPartition, partition_with_graph_stable_topo_bfs2) { | 618 | TEST_F(UtestGraphPartition, partition_with_graph_stable_topo_bfs2) { |
| 702 | DEF_GRAPH(graph) { | 619 | DEF_GRAPH(graph) { |
| 703 | auto data_0 = OP_CFG(DATA).InCnt(1).OutCnt(1).TensorDesc(FORMAT_ND, DT_INT32, {16}); | 620 | auto data_0 = OP_CFG(DATA).InCnt(1).OutCnt(1).TensorDesc(FORMAT_ND, DT_INT32, {16}); |
| @@ -1110,4 +1027,11 @@ TEST_F(UtestGraphPartition, HasNoInput_WithInput) { | |||
| 1110 | GraphUtils::AddEdge(data->GetOutDataAnchor(0), relu->GetInDataAnchor(0)); | 1027 | GraphUtils::AddEdge(data->GetOutDataAnchor(0), relu->GetInDataAnchor(0)); |
| 1111 | EXPECT_EQ(EnginePartitioner.HasNoInput(relu), false); | 1028 | EXPECT_EQ(EnginePartitioner.HasNoInput(relu), false); |
| 1112 | } | 1029 | } |
| 1030 | + | ||
| 1031 | +TEST_F(UtestGraphPartition, EnginePartitioner_MergeSubGraph_BothNull) { | ||
| 1032 | + EnginePartitioner partitioner; | ||
| 1033 | + ComputeGraphPtr graph1 = nullptr; | ||
| 1034 | + ComputeGraphPtr graph2 = nullptr; | ||
| 1035 | + EXPECT_NE(partitioner.MergeSubGraph(graph1, graph2), SUCCESS); | ||
| 1036 | +} | ||
| 1113 | } // namespace ge | 1037 | } // namespace ge |
| @@ -639,4 +639,203 @@ TEST_F(UtestHostcpuEngineUpdatePass, Run_RuntimeV2Disabled) { | |||
| 639 | unsetenv("ENABLE_RUNTIME_V2"); | 639 | unsetenv("ENABLE_RUNTIME_V2"); |
| 640 | } | 640 | } |
| 641 | 641 | ||
| 642 | +TEST_F(UtestHostcpuEngineUpdatePass, IsExecOnHost_HostCpuKernelLib) { | ||
| 643 | + HostcpuEngineUpdatePass pass; | ||
| 644 | + ge::OpDescPtr op_desc = std::make_shared<OpDesc>("hostcpu_node", "Gather"); | ||
| 645 | + op_desc->AddInputDesc(GeTensorDesc(GeShape(std::vector<int64_t>{1}), FORMAT_NCHW, DT_INT32)); | ||
| 646 | + op_desc->AddOutputDesc(GeTensorDesc(GeShape(std::vector<int64_t>{1}), FORMAT_NCHW, DT_INT32)); | ||
| 647 | + op_desc->SetOpKernelLibName("DNN_VM_HOST_CPU_OP_STORE"); | ||
| 648 | + ge::ComputeGraphPtr graph = std::make_shared<ge::ComputeGraph>("default"); | ||
| 649 | + ge::NodePtr node = graph->AddNode(op_desc); | ||
| 650 | + EXPECT_EQ(pass.IsExecOnHost(node), true); | ||
| 651 | +} | ||
| 652 | + | ||
| 653 | +TEST_F(UtestHostcpuEngineUpdatePass, CheckInputForHostExec_NullInputDesc) { | ||
| 654 | + HostcpuEngineUpdatePass pass; | ||
| 655 | + ge::OpDescPtr op_desc = std::make_shared<OpDesc>("node", "Gather"); | ||
| 656 | + op_desc->AddInputDesc(GeTensorDesc(GeShape(std::vector<int64_t>{1}), FORMAT_NCHW, DT_INT32)); | ||
| 657 | + op_desc->AddOutputDesc(GeTensorDesc(GeShape(std::vector<int64_t>{1}), FORMAT_NCHW, DT_INT32)); | ||
| 658 | + ge::ComputeGraphPtr graph = std::make_shared<ge::ComputeGraph>("default"); | ||
| 659 | + ge::NodePtr node = graph->AddNode(op_desc); | ||
| 660 | + EXPECT_EQ(pass.CheckInputForHostExec(node, 5), false); | ||
| 661 | +} | ||
| 662 | + | ||
| 663 | +TEST_F(UtestHostcpuEngineUpdatePass, CheckInputForHostExec_NotSmallEnough) { | ||
| 664 | + HostcpuEngineUpdatePass pass; | ||
| 665 | + ge::OpDescPtr op_desc = std::make_shared<OpDesc>("node", "Gather"); | ||
| 666 | + op_desc->AddInputDesc(GeTensorDesc(GeShape(std::vector<int64_t>{1, 1, 224, 224}), FORMAT_NCHW, DT_INT32)); | ||
| 667 | + op_desc->AddOutputDesc(GeTensorDesc(GeShape(std::vector<int64_t>{1}), FORMAT_NCHW, DT_INT32)); | ||
| 668 | + ge::ComputeGraphPtr graph = std::make_shared<ge::ComputeGraph>("default"); | ||
| 669 | + ge::NodePtr node = graph->AddNode(op_desc); | ||
| 670 | + EXPECT_EQ(pass.CheckInputForHostExec(node, 0), false); | ||
| 671 | +} | ||
| 672 | + | ||
| 673 | +TEST_F(UtestHostcpuEngineUpdatePass, CheckInputForHostExec_PeerNotHost) { | ||
| 674 | + HostcpuEngineUpdatePass pass; | ||
| 675 | + ge::ComputeGraphPtr graph = std::make_shared<ge::ComputeGraph>("default"); | ||
| 676 | + ge::OpDescPtr data_op_desc = std::make_shared<OpDesc>("data", "Data"); | ||
| 677 | + data_op_desc->AddOutputDesc(GeTensorDesc(GeShape(std::vector<int64_t>{1}), FORMAT_NCHW, DT_INT32)); | ||
| 678 | + data_op_desc->SetOpKernelLibName(kEngineNameAiCore); | ||
| 679 | + ge::NodePtr data_node = graph->AddNode(data_op_desc); | ||
| 680 | + ge::OpDescPtr op_desc = std::make_shared<OpDesc>("node", "Gather"); | ||
| 681 | + op_desc->AddInputDesc(GeTensorDesc(GeShape(std::vector<int64_t>{1}), FORMAT_NCHW, DT_INT32)); | ||
| 682 | + op_desc->AddOutputDesc(GeTensorDesc(GeShape(std::vector<int64_t>{1}), FORMAT_NCHW, DT_INT32)); | ||
| 683 | + op_desc->SetOpKernelLibName(kEngineNameAiCore); | ||
| 684 | + ge::NodePtr node = graph->AddNode(op_desc); | ||
| 685 | + GraphUtils::AddEdge(data_node->GetOutDataAnchor(0), node->GetInDataAnchor(0)); | ||
| 686 | + EXPECT_EQ(pass.CheckInputForHostExec(node, 0), false); | ||
| 687 | +} | ||
| 688 | + | ||
| 689 | +TEST_F(UtestHostcpuEngineUpdatePass, CheckOutputForHostExec_NullOutputDesc) { | ||
| 690 | + HostcpuEngineUpdatePass pass; | ||
| 691 | + ge::OpDescPtr op_desc = std::make_shared<OpDesc>("node", "Gather"); | ||
| 692 | + op_desc->AddOutputDesc(GeTensorDesc(GeShape(std::vector<int64_t>{1}), FORMAT_NCHW, DT_INT32)); | ||
| 693 | + ge::ComputeGraphPtr graph = std::make_shared<ge::ComputeGraph>("default"); | ||
| 694 | + ge::NodePtr node = graph->AddNode(op_desc); | ||
| 695 | + EXPECT_EQ(pass.CheckAndMarkHostExec(node, *(new NodeEngineMap), *(new NodeEngineMap)), false); | ||
| 696 | +} | ||
| 697 | + | ||
| 698 | +TEST_F(UtestHostcpuEngineUpdatePass, Run_WithIfGraph) { | ||
| 699 | + setenv("ENABLE_RUNTIME_V2", "1", 1); | ||
| 700 | + DEF_GRAPH(root) { | ||
| 701 | + auto data = OP_CFG(DATA).InCnt(0).OutCnt(1).TensorDesc(FORMAT_ND, DT_INT32, {1}); | ||
| 702 | + auto shape = OP_CFG(SHAPE).InCnt(1).OutCnt(1).TensorDesc(FORMAT_ND, DT_INT32, {}); | ||
| 703 | + auto if_op = OP_CFG(IF).InCnt(2).OutCnt(1).TensorDesc(FORMAT_ND, DT_FLOAT, {-1}).Build("if_op"); | ||
| 704 | + auto net_output = OP_CFG(NETOUTPUT).InCnt(1).OutCnt(1).TensorDesc(FORMAT_ND, DT_FLOAT, {-1}); | ||
| 705 | + CHAIN(NODE("data", data)->NODE("shape", shape)->NODE(if_op)->NODE("Node_Output", net_output)); | ||
| 706 | + CHAIN(NODE("data")->EDGE(0, 1)->NODE(if_op)); | ||
| 707 | + }; | ||
| 708 | + DEF_GRAPH(then_graph) { | ||
| 709 | + auto data = | ||
| 710 | + OP_CFG(DATA).InCnt(0).OutCnt(1).Attr(ATTR_NAME_PARENT_NODE_INDEX, 0).TensorDesc(FORMAT_ND, DT_FLOAT, {1}); | ||
| 711 | + CHAIN(NODE("then_data", data)->NODE("then_Node_Output", NETOUTPUT)); | ||
| 712 | + }; | ||
| 713 | + DEF_GRAPH(else_graph) { | ||
| 714 | + auto data = | ||
| 715 | + OP_CFG(DATA).InCnt(0).OutCnt(1).Attr(ATTR_NAME_PARENT_NODE_INDEX, 0).TensorDesc(FORMAT_ND, DT_FLOAT, {1}); | ||
| 716 | + CHAIN(NODE("else_data", data)->NODE("else_Node_Output", NETOUTPUT)); | ||
| 717 | + }; | ||
| 718 | + auto root_graph = ToComputeGraph(root); | ||
| 719 | + root_graph->SetGraphUnknownFlag(true); | ||
| 720 | + root_graph->FindNode("data")->GetOpDesc()->SetOpKernelLibName(kEngineNameGeLocal); | ||
| 721 | + root_graph->FindNode("shape")->GetOpDesc()->SetOpKernelLibName(kEngineNameGeLocal); | ||
| 722 | + root_graph->FindNode("Node_Output")->GetOpDesc()->SetOpKernelLibName(kEngineNameGeLocal); | ||
| 723 | + (void)ge::AttrUtils::SetBool(root_graph->FindNode("data")->GetOpDesc(), ge::ATTR_NAME_HOST_TENSOR, true); | ||
| 724 | + auto if_node = root_graph->FindNode("if_op"); | ||
| 725 | + if_node->GetOpDesc()->SetOpKernelLibName(kEngineNameGeLocal); | ||
| 726 | + | ||
| 727 | + auto then_g = ToComputeGraph(then_graph); | ||
| 728 | + then_g->SetGraphUnknownFlag(true); | ||
| 729 | + then_g->FindNode("then_data")->GetOpDesc()->SetOpKernelLibName(kEngineNameGeLocal); | ||
| 730 | + then_g->FindNode("then_Node_Output")->GetOpDesc()->SetOpKernelLibName(kEngineNameGeLocal); | ||
| 731 | + | ||
| 732 | + auto else_g = ToComputeGraph(else_graph); | ||
| 733 | + else_g->SetGraphUnknownFlag(true); | ||
| 734 | + else_g->FindNode("else_data")->GetOpDesc()->SetOpKernelLibName(kEngineNameGeLocal); | ||
| 735 | + else_g->FindNode("else_Node_Output")->GetOpDesc()->SetOpKernelLibName(kEngineNameGeLocal); | ||
| 736 | + | ||
| 737 | + if_node->GetOpDesc()->RegisterSubgraphIrName("then", SubgraphType::kStatic); | ||
| 738 | + if_node->GetOpDesc()->RegisterSubgraphIrName("else", SubgraphType::kStatic); | ||
| 739 | + if_node->GetOpDesc()->AddSubgraphName(then_g->GetName()); | ||
| 740 | + if_node->GetOpDesc()->SetSubgraphInstanceName(0, then_g->GetName()); | ||
| 741 | + if_node->GetOpDesc()->AddSubgraphName(else_g->GetName()); | ||
| 742 | + if_node->GetOpDesc()->SetSubgraphInstanceName(1, else_g->GetName()); | ||
| 743 | + then_g->SetParentNode(if_node); | ||
| 744 | + then_g->SetParentGraph(root_graph); | ||
| 745 | + else_g->SetParentNode(if_node); | ||
| 746 | + else_g->SetParentGraph(root_graph); | ||
| 747 | + root_graph->AddSubgraph(then_g); | ||
| 748 | + root_graph->AddSubgraph(else_g); | ||
| 749 | + | ||
| 750 | + HostcpuEngineUpdatePass pass; | ||
| 751 | + NodeEngineMap node_atomic_engine_map; | ||
| 752 | + NodeEngineMap node_composite_engine_map; | ||
| 753 | + EXPECT_EQ(pass.Run(root_graph, node_atomic_engine_map, node_composite_engine_map), SUCCESS); | ||
| 754 | + unsetenv("ENABLE_RUNTIME_V2"); | ||
| 755 | +} | ||
| 756 | + | ||
| 757 | +TEST_F(UtestHostcpuEngineUpdatePass, Run_WithCaseGraph) { | ||
| 758 | + setenv("ENABLE_RUNTIME_V2", "1", 1); | ||
| 759 | + DEF_GRAPH(root) { | ||
| 760 | + auto data = OP_CFG(DATA).InCnt(0).OutCnt(1).TensorDesc(FORMAT_ND, DT_INT32, {1}); | ||
| 761 | + auto shape = OP_CFG(SHAPE).InCnt(1).OutCnt(1).TensorDesc(FORMAT_ND, DT_INT32, {}); | ||
| 762 | + auto case_op = OP_CFG(CASE).InCnt(1).OutCnt(1).TensorDesc(FORMAT_ND, DT_FLOAT, {-1}).Build("case_op"); | ||
| 763 | + auto net_output = OP_CFG(NETOUTPUT).InCnt(1).OutCnt(1).TensorDesc(FORMAT_ND, DT_FLOAT, {-1}); | ||
| 764 | + CHAIN(NODE("data", data)->NODE("shape", shape)->NODE(case_op)->NODE("Node_Output", net_output)); | ||
| 765 | + }; | ||
| 766 | + DEF_GRAPH(branch_graph) { | ||
| 767 | + auto data = | ||
| 768 | + OP_CFG(DATA).InCnt(0).OutCnt(1).Attr(ATTR_NAME_PARENT_NODE_INDEX, 0).TensorDesc(FORMAT_ND, DT_FLOAT, {1}); | ||
| 769 | + CHAIN(NODE("branch_data", data)->NODE("branch_Node_Output", NETOUTPUT)); | ||
| 770 | + }; | ||
| 771 | + auto root_graph = ToComputeGraph(root); | ||
| 772 | + root_graph->SetGraphUnknownFlag(true); | ||
| 773 | + root_graph->FindNode("data")->GetOpDesc()->SetOpKernelLibName(kEngineNameGeLocal); | ||
| 774 | + root_graph->FindNode("shape")->GetOpDesc()->SetOpKernelLibName(kEngineNameGeLocal); | ||
| 775 | + root_graph->FindNode("Node_Output")->GetOpDesc()->SetOpKernelLibName(kEngineNameGeLocal); | ||
| 776 | + (void)ge::AttrUtils::SetBool(root_graph->FindNode("data")->GetOpDesc(), ge::ATTR_NAME_HOST_TENSOR, true); | ||
| 777 | + auto case_node = root_graph->FindNode("case_op"); | ||
| 778 | + case_node->GetOpDesc()->SetOpKernelLibName(kEngineNameGeLocal); | ||
| 779 | + | ||
| 780 | + auto branch_g = ToComputeGraph(branch_graph); | ||
| 781 | + branch_g->SetGraphUnknownFlag(true); | ||
| 782 | + branch_g->FindNode("branch_data")->GetOpDesc()->SetOpKernelLibName(kEngineNameGeLocal); | ||
| 783 | + branch_g->FindNode("branch_Node_Output")->GetOpDesc()->SetOpKernelLibName(kEngineNameGeLocal); | ||
| 784 | + | ||
| 785 | + case_node->GetOpDesc()->RegisterSubgraphIrName("branches", SubgraphType::kStatic); | ||
| 786 | + case_node->GetOpDesc()->AddSubgraphName(branch_g->GetName()); | ||
| 787 | + case_node->GetOpDesc()->SetSubgraphInstanceName(0, branch_g->GetName()); | ||
| 788 | + branch_g->SetParentNode(case_node); | ||
| 789 | + branch_g->SetParentGraph(root_graph); | ||
| 790 | + root_graph->AddSubgraph(branch_g); | ||
| 791 | + | ||
| 792 | + HostcpuEngineUpdatePass pass; | ||
| 793 | + NodeEngineMap node_atomic_engine_map; | ||
| 794 | + NodeEngineMap node_composite_engine_map; | ||
| 795 | + EXPECT_EQ(pass.Run(root_graph, node_atomic_engine_map, node_composite_engine_map), SUCCESS); | ||
| 796 | + unsetenv("ENABLE_RUNTIME_V2"); | ||
| 797 | +} | ||
| 798 | + | ||
| 799 | +TEST_F(UtestHostcpuEngineUpdatePass, Run_WithStaticSubgraph) { | ||
| 800 | + setenv("ENABLE_RUNTIME_V2", "1", 1); | ||
| 801 | + DEF_GRAPH(root) { | ||
| 802 | + auto data = OP_CFG(DATA).InCnt(0).OutCnt(1).TensorDesc(FORMAT_ND, DT_INT32, {1}); | ||
| 803 | + auto shape = OP_CFG(SHAPE).InCnt(1).OutCnt(1).TensorDesc(FORMAT_ND, DT_INT32, {}); | ||
| 804 | + auto if_op = OP_CFG(IF).InCnt(2).OutCnt(1).TensorDesc(FORMAT_ND, DT_FLOAT, {-1}).Build("if_op"); | ||
| 805 | + auto net_output = OP_CFG(NETOUTPUT).InCnt(1).OutCnt(1).TensorDesc(FORMAT_ND, DT_FLOAT, {-1}); | ||
| 806 | + CHAIN(NODE("data", data)->NODE("shape", shape)->NODE(if_op)->NODE("Node_Output", net_output)); | ||
| 807 | + CHAIN(NODE("data")->EDGE(0, 1)->NODE(if_op)); | ||
| 808 | + }; | ||
| 809 | + DEF_GRAPH(then_graph) { | ||
| 810 | + auto data = | ||
| 811 | + OP_CFG(DATA).InCnt(0).OutCnt(1).Attr(ATTR_NAME_PARENT_NODE_INDEX, 0).TensorDesc(FORMAT_ND, DT_FLOAT, {1}); | ||
| 812 | + CHAIN(NODE("then_data", data)->NODE("then_Node_Output", NETOUTPUT)); | ||
| 813 | + }; | ||
| 814 | + auto root_graph = ToComputeGraph(root); | ||
| 815 | + root_graph->SetGraphUnknownFlag(true); | ||
| 816 | + root_graph->FindNode("data")->GetOpDesc()->SetOpKernelLibName(kEngineNameGeLocal); | ||
| 817 | + root_graph->FindNode("shape")->GetOpDesc()->SetOpKernelLibName(kEngineNameGeLocal); | ||
| 818 | + root_graph->FindNode("Node_Output")->GetOpDesc()->SetOpKernelLibName(kEngineNameGeLocal); | ||
| 819 | + (void)ge::AttrUtils::SetBool(root_graph->FindNode("data")->GetOpDesc(), ge::ATTR_NAME_HOST_TENSOR, true); | ||
| 820 | + auto if_node = root_graph->FindNode("if_op"); | ||
| 821 | + if_node->GetOpDesc()->SetOpKernelLibName(kEngineNameGeLocal); | ||
| 822 | + | ||
| 823 | + auto then_g = ToComputeGraph(then_graph); | ||
| 824 | + then_g->FindNode("then_data")->GetOpDesc()->SetOpKernelLibName(kEngineNameGeLocal); | ||
| 825 | + then_g->FindNode("then_Node_Output")->GetOpDesc()->SetOpKernelLibName(kEngineNameGeLocal); | ||
| 826 | + | ||
| 827 | + if_node->GetOpDesc()->RegisterSubgraphIrName("then", SubgraphType::kStatic); | ||
| 828 | + if_node->GetOpDesc()->RegisterSubgraphIrName("else", SubgraphType::kStatic); | ||
| 829 | + if_node->GetOpDesc()->AddSubgraphName(then_g->GetName()); | ||
| 830 | + if_node->GetOpDesc()->SetSubgraphInstanceName(0, then_g->GetName()); | ||
| 831 | + then_g->SetParentNode(if_node); | ||
| 832 | + then_g->SetParentGraph(root_graph); | ||
| 833 | + root_graph->AddSubgraph(then_g); | ||
| 834 | + | ||
| 835 | + HostcpuEngineUpdatePass pass; | ||
| 836 | + NodeEngineMap node_atomic_engine_map; | ||
| 837 | + NodeEngineMap node_composite_engine_map; | ||
| 838 | + EXPECT_EQ(pass.Run(root_graph, node_atomic_engine_map, node_composite_engine_map), SUCCESS); | ||
| 839 | + unsetenv("ENABLE_RUNTIME_V2"); | ||
| 840 | +} | ||
| 642 | } // namespace ge | 841 | } // namespace ge |
| @@ -414,4 +414,15 @@ TEST_F(UtestGraphPassesAssignRemovePass, RefNodeHasOutControlNodes_RefNodeIdMore | |||
| 414 | EXPECT_TRUE(assign_node_->GetOutAllNodes().empty()); | 414 | EXPECT_TRUE(assign_node_->GetOutAllNodes().empty()); |
| 415 | EXPECT_TRUE(assign_node_->GetInAllNodes().empty()); | 415 | EXPECT_TRUE(assign_node_->GetInAllNodes().empty()); |
| 416 | } | 416 | } |
| 417 | + | ||
| 418 | +TEST_F(UtestGraphPassesAssignRemovePass, test_assign_peer_anchor_null) { | ||
| 419 | + graph_ = std::make_shared<ComputeGraph>("test_graph"); | ||
| 420 | + GeTensorDesc tensor_desc(GeShape({2, 2, 2, 2}), ge::FORMAT_NCHW, ge::DT_FLOAT); | ||
| 421 | + auto assign_desc = std::make_shared<OpDesc>("assign", ASSIGN); | ||
| 422 | + assign_desc->AddInputDesc(tensor_desc); | ||
| 423 | + assign_desc->AddInputDesc(tensor_desc); | ||
| 424 | + assign_desc->AddOutputDesc(tensor_desc); | ||
| 425 | + assign_node_ = graph_->AddNode(assign_desc); | ||
| 426 | + EXPECT_EQ(pass_.Run(assign_node_), FAILED); | ||
| 427 | +} | ||
| 417 | } // namespace ge | 428 | } // namespace ge |
| @@ -829,4 +829,26 @@ TEST_F(UtestGraphPassesAtomicAddrCleanPass, test_ge_init_fail) { | |||
| 829 | GEInitialize(options); | 829 | GEInitialize(options); |
| 830 | } | 830 | } |
| 831 | 831 | ||
| 832 | +TEST_F(UtestGraphPassesAtomicAddrCleanPass, check_atomic_ops_kernel_ge_not_init) { | ||
| 833 | + GEFinalize(); | ||
| 834 | + AtomicAddrCleanPass pass; | ||
| 835 | + ComputeGraphPtr graph = std::make_shared<ComputeGraph>("test"); | ||
| 836 | + OpDescPtr op_desc = std::make_shared<OpDesc>("test_node", RELU); | ||
| 837 | + op_desc->AddInputDesc(GeTensorDesc()); | ||
| 838 | + op_desc->AddOutputDesc(GeTensorDesc()); | ||
| 839 | + NodePtr node = graph->AddNode(op_desc); | ||
| 840 | + EXPECT_FALSE(pass.CheckAtomicFromOpsKernel(node)); | ||
| 841 | + std::map<AscendString, AscendString> options; | ||
| 842 | + GEInitialize(options); | ||
| 843 | +} | ||
| 844 | + | ||
| 845 | +TEST_F(UtestGraphPassesAtomicAddrCleanPass, is_hcom_atomic_node_test) { | ||
| 846 | + AtomicAddrCleanPass pass; | ||
| 847 | + ComputeGraphPtr graph = std::make_shared<ComputeGraph>("test"); | ||
| 848 | + OpDescPtr op_desc = std::make_shared<OpDesc>("hcom_node", HCOMALLREDUCE); | ||
| 849 | + op_desc->AddInputDesc(GeTensorDesc()); | ||
| 850 | + op_desc->AddOutputDesc(GeTensorDesc()); | ||
| 851 | + NodePtr node = graph->AddNode(op_desc); | ||
| 852 | + EXPECT_FALSE(pass.IsHcomAtomicNode(node)); | ||
| 853 | +} | ||
| 832 | } // namespace ge | 854 | } // namespace ge |
| @@ -13,6 +13,8 @@ | |||
| 13 | 13 | ||
| 14 | 14 | ||
| 15 | 15 | ||
| 16 | + | ||
| 17 | + | ||
| 16 | 18 | ||
| 17 | using namespace testing; | 19 | using namespace testing; |
| 18 | using namespace ge; | 20 | using namespace ge; |
| @@ -122,4 +124,64 @@ TEST_F(UtestAttachStreamLabelPass, test_run_with_enter_node) { | |||
| 122 | AttachStreamLabelPass pass(false); | 124 | AttachStreamLabelPass pass(false); |
| 123 | EXPECT_EQ(pass.Run(graph), SUCCESS); | 125 | EXPECT_EQ(pass.Run(graph), SUCCESS); |
| 124 | } | 126 | } |
| 127 | + | ||
| 128 | +TEST_F(UtestAttachStreamLabelPass, test_stream_switch_no_data_input_fail) { | ||
| 129 | + DEF_GRAPH(g1) { | ||
| 130 | + auto sw_cfg = OP_CFG(STREAMSWITCH).Attr(ATTR_NAME_SWITCH_TRUE_BRANCH_FLAG, true); | ||
| 131 | + CHAIN(NODE("sw", sw_cfg)->NODE("netoutput", NETOUTPUT)); | ||
| 132 | + }; | ||
| 133 | + const auto graph = ToComputeGraph(g1); | ||
| 134 | + AttachStreamLabelPass pass(false); | ||
| 135 | + EXPECT_EQ(pass.Run(graph), FAILED); | ||
| 136 | +} | ||
| 137 | + | ||
| 138 | +TEST_F(UtestAttachStreamLabelPass, test_enter_with_stream_active_label) { | ||
| 139 | + DEF_GRAPH(g1) { | ||
| 140 | + CHAIN(NODE("data", DATA)->NODE("enter", ENTER)->NODE("add", ADD)->NODE("netoutput", NETOUTPUT)); | ||
| 141 | + }; | ||
| 142 | + const auto graph = ToComputeGraph(g1); | ||
| 143 | + auto active_desc = std::make_shared<OpDesc>("active", STREAMACTIVE); | ||
| 144 | + AttrUtils::SetStr(active_desc, ATTR_NAME_STREAM_LABEL, "test_label"); | ||
| 145 | + AttrUtils::SetListStr(active_desc, ATTR_NAME_ACTIVE_LABEL_LIST, {"test_label"}); | ||
| 146 | + auto active_node = graph->AddNode(active_desc); | ||
| 147 | + auto enter_node = graph->FindNode("enter"); | ||
| 148 | + GraphUtils::AddEdge(enter_node->GetOutControlAnchor(), active_node->GetInControlAnchor()); | ||
| 149 | + AttachStreamLabelPass pass(false); | ||
| 150 | + EXPECT_EQ(pass.Run(graph), SUCCESS); | ||
| 151 | +} | ||
| 152 | + | ||
| 153 | +TEST_F(UtestAttachStreamLabelPass, test_enter_with_non_stream_active_ctrl) { | ||
| 154 | + DEF_GRAPH(g1) { | ||
| 155 | + CHAIN(NODE("data", DATA)->NODE("enter", ENTER)->NODE("netoutput", NETOUTPUT)); | ||
| 156 | + }; | ||
| 157 | + const auto graph = ToComputeGraph(g1); | ||
| 158 | + auto add_desc = std::make_shared<OpDesc>("add_ctrl", ADD); | ||
| 159 | + GeTensorDesc tensor_desc; | ||
| 160 | + add_desc->AddInputDesc(tensor_desc); | ||
| 161 | + add_desc->AddOutputDesc(tensor_desc); | ||
| 162 | + auto add_node = graph->AddNode(add_desc); | ||
| 163 | + auto enter_node = graph->FindNode("enter"); | ||
| 164 | + GraphUtils::AddEdge(enter_node->GetOutControlAnchor(), add_node->GetInControlAnchor()); | ||
| 165 | + AttachStreamLabelPass pass(false); | ||
| 166 | + EXPECT_EQ(pass.Run(graph), SUCCESS); | ||
| 167 | +} | ||
| 168 | + | ||
| 169 | +TEST_F(UtestAttachStreamLabelPass, test_subgraph_with_active_label_list) { | ||
| 170 | + DEF_GRAPH(sub_1) { | ||
| 171 | + auto add_cfg = OP_CFG(ADD).Attr(ATTR_NAME_STREAM_LABEL, "label1"); | ||
| 172 | + CHAIN(NODE("const_0", CONSTANT)->NODE("add_0", add_cfg)->NODE("netoutput", NETOUTPUT)); | ||
| 173 | + }; | ||
| 174 | + DEF_GRAPH(g1) { | ||
| 175 | + auto active_cfg = OP_CFG(STREAMACTIVE).Attr(ATTR_NAME_ACTIVE_LABEL_LIST, std::vector<std::string>{"label1"}); | ||
| 176 | + CHAIN(NODE("data_0", DATA)->NODE("case", CASE, sub_1)->NODE("netoutput", NETOUTPUT)); | ||
| 177 | + CHAIN(NODE("case")->NODE("active", active_cfg)); | ||
| 178 | + }; | ||
| 179 | + sub_1.Layout(); | ||
| 180 | + const auto graph = ToComputeGraph(g1); | ||
| 181 | + AttachStreamLabelPass pass(true); | ||
| 182 | + EXPECT_EQ(pass.Run(graph), SUCCESS); | ||
| 183 | + for (auto &subgraph : graph->GetAllSubgraphs()) { | ||
| 184 | + EXPECT_EQ(pass.Run(subgraph), SUCCESS); | ||
| 185 | + } | ||
| 186 | +} | ||
| 125 | } // namespace ge | 187 | } // namespace ge |
| @@ -1264,4 +1264,40 @@ TEST_F(UTESTGraphPassesBasePass, run_with_filter_disabled_all) { | |||
| 1264 | EXPECT_EQ(ge_pass.Run(passes, true), SUCCESS); | 1264 | EXPECT_EQ(ge_pass.Run(passes, true), SUCCESS); |
| 1265 | GetThreadLocalContext().SetGraphOption(origin_graph_options); | 1265 | GetThreadLocalContext().SetGraphOption(origin_graph_options); |
| 1266 | } | 1266 | } |
| 1267 | + | ||
| 1268 | +class TestNullRepassPass : public BaseNodePass { | ||
| 1269 | + public: | ||
| 1270 | + Status Run(NodePtr &node) override { | ||
| 1271 | + AddRePassNode(NodePtr(nullptr)); | ||
| 1272 | + AddImmediateRePassNode(NodePtr(nullptr)); | ||
| 1273 | + return SUCCESS; | ||
| 1274 | + } | ||
| 1275 | +}; | ||
| 1276 | +REG_PASS_OPTION("TestNullRepassPass").LEVELS(OoLevel::kO3); | ||
| 1277 | + | ||
| 1278 | +TEST_F(UTESTGraphPassesBasePass, null_repass_node_test) { | ||
| 1279 | + NamesToPass names_to_pass; | ||
| 1280 | + auto test_pass = TestNullRepassPass(); | ||
| 1281 | + names_to_pass.push_back(std::make_pair("TestNullRepassPass", &test_pass)); | ||
| 1282 | + auto graph = BuildGraph1(); | ||
| 1283 | + auto ge_pass = GEPass(graph); | ||
| 1284 | + EXPECT_EQ(ge_pass.Run(names_to_pass), SUCCESS); | ||
| 1285 | +} | ||
| 1286 | + | ||
| 1287 | +class TestFailPass : public BaseNodePass { | ||
| 1288 | + public: | ||
| 1289 | + Status Run(NodePtr &node) override { | ||
| 1290 | + return FAILED; | ||
| 1291 | + } | ||
| 1292 | +}; | ||
| 1293 | +REG_PASS_OPTION("TestFailPass").LEVELS(OoLevel::kO3); | ||
| 1294 | + | ||
| 1295 | +TEST_F(UTESTGraphPassesBasePass, run_pass_on_node_failed) { | ||
| 1296 | + NamesToPass names_to_pass; | ||
| 1297 | + auto test_pass = TestFailPass(); | ||
| 1298 | + names_to_pass.push_back(std::make_pair("TestFailPass", &test_pass)); | ||
| 1299 | + auto graph = BuildGraph1(); | ||
| 1300 | + auto ge_pass = GEPass(graph); | ||
| 1301 | + EXPECT_EQ(ge_pass.Run(names_to_pass), FAILED); | ||
| 1302 | +} | ||
| 1267 | } // namespace ge | 1303 | } // namespace ge |
| @@ -761,4 +761,37 @@ TEST_F(UtestBufferPoolMemoryPass, run_without_buffer_pool_nodes_skip_test) { | |||
| 761 | Status ret = buffer_pool_mem_pass.Run(graph); | 761 | Status ret = buffer_pool_mem_pass.Run(graph); |
| 762 | EXPECT_EQ(ret, SUCCESS); | 762 | EXPECT_EQ(ret, SUCCESS); |
| 763 | } | 763 | } |
| 764 | + | ||
| 765 | +TEST_F(UtestBufferPoolMemoryPass, buffer_pool_cycle_detection_success_test) { | ||
| 766 | + ut::BufferPoolGraphBuilder builder("GraphWithCycle"); | ||
| 767 | + ge::ComputeGraphPtr graph = builder.BuildGraphWithMultiPrefetch(); | ||
| 768 | + | ||
| 769 | + auto prefetch1 = graph->FindNode("prefetch1"); | ||
| 770 | + auto prefetch2 = graph->FindNode("prefetch2"); | ||
| 771 | + EXPECT_NE(prefetch1, nullptr); | ||
| 772 | + EXPECT_NE(prefetch2, nullptr); | ||
| 773 | + | ||
| 774 | + GraphUtils::AddEdge(prefetch2->GetOutControlAnchor(), prefetch1->GetInControlAnchor()); | ||
| 775 | + | ||
| 776 | + BufferPoolMemoryPass buffer_pool_mem_pass; | ||
| 777 | + Status ret = buffer_pool_mem_pass.Run(graph); | ||
| 778 | + EXPECT_EQ(ret, SUCCESS); | ||
| 779 | + | ||
| 780 | + EXPECT_FALSE(prefetch2->GetOpDesc()->HasAttr(ATTR_NAME_BUFFER_POOL_ID)); | ||
| 781 | + EXPECT_FALSE(prefetch2->GetOpDesc()->HasAttr(ATTR_NAME_BUFFER_POOL_SIZE)); | ||
| 782 | +} | ||
| 783 | + | ||
| 784 | +TEST_F(UtestBufferPoolMemoryPass, buffer_pool_multi_output_with_stream_label_success_test) { | ||
| 785 | + ut::BufferPoolGraphBuilder builder("GraphWithMultiOutputAndStreamLabel"); | ||
| 786 | + ge::ComputeGraphPtr graph = builder.BuildGraphWithMultiOutputPrefetch(); | ||
| 787 | + | ||
| 788 | + auto prefetch1 = graph->FindNode("prefetch1"); | ||
| 789 | + EXPECT_NE(prefetch1, nullptr); | ||
| 790 | + (void)AttrUtils::SetStr(prefetch1->GetOpDesc(), ATTR_NAME_STREAM_LABEL, "stream_0"); | ||
| 791 | + | ||
| 792 | + BufferPoolMemoryPass buffer_pool_mem_pass; | ||
| 793 | + Status ret = buffer_pool_mem_pass.Run(graph); | ||
| 794 | + EXPECT_EQ(ret, SUCCESS); | ||
| 795 | + EXPECT_EQ(CheckAttr(graph), SUCCESS); | ||
| 796 | +} | ||
| 764 | } // namespace ge | 797 | } // namespace ge |
| @@ -444,3 +444,62 @@ TEST_F(UtestCondRemovePass, case_cond_not_int32_skip) { | |||
| 444 | auto ret = pass.Run(case_node); | 444 | auto ret = pass.Run(case_node); |
| 445 | EXPECT_EQ(ret, SUCCESS); | 445 | EXPECT_EQ(ret, SUCCESS); |
| 446 | } | 446 | } |
| 447 | + | ||
| 448 | +TEST_F(UtestCondRemovePass, case_cond_index_exceed_subgraph_size) { | ||
| 449 | + ComputeGraphPtr graph = std::make_shared<ComputeGraph>("g"); | ||
| 450 | + vector<int32_t> data_vec = {5}; | ||
| 451 | + GeTensorDesc tensor_desc(GeShape({1}), ge::FORMAT_NCHW, ge::DT_INT32); | ||
| 452 | + GeTensorPtr value_tensor = | ||
| 453 | + std::make_shared<GeTensor>(tensor_desc, (uint8_t *)data_vec.data(), data_vec.size() * sizeof(int32_t)); | ||
| 454 | + auto op_value = CreateOpDesc("const", CONSTANTOP, tensor_desc, 1, tensor_desc, 1); | ||
| 455 | + OpDescUtils::SetWeights(op_value, value_tensor); | ||
| 456 | + NodePtr data_node = graph->AddNode(op_value); | ||
| 457 | + NodePtr case_node = graph->AddNode(CreateOpDesc("case", CASE, tensor_desc, 3, tensor_desc, 1)); | ||
| 458 | + EXPECT_EQ(GraphUtils::AddEdge(data_node->GetOutDataAnchor(0), case_node->GetInDataAnchor(0)), SUCCESS); | ||
| 459 | + | ||
| 460 | + std::string case1_name = "case1"; | ||
| 461 | + ComputeGraphPtr case1_graph = std::make_shared<ComputeGraph>(case1_name); | ||
| 462 | + case1_graph->SetParentNode(case_node); | ||
| 463 | + case1_graph->SetParentGraph(graph); | ||
| 464 | + case_node->GetOpDesc()->AddSubgraphName(case1_name); | ||
| 465 | + case_node->GetOpDesc()->SetSubgraphInstanceName(0, case1_name); | ||
| 466 | + EXPECT_EQ(graph->AddSubgraph(case1_name, case1_graph), GRAPH_SUCCESS); | ||
| 467 | + | ||
| 468 | + CondRemovePass pass; | ||
| 469 | + auto ret = pass.Run(case_node); | ||
| 470 | + EXPECT_EQ(ret, SUCCESS); | ||
| 471 | +} | ||
| 472 | + | ||
| 473 | +TEST_F(UtestCondRemovePass, if_no_subgraph_fail) { | ||
| 474 | + ComputeGraphPtr graph = std::make_shared<ComputeGraph>("g"); | ||
| 475 | + vector<int32_t> data_vec = {1}; | ||
| 476 | + GeTensorDesc tensor_desc(GeShape(), ge::FORMAT_NCHW, ge::DT_INT32); | ||
| 477 | + GeTensorPtr value_tensor = | ||
| 478 | + std::make_shared<GeTensor>(tensor_desc, (uint8_t *)data_vec.data(), data_vec.size() * sizeof(int32_t)); | ||
| 479 | + auto op_value = CreateOpDesc("const", CONSTANTOP, tensor_desc, 1, tensor_desc, 1); | ||
| 480 | + OpDescUtils::SetWeights(op_value, value_tensor); | ||
| 481 | + NodePtr data_node = graph->AddNode(op_value); | ||
| 482 | + NodePtr if_node = graph->AddNode(CreateOpDesc("if", IF, tensor_desc, 2, tensor_desc, 1)); | ||
| 483 | + EXPECT_EQ(GraphUtils::AddEdge(data_node->GetOutDataAnchor(0), if_node->GetInDataAnchor(0)), SUCCESS); | ||
| 484 | + | ||
| 485 | + CondRemovePass pass; | ||
| 486 | + auto ret = pass.Run(if_node); | ||
| 487 | + EXPECT_EQ(ret, FAILED); | ||
| 488 | +} | ||
| 489 | + | ||
| 490 | +TEST_F(UtestCondRemovePass, case_no_subgraph_fail) { | ||
| 491 | + ComputeGraphPtr graph = std::make_shared<ComputeGraph>("g"); | ||
| 492 | + vector<int32_t> data_vec = {1}; | ||
| 493 | + GeTensorDesc tensor_desc(GeShape(), ge::FORMAT_NCHW, ge::DT_INT32); | ||
| 494 | + GeTensorPtr value_tensor = | ||
| 495 | + std::make_shared<GeTensor>(tensor_desc, (uint8_t *)data_vec.data(), data_vec.size() * sizeof(int32_t)); | ||
| 496 | + auto op_value = CreateOpDesc("const", CONSTANTOP, tensor_desc, 1, tensor_desc, 1); | ||
| 497 | + OpDescUtils::SetWeights(op_value, value_tensor); | ||
| 498 | + NodePtr data_node = graph->AddNode(op_value); | ||
| 499 | + NodePtr case_node = graph->AddNode(CreateOpDesc("case", CASE, tensor_desc, 2, tensor_desc, 1)); | ||
| 500 | + EXPECT_EQ(GraphUtils::AddEdge(data_node->GetOutDataAnchor(0), case_node->GetInDataAnchor(0)), SUCCESS); | ||
| 501 | + | ||
| 502 | + CondRemovePass pass; | ||
| 503 | + auto ret = pass.Run(case_node); | ||
| 504 | + EXPECT_EQ(ret, FAILED); | ||
| 505 | +} | ||
| @@ -1112,4 +1112,38 @@ TEST_F(UtestGraphPassesConstantFoldingPass, test_potential_folding_skip_constant | |||
| 1112 | EXPECT_EQ(pass.Run(names_to_pass), SUCCESS); | 1112 | EXPECT_EQ(pass.Run(names_to_pass), SUCCESS); |
| 1113 | EXPECT_NE(graph->FindNode("add"), nullptr); | 1113 | EXPECT_NE(graph->FindNode("add"), nullptr); |
| 1114 | } | 1114 | } |
| 1115 | + | ||
| 1116 | +TEST_F(UtestGraphPassesConstantFoldingPass, test_folding_with_switch_input) { | ||
| 1117 | + auto builder = ut::GraphBuilder("test"); | ||
| 1118 | + auto const1 = builder.AddNode("const1", CONSTANT, 0, 1); | ||
| 1119 | + SetWeightForConstNode(const1); | ||
| 1120 | + auto switch1 = builder.AddNode("switch1", SWITCH, 2, 2); | ||
| 1121 | + auto add1 = builder.AddNode("add1", ADD, 1, 1); | ||
| 1122 | + auto netoutput = builder.AddNode("netoutput", NETOUTPUT, 1, 0); | ||
| 1123 | + builder.AddDataEdge(const1, 0, switch1, 0); | ||
| 1124 | + builder.AddDataEdge(switch1, 0, add1, 0); | ||
| 1125 | + builder.AddDataEdge(add1, 0, netoutput, 0); | ||
| 1126 | + auto graph = builder.GetGraph(); | ||
| 1127 | + | ||
| 1128 | + names_to_pass.push_back({"ConstantFoldingPass", new ConstantFoldingPass}); | ||
| 1129 | + GEPass pass(graph); | ||
| 1130 | + EXPECT_EQ(pass.Run(names_to_pass), SUCCESS); | ||
| 1131 | +} | ||
| 1132 | + | ||
| 1133 | +TEST_F(UtestGraphPassesConstantFoldingPass, test_folding_with_data_input_no_output) { | ||
| 1134 | + auto builder = ut::GraphBuilder("test"); | ||
| 1135 | + auto data1 = builder.AddNode("data1", DATA, 0, 1); | ||
| 1136 | + auto const1 = builder.AddNode("const1", CONSTANT, 0, 1); | ||
| 1137 | + SetWeightForConstNode(const1); | ||
| 1138 | + auto add1 = builder.AddNode("add1", ADD, 2, 1); | ||
| 1139 | + auto netoutput = builder.AddNode("netoutput", NETOUTPUT, 1, 0); | ||
| 1140 | + builder.AddDataEdge(data1, 0, add1, 0); | ||
| 1141 | + builder.AddDataEdge(const1, 0, add1, 1); | ||
| 1142 | + builder.AddDataEdge(add1, 0, netoutput, 0); | ||
| 1143 | + auto graph = builder.GetGraph(); | ||
| 1144 | + | ||
| 1145 | + names_to_pass.push_back({"ConstantFoldingPass", new ConstantFoldingPass}); | ||
| 1146 | + GEPass pass(graph); | ||
| 1147 | + EXPECT_EQ(pass.Run(names_to_pass), SUCCESS); | ||
| 1148 | +} | ||
| 1115 | } // namespace ge | 1149 | } // namespace ge |
| @@ -350,3 +350,141 @@ TEST_F(UtestGraphPassesConstantFuseSamePass, success_const_has_data_5) { | |||
| 350 | auto const4 = graph->FindNode("const4"); | 350 | auto const4 = graph->FindNode("const4"); |
| 351 | EXPECT_EQ(const4, nullptr); | 351 | EXPECT_EQ(const4, nullptr); |
| 352 | } | 352 | } |
| 353 | + | ||
| 354 | +TEST_F(UtestGraphPassesConstantFuseSamePass, const_node_without_weight_attr) { | ||
| 355 | + auto builder = ut::GraphBuilder("g1"); | ||
| 356 | + auto const1 = builder.AddNode("const1", CONSTANT, 0, 1, FORMAT_NCHW, DT_FLOAT, {1}); | ||
| 357 | + auto const2 = builder.AddNode("const2", CONSTANT, 0, 1, FORMAT_NCHW, DT_FLOAT, {1}); | ||
| 358 | + auto add1 = builder.AddNode("add1", ADD, 2, 1); | ||
| 359 | + | ||
| 360 | + float weight[] = {0.0f}; | ||
| 361 | + GeTensorDesc weight_desc(GeShape({1}), FORMAT_NHWC, DT_FLOAT); | ||
| 362 | + GeTensorPtr tensor = std::make_shared<GeTensor>(weight_desc, (uint8_t *)weight, sizeof(weight)); | ||
| 363 | + int64_t origin_val_size = 1; | ||
| 364 | + (void)ge::AttrUtils::SetInt(tensor->MutableTensorDesc(), kOriginElementNumAttrName, origin_val_size); | ||
| 365 | + OpDescUtils::SetWeights(const1, {tensor}); | ||
| 366 | + | ||
| 367 | + builder.AddDataEdge(const1, 0, add1, 0); | ||
| 368 | + builder.AddDataEdge(const2, 0, add1, 1); | ||
| 369 | + | ||
| 370 | + ConstantFuseSamePass pass; | ||
| 371 | + EXPECT_EQ(pass.Run(builder.GetGraph()), SUCCESS); | ||
| 372 | +} | ||
| 373 | + | ||
| 374 | +TEST_F(UtestGraphPassesConstantFuseSamePass, const_node_origin_element_num_not_one) { | ||
| 375 | + auto builder = ut::GraphBuilder("g1"); | ||
| 376 | + auto const1 = builder.AddNode("const1", CONSTANT, 0, 1, FORMAT_NCHW, DT_FLOAT, {1}); | ||
| 377 | + auto const2 = builder.AddNode("const2", CONSTANT, 0, 1, FORMAT_NCHW, DT_FLOAT, {1}); | ||
| 378 | + auto add1 = builder.AddNode("add1", ADD, 2, 1); | ||
| 379 | + | ||
| 380 | + float weight[] = {0.0f}; | ||
| 381 | + GeTensorDesc weight_desc(GeShape({1}), FORMAT_NHWC, DT_FLOAT); | ||
| 382 | + GeTensorPtr tensor = std::make_shared<GeTensor>(weight_desc, (uint8_t *)weight, sizeof(weight)); | ||
| 383 | + int64_t origin_val_size = 2; | ||
| 384 | + (void)ge::AttrUtils::SetInt(tensor->MutableTensorDesc(), kOriginElementNumAttrName, origin_val_size); | ||
| 385 | + OpDescUtils::SetWeights(const1, {tensor}); | ||
| 386 | + OpDescUtils::SetWeights(const2, {tensor}); | ||
| 387 | + | ||
| 388 | + builder.AddDataEdge(const1, 0, add1, 0); | ||
| 389 | + builder.AddDataEdge(const2, 0, add1, 1); | ||
| 390 | + | ||
| 391 | + ConstantFuseSamePass pass; | ||
| 392 | + auto graph = builder.GetGraph(); | ||
| 393 | + EXPECT_EQ(pass.Run(graph), SUCCESS); | ||
| 394 | + EXPECT_EQ(graph->GetDirectNodesSize(), 3); | ||
| 395 | +} | ||
| 396 | + | ||
| 397 | +TEST_F(UtestGraphPassesConstantFuseSamePass, const_node_unsupported_dtype) { | ||
| 398 | + auto builder = ut::GraphBuilder("g1"); | ||
| 399 | + auto const1 = builder.AddNode("const1", CONSTANT, 0, 1, FORMAT_NCHW, DT_UNDEFINED, {1}); | ||
| 400 | + auto const2 = builder.AddNode("const2", CONSTANT, 0, 1, FORMAT_NCHW, DT_UNDEFINED, {1}); | ||
| 401 | + auto add1 = builder.AddNode("add1", ADD, 2, 1); | ||
| 402 | + | ||
| 403 | + float weight[] = {0.0f}; | ||
| 404 | + GeTensorDesc weight_desc(GeShape({1}), FORMAT_NHWC, DT_UNDEFINED); | ||
| 405 | + GeTensorPtr tensor = std::make_shared<GeTensor>(weight_desc, (uint8_t *)weight, sizeof(weight)); | ||
| 406 | + int64_t origin_val_size = 1; | ||
| 407 | + (void)ge::AttrUtils::SetInt(tensor->MutableTensorDesc(), kOriginElementNumAttrName, origin_val_size); | ||
| 408 | + OpDescUtils::SetWeights(const1, {tensor}); | ||
| 409 | + OpDescUtils::SetWeights(const2, {tensor}); | ||
| 410 | + | ||
| 411 | + builder.AddDataEdge(const1, 0, add1, 0); | ||
| 412 | + builder.AddDataEdge(const2, 0, add1, 1); | ||
| 413 | + | ||
| 414 | + ConstantFuseSamePass pass; | ||
| 415 | + auto graph = builder.GetGraph(); | ||
| 416 | + EXPECT_EQ(pass.Run(graph), SUCCESS); | ||
| 417 | + EXPECT_EQ(graph->GetDirectNodesSize(), 3); | ||
| 418 | +} | ||
| 419 | + | ||
| 420 | +TEST_F(UtestGraphPassesConstantFuseSamePass, const_node_no_out_data_edge) { | ||
| 421 | + auto builder = ut::GraphBuilder("g1"); | ||
| 422 | + auto const1 = builder.AddNode("const1", CONSTANT, 0, 1, FORMAT_NCHW, DT_FLOAT, {1}); | ||
| 423 | + auto const2 = builder.AddNode("const2", CONSTANT, 0, 1, FORMAT_NCHW, DT_FLOAT, {1}); | ||
| 424 | + auto add1 = builder.AddNode("add1", ADD, 2, 1); | ||
| 425 | + | ||
| 426 | + float weight[] = {0.0f}; | ||
| 427 | + GeTensorDesc weight_desc(GeShape({1}), FORMAT_NHWC, DT_FLOAT); | ||
| 428 | + GeTensorPtr tensor = std::make_shared<GeTensor>(weight_desc, (uint8_t *)weight, sizeof(weight)); | ||
| 429 | + int64_t origin_val_size = 1; | ||
| 430 | + (void)ge::AttrUtils::SetInt(tensor->MutableTensorDesc(), kOriginElementNumAttrName, origin_val_size); | ||
| 431 | + OpDescUtils::SetWeights(const1, {tensor}); | ||
| 432 | + OpDescUtils::SetWeights(const2, {tensor}); | ||
| 433 | + | ||
| 434 | + builder.AddDataEdge(const1, 0, add1, 0); | ||
| 435 | + builder.AddDataEdge(const2, 0, add1, 1); | ||
| 436 | + | ||
| 437 | + auto const3 = builder.AddNode("const3", CONSTANT, 0, 1, FORMAT_NCHW, DT_FLOAT, {1}); | ||
| 438 | + OpDescUtils::SetWeights(const3, {tensor}); | ||
| 439 | + (void)ge::AttrUtils::SetInt(tensor->MutableTensorDesc(), kOriginElementNumAttrName, origin_val_size); | ||
| 440 | + | ||
| 441 | + ConstantFuseSamePass pass; | ||
| 442 | + auto graph = builder.GetGraph(); | ||
| 443 | + EXPECT_EQ(pass.Run(graph), SUCCESS); | ||
| 444 | +} | ||
| 445 | + | ||
| 446 | +TEST_F(UtestGraphPassesConstantFuseSamePass, const_node_with_in_control_edge) { | ||
| 447 | + auto builder = ut::GraphBuilder("g1"); | ||
| 448 | + auto const1 = builder.AddNode("const1", CONSTANT, 0, 1, FORMAT_NCHW, DT_FLOAT, {1}); | ||
| 449 | + auto const2 = builder.AddNode("const2", CONSTANT, 0, 1, FORMAT_NCHW, DT_FLOAT, {1}); | ||
| 450 | + auto add1 = builder.AddNode("add1", ADD, 2, 1); | ||
| 451 | + auto ctrl_node = builder.AddNode("ctrl_node", NOOP, 0, 0); | ||
| 452 | + | ||
| 453 | + float weight[] = {0.0f}; | ||
| 454 | + GeTensorDesc weight_desc(GeShape({1}), FORMAT_NHWC, DT_FLOAT); | ||
| 455 | + GeTensorPtr tensor = std::make_shared<GeTensor>(weight_desc, (uint8_t *)weight, sizeof(weight)); | ||
| 456 | + int64_t origin_val_size = 1; | ||
| 457 | + (void)ge::AttrUtils::SetInt(tensor->MutableTensorDesc(), kOriginElementNumAttrName, origin_val_size); | ||
| 458 | + OpDescUtils::SetWeights(const1, {tensor}); | ||
| 459 | + OpDescUtils::SetWeights(const2, {tensor}); | ||
| 460 | + | ||
| 461 | + builder.AddDataEdge(const1, 0, add1, 0); | ||
| 462 | + builder.AddDataEdge(const2, 0, add1, 1); | ||
| 463 | + builder.AddControlEdge(ctrl_node, const1); | ||
| 464 | + | ||
| 465 | + ConstantFuseSamePass pass; | ||
| 466 | + auto graph = builder.GetGraph(); | ||
| 467 | + EXPECT_EQ(pass.Run(graph), SUCCESS); | ||
| 468 | +} | ||
| 469 | + | ||
| 470 | +TEST_F(UtestGraphPassesConstantFuseSamePass, const_fuse_with_duplication_exclusion) { | ||
| 471 | + auto builder = ut::GraphBuilder("g1"); | ||
| 472 | + auto const1 = builder.AddNode("const1", CONSTANT, 0, 1, FORMAT_NCHW, DT_FLOAT, {1}); | ||
| 473 | + auto const2 = builder.AddNode("const2", CONSTANT, 0, 1, FORMAT_NCHW, DT_FLOAT, {1}); | ||
| 474 | + auto add1 = builder.AddNode("add1", ADD, 2, 1); | ||
| 475 | + | ||
| 476 | + float weight[] = {0.0f}; | ||
| 477 | + GeTensorDesc weight_desc(GeShape({1}), FORMAT_NHWC, DT_FLOAT); | ||
| 478 | + GeTensorPtr tensor = std::make_shared<GeTensor>(weight_desc, (uint8_t *)weight, sizeof(weight)); | ||
| 479 | + int64_t origin_val_size = 1; | ||
| 480 | + (void)ge::AttrUtils::SetInt(tensor->MutableTensorDesc(), kOriginElementNumAttrName, origin_val_size); | ||
| 481 | + OpDescUtils::SetWeights(const1, {tensor}); | ||
| 482 | + OpDescUtils::SetWeights(const2, {tensor}); | ||
| 483 | + | ||
| 484 | + builder.AddDataEdge(const1, 0, add1, 0); | ||
| 485 | + builder.AddDataEdge(const2, 0, add1, 0); | ||
| 486 | + | ||
| 487 | + ConstantFuseSamePass pass; | ||
| 488 | + auto graph = builder.GetGraph(); | ||
| 489 | + EXPECT_EQ(pass.Run(graph), SUCCESS); | ||
| 490 | +} | ||
| @@ -30,6 +30,23 @@ class UtestControlTriggerPass : public testing::Test { | |||
| 30 | void SetUp() {} | 30 | void SetUp() {} |
| 31 | void TearDown() {} | 31 | void TearDown() {} |
| 32 | }; | 32 | }; |
| 33 | + | ||
| 34 | +TEST_F(UtestControlTriggerPass, RunEmptyGraph) { | ||
| 35 | + ComputeGraphPtr graph = std::make_shared<ComputeGraph>("empty"); | ||
| 36 | + ControlTriggerPass pass; | ||
| 37 | + EXPECT_EQ(pass.Run(graph), SUCCESS); | ||
| 38 | +} | ||
| 39 | + | ||
| 40 | +TEST_F(UtestControlTriggerPass, ClearStatusSuccess) { | ||
| 41 | + ControlTriggerPass pass; | ||
| 42 | + EXPECT_EQ(pass.ClearStatus(), SUCCESS); | ||
| 43 | +} | ||
| 44 | + | ||
| 45 | +TEST_F(UtestControlTriggerPass, FindPredInputNullNode) { | ||
| 46 | + ControlTriggerPass pass; | ||
| 47 | + NodePtr null_node = nullptr; | ||
| 48 | + EXPECT_EQ(pass.FindPredInput(null_node), INTERNAL_ERROR); | ||
| 49 | +} | ||
| 33 | namespace { | 50 | namespace { |
| 34 | ComputeGraphPtr BuildNormalGraph() { | 51 | ComputeGraphPtr BuildNormalGraph() { |
| 35 | const auto sub1_data_0 = OP_CFG(DATA).Attr(ATTR_NAME_PARENT_NODE_INDEX, 0); | 52 | const auto sub1_data_0 = OP_CFG(DATA).Attr(ATTR_NAME_PARENT_NODE_INDEX, 0); |
| @@ -420,4 +420,35 @@ TEST_F(CreateSubgraphWithScopePassTest, data_node_with_scope_index_failed) { | |||
| 420 | AttrUtils::SetInt(data0->GetOpDesc(), ATTR_NAME_SUBGRAPH_MULTI_DIMS_INDEX, 0); | 420 | AttrUtils::SetInt(data0->GetOpDesc(), ATTR_NAME_SUBGRAPH_MULTI_DIMS_INDEX, 0); |
| 421 | EXPECT_EQ(pass_manager.Run(graph), PARAM_INVALID); | 421 | EXPECT_EQ(pass_manager.Run(graph), PARAM_INVALID); |
| 422 | } | 422 | } |
| 423 | + | ||
| 424 | +TEST_F(CreateSubgraphWithScopePassTest, run_with_two_nodes_in_graph) { | ||
| 425 | + std::map<std::string, std::string> options; | ||
| 426 | + GetThreadLocalContext().SetGlobalOption(options); | ||
| 427 | + PassManager pass_manager; | ||
| 428 | + pass_manager.AddPass("CreateSubGraphWithScopePass", new (std::nothrow) CreateSubGraphWithScopePass); | ||
| 429 | + ComputeGraphPtr graph = std::make_shared<ComputeGraph>("test_graph"); | ||
| 430 | + auto data0 = MakeNode(graph, 0, 1, "data_0", DATA); | ||
| 431 | + GeTensorDesc tensor_desc0(GeShape({-1, 3, 224, 224})); | ||
| 432 | + data0->GetOpDesc()->UpdateOutputDesc(0, tensor_desc0); | ||
| 433 | + auto netoutput = MakeNode(graph, 1, 0, "netoutput", NETOUTPUT); | ||
| 434 | + netoutput->GetOpDesc()->UpdateInputDesc(0, tensor_desc0); | ||
| 435 | + GraphUtils::AddEdge(data0->GetOutDataAnchor(0), netoutput->GetInDataAnchor(0)); | ||
| 436 | + EXPECT_EQ(pass_manager.Run(graph), SUCCESS); | ||
| 437 | +} | ||
| 438 | + | ||
| 439 | +TEST_F(CreateSubgraphWithScopePassTest, run_with_multibatch_config) { | ||
| 440 | + std::map<std::string, std::string> options; | ||
| 441 | + GetThreadLocalContext().SetGlobalOption(options); | ||
| 442 | + PassManager pass_manager; | ||
| 443 | + pass_manager.AddPass("CreateSubGraphWithScopePass", new (std::nothrow) CreateSubGraphWithScopePass); | ||
| 444 | + ComputeGraphPtr graph = std::make_shared<ComputeGraph>("test_graph"); | ||
| 445 | + auto data0 = MakeNode(graph, 0, 1, "data_0", DATA); | ||
| 446 | + GeTensorDesc tensor_desc0(GeShape({-1, 3, 224, 224})); | ||
| 447 | + data0->GetOpDesc()->UpdateOutputDesc(0, tensor_desc0); | ||
| 448 | + auto netoutput = MakeNode(graph, 1, 0, "netoutput", NETOUTPUT); | ||
| 449 | + netoutput->GetOpDesc()->UpdateInputDesc(0, tensor_desc0); | ||
| 450 | + GraphUtils::AddEdge(data0->GetOutDataAnchor(0), netoutput->GetInDataAnchor(0)); | ||
| 451 | + AttrUtils::SetListStr(data0->GetOpDesc(), "_user_defined_batch_info", {"1", "2", "4"}); | ||
| 452 | + EXPECT_EQ(pass_manager.Run(graph), SUCCESS); | ||
| 453 | +} | ||
| 423 | } // namespace ge | 454 | } // namespace ge |
| @@ -15,6 +15,7 @@ | |||
| 15 | 15 | ||
| 16 | 16 | ||
| 17 | 17 | ||
| 18 | + | ||
| 18 | 19 | ||
| 19 | namespace ge { | 20 | namespace ge { |
| 20 | class UtestDataFlowPreparePass : public testing::Test { | 21 | class UtestDataFlowPreparePass : public testing::Test { |
| @@ -123,4 +124,92 @@ TEST_F(UtestDataFlowPreparePass, set_handle_succ) { | |||
| 123 | (void)AttrUtils::GetInt(stack2->GetOpDesc(), ATTR_NAME_DATA_FLOW_MAX_SIZE, max_size2); | 124 | (void)AttrUtils::GetInt(stack2->GetOpDesc(), ATTR_NAME_DATA_FLOW_MAX_SIZE, max_size2); |
| 124 | EXPECT_EQ(max_size2, 200); | 125 | EXPECT_EQ(max_size2, 200); |
| 125 | } | 126 | } |
| 127 | + | ||
| 128 | +TEST_F(UtestDataFlowPreparePass, data_flow_max_size_empty_weight_test) { | ||
| 129 | + GeTensorDesc tensor_desc(GeShape(), FORMAT_ND, DT_INT32); | ||
| 130 | + GeTensorPtr const_tensor = std::make_shared<GeTensor>(tensor_desc); | ||
| 131 | + const auto const1 = OP_CFG(CONSTANT).OutCnt(1).Weight(const_tensor); | ||
| 132 | + DEF_GRAPH(g1) { | ||
| 133 | + CHAIN(NODE("const1", const1)->EDGE(0, 0)->NODE("stack1", STACK)); | ||
| 134 | + }; | ||
| 135 | + const auto graph = ToGeGraph(g1); | ||
| 136 | + const auto compute_graph = GraphUtilsEx::GetComputeGraph(graph); | ||
| 137 | + compute_graph->TopologicalSorting(); | ||
| 138 | + const map<string, uint32_t> name_index = {{"max_size", 0}}; | ||
| 139 | + for (const auto &node : compute_graph->GetAllNodes()) { | ||
| 140 | + if (node->GetType() == STACK && node->GetOpDesc() != nullptr) { | ||
| 141 | + node->GetOpDesc()->UpdateInputName(name_index); | ||
| 142 | + } | ||
| 143 | + } | ||
| 144 | + DataFlowPreparePass pass; | ||
| 145 | + EXPECT_EQ(pass.Run(compute_graph), SUCCESS); | ||
| 146 | +} | ||
| 147 | + | ||
| 148 | +TEST_F(UtestDataFlowPreparePass, data_flow_max_size_not_int32_test) { | ||
| 149 | + float val = 1.0f; | ||
| 150 | + GeTensorDesc tensor_desc(GeShape(), FORMAT_ND, DT_FLOAT); | ||
| 151 | + GeTensorPtr const_tensor = std::make_shared<GeTensor>(tensor_desc, reinterpret_cast<uint8_t *>(&val), sizeof(float)); | ||
| 152 | + const auto const1 = OP_CFG(CONSTANT).OutCnt(1).Weight(const_tensor); | ||
| 153 | + DEF_GRAPH(g1) { | ||
| 154 | + CHAIN(NODE("const1", const1)->EDGE(0, 0)->NODE("stack1", STACK)); | ||
| 155 | + }; | ||
| 156 | + const auto graph = ToGeGraph(g1); | ||
| 157 | + const auto compute_graph = GraphUtilsEx::GetComputeGraph(graph); | ||
| 158 | + compute_graph->TopologicalSorting(); | ||
| 159 | + const map<string, uint32_t> name_index = {{"max_size", 0}}; | ||
| 160 | + for (const auto &node : compute_graph->GetAllNodes()) { | ||
| 161 | + if (node->GetType() == STACK && node->GetOpDesc() != nullptr) { | ||
| 162 | + node->GetOpDesc()->UpdateInputName(name_index); | ||
| 163 | + } | ||
| 164 | + } | ||
| 165 | + DataFlowPreparePass pass; | ||
| 166 | + EXPECT_EQ(pass.Run(compute_graph), SUCCESS); | ||
| 167 | +} | ||
| 168 | + | ||
| 169 | +TEST_F(UtestDataFlowPreparePass, data_flow_max_size_not_const_test) { | ||
| 170 | + DEF_GRAPH(g1) { | ||
| 171 | + CHAIN(NODE("data1", DATA)->EDGE(0, 0)->NODE("stack1", STACK)); | ||
| 172 | + }; | ||
| 173 | + const auto graph = ToGeGraph(g1); | ||
| 174 | + const auto compute_graph = GraphUtilsEx::GetComputeGraph(graph); | ||
| 175 | + compute_graph->TopologicalSorting(); | ||
| 176 | + const map<string, uint32_t> name_index = {{"max_size", 0}}; | ||
| 177 | + for (const auto &node : compute_graph->GetAllNodes()) { | ||
| 178 | + if (node->GetType() == STACK && node->GetOpDesc() != nullptr) { | ||
| 179 | + node->GetOpDesc()->UpdateInputName(name_index); | ||
| 180 | + } | ||
| 181 | + } | ||
| 182 | + DataFlowPreparePass pass; | ||
| 183 | + EXPECT_EQ(pass.Run(compute_graph), SUCCESS); | ||
| 184 | +} | ||
| 185 | + | ||
| 186 | +TEST_F(UtestDataFlowPreparePass, data_flow_get_resource_input_fail_test) { | ||
| 187 | + int32_t val = 100; | ||
| 188 | + GeTensorDesc tensor_desc(GeShape(), FORMAT_ND, DT_INT32); | ||
| 189 | + GeTensorPtr const_tensor = | ||
| 190 | + std::make_shared<GeTensor>(tensor_desc, reinterpret_cast<uint8_t *>(&val), sizeof(int32_t)); | ||
| 191 | + const auto const1 = OP_CFG(CONSTANT).OutCnt(1).Weight(const_tensor); | ||
| 192 | + const auto stackpush1 = OP_CFG(STACKPUSH).InCnt(2).OutCnt(1); | ||
| 193 | + DEF_GRAPH(g1) { | ||
| 194 | + CHAIN(NODE("const1", const1)->EDGE(0, 1)->NODE("stackpush1", stackpush1)); | ||
| 195 | + }; | ||
| 196 | + const auto graph = ToGeGraph(g1); | ||
| 197 | + const auto compute_graph = GraphUtilsEx::GetComputeGraph(graph); | ||
| 198 | + compute_graph->TopologicalSorting(); | ||
| 199 | + DataFlowPreparePass pass; | ||
| 200 | + EXPECT_EQ(pass.Run(compute_graph), INTERNAL_ERROR); | ||
| 201 | +} | ||
| 202 | + | ||
| 203 | +TEST_F(UtestDataFlowPreparePass, data_flow_data_node_input_test) { | ||
| 204 | + const auto data1 = OP_CFG(DATA).OutCnt(1); | ||
| 205 | + const auto stackpush1 = OP_CFG(STACKPUSH).InCnt(2).OutCnt(1); | ||
| 206 | + DEF_GRAPH(g1) { | ||
| 207 | + CHAIN(NODE("data1", data1)->EDGE(0, 0)->NODE("stackpush1", stackpush1)); | ||
| 208 | + }; | ||
| 209 | + const auto graph = ToGeGraph(g1); | ||
| 210 | + const auto compute_graph = GraphUtilsEx::GetComputeGraph(graph); | ||
| 211 | + compute_graph->TopologicalSorting(); | ||
| 212 | + DataFlowPreparePass pass; | ||
| 213 | + EXPECT_EQ(pass.Run(compute_graph), SUCCESS); | ||
| 214 | +} | ||
| 126 | } // namespace ge | 215 | } // namespace ge |
| @@ -436,4 +436,56 @@ TEST_F(UtestDataPass, WhileBodyWithLegacyInstanceNameMapsOutput) { | |||
| 436 | ASSERT_TRUE(AttrUtils::GetInt(input_desc, ATTR_NAME_PARENT_NODE_INDEX, parent_index)); | 436 | ASSERT_TRUE(AttrUtils::GetInt(input_desc, ATTR_NAME_PARENT_NODE_INDEX, parent_index)); |
| 437 | EXPECT_EQ(parent_index, 0); | 437 | EXPECT_EQ(parent_index, 0); |
| 438 | } | 438 | } |
| 439 | + | ||
| 440 | +TEST_F(UtestDataPass, data_node_with_parent_index_returns_success) { | ||
| 441 | + ut::GraphBuilder builder = ut::GraphBuilder("root_graph"); | ||
| 442 | + auto data = builder.AddNode("Data1", "Data", 1, 1); | ||
| 443 | + auto case1 = builder.AddNode("case1", "Case", 1, 1); | ||
| 444 | + auto netoutput = builder.AddNode("netoutput", "NetOutput", 1, 0); | ||
| 445 | + builder.AddDataEdge(data, 0, case1, 0); | ||
| 446 | + builder.AddDataEdge(case1, 0, netoutput, 0); | ||
| 447 | + auto root_graph = builder.GetGraph(); | ||
| 448 | + | ||
| 449 | + ut::GraphBuilder sub_builder = ut::GraphBuilder("sub_graph1"); | ||
| 450 | + auto sub_data = sub_builder.AddNode("sub_data1", "Data", 1, 1); | ||
| 451 | + AttrUtils::SetInt(sub_data->GetOpDesc(), ATTR_NAME_PARENT_NODE_INDEX, 0); | ||
| 452 | + auto sub_output = sub_builder.AddNode("sub_output1", "NetOutput", 1, 0); | ||
| 453 | + sub_builder.AddDataEdge(sub_data, 0, sub_output, 0); | ||
| 454 | + auto subgraph = sub_builder.GetGraph(); | ||
| 455 | + | ||
| 456 | + auto case_node = root_graph->FindNode("case1"); | ||
| 457 | + auto case_desc = case_node->GetOpDesc(); | ||
| 458 | + case_desc->AddSubgraphName("sub_graph1"); | ||
| 459 | + case_desc->SetSubgraphInstanceName(0, "sub_graph1"); | ||
| 460 | + subgraph->SetParentNode(case_node); | ||
| 461 | + subgraph->SetParentGraph(root_graph); | ||
| 462 | + root_graph->AddSubgraph("sub_graph1", subgraph); | ||
| 463 | + | ||
| 464 | + DataPass pass; | ||
| 465 | + EXPECT_EQ(pass.Run(subgraph), SUCCESS); | ||
| 466 | +} | ||
| 467 | + | ||
| 468 | +TEST_F(UtestDataPass, flow_node_subgraph_success) { | ||
| 469 | + ut::GraphBuilder builder = ut::GraphBuilder("root_graph"); | ||
| 470 | + auto flow_node = builder.AddNode("flow1", "FlowNode", 1, 1); | ||
| 471 | + auto netoutput = builder.AddNode("netoutput", "NetOutput", 1, 0); | ||
| 472 | + builder.AddDataEdge(flow_node, 0, netoutput, 0); | ||
| 473 | + auto root_graph = builder.GetGraph(); | ||
| 474 | + | ||
| 475 | + ut::GraphBuilder sub_builder = ut::GraphBuilder("sub_flow"); | ||
| 476 | + auto sub_data = sub_builder.AddNode("sub_data", "Data", 1, 1); | ||
| 477 | + auto sub_output = sub_builder.AddNode("sub_output", "NetOutput", 1, 0); | ||
| 478 | + sub_builder.AddDataEdge(sub_data, 0, sub_output, 0); | ||
| 479 | + auto subgraph = sub_builder.GetGraph(); | ||
| 480 | + | ||
| 481 | + auto flow_desc = root_graph->FindNode("flow1")->GetOpDesc(); | ||
| 482 | + flow_desc->AddSubgraphName("sub_flow"); | ||
| 483 | + flow_desc->SetSubgraphInstanceName(0, "sub_flow"); | ||
| 484 | + subgraph->SetParentNode(root_graph->FindNode("flow1")); | ||
| 485 | + subgraph->SetParentGraph(root_graph); | ||
| 486 | + root_graph->AddSubgraph("sub_flow", subgraph); | ||
| 487 | + | ||
| 488 | + DataPass pass; | ||
| 489 | + EXPECT_EQ(pass.Run(subgraph), SUCCESS); | ||
| 490 | +} | ||
| 439 | } // namespace ge | 491 | } // namespace ge |
| @@ -447,4 +447,37 @@ TEST_F(UtestGraphPassesFlowCtrlPass, multi_iter_success) { | |||
| 447 | EXPECT_EQ(ret, SUCCESS); | 447 | EXPECT_EQ(ret, SUCCESS); |
| 448 | EXPECT_EQ(graph->GetDirectNodesSize(), 8); | 448 | EXPECT_EQ(graph->GetDirectNodesSize(), 8); |
| 449 | } | 449 | } |
| 450 | + | ||
| 451 | +TEST_F(UtestGraphPassesFlowCtrlPass, check_multi_dataset_true) { | ||
| 452 | + ge::ComputeGraphPtr graph = std::make_shared<ge::ComputeGraph>("test_multi_dataset"); | ||
| 453 | + GeTensorDesc tensor_desc; | ||
| 454 | + auto iter1_desc = std::make_shared<OpDesc>("iter1", FRAMEWORKOP); | ||
| 455 | + iter1_desc->AddOutputDesc(tensor_desc); | ||
| 456 | + AttrUtils::SetStr(iter1_desc, ATTR_NAME_FRAMEWORK_ORIGINAL_TYPE, "IteratorV2"); | ||
| 457 | + graph->AddNode(iter1_desc); | ||
| 458 | + | ||
| 459 | + auto iter2_desc = std::make_shared<OpDesc>("iter2", FRAMEWORKOP); | ||
| 460 | + iter2_desc->AddOutputDesc(tensor_desc); | ||
| 461 | + AttrUtils::SetStr(iter2_desc, ATTR_NAME_FRAMEWORK_ORIGINAL_TYPE, "IteratorV2"); | ||
| 462 | + graph->AddNode(iter2_desc); | ||
| 463 | + | ||
| 464 | + FlowCtrlPass flow_ctrl_pass; | ||
| 465 | + EXPECT_EQ(flow_ctrl_pass.CheckMultiDataSet(graph), true); | ||
| 466 | +} | ||
| 467 | + | ||
| 468 | +TEST_F(UtestGraphPassesFlowCtrlPass, check_multi_dataset_false) { | ||
| 469 | + ge::ComputeGraphPtr graph = std::make_shared<ge::ComputeGraph>("test_single_dataset"); | ||
| 470 | + GeTensorDesc tensor_desc; | ||
| 471 | + auto iter1_desc = std::make_shared<OpDesc>("iter1", FRAMEWORKOP); | ||
| 472 | + iter1_desc->AddOutputDesc(tensor_desc); | ||
| 473 | + AttrUtils::SetStr(iter1_desc, ATTR_NAME_FRAMEWORK_ORIGINAL_TYPE, "IteratorV2"); | ||
| 474 | + graph->AddNode(iter1_desc); | ||
| 475 | + | ||
| 476 | + auto normal_desc = std::make_shared<OpDesc>("normal", DATA); | ||
| 477 | + normal_desc->AddOutputDesc(tensor_desc); | ||
| 478 | + graph->AddNode(normal_desc); | ||
| 479 | + | ||
| 480 | + FlowCtrlPass flow_ctrl_pass; | ||
| 481 | + EXPECT_EQ(flow_ctrl_pass.CheckMultiDataSet(graph), false); | ||
| 482 | +} | ||
| 450 | } // namespace ge | 483 | } // namespace ge |
| @@ -357,3 +357,353 @@ TEST_F(UtestFoldingKernelAddKernel, ComputeComplex64OverflowFailed) { | |||
| 357 | Status status = kernel->Compute(op_desc_ptr, input, v_output); | 357 | Status status = kernel->Compute(op_desc_ptr, input, v_output); |
| 358 | EXPECT_NE(status, SUCCESS); | 358 | EXPECT_NE(status, SUCCESS); |
| 359 | } | 359 | } |
| 360 | + | ||
| 361 | +TEST_F(UtestFoldingKernelAddKernel, AddInt8Success) { | ||
| 362 | + OpDescPtr op_desc_ptr = std::make_shared<OpDesc>("Add", ADD); | ||
| 363 | + GeTensorDesc output_desc1; | ||
| 364 | + op_desc_ptr->AddOutputDesc("y", output_desc1); | ||
| 365 | + | ||
| 366 | + vector<int64_t> dims_vec_0 = {2}; | ||
| 367 | + vector<int8_t> data_vec_0 = {2, 3}; | ||
| 368 | + GeTensorDesc tensor_desc_0(GeShape(dims_vec_0), FORMAT_NCHW, DT_INT8); | ||
| 369 | + ConstGeTensorPtr tensor_0 = | ||
| 370 | + std::make_shared<GeTensor>(tensor_desc_0, (uint8_t *)data_vec_0.data(), data_vec_0.size() * sizeof(int8_t)); | ||
| 371 | + | ||
| 372 | + vector<int64_t> dims_vec_1 = {2}; | ||
| 373 | + vector<int8_t> data_vec_1 = {5, 6}; | ||
| 374 | + GeTensorDesc tensor_desc_1(GeShape(dims_vec_1), FORMAT_NCHW, DT_INT8); | ||
| 375 | + ConstGeTensorPtr tensor_1 = | ||
| 376 | + std::make_shared<GeTensor>(tensor_desc_1, (uint8_t *)data_vec_1.data(), data_vec_1.size() * sizeof(int8_t)); | ||
| 377 | + | ||
| 378 | + vector<ConstGeTensorPtr> input = {tensor_0, tensor_1}; | ||
| 379 | + vector<GeTensorPtr> v_output; | ||
| 380 | + | ||
| 381 | + shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(ADD); | ||
| 382 | + Status status = kernel->Compute(op_desc_ptr, input, v_output); | ||
| 383 | + EXPECT_EQ(status, SUCCESS); | ||
| 384 | +} | ||
| 385 | + | ||
| 386 | +TEST_F(UtestFoldingKernelAddKernel, AddInt16Success) { | ||
| 387 | + OpDescPtr op_desc_ptr = std::make_shared<OpDesc>("Add", ADD); | ||
| 388 | + GeTensorDesc output_desc1; | ||
| 389 | + op_desc_ptr->AddOutputDesc("y", output_desc1); | ||
| 390 | + | ||
| 391 | + vector<int64_t> dims_vec_0 = {2}; | ||
| 392 | + vector<int16_t> data_vec_0 = {2, 3}; | ||
| 393 | + GeTensorDesc tensor_desc_0(GeShape(dims_vec_0), FORMAT_NCHW, DT_INT16); | ||
| 394 | + ConstGeTensorPtr tensor_0 = | ||
| 395 | + std::make_shared<GeTensor>(tensor_desc_0, (uint8_t *)data_vec_0.data(), data_vec_0.size() * sizeof(int16_t)); | ||
| 396 | + | ||
| 397 | + vector<int64_t> dims_vec_1 = {2}; | ||
| 398 | + vector<int16_t> data_vec_1 = {5, 6}; | ||
| 399 | + GeTensorDesc tensor_desc_1(GeShape(dims_vec_1), FORMAT_NCHW, DT_INT16); | ||
| 400 | + ConstGeTensorPtr tensor_1 = | ||
| 401 | + std::make_shared<GeTensor>(tensor_desc_1, (uint8_t *)data_vec_1.data(), data_vec_1.size() * sizeof(int16_t)); | ||
| 402 | + | ||
| 403 | + vector<ConstGeTensorPtr> input = {tensor_0, tensor_1}; | ||
| 404 | + vector<GeTensorPtr> v_output; | ||
| 405 | + | ||
| 406 | + shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(ADD); | ||
| 407 | + Status status = kernel->Compute(op_desc_ptr, input, v_output); | ||
| 408 | + EXPECT_EQ(status, SUCCESS); | ||
| 409 | +} | ||
| 410 | + | ||
| 411 | +TEST_F(UtestFoldingKernelAddKernel, AddInt32Success) { | ||
| 412 | + OpDescPtr op_desc_ptr = std::make_shared<OpDesc>("Add", ADD); | ||
| 413 | + GeTensorDesc output_desc1; | ||
| 414 | + op_desc_ptr->AddOutputDesc("y", output_desc1); | ||
| 415 | + | ||
| 416 | + vector<int64_t> dims_vec_0 = {2}; | ||
| 417 | + vector<int32_t> data_vec_0 = {2, 3}; | ||
| 418 | + GeTensorDesc tensor_desc_0(GeShape(dims_vec_0), FORMAT_NCHW, DT_INT32); | ||
| 419 | + ConstGeTensorPtr tensor_0 = | ||
| 420 | + std::make_shared<GeTensor>(tensor_desc_0, (uint8_t *)data_vec_0.data(), data_vec_0.size() * sizeof(int32_t)); | ||
| 421 | + | ||
| 422 | + vector<int64_t> dims_vec_1 = {2}; | ||
| 423 | + vector<int32_t> data_vec_1 = {5, 6}; | ||
| 424 | + GeTensorDesc tensor_desc_1(GeShape(dims_vec_1), FORMAT_NCHW, DT_INT32); | ||
| 425 | + ConstGeTensorPtr tensor_1 = | ||
| 426 | + std::make_shared<GeTensor>(tensor_desc_1, (uint8_t *)data_vec_1.data(), data_vec_1.size() * sizeof(int32_t)); | ||
| 427 | + | ||
| 428 | + vector<ConstGeTensorPtr> input = {tensor_0, tensor_1}; | ||
| 429 | + vector<GeTensorPtr> v_output; | ||
| 430 | + | ||
| 431 | + shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(ADD); | ||
| 432 | + Status status = kernel->Compute(op_desc_ptr, input, v_output); | ||
| 433 | + EXPECT_EQ(status, SUCCESS); | ||
| 434 | +} | ||
| 435 | + | ||
| 436 | +TEST_F(UtestFoldingKernelAddKernel, AddInt64Success) { | ||
| 437 | + OpDescPtr op_desc_ptr = std::make_shared<OpDesc>("Add", ADD); | ||
| 438 | + GeTensorDesc output_desc1; | ||
| 439 | + op_desc_ptr->AddOutputDesc("y", output_desc1); | ||
| 440 | + | ||
| 441 | + vector<int64_t> dims_vec_0 = {2}; | ||
| 442 | + vector<int64_t> data_vec_0 = {2, 3}; | ||
| 443 | + GeTensorDesc tensor_desc_0(GeShape(dims_vec_0), FORMAT_NCHW, DT_INT64); | ||
| 444 | + ConstGeTensorPtr tensor_0 = | ||
| 445 | + std::make_shared<GeTensor>(tensor_desc_0, (uint8_t *)data_vec_0.data(), data_vec_0.size() * sizeof(int64_t)); | ||
| 446 | + | ||
| 447 | + vector<int64_t> dims_vec_1 = {2}; | ||
| 448 | + vector<int64_t> data_vec_1 = {5, 6}; | ||
| 449 | + GeTensorDesc tensor_desc_1(GeShape(dims_vec_1), FORMAT_NCHW, DT_INT64); | ||
| 450 | + ConstGeTensorPtr tensor_1 = | ||
| 451 | + std::make_shared<GeTensor>(tensor_desc_1, (uint8_t *)data_vec_1.data(), data_vec_1.size() * sizeof(int64_t)); | ||
| 452 | + | ||
| 453 | + vector<ConstGeTensorPtr> input = {tensor_0, tensor_1}; | ||
| 454 | + vector<GeTensorPtr> v_output; | ||
| 455 | + | ||
| 456 | + shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(ADD); | ||
| 457 | + Status status = kernel->Compute(op_desc_ptr, input, v_output); | ||
| 458 | + EXPECT_EQ(status, SUCCESS); | ||
| 459 | +} | ||
| 460 | + | ||
| 461 | +TEST_F(UtestFoldingKernelAddKernel, AddUint8Success) { | ||
| 462 | + OpDescPtr op_desc_ptr = std::make_shared<OpDesc>("Add", ADD); | ||
| 463 | + GeTensorDesc output_desc1; | ||
| 464 | + op_desc_ptr->AddOutputDesc("y", output_desc1); | ||
| 465 | + | ||
| 466 | + vector<int64_t> dims_vec_0 = {2}; | ||
| 467 | + vector<uint8_t> data_vec_0 = {2, 3}; | ||
| 468 | + GeTensorDesc tensor_desc_0(GeShape(dims_vec_0), FORMAT_NCHW, DT_UINT8); | ||
| 469 | + ConstGeTensorPtr tensor_0 = | ||
| 470 | + std::make_shared<GeTensor>(tensor_desc_0, (uint8_t *)data_vec_0.data(), data_vec_0.size() * sizeof(uint8_t)); | ||
| 471 | + | ||
| 472 | + vector<int64_t> dims_vec_1 = {2}; | ||
| 473 | + vector<uint8_t> data_vec_1 = {5, 6}; | ||
| 474 | + GeTensorDesc tensor_desc_1(GeShape(dims_vec_1), FORMAT_NCHW, DT_UINT8); | ||
| 475 | + ConstGeTensorPtr tensor_1 = | ||
| 476 | + std::make_shared<GeTensor>(tensor_desc_1, (uint8_t *)data_vec_1.data(), data_vec_1.size() * sizeof(uint8_t)); | ||
| 477 | + | ||
| 478 | + vector<ConstGeTensorPtr> input = {tensor_0, tensor_1}; | ||
| 479 | + vector<GeTensorPtr> v_output; | ||
| 480 | + | ||
| 481 | + shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(ADD); | ||
| 482 | + Status status = kernel->Compute(op_desc_ptr, input, v_output); | ||
| 483 | + EXPECT_EQ(status, SUCCESS); | ||
| 484 | +} | ||
| 485 | + | ||
| 486 | +TEST_F(UtestFoldingKernelAddKernel, AddUint16Success) { | ||
| 487 | + OpDescPtr op_desc_ptr = std::make_shared<OpDesc>("Add", ADD); | ||
| 488 | + GeTensorDesc output_desc1; | ||
| 489 | + op_desc_ptr->AddOutputDesc("y", output_desc1); | ||
| 490 | + | ||
| 491 | + vector<int64_t> dims_vec_0 = {2}; | ||
| 492 | + vector<uint16_t> data_vec_0 = {2, 3}; | ||
| 493 | + GeTensorDesc tensor_desc_0(GeShape(dims_vec_0), FORMAT_NCHW, DT_UINT16); | ||
| 494 | + ConstGeTensorPtr tensor_0 = | ||
| 495 | + std::make_shared<GeTensor>(tensor_desc_0, (uint8_t *)data_vec_0.data(), data_vec_0.size() * sizeof(uint16_t)); | ||
| 496 | + | ||
| 497 | + vector<int64_t> dims_vec_1 = {2}; | ||
| 498 | + vector<uint16_t> data_vec_1 = {5, 6}; | ||
| 499 | + GeTensorDesc tensor_desc_1(GeShape(dims_vec_1), FORMAT_NCHW, DT_UINT16); | ||
| 500 | + ConstGeTensorPtr tensor_1 = | ||
| 501 | + std::make_shared<GeTensor>(tensor_desc_1, (uint8_t *)data_vec_1.data(), data_vec_1.size() * sizeof(uint16_t)); | ||
| 502 | + | ||
| 503 | + vector<ConstGeTensorPtr> input = {tensor_0, tensor_1}; | ||
| 504 | + vector<GeTensorPtr> v_output; | ||
| 505 | + | ||
| 506 | + shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(ADD); | ||
| 507 | + Status status = kernel->Compute(op_desc_ptr, input, v_output); | ||
| 508 | + EXPECT_EQ(status, SUCCESS); | ||
| 509 | +} | ||
| 510 | + | ||
| 511 | +TEST_F(UtestFoldingKernelAddKernel, AddUint32Success) { | ||
| 512 | + OpDescPtr op_desc_ptr = std::make_shared<OpDesc>("Add", ADD); | ||
| 513 | + GeTensorDesc output_desc1; | ||
| 514 | + op_desc_ptr->AddOutputDesc("y", output_desc1); | ||
| 515 | + | ||
| 516 | + vector<int64_t> dims_vec_0 = {2}; | ||
| 517 | + vector<uint32_t> data_vec_0 = {2, 3}; | ||
| 518 | + GeTensorDesc tensor_desc_0(GeShape(dims_vec_0), FORMAT_NCHW, DT_UINT32); | ||
| 519 | + ConstGeTensorPtr tensor_0 = | ||
| 520 | + std::make_shared<GeTensor>(tensor_desc_0, (uint8_t *)data_vec_0.data(), data_vec_0.size() * sizeof(uint32_t)); | ||
| 521 | + | ||
| 522 | + vector<int64_t> dims_vec_1 = {2}; | ||
| 523 | + vector<uint32_t> data_vec_1 = {5, 6}; | ||
| 524 | + GeTensorDesc tensor_desc_1(GeShape(dims_vec_1), FORMAT_NCHW, DT_UINT32); | ||
| 525 | + ConstGeTensorPtr tensor_1 = | ||
| 526 | + std::make_shared<GeTensor>(tensor_desc_1, (uint8_t *)data_vec_1.data(), data_vec_1.size() * sizeof(uint32_t)); | ||
| 527 | + | ||
| 528 | + vector<ConstGeTensorPtr> input = {tensor_0, tensor_1}; | ||
| 529 | + vector<GeTensorPtr> v_output; | ||
| 530 | + | ||
| 531 | + shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(ADD); | ||
| 532 | + Status status = kernel->Compute(op_desc_ptr, input, v_output); | ||
| 533 | + EXPECT_EQ(status, SUCCESS); | ||
| 534 | +} | ||
| 535 | + | ||
| 536 | +TEST_F(UtestFoldingKernelAddKernel, AddUint64Success) { | ||
| 537 | + OpDescPtr op_desc_ptr = std::make_shared<OpDesc>("Add", ADD); | ||
| 538 | + GeTensorDesc output_desc1; | ||
| 539 | + op_desc_ptr->AddOutputDesc("y", output_desc1); | ||
| 540 | + | ||
| 541 | + vector<int64_t> dims_vec_0 = {2}; | ||
| 542 | + vector<uint64_t> data_vec_0 = {2, 3}; | ||
| 543 | + GeTensorDesc tensor_desc_0(GeShape(dims_vec_0), FORMAT_NCHW, DT_UINT64); | ||
| 544 | + ConstGeTensorPtr tensor_0 = | ||
| 545 | + std::make_shared<GeTensor>(tensor_desc_0, (uint8_t *)data_vec_0.data(), data_vec_0.size() * sizeof(uint64_t)); | ||
| 546 | + | ||
| 547 | + vector<int64_t> dims_vec_1 = {2}; | ||
| 548 | + vector<uint64_t> data_vec_1 = {5, 6}; | ||
| 549 | + GeTensorDesc tensor_desc_1(GeShape(dims_vec_1), FORMAT_NCHW, DT_UINT64); | ||
| 550 | + ConstGeTensorPtr tensor_1 = | ||
| 551 | + std::make_shared<GeTensor>(tensor_desc_1, (uint8_t *)data_vec_1.data(), data_vec_1.size() * sizeof(uint64_t)); | ||
| 552 | + | ||
| 553 | + vector<ConstGeTensorPtr> input = {tensor_0, tensor_1}; | ||
| 554 | + vector<GeTensorPtr> v_output; | ||
| 555 | + | ||
| 556 | + shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(ADD); | ||
| 557 | + Status status = kernel->Compute(op_desc_ptr, input, v_output); | ||
| 558 | + EXPECT_EQ(status, SUCCESS); | ||
| 559 | +} | ||
| 560 | + | ||
| 561 | +TEST_F(UtestFoldingKernelAddKernel, AddFloat16Success) { | ||
| 562 | + OpDescPtr op_desc_ptr = std::make_shared<OpDesc>("Add", ADD); | ||
| 563 | + GeTensorDesc output_desc1; | ||
| 564 | + op_desc_ptr->AddOutputDesc("y", output_desc1); | ||
| 565 | + | ||
| 566 | + vector<int64_t> dims_vec_0 = {2}; | ||
| 567 | + vector<fp16_t> data_vec_0 = {2, 3}; | ||
| 568 | + GeTensorDesc tensor_desc_0(GeShape(dims_vec_0), FORMAT_NCHW, DT_FLOAT16); | ||
| 569 | + ConstGeTensorPtr tensor_0 = | ||
| 570 | + std::make_shared<GeTensor>(tensor_desc_0, (uint8_t *)data_vec_0.data(), data_vec_0.size() * sizeof(fp16_t)); | ||
| 571 | + | ||
| 572 | + vector<int64_t> dims_vec_1 = {2}; | ||
| 573 | + vector<fp16_t> data_vec_1 = {5, 6}; | ||
| 574 | + GeTensorDesc tensor_desc_1(GeShape(dims_vec_1), FORMAT_NCHW, DT_FLOAT16); | ||
| 575 | + ConstGeTensorPtr tensor_1 = | ||
| 576 | + std::make_shared<GeTensor>(tensor_desc_1, (uint8_t *)data_vec_1.data(), data_vec_1.size() * sizeof(fp16_t)); | ||
| 577 | + | ||
| 578 | + vector<ConstGeTensorPtr> input = {tensor_0, tensor_1}; | ||
| 579 | + vector<GeTensorPtr> v_output; | ||
| 580 | + | ||
| 581 | + shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(ADD); | ||
| 582 | + Status status = kernel->Compute(op_desc_ptr, input, v_output); | ||
| 583 | + EXPECT_EQ(status, SUCCESS); | ||
| 584 | +} | ||
| 585 | + | ||
| 586 | +TEST_F(UtestFoldingKernelAddKernel, AddFloatWithOutputSuccess) { | ||
| 587 | + OpDescPtr op_desc_ptr = std::make_shared<OpDesc>("Add", ADD); | ||
| 588 | + GeTensorDesc output_desc1; | ||
| 589 | + op_desc_ptr->AddOutputDesc("y", output_desc1); | ||
| 590 | + | ||
| 591 | + vector<int64_t> dims_vec_0 = {4}; | ||
| 592 | + vector<float> data_vec_0 = {1.0, 2.0, 3.0, 4.0}; | ||
| 593 | + GeTensorDesc tensor_desc_0(GeShape(dims_vec_0), FORMAT_NCHW, DT_FLOAT); | ||
| 594 | + ConstGeTensorPtr tensor_0 = | ||
| 595 | + std::make_shared<GeTensor>(tensor_desc_0, (uint8_t *)data_vec_0.data(), data_vec_0.size() * sizeof(float)); | ||
| 596 | + | ||
| 597 | + vector<int64_t> dims_vec_1; | ||
| 598 | + vector<float> data_vec_1 = {1.0}; | ||
| 599 | + GeTensorDesc tensor_desc_1(GeShape(dims_vec_1), FORMAT_NCHW, DT_FLOAT); | ||
| 600 | + ConstGeTensorPtr tensor_1 = | ||
| 601 | + std::make_shared<GeTensor>(tensor_desc_1, (uint8_t *)data_vec_1.data(), data_vec_1.size() * sizeof(float)); | ||
| 602 | + | ||
| 603 | + vector<ConstGeTensorPtr> input = {tensor_0, tensor_1}; | ||
| 604 | + vector<GeTensorPtr> v_output; | ||
| 605 | + | ||
| 606 | + shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(ADD); | ||
| 607 | + Status status = kernel->Compute(op_desc_ptr, input, v_output); | ||
| 608 | + EXPECT_EQ(status, SUCCESS); | ||
| 609 | +} | ||
| 610 | + | ||
| 611 | +TEST_F(UtestFoldingKernelAddKernel, AddDoubleSuccess) { | ||
| 612 | + OpDescPtr op_desc_ptr = std::make_shared<OpDesc>("Add", ADD); | ||
| 613 | + GeTensorDesc output_desc1; | ||
| 614 | + op_desc_ptr->AddOutputDesc("y", output_desc1); | ||
| 615 | + | ||
| 616 | + vector<int64_t> dims_vec_0 = {2}; | ||
| 617 | + vector<double> data_vec_0 = {2.0, 3.0}; | ||
| 618 | + GeTensorDesc tensor_desc_0(GeShape(dims_vec_0), FORMAT_NCHW, DT_DOUBLE); | ||
| 619 | + ConstGeTensorPtr tensor_0 = | ||
| 620 | + std::make_shared<GeTensor>(tensor_desc_0, (uint8_t *)data_vec_0.data(), data_vec_0.size() * sizeof(double)); | ||
| 621 | + | ||
| 622 | + vector<int64_t> dims_vec_1 = {2}; | ||
| 623 | + vector<double> data_vec_1 = {5.0, 6.0}; | ||
| 624 | + GeTensorDesc tensor_desc_1(GeShape(dims_vec_1), FORMAT_NCHW, DT_DOUBLE); | ||
| 625 | + ConstGeTensorPtr tensor_1 = | ||
| 626 | + std::make_shared<GeTensor>(tensor_desc_1, (uint8_t *)data_vec_1.data(), data_vec_1.size() * sizeof(double)); | ||
| 627 | + | ||
| 628 | + vector<ConstGeTensorPtr> input = {tensor_0, tensor_1}; | ||
| 629 | + vector<GeTensorPtr> v_output; | ||
| 630 | + | ||
| 631 | + shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(ADD); | ||
| 632 | + Status status = kernel->Compute(op_desc_ptr, input, v_output); | ||
| 633 | + EXPECT_EQ(status, SUCCESS); | ||
| 634 | +} | ||
| 635 | + | ||
| 636 | +TEST_F(UtestFoldingKernelAddKernel, AddUnsupportedDataType) { | ||
| 637 | + OpDescPtr op_desc_ptr = std::make_shared<OpDesc>("Add", ADD); | ||
| 638 | + GeTensorDesc output_desc1; | ||
| 639 | + op_desc_ptr->AddOutputDesc("y", output_desc1); | ||
| 640 | + | ||
| 641 | + vector<int64_t> dims_vec_0 = {2}; | ||
| 642 | + vector<int64_t> data_vec_0 = {2, 3}; | ||
| 643 | + GeTensorDesc tensor_desc_0(GeShape(dims_vec_0), FORMAT_NCHW, DT_BOOL); | ||
| 644 | + ConstGeTensorPtr tensor_0 = | ||
| 645 | + std::make_shared<GeTensor>(tensor_desc_0, (uint8_t *)data_vec_0.data(), data_vec_0.size() * sizeof(int64_t)); | ||
| 646 | + | ||
| 647 | + vector<int64_t> dims_vec_1 = {2}; | ||
| 648 | + vector<int64_t> data_vec_1 = {5, 6}; | ||
| 649 | + GeTensorDesc tensor_desc_1(GeShape(dims_vec_1), FORMAT_NCHW, DT_BOOL); | ||
| 650 | + ConstGeTensorPtr tensor_1 = | ||
| 651 | + std::make_shared<GeTensor>(tensor_desc_1, (uint8_t *)data_vec_1.data(), data_vec_1.size() * sizeof(int64_t)); | ||
| 652 | + | ||
| 653 | + vector<ConstGeTensorPtr> input = {tensor_0, tensor_1}; | ||
| 654 | + vector<GeTensorPtr> v_output; | ||
| 655 | + | ||
| 656 | + shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(ADD); | ||
| 657 | + Status status = kernel->Compute(op_desc_ptr, input, v_output); | ||
| 658 | + EXPECT_EQ(status, NOT_CHANGED); | ||
| 659 | +} | ||
| 660 | + | ||
| 661 | +TEST_F(UtestFoldingKernelAddKernel, AddEmptyDataSameType) { | ||
| 662 | + OpDescPtr op_desc_ptr = std::make_shared<OpDesc>("Add", ADD); | ||
| 663 | + GeTensorDesc output_desc1; | ||
| 664 | + op_desc_ptr->AddOutputDesc("y", output_desc1); | ||
| 665 | + | ||
| 666 | + vector<int64_t> dims_vec_0 = {2}; | ||
| 667 | + vector<int32_t> data_vec_0 = {}; | ||
| 668 | + GeTensorDesc tensor_desc_0(GeShape(dims_vec_0), FORMAT_NCHW, DT_INT32); | ||
| 669 | + ConstGeTensorPtr tensor_0 = | ||
| 670 | + std::make_shared<GeTensor>(tensor_desc_0, (uint8_t *)data_vec_0.data(), data_vec_0.size() * sizeof(int32_t)); | ||
| 671 | + | ||
| 672 | + vector<int64_t> dims_vec_1 = {2}; | ||
| 673 | + vector<int32_t> data_vec_1 = {5, 6}; | ||
| 674 | + GeTensorDesc tensor_desc_1(GeShape(dims_vec_1), FORMAT_NCHW, DT_INT32); | ||
| 675 | + ConstGeTensorPtr tensor_1 = | ||
| 676 | + std::make_shared<GeTensor>(tensor_desc_1, (uint8_t *)data_vec_1.data(), data_vec_1.size() * sizeof(int32_t)); | ||
| 677 | + | ||
| 678 | + vector<ConstGeTensorPtr> input = {tensor_0, tensor_1}; | ||
| 679 | + vector<GeTensorPtr> v_output; | ||
| 680 | + | ||
| 681 | + shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(ADD); | ||
| 682 | + Status status = kernel->Compute(op_desc_ptr, input, v_output); | ||
| 683 | + EXPECT_EQ(status, NOT_CHANGED); | ||
| 684 | +} | ||
| 685 | + | ||
| 686 | +TEST_F(UtestFoldingKernelAddKernel, AddInt32OverflowFailed) { | ||
| 687 | + OpDescPtr op_desc_ptr = std::make_shared<OpDesc>("Add", ADD); | ||
| 688 | + GeTensorDesc output_desc1; | ||
| 689 | + op_desc_ptr->AddOutputDesc("y", output_desc1); | ||
| 690 | + | ||
| 691 | + vector<int64_t> dims_vec_0 = {1}; | ||
| 692 | + vector<int32_t> data_vec_0 = {std::numeric_limits<int32_t>::max()}; | ||
| 693 | + GeTensorDesc tensor_desc_0(GeShape(dims_vec_0), FORMAT_NCHW, DT_INT32); | ||
| 694 | + ConstGeTensorPtr tensor_0 = | ||
| 695 | + std::make_shared<GeTensor>(tensor_desc_0, (uint8_t *)data_vec_0.data(), data_vec_0.size() * sizeof(int32_t)); | ||
| 696 | + | ||
| 697 | + vector<int64_t> dims_vec_1 = {1}; | ||
| 698 | + vector<int32_t> data_vec_1 = {std::numeric_limits<int32_t>::max()}; | ||
| 699 | + GeTensorDesc tensor_desc_1(GeShape(dims_vec_1), FORMAT_NCHW, DT_INT32); | ||
| 700 | + ConstGeTensorPtr tensor_1 = | ||
| 701 | + std::make_shared<GeTensor>(tensor_desc_1, (uint8_t *)data_vec_1.data(), data_vec_1.size() * sizeof(int32_t)); | ||
| 702 | + | ||
| 703 | + vector<ConstGeTensorPtr> input = {tensor_0, tensor_1}; | ||
| 704 | + vector<GeTensorPtr> v_output; | ||
| 705 | + | ||
| 706 | + shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(ADD); | ||
| 707 | + Status status = kernel->Compute(op_desc_ptr, input, v_output); | ||
| 708 | + EXPECT_NE(status, SUCCESS); | ||
| 709 | +} | ||
| @@ -323,3 +323,43 @@ TEST_F(UtestGraphPassesFoldingKernelDynamicStitchKernel, RepeatedIndiceInt64Succ | |||
| 323 | EXPECT_EQ(output_data[2], 8); | 323 | EXPECT_EQ(output_data[2], 8); |
| 324 | EXPECT_EQ(output_data[3], 6); | 324 | EXPECT_EQ(output_data[3], 6); |
| 325 | } | 325 | } |
| 326 | + | ||
| 327 | +TEST_F(UtestGraphPassesFoldingKernelDynamicStitchKernel, NullOpDesc) { | ||
| 328 | + vector<int64_t> dims_vec_0 = {2}; | ||
| 329 | + vector<int32_t> data_vec_0 = {0, 1}; | ||
| 330 | + GeTensorDesc tensor_desc_0(GeShape(dims_vec_0), FORMAT_NCHW, DT_INT32); | ||
| 331 | + ConstGeTensorPtr tensor_0 = | ||
| 332 | + std::make_shared<GeTensor>(tensor_desc_0, (uint8_t *)data_vec_0.data(), data_vec_0.size() * sizeof(int32_t)); | ||
| 333 | + | ||
| 334 | + vector<ConstGeTensorPtr> input = {tensor_0, tensor_0, tensor_0, tensor_0}; | ||
| 335 | + vector<GeTensorPtr> outputs; | ||
| 336 | + | ||
| 337 | + shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(DYNAMICSTITCH); | ||
| 338 | + Status status = kernel->Compute(nullptr, input, outputs); | ||
| 339 | + EXPECT_EQ(NOT_CHANGED, status); | ||
| 340 | +} | ||
| 341 | + | ||
| 342 | +TEST_F(UtestGraphPassesFoldingKernelDynamicStitchKernel, NullInputTensor) { | ||
| 343 | + OpDescPtr op_desc_ptr = std::make_shared<OpDesc>("dynamicstitch", "DynamicStitch"); | ||
| 344 | + AttrUtils::SetInt(op_desc_ptr, "N", (int64_t)2); | ||
| 345 | + | ||
| 346 | + vector<int64_t> dims_vec_0 = {2}; | ||
| 347 | + vector<int32_t> data_vec_0 = {0, 1}; | ||
| 348 | + GeTensorDesc tensor_desc_0(GeShape(dims_vec_0), FORMAT_NCHW, DT_INT32); | ||
| 349 | + ConstGeTensorPtr tensor_0 = | ||
| 350 | + std::make_shared<GeTensor>(tensor_desc_0, (uint8_t *)data_vec_0.data(), data_vec_0.size() * sizeof(int32_t)); | ||
| 351 | + | ||
| 352 | + GeTensorDesc dims_tensor_desc(GeShape(dims_vec_0), FORMAT_NCHW, DT_INT32); | ||
| 353 | + op_desc_ptr->AddInputDesc(dims_tensor_desc); | ||
| 354 | + op_desc_ptr->AddInputDesc(dims_tensor_desc); | ||
| 355 | + op_desc_ptr->AddInputDesc(dims_tensor_desc); | ||
| 356 | + op_desc_ptr->AddInputDesc(dims_tensor_desc); | ||
| 357 | + op_desc_ptr->AddOutputDesc(dims_tensor_desc); | ||
| 358 | + | ||
| 359 | + vector<ConstGeTensorPtr> input = {nullptr, nullptr, tensor_0, tensor_0}; | ||
| 360 | + vector<GeTensorPtr> outputs; | ||
| 361 | + | ||
| 362 | + shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(DYNAMICSTITCH); | ||
| 363 | + Status status = kernel->Compute(op_desc_ptr, input, outputs); | ||
| 364 | + EXPECT_NE(ge::SUCCESS, status); | ||
| 365 | +} | ||
| @@ -498,3 +498,157 @@ TEST_F(UtestGraphPassedFoldingKernelFloorDivKernel, DoubleSuccess) { | |||
| 498 | Status status = kernel->Compute(op_desc_ptr, input, outputs); | 498 | Status status = kernel->Compute(op_desc_ptr, input, outputs); |
| 499 | EXPECT_EQ(SUCCESS, status); | 499 | EXPECT_EQ(SUCCESS, status); |
| 500 | } | 500 | } |
| 501 | + | ||
| 502 | +TEST_F(UtestGraphPassedFoldingKernelFloorDivKernel, Uint8VectorVectorSuccess) { | ||
| 503 | + OpDescPtr op_desc_ptr = std::make_shared<OpDesc>("floor_div", FLOORDIV); | ||
| 504 | + | ||
| 505 | + vector<int64_t> dims_vec_0 = {2, 3}; | ||
| 506 | + vector<uint8_t> data_vec_0 = {1, 6, 32, 9, 10, 7}; | ||
| 507 | + GeTensorDesc tensor_desc_0(GeShape(dims_vec_0), FORMAT_NCHW, DT_UINT8); | ||
| 508 | + ConstGeTensorPtr tensor_0 = | ||
| 509 | + std::make_shared<GeTensor>(tensor_desc_0, (uint8_t *)data_vec_0.data(), data_vec_0.size() * sizeof(uint8_t)); | ||
| 510 | + | ||
| 511 | + vector<int64_t> dims_vec_1 = {2, 3}; | ||
| 512 | + vector<uint8_t> data_vec_1 = {2, 9, 9, 9, 9, 9}; | ||
| 513 | + GeTensorDesc tensor_desc_1(GeShape(dims_vec_1), FORMAT_NCHW, DT_UINT8); | ||
| 514 | + ConstGeTensorPtr tensor_1 = | ||
| 515 | + std::make_shared<GeTensor>(tensor_desc_1, (uint8_t *)data_vec_1.data(), data_vec_1.size() * sizeof(uint8_t)); | ||
| 516 | + | ||
| 517 | + vector<ConstGeTensorPtr> input = {tensor_0, tensor_1}; | ||
| 518 | + vector<GeTensorPtr> outputs; | ||
| 519 | + shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(FLOORDIV); | ||
| 520 | + Status status = kernel->Compute(op_desc_ptr, input, outputs); | ||
| 521 | + EXPECT_EQ(SUCCESS, status); | ||
| 522 | +} | ||
| 523 | + | ||
| 524 | +TEST_F(UtestGraphPassedFoldingKernelFloorDivKernel, Int8VectorVectorSuccess) { | ||
| 525 | + OpDescPtr op_desc_ptr = std::make_shared<OpDesc>("floor_div", FLOORDIV); | ||
| 526 | + | ||
| 527 | + vector<int64_t> dims_vec_0 = {2, 3}; | ||
| 528 | + vector<int8_t> data_vec_0 = {1, 6, 32, 9, -10, -7}; | ||
| 529 | + GeTensorDesc tensor_desc_0(GeShape(dims_vec_0), FORMAT_NCHW, DT_INT8); | ||
| 530 | + ConstGeTensorPtr tensor_0 = | ||
| 531 | + std::make_shared<GeTensor>(tensor_desc_0, (uint8_t *)data_vec_0.data(), data_vec_0.size() * sizeof(int8_t)); | ||
| 532 | + | ||
| 533 | + vector<int64_t> dims_vec_1 = {2, 3}; | ||
| 534 | + vector<int8_t> data_vec_1 = {2, -9, -9, -9, -9, -9}; | ||
| 535 | + GeTensorDesc tensor_desc_1(GeShape(dims_vec_1), FORMAT_NCHW, DT_INT8); | ||
| 536 | + ConstGeTensorPtr tensor_1 = | ||
| 537 | + std::make_shared<GeTensor>(tensor_desc_1, (uint8_t *)data_vec_1.data(), data_vec_1.size() * sizeof(int8_t)); | ||
| 538 | + | ||
| 539 | + vector<ConstGeTensorPtr> input = {tensor_0, tensor_1}; | ||
| 540 | + vector<GeTensorPtr> outputs; | ||
| 541 | + shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(FLOORDIV); | ||
| 542 | + Status status = kernel->Compute(op_desc_ptr, input, outputs); | ||
| 543 | + EXPECT_EQ(SUCCESS, status); | ||
| 544 | +} | ||
| 545 | + | ||
| 546 | +TEST_F(UtestGraphPassedFoldingKernelFloorDivKernel, Uint16VectorVectorSuccess) { | ||
| 547 | + OpDescPtr op_desc_ptr = std::make_shared<OpDesc>("floor_div", FLOORDIV); | ||
| 548 | + | ||
| 549 | + vector<int64_t> dims_vec_0 = {2, 3}; | ||
| 550 | + vector<uint16_t> data_vec_0 = {1, 6, 32, 9, 10, 7}; | ||
| 551 | + GeTensorDesc tensor_desc_0(GeShape(dims_vec_0), FORMAT_NCHW, DT_UINT16); | ||
| 552 | + ConstGeTensorPtr tensor_0 = | ||
| 553 | + std::make_shared<GeTensor>(tensor_desc_0, (uint8_t *)data_vec_0.data(), data_vec_0.size() * sizeof(uint16_t)); | ||
| 554 | + | ||
| 555 | + vector<int64_t> dims_vec_1 = {2, 3}; | ||
| 556 | + vector<uint16_t> data_vec_1 = {2, 9, 9, 9, 9, 9}; | ||
| 557 | + GeTensorDesc tensor_desc_1(GeShape(dims_vec_1), FORMAT_NCHW, DT_UINT16); | ||
| 558 | + ConstGeTensorPtr tensor_1 = | ||
| 559 | + std::make_shared<GeTensor>(tensor_desc_1, (uint8_t *)data_vec_1.data(), data_vec_1.size() * sizeof(uint16_t)); | ||
| 560 | + | ||
| 561 | + vector<ConstGeTensorPtr> input = {tensor_0, tensor_1}; | ||
| 562 | + vector<GeTensorPtr> outputs; | ||
| 563 | + shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(FLOORDIV); | ||
| 564 | + Status status = kernel->Compute(op_desc_ptr, input, outputs); | ||
| 565 | + EXPECT_EQ(SUCCESS, status); | ||
| 566 | +} | ||
| 567 | + | ||
| 568 | +TEST_F(UtestGraphPassedFoldingKernelFloorDivKernel, Int16VectorVectorSuccess) { | ||
| 569 | + OpDescPtr op_desc_ptr = std::make_shared<OpDesc>("floor_div", FLOORDIV); | ||
| 570 | + | ||
| 571 | + vector<int64_t> dims_vec_0 = {2, 3}; | ||
| 572 | + vector<int16_t> data_vec_0 = {1, 6, 32, 9, -10, -7}; | ||
| 573 | + GeTensorDesc tensor_desc_0(GeShape(dims_vec_0), FORMAT_NCHW, DT_INT16); | ||
| 574 | + ConstGeTensorPtr tensor_0 = | ||
| 575 | + std::make_shared<GeTensor>(tensor_desc_0, (uint8_t *)data_vec_0.data(), data_vec_0.size() * sizeof(int16_t)); | ||
| 576 | + | ||
| 577 | + vector<int64_t> dims_vec_1 = {2, 3}; | ||
| 578 | + vector<int16_t> data_vec_1 = {2, -9, -9, -9, -9, -9}; | ||
| 579 | + GeTensorDesc tensor_desc_1(GeShape(dims_vec_1), FORMAT_NCHW, DT_INT16); | ||
| 580 | + ConstGeTensorPtr tensor_1 = | ||
| 581 | + std::make_shared<GeTensor>(tensor_desc_1, (uint8_t *)data_vec_1.data(), data_vec_1.size() * sizeof(int16_t)); | ||
| 582 | + | ||
| 583 | + vector<ConstGeTensorPtr> input = {tensor_0, tensor_1}; | ||
| 584 | + vector<GeTensorPtr> outputs; | ||
| 585 | + shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(FLOORDIV); | ||
| 586 | + Status status = kernel->Compute(op_desc_ptr, input, outputs); | ||
| 587 | + EXPECT_EQ(SUCCESS, status); | ||
| 588 | +} | ||
| 589 | + | ||
| 590 | +TEST_F(UtestGraphPassedFoldingKernelFloorDivKernel, UnsupportedTypeSameTypeFailed) { | ||
| 591 | + OpDescPtr op_desc_ptr = std::make_shared<OpDesc>("floor_div", FLOORDIV); | ||
| 592 | + | ||
| 593 | + vector<int64_t> dims_vec_0 = {2}; | ||
| 594 | + vector<uint32_t> data_vec_0 = {3, 36}; | ||
| 595 | + GeTensorDesc tensor_desc_0(GeShape(dims_vec_0), FORMAT_NCHW, DT_UINT32); | ||
| 596 | + ConstGeTensorPtr tensor_0 = | ||
| 597 | + std::make_shared<GeTensor>(tensor_desc_0, (uint8_t *)data_vec_0.data(), data_vec_0.size() * sizeof(uint32_t)); | ||
| 598 | + | ||
| 599 | + vector<int64_t> dims_vec_1 = {2}; | ||
| 600 | + vector<uint32_t> data_vec_1 = {2, 9}; | ||
| 601 | + GeTensorDesc tensor_desc_1(GeShape(dims_vec_1), FORMAT_NCHW, DT_UINT32); | ||
| 602 | + ConstGeTensorPtr tensor_1 = | ||
| 603 | + std::make_shared<GeTensor>(tensor_desc_1, (uint8_t *)data_vec_1.data(), data_vec_1.size() * sizeof(uint32_t)); | ||
| 604 | + | ||
| 605 | + vector<ConstGeTensorPtr> input = {tensor_0, tensor_1}; | ||
| 606 | + vector<GeTensorPtr> outputs; | ||
| 607 | + shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(FLOORDIV); | ||
| 608 | + Status status = kernel->Compute(op_desc_ptr, input, outputs); | ||
| 609 | + EXPECT_EQ(NOT_CHANGED, status); | ||
| 610 | +} | ||
| 611 | + | ||
| 612 | +TEST_F(UtestGraphPassedFoldingKernelFloorDivKernel, FloatZeroBroadcastFailed) { | ||
| 613 | + OpDescPtr op_desc_ptr = std::make_shared<OpDesc>("floor_div", FLOORDIV); | ||
| 614 | + | ||
| 615 | + vector<int64_t> dims_vec_0 = {2, 3}; | ||
| 616 | + vector<float> data_vec_0 = {1, 6, 32, 9, 10, 7}; | ||
| 617 | + GeTensorDesc tensor_desc_0(GeShape(dims_vec_0), FORMAT_NCHW, DT_FLOAT); | ||
| 618 | + ConstGeTensorPtr tensor_0 = | ||
| 619 | + std::make_shared<GeTensor>(tensor_desc_0, (uint8_t *)data_vec_0.data(), data_vec_0.size() * sizeof(float)); | ||
| 620 | + | ||
| 621 | + vector<int64_t> dims_vec_1 = {}; | ||
| 622 | + vector<float> data_vec_1 = {0.0}; | ||
| 623 | + GeTensorDesc tensor_desc_1(GeShape(dims_vec_1), FORMAT_NCHW, DT_FLOAT); | ||
| 624 | + ConstGeTensorPtr tensor_1 = | ||
| 625 | + std::make_shared<GeTensor>(tensor_desc_1, (uint8_t *)data_vec_1.data(), data_vec_1.size() * sizeof(float)); | ||
| 626 | + | ||
| 627 | + vector<ConstGeTensorPtr> input = {tensor_0, tensor_1}; | ||
| 628 | + vector<GeTensorPtr> outputs; | ||
| 629 | + shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(FLOORDIV); | ||
| 630 | + Status status = kernel->Compute(op_desc_ptr, input, outputs); | ||
| 631 | + EXPECT_EQ(NOT_CHANGED, status); | ||
| 632 | +} | ||
| 633 | + | ||
| 634 | +TEST_F(UtestGraphPassedFoldingKernelFloorDivKernel, DoubleZeroBroadcastFailed) { | ||
| 635 | + OpDescPtr op_desc_ptr = std::make_shared<OpDesc>("floor_div", FLOORDIV); | ||
| 636 | + | ||
| 637 | + vector<int64_t> dims_vec_0 = {2, 3}; | ||
| 638 | + vector<double> data_vec_0 = {1, 6, 32, 9, 10, 7}; | ||
| 639 | + GeTensorDesc tensor_desc_0(GeShape(dims_vec_0), FORMAT_NCHW, DT_DOUBLE); | ||
| 640 | + ConstGeTensorPtr tensor_0 = | ||
| 641 | + std::make_shared<GeTensor>(tensor_desc_0, (uint8_t *)data_vec_0.data(), data_vec_0.size() * sizeof(double)); | ||
| 642 | + | ||
| 643 | + vector<int64_t> dims_vec_1 = {}; | ||
| 644 | + vector<double> data_vec_1 = {0.0}; | ||
| 645 | + GeTensorDesc tensor_desc_1(GeShape(dims_vec_1), FORMAT_NCHW, DT_DOUBLE); | ||
| 646 | + ConstGeTensorPtr tensor_1 = | ||
| 647 | + std::make_shared<GeTensor>(tensor_desc_1, (uint8_t *)data_vec_1.data(), data_vec_1.size() * sizeof(double)); | ||
| 648 | + | ||
| 649 | + vector<ConstGeTensorPtr> input = {tensor_0, tensor_1}; | ||
| 650 | + vector<GeTensorPtr> outputs; | ||
| 651 | + shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(FLOORDIV); | ||
| 652 | + Status status = kernel->Compute(op_desc_ptr, input, outputs); | ||
| 653 | + EXPECT_EQ(NOT_CHANGED, status); | ||
| 654 | +} | ||
| @@ -1220,3 +1220,33 @@ TEST_F(UtestGraphPassesFoldingKernelGatherV2Kernel, CovOutputZeroDim) { | |||
| 1220 | ge::Status status = kernel->Compute(op_desc_ptr, input, outputs); | 1220 | ge::Status status = kernel->Compute(op_desc_ptr, input, outputs); |
| 1221 | EXPECT_NE(ge::SUCCESS, status); | 1221 | EXPECT_NE(ge::SUCCESS, status); |
| 1222 | } | 1222 | } |
| 1223 | + | ||
| 1224 | +TEST_F(UtestGraphPassesFoldingKernelGatherV2Kernel, UnsupportedDataType) { | ||
| 1225 | + OpDescPtr op_desc_ptr = std::make_shared<OpDesc>("GatherV2", "GatherV2"); | ||
| 1226 | + | ||
| 1227 | + vector<int64_t> x_shape = {3}; | ||
| 1228 | + vector<int64_t> indices_shape = {1}; | ||
| 1229 | + GeTensorDesc tensor_desc_x(GeShape(x_shape), FORMAT_NHWC, DT_BOOL); | ||
| 1230 | + GeTensorDesc tensor_desc_indices(GeShape(indices_shape), FORMAT_NHWC, DT_INT32); | ||
| 1231 | + GeTensorDesc tensor_desc_axis(GeShape(), FORMAT_NHWC, DT_INT32); | ||
| 1232 | + op_desc_ptr->AddInputDesc(0, tensor_desc_x); | ||
| 1233 | + op_desc_ptr->AddInputDesc(1, tensor_desc_indices); | ||
| 1234 | + op_desc_ptr->AddInputDesc(2, tensor_desc_axis); | ||
| 1235 | + | ||
| 1236 | + vector<int32_t> data_vec_0 = {1, 2, 3}; | ||
| 1237 | + vector<int32_t> data_vec_1 = {0}; | ||
| 1238 | + vector<int32_t> axis_vec = {0}; | ||
| 1239 | + ConstGeTensorPtr tensor_0 = | ||
| 1240 | + std::make_shared<GeTensor>(tensor_desc_x, (uint8_t *)data_vec_0.data(), data_vec_0.size() * sizeof(int32_t)); | ||
| 1241 | + ConstGeTensorPtr tensor_1 = std::make_shared<GeTensor>(tensor_desc_indices, (uint8_t *)data_vec_1.data(), | ||
| 1242 | + data_vec_1.size() * sizeof(int32_t)); | ||
| 1243 | + ConstGeTensorPtr tensor_2 = | ||
| 1244 | + std::make_shared<GeTensor>(tensor_desc_axis, (uint8_t *)axis_vec.data(), axis_vec.size() * sizeof(int32_t)); | ||
| 1245 | + | ||
| 1246 | + vector<ConstGeTensorPtr> input = {tensor_0, tensor_1, tensor_2}; | ||
| 1247 | + vector<GeTensorPtr> outputs; | ||
| 1248 | + | ||
| 1249 | + shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(GATHERV2); | ||
| 1250 | + ge::Status status = kernel->Compute(op_desc_ptr, input, outputs); | ||
| 1251 | + EXPECT_EQ(ge::NOT_CHANGED, status); | ||
| 1252 | +} | ||
| @@ -70,3 +70,41 @@ TEST_F(UtestGraphPassesFoldingKernelkernelUtils, IsUnknownShape) { | |||
| 70 | GeShape dynamic_shape(shape); | 70 | GeShape dynamic_shape(shape); |
| 71 | EXPECT_EQ(KernelUtils::IsUnknownShape(dynamic_shape), true); | 71 | EXPECT_EQ(KernelUtils::IsUnknownShape(dynamic_shape), true); |
| 72 | } | 72 | } |
| 73 | + | ||
| 74 | +TEST_F(UtestGraphPassesFoldingKernelkernelUtils, ConstructTensorDescWithUnsupportedDataType) { | ||
| 75 | + vector<int64_t> data = {1, 2, 3}; | ||
| 76 | + GeTensorDesc tensor_desc(GeShape({3}), FORMAT_NCHW, DT_FLOAT); | ||
| 77 | + vector<GeTensorPtr> outputs; | ||
| 78 | + Status status = KernelUtils::ConstructTensorDescWithData(tensor_desc, data, outputs, false); | ||
| 79 | + EXPECT_EQ(PARAM_INVALID, status); | ||
| 80 | +} | ||
| 81 | + | ||
| 82 | +TEST_F(UtestGraphPassesFoldingKernelkernelUtils, CheckSizeForTransOpUnsupportedDataType) { | ||
| 83 | + vector<int64_t> dims_vec_0 = {2}; | ||
| 84 | + vector<float> data_vec_0 = {1.0, 2.0}; | ||
| 85 | + GeTensorDesc tensor_desc_0(GeShape(dims_vec_0), FORMAT_NCHW, DT_BOOL); | ||
| 86 | + ConstGeTensorPtr tensor_0 = | ||
| 87 | + std::make_shared<GeTensor>(tensor_desc_0, (uint8_t *)data_vec_0.data(), data_vec_0.size() * sizeof(float)); | ||
| 88 | + | ||
| 89 | + OpDescPtr op_desc_ptr = std::make_shared<OpDesc>("TransOp", "TransOp"); | ||
| 90 | + GeTensorDesc output_desc(GeShape(dims_vec_0), FORMAT_NCHW, DT_BOOL); | ||
| 91 | + op_desc_ptr->AddOutputDesc(output_desc); | ||
| 92 | + | ||
| 93 | + bool ret = KernelUtils::CheckSizeForTransOp(tensor_0, op_desc_ptr); | ||
| 94 | + EXPECT_EQ(false, ret); | ||
| 95 | +} | ||
| 96 | + | ||
| 97 | +TEST_F(UtestGraphPassesFoldingKernelkernelUtils, CheckSizeForTransOpSizeMismatch) { | ||
| 98 | + vector<int64_t> dims_vec_0 = {4}; | ||
| 99 | + vector<int32_t> data_vec_0 = {1, 2}; | ||
| 100 | + GeTensorDesc tensor_desc_0(GeShape(dims_vec_0), FORMAT_NCHW, DT_INT32); | ||
| 101 | + ConstGeTensorPtr tensor_0 = | ||
| 102 | + std::make_shared<GeTensor>(tensor_desc_0, (uint8_t *)data_vec_0.data(), data_vec_0.size() * sizeof(int32_t)); | ||
| 103 | + | ||
| 104 | + OpDescPtr op_desc_ptr = std::make_shared<OpDesc>("TransOp", "TransOp"); | ||
| 105 | + GeTensorDesc output_desc(GeShape(dims_vec_0), FORMAT_NCHW, DT_INT32); | ||
| 106 | + op_desc_ptr->AddOutputDesc(output_desc); | ||
| 107 | + | ||
| 108 | + bool ret = KernelUtils::CheckSizeForTransOp(tensor_0, op_desc_ptr); | ||
| 109 | + EXPECT_EQ(false, ret); | ||
| 110 | +} | ||
| @@ -515,6 +515,7 @@ TEST_F(UtestGraphPassesFoldingKernelMulKernel, Complex64_Overflow_Failed) { | |||
| 515 | } | 515 | } |
| 516 | 516 | ||
| 517 | TEST_F(UtestGraphPassesFoldingKernelMulKernel, MulNullOpDesc) { | 517 | TEST_F(UtestGraphPassesFoldingKernelMulKernel, MulNullOpDesc) { |
| 518 | + OpDescPtr op_desc_ptr = nullptr; | ||
| 518 | vector<int64_t> dims_vec_0 = {2}; | 519 | vector<int64_t> dims_vec_0 = {2}; |
| 519 | vector<int32_t> data_vec_0 = {3, 4}; | 520 | vector<int32_t> data_vec_0 = {3, 4}; |
| 520 | GeTensorDesc tensor_desc_0(GeShape(dims_vec_0), FORMAT_NCHW, DT_INT32); | 521 | GeTensorDesc tensor_desc_0(GeShape(dims_vec_0), FORMAT_NCHW, DT_INT32); |
| @@ -531,8 +532,50 @@ TEST_F(UtestGraphPassesFoldingKernelMulKernel, MulNullOpDesc) { | |||
| 531 | vector<GeTensorPtr> outputs; | 532 | vector<GeTensorPtr> outputs; |
| 532 | 533 | ||
| 533 | shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(MUL); | 534 | shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(MUL); |
| 534 | - Status status = kernel->Compute(nullptr, input, outputs); | 535 | + Status status = kernel->Compute(op_desc_ptr, input, outputs); |
| 535 | - EXPECT_EQ(PARAM_INVALID, status); | 536 | + EXPECT_NE(SUCCESS, status); |
| 537 | +} | ||
| 538 | + | ||
| 539 | +TEST_F(UtestGraphPassesFoldingKernelMulKernel, Float16OneDSuccess) { | ||
| 540 | + OpDescPtr op_desc_ptr = std::make_shared<OpDesc>("Mul", "Mul"); | ||
| 541 | + | ||
| 542 | + vector<int64_t> dims_vec_0 = {2}; | ||
| 543 | + vector<fp16_t> data_vec_0 = {2, 3}; | ||
| 544 | + GeTensorDesc tensor_desc_0(GeShape(dims_vec_0), FORMAT_NCHW, DT_FLOAT16); | ||
| 545 | + ConstGeTensorPtr tensor_0 = | ||
| 546 | + std::make_shared<GeTensor>(tensor_desc_0, (uint8_t *)data_vec_0.data(), data_vec_0.size() * sizeof(fp16_t)); | ||
| 547 | + vector<int64_t> dims_vec_1 = {2}; | ||
| 548 | + vector<fp16_t> data_vec_1 = {5, 6}; | ||
| 549 | + GeTensorDesc tensor_desc_1(GeShape(dims_vec_1), FORMAT_NCHW, DT_FLOAT16); | ||
| 550 | + ConstGeTensorPtr tensor_1 = | ||
| 551 | + std::make_shared<GeTensor>(tensor_desc_1, (uint8_t *)data_vec_1.data(), data_vec_1.size() * sizeof(fp16_t)); | ||
| 552 | + vector<ConstGeTensorPtr> input = {tensor_0, tensor_1}; | ||
| 553 | + vector<GeTensorPtr> outputs; | ||
| 554 | + | ||
| 555 | + shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(MUL); | ||
| 556 | + Status status = kernel->Compute(op_desc_ptr, input, outputs); | ||
| 557 | + EXPECT_EQ(SUCCESS, status); | ||
| 558 | +} | ||
| 559 | + | ||
| 560 | +TEST_F(UtestGraphPassesFoldingKernelMulKernel, UnsupportedDataType) { | ||
| 561 | + OpDescPtr op_desc_ptr = std::make_shared<OpDesc>("Mul", "Mul"); | ||
| 562 | + | ||
| 563 | + vector<int64_t> dims_vec_0 = {2}; | ||
| 564 | + vector<int64_t> data_vec_0 = {2, 3}; | ||
| 565 | + GeTensorDesc tensor_desc_0(GeShape(dims_vec_0), FORMAT_NCHW, DT_BOOL); | ||
| 566 | + ConstGeTensorPtr tensor_0 = | ||
| 567 | + std::make_shared<GeTensor>(tensor_desc_0, (uint8_t *)data_vec_0.data(), data_vec_0.size() * sizeof(int64_t)); | ||
| 568 | + vector<int64_t> dims_vec_1 = {2}; | ||
| 569 | + vector<int64_t> data_vec_1 = {5, 6}; | ||
| 570 | + GeTensorDesc tensor_desc_1(GeShape(dims_vec_1), FORMAT_NCHW, DT_BOOL); | ||
| 571 | + ConstGeTensorPtr tensor_1 = | ||
| 572 | + std::make_shared<GeTensor>(tensor_desc_1, (uint8_t *)data_vec_1.data(), data_vec_1.size() * sizeof(int64_t)); | ||
| 573 | + vector<ConstGeTensorPtr> input = {tensor_0, tensor_1}; | ||
| 574 | + vector<GeTensorPtr> outputs; | ||
| 575 | + | ||
| 576 | + shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(MUL); | ||
| 577 | + Status status = kernel->Compute(op_desc_ptr, input, outputs); | ||
| 578 | + EXPECT_EQ(NOT_CHANGED, status); | ||
| 536 | } | 579 | } |
| 537 | 580 | ||
| 538 | TEST_F(UtestGraphPassesFoldingKernelMulKernel, MulInputNumberNotMatch) { | 581 | TEST_F(UtestGraphPassesFoldingKernelMulKernel, MulInputNumberNotMatch) { |
| @@ -373,3 +373,166 @@ TEST_F(UtestGraphPassesFoldingKernelPackKernel, PackOptimizerFailedErrtype) { | |||
| 373 | shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(PACK); | 373 | shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(PACK); |
| 374 | EXPECT_NE(kernel->Compute(op_desc_ptr, input, outputs), ge::SUCCESS); | 374 | EXPECT_NE(kernel->Compute(op_desc_ptr, input, outputs), ge::SUCCESS); |
| 375 | } | 375 | } |
| 376 | + | ||
| 377 | +TEST_F(UtestGraphPassesFoldingKernelPackKernel, AxisOutOfRange) { | ||
| 378 | + OpDescPtr op_desc_ptr = std::make_shared<OpDesc>("pack", "Pack"); | ||
| 379 | + AttrUtils::SetInt(op_desc_ptr, PACK_ATTR_NAME_NUM, (int64_t)2); | ||
| 380 | + AttrUtils::SetInt(op_desc_ptr, ATTR_NAME_AXIS, (int64_t)5); | ||
| 381 | + | ||
| 382 | + vector<int64_t> dims_vec_0; | ||
| 383 | + vector<int32_t> data_vec_0 = {0}; | ||
| 384 | + GeTensorDesc tensor_desc_0(GeShape(dims_vec_0), FORMAT_NCHW, DT_INT32); | ||
| 385 | + ConstGeTensorPtr tensor_0 = | ||
| 386 | + std::make_shared<GeTensor>(tensor_desc_0, (uint8_t *)data_vec_0.data(), data_vec_0.size() * sizeof(int32_t)); | ||
| 387 | + | ||
| 388 | + vector<int64_t> dims_vec_1; | ||
| 389 | + vector<int32_t> data_vec_1 = {0}; | ||
| 390 | + GeTensorDesc tensor_desc_1(GeShape(dims_vec_1), FORMAT_NCHW, DT_INT32); | ||
| 391 | + ConstGeTensorPtr tensor_1 = | ||
| 392 | + std::make_shared<GeTensor>(tensor_desc_1, (uint8_t *)data_vec_1.data(), data_vec_1.size() * sizeof(int32_t)); | ||
| 393 | + | ||
| 394 | + vector<ConstGeTensorPtr> input = {tensor_0, tensor_1}; | ||
| 395 | + vector<GeTensorPtr> outputs; | ||
| 396 | + | ||
| 397 | + shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(PACK); | ||
| 398 | + Status status = kernel->Compute(op_desc_ptr, input, outputs); | ||
| 399 | + EXPECT_EQ(NOT_CHANGED, status); | ||
| 400 | +} | ||
| 401 | + | ||
| 402 | +TEST_F(UtestGraphPassesFoldingKernelPackKernel, NullInput) { | ||
| 403 | + OpDescPtr op_desc_ptr = std::make_shared<OpDesc>("pack", "Pack"); | ||
| 404 | + AttrUtils::SetInt(op_desc_ptr, PACK_ATTR_NAME_NUM, (int64_t)2); | ||
| 405 | + AttrUtils::SetInt(op_desc_ptr, ATTR_NAME_AXIS, (int64_t)0); | ||
| 406 | + | ||
| 407 | + vector<int64_t> dims_vec_0; | ||
| 408 | + vector<int32_t> data_vec_0 = {0}; | ||
| 409 | + GeTensorDesc tensor_desc_0(GeShape(dims_vec_0), FORMAT_NCHW, DT_INT32); | ||
| 410 | + ConstGeTensorPtr tensor_0 = | ||
| 411 | + std::make_shared<GeTensor>(tensor_desc_0, (uint8_t *)data_vec_0.data(), data_vec_0.size() * sizeof(int32_t)); | ||
| 412 | + | ||
| 413 | + vector<ConstGeTensorPtr> input = {tensor_0, nullptr}; | ||
| 414 | + vector<GeTensorPtr> outputs; | ||
| 415 | + | ||
| 416 | + shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(PACK); | ||
| 417 | + Status status = kernel->Compute(op_desc_ptr, input, outputs); | ||
| 418 | + EXPECT_EQ(NOT_CHANGED, status); | ||
| 419 | +} | ||
| 420 | + | ||
| 421 | +TEST_F(UtestGraphPassesFoldingKernelPackKernel, EmptyInput) { | ||
| 422 | + OpDescPtr op_desc_ptr = std::make_shared<OpDesc>("pack", "Pack"); | ||
| 423 | + AttrUtils::SetInt(op_desc_ptr, PACK_ATTR_NAME_NUM, (int64_t)2); | ||
| 424 | + AttrUtils::SetInt(op_desc_ptr, ATTR_NAME_AXIS, (int64_t)0); | ||
| 425 | + | ||
| 426 | + vector<ConstGeTensorPtr> input = {}; | ||
| 427 | + vector<GeTensorPtr> outputs; | ||
| 428 | + | ||
| 429 | + shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(PACK); | ||
| 430 | + Status status = kernel->Compute(op_desc_ptr, input, outputs); | ||
| 431 | + EXPECT_EQ(NOT_CHANGED, status); | ||
| 432 | +} | ||
| 433 | + | ||
| 434 | +TEST_F(UtestGraphPassesFoldingKernelPackKernel, ShapeMismatch) { | ||
| 435 | + OpDescPtr op_desc_ptr = std::make_shared<OpDesc>("pack", "Pack"); | ||
| 436 | + AttrUtils::SetInt(op_desc_ptr, PACK_ATTR_NAME_NUM, (int64_t)2); | ||
| 437 | + AttrUtils::SetInt(op_desc_ptr, ATTR_NAME_AXIS, (int64_t)0); | ||
| 438 | + | ||
| 439 | + vector<int64_t> dims_vec_0 = {2}; | ||
| 440 | + vector<int32_t> data_vec_0 = {1, 2}; | ||
| 441 | + GeTensorDesc tensor_desc_0(GeShape(dims_vec_0), FORMAT_NCHW, DT_INT32); | ||
| 442 | + ConstGeTensorPtr tensor_0 = | ||
| 443 | + std::make_shared<GeTensor>(tensor_desc_0, (uint8_t *)data_vec_0.data(), data_vec_0.size() * sizeof(int32_t)); | ||
| 444 | + | ||
| 445 | + vector<int64_t> dims_vec_1 = {3}; | ||
| 446 | + vector<int32_t> data_vec_1 = {1, 2, 3}; | ||
| 447 | + GeTensorDesc tensor_desc_1(GeShape(dims_vec_1), FORMAT_NCHW, DT_INT32); | ||
| 448 | + ConstGeTensorPtr tensor_1 = | ||
| 449 | + std::make_shared<GeTensor>(tensor_desc_1, (uint8_t *)data_vec_1.data(), data_vec_1.size() * sizeof(int32_t)); | ||
| 450 | + | ||
| 451 | + vector<ConstGeTensorPtr> input = {tensor_0, tensor_1}; | ||
| 452 | + vector<GeTensorPtr> outputs; | ||
| 453 | + | ||
| 454 | + shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(PACK); | ||
| 455 | + Status status = kernel->Compute(op_desc_ptr, input, outputs); | ||
| 456 | + EXPECT_EQ(NOT_CHANGED, status); | ||
| 457 | +} | ||
| 458 | + | ||
| 459 | +TEST_F(UtestGraphPassesFoldingKernelPackKernel, EmptyDataWithShape) { | ||
| 460 | + OpDescPtr op_desc_ptr = std::make_shared<OpDesc>("pack", "Pack"); | ||
| 461 | + AttrUtils::SetInt(op_desc_ptr, PACK_ATTR_NAME_NUM, (int64_t)2); | ||
| 462 | + AttrUtils::SetInt(op_desc_ptr, ATTR_NAME_AXIS, (int64_t)0); | ||
| 463 | + | ||
| 464 | + vector<int64_t> dims_vec_0 = {2}; | ||
| 465 | + vector<int32_t> data_vec_0 = {1, 2}; | ||
| 466 | + GeTensorDesc tensor_desc_0(GeShape(dims_vec_0), FORMAT_NCHW, DT_INT32); | ||
| 467 | + ConstGeTensorPtr tensor_0 = | ||
| 468 | + std::make_shared<GeTensor>(tensor_desc_0, (uint8_t *)data_vec_0.data(), data_vec_0.size() * sizeof(int32_t)); | ||
| 469 | + | ||
| 470 | + vector<int64_t> dims_vec_1 = {2}; | ||
| 471 | + vector<int32_t> data_vec_1 = {}; | ||
| 472 | + GeTensorDesc tensor_desc_1(GeShape(dims_vec_1), FORMAT_NCHW, DT_INT32); | ||
| 473 | + ConstGeTensorPtr tensor_1 = | ||
| 474 | + std::make_shared<GeTensor>(tensor_desc_1, (uint8_t *)data_vec_1.data(), data_vec_1.size() * sizeof(int32_t)); | ||
| 475 | + | ||
| 476 | + vector<ConstGeTensorPtr> input = {tensor_0, tensor_1}; | ||
| 477 | + vector<GeTensorPtr> outputs; | ||
| 478 | + | ||
| 479 | + shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(PACK); | ||
| 480 | + Status status = kernel->Compute(op_desc_ptr, input, outputs); | ||
| 481 | + EXPECT_EQ(NOT_CHANGED, status); | ||
| 482 | +} | ||
| 483 | + | ||
| 484 | +TEST_F(UtestGraphPassesFoldingKernelPackKernel, AxisMiddleWithMultiDimSuccess) { | ||
| 485 | + OpDescPtr op_desc_ptr = std::make_shared<OpDesc>("pack", "Pack"); | ||
| 486 | + AttrUtils::SetInt(op_desc_ptr, PACK_ATTR_NAME_NUM, (int64_t)2); | ||
| 487 | + AttrUtils::SetInt(op_desc_ptr, ATTR_NAME_AXIS, (int64_t)1); | ||
| 488 | + | ||
| 489 | + vector<int64_t> dims_vec_0 = {2, 3}; | ||
| 490 | + vector<int32_t> data_vec_0 = {1, 2, 3, 4, 5, 6}; | ||
| 491 | + GeTensorDesc tensor_desc_0(GeShape(dims_vec_0), FORMAT_NCHW, DT_INT32); | ||
| 492 | + ConstGeTensorPtr tensor_0 = | ||
| 493 | + std::make_shared<GeTensor>(tensor_desc_0, (uint8_t *)data_vec_0.data(), data_vec_0.size() * sizeof(int32_t)); | ||
| 494 | + | ||
| 495 | + vector<int64_t> dims_vec_1 = {2, 3}; | ||
| 496 | + vector<int32_t> data_vec_1 = {7, 8, 9, 10, 11, 12}; | ||
| 497 | + GeTensorDesc tensor_desc_1(GeShape(dims_vec_1), FORMAT_NCHW, DT_INT32); | ||
| 498 | + ConstGeTensorPtr tensor_1 = | ||
| 499 | + std::make_shared<GeTensor>(tensor_desc_1, (uint8_t *)data_vec_1.data(), data_vec_1.size() * sizeof(int32_t)); | ||
| 500 | + | ||
| 501 | + GeTensorDesc dims_tensor_desc(GeShape(dims_vec_0), FORMAT_NCHW, DT_INT32); | ||
| 502 | + op_desc_ptr->AddInputDesc(0, dims_tensor_desc); | ||
| 503 | + | ||
| 504 | + vector<ConstGeTensorPtr> input = {tensor_0, tensor_1}; | ||
| 505 | + vector<GeTensorPtr> outputs; | ||
| 506 | + | ||
| 507 | + shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(PACK); | ||
| 508 | + Status status = kernel->Compute(op_desc_ptr, input, outputs); | ||
| 509 | + EXPECT_EQ(SUCCESS, status); | ||
| 510 | +} | ||
| 511 | + | ||
| 512 | +TEST_F(UtestGraphPassesFoldingKernelPackKernel, ZeroInShapeSuccess) { | ||
| 513 | + OpDescPtr op_desc_ptr = std::make_shared<OpDesc>("pack", "Pack"); | ||
| 514 | + AttrUtils::SetInt(op_desc_ptr, PACK_ATTR_NAME_NUM, (int64_t)2); | ||
| 515 | + AttrUtils::SetInt(op_desc_ptr, ATTR_NAME_AXIS, (int64_t)0); | ||
| 516 | + | ||
| 517 | + vector<int64_t> dims_vec_0 = {0}; | ||
| 518 | + vector<int32_t> data_vec_0 = {}; | ||
| 519 | + GeTensorDesc tensor_desc_0(GeShape(dims_vec_0), FORMAT_NCHW, DT_INT32); | ||
| 520 | + ConstGeTensorPtr tensor_0 = | ||
| 521 | + std::make_shared<GeTensor>(tensor_desc_0, (uint8_t *)data_vec_0.data(), data_vec_0.size() * sizeof(int32_t)); | ||
| 522 | + | ||
| 523 | + vector<int64_t> dims_vec_1 = {0}; | ||
| 524 | + vector<int32_t> data_vec_1 = {}; | ||
| 525 | + GeTensorDesc tensor_desc_1(GeShape(dims_vec_1), FORMAT_NCHW, DT_INT32); | ||
| 526 | + ConstGeTensorPtr tensor_1 = | ||
| 527 | + std::make_shared<GeTensor>(tensor_desc_1, (uint8_t *)data_vec_1.data(), data_vec_1.size() * sizeof(int32_t)); | ||
| 528 | + | ||
| 529 | + GeTensorDesc dims_tensor_desc(GeShape(dims_vec_0), FORMAT_NCHW, DT_INT32); | ||
| 530 | + op_desc_ptr->AddInputDesc(0, dims_tensor_desc); | ||
| 531 | + | ||
| 532 | + vector<ConstGeTensorPtr> input = {tensor_0, tensor_1}; | ||
| 533 | + vector<GeTensorPtr> outputs; | ||
| 534 | + | ||
| 535 | + shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(PACK); | ||
| 536 | + Status status = kernel->Compute(op_desc_ptr, input, outputs); | ||
| 537 | + EXPECT_EQ(SUCCESS, status); | ||
| 538 | +} | ||
| @@ -186,3 +186,124 @@ TEST_F(UtestGraphPassesFoldingKernelReduceProdKernel, OverflowDataNotChanged) { | |||
| 186 | 186 | ||
| 187 | EXPECT_EQ(NOT_CHANGED, status); | 187 | EXPECT_EQ(NOT_CHANGED, status); |
| 188 | } | 188 | } |
| 189 | + | ||
| 190 | +TEST_F(UtestGraphPassesFoldingKernelReduceProdKernel, Int32AxisOutOfRange) { | ||
| 191 | + OpDescPtr op_desc_ptr = std::make_shared<OpDesc>("ReduceProd", REDUCEPROD); | ||
| 192 | + | ||
| 193 | + vector<int64_t> dims_vec_0 = {2, 3}; | ||
| 194 | + vector<int32_t> data_vec_0 = {1, 2, 5, 7, 3, 1}; | ||
| 195 | + GeTensorDesc tensor_desc_0(GeShape(dims_vec_0), FORMAT_NCHW, DT_INT32); | ||
| 196 | + ConstGeTensorPtr tensor_0 = | ||
| 197 | + std::make_shared<GeTensor>(tensor_desc_0, (uint8_t *)data_vec_0.data(), data_vec_0.size() * sizeof(int32_t)); | ||
| 198 | + | ||
| 199 | + vector<int64_t> dims_vec_1 = {1}; | ||
| 200 | + vector<int32_t> data_vec_1 = {3}; | ||
| 201 | + GeTensorDesc tensor_desc_1(GeShape(dims_vec_1), FORMAT_NCHW, DT_INT32); | ||
| 202 | + ConstGeTensorPtr tensor_1 = | ||
| 203 | + std::make_shared<GeTensor>(tensor_desc_1, (uint8_t *)data_vec_1.data(), data_vec_1.size() * sizeof(int32_t)); | ||
| 204 | + | ||
| 205 | + vector<ConstGeTensorPtr> input = {tensor_0, tensor_1}; | ||
| 206 | + vector<GeTensorPtr> outputs; | ||
| 207 | + shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(REDUCEPROD); | ||
| 208 | + Status status = kernel->Compute(op_desc_ptr, input, outputs); | ||
| 209 | + EXPECT_EQ(NOT_CHANGED, status); | ||
| 210 | +} | ||
| 211 | + | ||
| 212 | +TEST_F(UtestGraphPassesFoldingKernelReduceProdKernel, Int32KeepDimsSuccess) { | ||
| 213 | + OpDescPtr op_desc_ptr = std::make_shared<OpDesc>("ReduceProd", REDUCEPROD); | ||
| 214 | + AttrUtils::SetBool(op_desc_ptr, "keep_dims", true); | ||
| 215 | + | ||
| 216 | + vector<int64_t> dims_vec_0 = {2, 3}; | ||
| 217 | + vector<int32_t> data_vec_0 = {1, 2, 5, 7, 3, 1}; | ||
| 218 | + GeTensorDesc tensor_desc_0(GeShape(dims_vec_0), FORMAT_NCHW, DT_INT32); | ||
| 219 | + ConstGeTensorPtr tensor_0 = | ||
| 220 | + std::make_shared<GeTensor>(tensor_desc_0, (uint8_t *)data_vec_0.data(), data_vec_0.size() * sizeof(int32_t)); | ||
| 221 | + | ||
| 222 | + vector<int64_t> dims_vec_1 = {1}; | ||
| 223 | + vector<int32_t> data_vec_1 = {0}; | ||
| 224 | + GeTensorDesc tensor_desc_1(GeShape(dims_vec_1), FORMAT_NCHW, DT_INT32); | ||
| 225 | + ConstGeTensorPtr tensor_1 = | ||
| 226 | + std::make_shared<GeTensor>(tensor_desc_1, (uint8_t *)data_vec_1.data(), data_vec_1.size() * sizeof(int32_t)); | ||
| 227 | + | ||
| 228 | + vector<ConstGeTensorPtr> input = {tensor_0, tensor_1}; | ||
| 229 | + vector<GeTensorPtr> outputs; | ||
| 230 | + shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(REDUCEPROD); | ||
| 231 | + Status status = kernel->Compute(op_desc_ptr, input, outputs); | ||
| 232 | + EXPECT_EQ(SUCCESS, status); | ||
| 233 | +} | ||
| 234 | + | ||
| 235 | +TEST_F(UtestGraphPassesFoldingKernelReduceProdKernel, Int32ComputeNoAxisSuccess) { | ||
| 236 | + OpDescPtr op_desc_ptr = std::make_shared<OpDesc>("ReduceProd", REDUCEPROD); | ||
| 237 | + | ||
| 238 | + vector<int64_t> dims_vec_0 = {2, 3}; | ||
| 239 | + vector<int32_t> data_vec_0 = {1, 2, 5, 7, 3, 1}; | ||
| 240 | + GeTensorDesc tensor_desc_0(GeShape(dims_vec_0), FORMAT_NCHW, DT_INT32); | ||
| 241 | + ConstGeTensorPtr tensor_0 = | ||
| 242 | + std::make_shared<GeTensor>(tensor_desc_0, (uint8_t *)data_vec_0.data(), data_vec_0.size() * sizeof(int32_t)); | ||
| 243 | + | ||
| 244 | + vector<ConstGeTensorPtr> input = {tensor_0}; | ||
| 245 | + vector<GeTensorPtr> outputs; | ||
| 246 | + shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(REDUCEPROD); | ||
| 247 | + Status status = kernel->Compute(op_desc_ptr, input, outputs); | ||
| 248 | + EXPECT_EQ(SUCCESS, status); | ||
| 249 | +} | ||
| 250 | + | ||
| 251 | +TEST_F(UtestGraphPassesFoldingKernelReduceProdKernel, Int32EmptyAxisSuccess) { | ||
| 252 | + OpDescPtr op_desc_ptr = std::make_shared<OpDesc>("ReduceProd", REDUCEPROD); | ||
| 253 | + | ||
| 254 | + vector<int64_t> dims_vec_0 = {2, 3}; | ||
| 255 | + vector<int32_t> data_vec_0 = {1, 2, 5, 7, 3, 1}; | ||
| 256 | + GeTensorDesc tensor_desc_0(GeShape(dims_vec_0), FORMAT_NCHW, DT_INT32); | ||
| 257 | + ConstGeTensorPtr tensor_0 = | ||
| 258 | + std::make_shared<GeTensor>(tensor_desc_0, (uint8_t *)data_vec_0.data(), data_vec_0.size() * sizeof(int32_t)); | ||
| 259 | + | ||
| 260 | + vector<int64_t> dims_vec_1 = {1}; | ||
| 261 | + vector<int32_t> data_vec_1 = {}; | ||
| 262 | + GeTensorDesc tensor_desc_1(GeShape(dims_vec_1), FORMAT_NCHW, DT_INT32); | ||
| 263 | + ConstGeTensorPtr tensor_1 = | ||
| 264 | + std::make_shared<GeTensor>(tensor_desc_1, (uint8_t *)data_vec_1.data(), data_vec_1.size() * sizeof(int32_t)); | ||
| 265 | + | ||
| 266 | + vector<ConstGeTensorPtr> input = {tensor_0, tensor_1}; | ||
| 267 | + vector<GeTensorPtr> outputs; | ||
| 268 | + shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(REDUCEPROD); | ||
| 269 | + Status status = kernel->Compute(op_desc_ptr, input, outputs); | ||
| 270 | + EXPECT_EQ(SUCCESS, status); | ||
| 271 | +} | ||
| 272 | + | ||
| 273 | +TEST_F(UtestGraphPassesFoldingKernelReduceProdKernel, Int32OverflowFailed) { | ||
| 274 | + OpDescPtr op_desc_ptr = std::make_shared<OpDesc>("ReduceProd", REDUCEPROD); | ||
| 275 | + | ||
| 276 | + vector<int64_t> dims_vec_0 = {2}; | ||
| 277 | + vector<int32_t> data_vec_0 = {std::numeric_limits<int32_t>::max(), 2}; | ||
| 278 | + GeTensorDesc tensor_desc_0(GeShape(dims_vec_0), FORMAT_NCHW, DT_INT32); | ||
| 279 | + ConstGeTensorPtr tensor_0 = | ||
| 280 | + std::make_shared<GeTensor>(tensor_desc_0, (uint8_t *)data_vec_0.data(), data_vec_0.size() * sizeof(int32_t)); | ||
| 281 | + | ||
| 282 | + vector<int64_t> dims_vec_1 = {1}; | ||
| 283 | + vector<int32_t> data_vec_1 = {0}; | ||
| 284 | + GeTensorDesc tensor_desc_1(GeShape(dims_vec_1), FORMAT_NCHW, DT_INT32); | ||
| 285 | + ConstGeTensorPtr tensor_1 = | ||
| 286 | + std::make_shared<GeTensor>(tensor_desc_1, (uint8_t *)data_vec_1.data(), data_vec_1.size() * sizeof(int32_t)); | ||
| 287 | + | ||
| 288 | + vector<ConstGeTensorPtr> input = {tensor_0, tensor_1}; | ||
| 289 | + vector<GeTensorPtr> outputs; | ||
| 290 | + shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(REDUCEPROD); | ||
| 291 | + Status status = kernel->Compute(op_desc_ptr, input, outputs); | ||
| 292 | + EXPECT_EQ(NOT_CHANGED, status); | ||
| 293 | +} | ||
| 294 | + | ||
| 295 | +TEST_F(UtestGraphPassesFoldingKernelReduceProdKernel, Int32ComputeNoAxisEmptyData) { | ||
| 296 | + OpDescPtr op_desc_ptr = std::make_shared<OpDesc>("ReduceProd", REDUCEPROD); | ||
| 297 | + | ||
| 298 | + vector<int64_t> dims_vec_0 = {2}; | ||
| 299 | + vector<int32_t> data_vec_0 = {}; | ||
| 300 | + GeTensorDesc tensor_desc_0(GeShape(dims_vec_0), FORMAT_NCHW, DT_INT32); | ||
| 301 | + ConstGeTensorPtr tensor_0 = | ||
| 302 | + std::make_shared<GeTensor>(tensor_desc_0, (uint8_t *)data_vec_0.data(), data_vec_0.size() * sizeof(int32_t)); | ||
| 303 | + | ||
| 304 | + vector<ConstGeTensorPtr> input = {tensor_0}; | ||
| 305 | + vector<GeTensorPtr> outputs; | ||
| 306 | + shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(REDUCEPROD); | ||
| 307 | + Status status = kernel->Compute(op_desc_ptr, input, outputs); | ||
| 308 | + EXPECT_EQ(NOT_CHANGED, status); | ||
| 309 | +} | ||
| @@ -15,6 +15,7 @@ | |||
| 15 | 15 | ||
| 16 | 16 | ||
| 17 | 17 | ||
| 18 | + | ||
| 18 | 19 | ||
| 19 | 20 | ||
| 20 | 21 | ||
| @@ -116,3 +117,80 @@ TEST_F(UtestFoldingKernelRsqrtKernel, DoubleSuccess) { | |||
| 116 | Status status = kernel->Compute(op_desc_ptr, input, outputs); | 117 | Status status = kernel->Compute(op_desc_ptr, input, outputs); |
| 117 | EXPECT_EQ(SUCCESS, status); | 118 | EXPECT_EQ(SUCCESS, status); |
| 118 | } | 119 | } |
| 120 | + | ||
| 121 | +TEST_F(UtestFoldingKernelRsqrtKernel, Float16Success) { | ||
| 122 | + OpDescPtr op_desc_ptr = std::make_shared<OpDesc>("RSQRT", RSQRT); | ||
| 123 | + | ||
| 124 | + vector<int64_t> dims_vec_0 = {3}; | ||
| 125 | + vector<fp16_t> data_vec_0 = {4, 16, 100}; | ||
| 126 | + GeTensorDesc tensor_desc_0(GeShape(dims_vec_0), FORMAT_NCHW, DT_FLOAT16); | ||
| 127 | + ConstGeTensorPtr tensor_0 = | ||
| 128 | + std::make_shared<GeTensor>(tensor_desc_0, (uint8_t *)data_vec_0.data(), data_vec_0.size() * sizeof(fp16_t)); | ||
| 129 | + | ||
| 130 | + vector<ConstGeTensorPtr> input = {tensor_0}; | ||
| 131 | + vector<GeTensorPtr> outputs; | ||
| 132 | + | ||
| 133 | + shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(RSQRT); | ||
| 134 | + Status status = kernel->Compute(op_desc_ptr, input, outputs); | ||
| 135 | + EXPECT_EQ(SUCCESS, status); | ||
| 136 | +} | ||
| 137 | + | ||
| 138 | +TEST_F(UtestFoldingKernelRsqrtKernel, Float16HasZero) { | ||
| 139 | + OpDescPtr op_desc_ptr = std::make_shared<OpDesc>("RSQRT", RSQRT); | ||
| 140 | + | ||
| 141 | + vector<int64_t> dims_vec_0 = {2}; | ||
| 142 | + vector<fp16_t> data_vec_0 = {4, 0}; | ||
| 143 | + GeTensorDesc tensor_desc_0(GeShape(dims_vec_0), FORMAT_NCHW, DT_FLOAT16); | ||
| 144 | + ConstGeTensorPtr tensor_0 = | ||
| 145 | + std::make_shared<GeTensor>(tensor_desc_0, (uint8_t *)data_vec_0.data(), data_vec_0.size() * sizeof(fp16_t)); | ||
| 146 | + | ||
| 147 | + vector<ConstGeTensorPtr> input = {tensor_0}; | ||
| 148 | + vector<GeTensorPtr> outputs; | ||
| 149 | + | ||
| 150 | + shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(RSQRT); | ||
| 151 | + Status status = kernel->Compute(op_desc_ptr, input, outputs); | ||
| 152 | + EXPECT_EQ(NOT_CHANGED, status); | ||
| 153 | +} | ||
| 154 | + | ||
| 155 | +TEST_F(UtestFoldingKernelRsqrtKernel, UnsupportedDataType) { | ||
| 156 | + OpDescPtr op_desc_ptr = std::make_shared<OpDesc>("RSQRT", RSQRT); | ||
| 157 | + | ||
| 158 | + vector<int64_t> dims_vec_0 = {2}; | ||
| 159 | + vector<int32_t> data_vec_0 = {4, 16}; | ||
| 160 | + GeTensorDesc tensor_desc_0(GeShape(dims_vec_0), FORMAT_NCHW, DT_INT32); | ||
| 161 | + ConstGeTensorPtr tensor_0 = | ||
| 162 | + std::make_shared<GeTensor>(tensor_desc_0, (uint8_t *)data_vec_0.data(), data_vec_0.size() * sizeof(int32_t)); | ||
| 163 | + | ||
| 164 | + vector<ConstGeTensorPtr> input = {tensor_0}; | ||
| 165 | + vector<GeTensorPtr> outputs; | ||
| 166 | + | ||
| 167 | + shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(RSQRT); | ||
| 168 | + Status status = kernel->Compute(op_desc_ptr, input, outputs); | ||
| 169 | + EXPECT_EQ(NOT_CHANGED, status); | ||
| 170 | +} | ||
| 171 | + | ||
| 172 | +TEST_F(UtestFoldingKernelRsqrtKernel, NullInputTensor) { | ||
| 173 | + OpDescPtr op_desc_ptr = std::make_shared<OpDesc>("RSQRT", RSQRT); | ||
| 174 | + | ||
| 175 | + vector<ConstGeTensorPtr> input = {nullptr}; | ||
| 176 | + vector<GeTensorPtr> outputs; | ||
| 177 | + | ||
| 178 | + shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(RSQRT); | ||
| 179 | + Status status = kernel->Compute(op_desc_ptr, input, outputs); | ||
| 180 | + EXPECT_NE(SUCCESS, status); | ||
| 181 | +} | ||
| 182 | + | ||
| 183 | +TEST_F(UtestFoldingKernelRsqrtKernel, NullOpDesc) { | ||
| 184 | + vector<int64_t> dims_vec_0 = {2}; | ||
| 185 | + vector<float> data_vec_0 = {4.0, 16.0}; | ||
| 186 | + GeTensorDesc tensor_desc_0(GeShape(dims_vec_0), FORMAT_NCHW, DT_FLOAT); | ||
| 187 | + ConstGeTensorPtr tensor_0 = | ||
| 188 | + std::make_shared<GeTensor>(tensor_desc_0, (uint8_t *)data_vec_0.data(), data_vec_0.size() * sizeof(float)); | ||
| 189 | + | ||
| 190 | + vector<ConstGeTensorPtr> input = {tensor_0}; | ||
| 191 | + vector<GeTensorPtr> outputs; | ||
| 192 | + | ||
| 193 | + shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(RSQRT); | ||
| 194 | + Status status = kernel->Compute(nullptr, input, outputs); | ||
| 195 | + EXPECT_NE(SUCCESS, status); | ||
| 196 | +} | ||
| @@ -417,3 +417,105 @@ TEST_F(UtestGraphPassesFoldingKernelSsdPriorboxKernel, ParamInvalid) { | |||
| 417 | ret = kernel.GetNumPriorAndDimSize(1U, 1U, 1U, 1024 * 1024 * 1024 - 1, 1, num_priors, dim_size); | 417 | ret = kernel.GetNumPriorAndDimSize(1U, 1U, 1U, 1024 * 1024 * 1024 - 1, 1, num_priors, dim_size); |
| 418 | EXPECT_EQ(PARAM_INVALID, ret); | 418 | EXPECT_EQ(PARAM_INVALID, ret); |
| 419 | } | 419 | } |
| 420 | + | ||
| 421 | +TEST_F(UtestGraphPassesFoldingKernelSsdPriorboxKernel, GetPriorSizeParamNullOpDesc) { | ||
| 422 | + SsdPriorboxKernel kernel; | ||
| 423 | + int32_t img_width = 0; | ||
| 424 | + int32_t img_height = 0; | ||
| 425 | + float step_w = 0.0; | ||
| 426 | + float step_h = 0.0; | ||
| 427 | + int32_t layer_width = 0; | ||
| 428 | + int32_t layer_height = 0; | ||
| 429 | + Status ret = kernel.GetPriorSizeParam(nullptr, img_width, img_height, step_w, step_h, layer_width, layer_height); | ||
| 430 | + EXPECT_EQ(PARAM_INVALID, ret); | ||
| 431 | +} | ||
| 432 | + | ||
| 433 | +TEST_F(UtestGraphPassesFoldingKernelSsdPriorboxKernel, GetPriorSizeParamMissingImgH) { | ||
| 434 | + OpDescPtr op_desc = std::make_shared<OpDesc>("SSDPriorBox", SSDPRIORBOX); | ||
| 435 | + GeTensorDesc tensor_desc(GeShape({10, 10, 10, 10}), FORMAT_NCHW, DT_FLOAT); | ||
| 436 | + op_desc->AddInputDesc(0, tensor_desc); | ||
| 437 | + | ||
| 438 | + SsdPriorboxKernel kernel; | ||
| 439 | + int32_t img_width = 0; | ||
| 440 | + int32_t img_height = 0; | ||
| 441 | + float step_w = 0.0; | ||
| 442 | + float step_h = 0.0; | ||
| 443 | + int32_t layer_width = 0; | ||
| 444 | + int32_t layer_height = 0; | ||
| 445 | + Status ret = kernel.GetPriorSizeParam(op_desc, img_width, img_height, step_w, step_h, layer_width, layer_height); | ||
| 446 | + EXPECT_EQ(PARAM_INVALID, ret); | ||
| 447 | +} | ||
| 448 | + | ||
| 449 | +TEST_F(UtestGraphPassesFoldingKernelSsdPriorboxKernel, GetPriorSizeParamMissingImgW) { | ||
| 450 | + OpDescPtr op_desc = std::make_shared<OpDesc>("SSDPriorBox", SSDPRIORBOX); | ||
| 451 | + GeTensorDesc tensor_desc(GeShape({10, 10, 10, 10}), FORMAT_NCHW, DT_FLOAT); | ||
| 452 | + op_desc->AddInputDesc(0, tensor_desc); | ||
| 453 | + AttrUtils::SetInt(op_desc, SSD_PRIOR_BOX_ATTR_IMG_H, 100); | ||
| 454 | + | ||
| 455 | + SsdPriorboxKernel kernel; | ||
| 456 | + int32_t img_width = 0; | ||
| 457 | + int32_t img_height = 0; | ||
| 458 | + float step_w = 0.0; | ||
| 459 | + float step_h = 0.0; | ||
| 460 | + int32_t layer_width = 0; | ||
| 461 | + int32_t layer_height = 0; | ||
| 462 | + Status ret = kernel.GetPriorSizeParam(op_desc, img_width, img_height, step_w, step_h, layer_width, layer_height); | ||
| 463 | + EXPECT_EQ(PARAM_INVALID, ret); | ||
| 464 | +} | ||
| 465 | + | ||
| 466 | +TEST_F(UtestGraphPassesFoldingKernelSsdPriorboxKernel, GetPriorSizeParamMissingStepH) { | ||
| 467 | + OpDescPtr op_desc = std::make_shared<OpDesc>("SSDPriorBox", SSDPRIORBOX); | ||
| 468 | + GeTensorDesc tensor_desc(GeShape({10, 10, 10, 10}), FORMAT_NCHW, DT_FLOAT); | ||
| 469 | + op_desc->AddInputDesc(0, tensor_desc); | ||
| 470 | + AttrUtils::SetInt(op_desc, SSD_PRIOR_BOX_ATTR_IMG_H, 100); | ||
| 471 | + AttrUtils::SetInt(op_desc, SSD_PRIOR_BOX_ATTR_IMG_W, 100); | ||
| 472 | + AttrUtils::SetFloat(op_desc, SSD_PRIOR_BOX_ATTR_STEP_W, 1.0); | ||
| 473 | + | ||
| 474 | + SsdPriorboxKernel kernel; | ||
| 475 | + int32_t img_width = 0; | ||
| 476 | + int32_t img_height = 0; | ||
| 477 | + float step_w = 0.0; | ||
| 478 | + float step_h = 0.0; | ||
| 479 | + int32_t layer_width = 0; | ||
| 480 | + int32_t layer_height = 0; | ||
| 481 | + Status ret = kernel.GetPriorSizeParam(op_desc, img_width, img_height, step_w, step_h, layer_width, layer_height); | ||
| 482 | + EXPECT_EQ(PARAM_INVALID, ret); | ||
| 483 | +} | ||
| 484 | + | ||
| 485 | +TEST_F(UtestGraphPassesFoldingKernelSsdPriorboxKernel, GetPriorSizeParamWithStepValue) { | ||
| 486 | + OpDescPtr op_desc = std::make_shared<OpDesc>("SSDPriorBox", SSDPRIORBOX); | ||
| 487 | + GeTensorDesc tensor_desc(GeShape({10, 10, 10, 10}), FORMAT_NCHW, DT_FLOAT); | ||
| 488 | + op_desc->AddInputDesc(0, tensor_desc); | ||
| 489 | + AttrUtils::SetInt(op_desc, SSD_PRIOR_BOX_ATTR_IMG_H, 100); | ||
| 490 | + AttrUtils::SetInt(op_desc, SSD_PRIOR_BOX_ATTR_IMG_W, 100); | ||
| 491 | + AttrUtils::SetFloat(op_desc, SSD_PRIOR_BOX_ATTR_STEP_H, 2.0); | ||
| 492 | + AttrUtils::SetFloat(op_desc, SSD_PRIOR_BOX_ATTR_STEP_W, 2.0); | ||
| 493 | + | ||
| 494 | + SsdPriorboxKernel kernel; | ||
| 495 | + int32_t img_width = 0; | ||
| 496 | + int32_t img_height = 0; | ||
| 497 | + float step_w = 0.0; | ||
| 498 | + float step_h = 0.0; | ||
| 499 | + int32_t layer_width = 0; | ||
| 500 | + int32_t layer_height = 0; | ||
| 501 | + Status ret = kernel.GetPriorSizeParam(op_desc, img_width, img_height, step_w, step_h, layer_width, layer_height); | ||
| 502 | + EXPECT_EQ(SUCCESS, ret); | ||
| 503 | + EXPECT_FLOAT_EQ(step_w, 2.0); | ||
| 504 | + EXPECT_FLOAT_EQ(step_h, 2.0); | ||
| 505 | +} | ||
| 506 | + | ||
| 507 | +TEST_F(UtestGraphPassesFoldingKernelSsdPriorboxKernel, GetPriorSizeParamZeroLayerHeight) { | ||
| 508 | + OpDescPtr op_desc = std::make_shared<OpDesc>("SSDPriorBox", SSDPRIORBOX); | ||
| 509 | + GeTensorDesc tensor_desc(GeShape({10, 10, 0, 10}), FORMAT_NCHW, DT_FLOAT); | ||
| 510 | + op_desc->AddInputDesc(0, tensor_desc); | ||
| 511 | + | ||
| 512 | + SsdPriorboxKernel kernel; | ||
| 513 | + int32_t img_width = 0; | ||
| 514 | + int32_t img_height = 0; | ||
| 515 | + float step_w = 0.0; | ||
| 516 | + float step_h = 0.0; | ||
| 517 | + int32_t layer_width = 0; | ||
| 518 | + int32_t layer_height = 0; | ||
| 519 | + Status ret = kernel.GetPriorSizeParam(op_desc, img_width, img_height, step_w, step_h, layer_width, layer_height); | ||
| 520 | + EXPECT_EQ(PARAM_INVALID, ret); | ||
| 521 | +} | ||
| @@ -1035,3 +1035,63 @@ TEST_F(UtestGraphPassesFoldingKernelStridedSliceKernel, CovEllipsisMaskExpand) { | |||
| 1035 | shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(STRIDEDSLICE); | 1035 | shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(STRIDEDSLICE); |
| 1036 | EXPECT_EQ(kernel->Compute(op_desc_ptr, input, outputs), ge::SUCCESS); | 1036 | EXPECT_EQ(kernel->Compute(op_desc_ptr, input, outputs), ge::SUCCESS); |
| 1037 | } | 1037 | } |
| 1038 | + | ||
| 1039 | +TEST_F(UtestGraphPassesFoldingKernelStridedSliceKernel, NullAttr) { | ||
| 1040 | + vector<int64_t> dims_vec_0 = {2, 2}; | ||
| 1041 | + vector<float> data_vec_0 = {1.0, 2.0, 3.0, 4.0}; | ||
| 1042 | + GeTensorDesc tensor_desc_0(GeShape(dims_vec_0), FORMAT_NCHW, DT_FLOAT); | ||
| 1043 | + ConstGeTensorPtr tensor_0 = | ||
| 1044 | + std::make_shared<GeTensor>(tensor_desc_0, (uint8_t *)data_vec_0.data(), data_vec_0.size() * sizeof(float)); | ||
| 1045 | + | ||
| 1046 | + vector<int32_t> begin_data = {0, 0}; | ||
| 1047 | + vector<int32_t> end_data = {2, 2}; | ||
| 1048 | + vector<int32_t> stride_data = {1, 1}; | ||
| 1049 | + GeTensorDesc idx_desc(GeShape({2}), FORMAT_NCHW, DT_INT32); | ||
| 1050 | + ConstGeTensorPtr tensor_1 = | ||
| 1051 | + std::make_shared<GeTensor>(idx_desc, (uint8_t *)begin_data.data(), begin_data.size() * sizeof(int32_t)); | ||
| 1052 | + ConstGeTensorPtr tensor_2 = | ||
| 1053 | + std::make_shared<GeTensor>(idx_desc, (uint8_t *)end_data.data(), end_data.size() * sizeof(int32_t)); | ||
| 1054 | + ConstGeTensorPtr tensor_3 = | ||
| 1055 | + std::make_shared<GeTensor>(idx_desc, (uint8_t *)stride_data.data(), stride_data.size() * sizeof(int32_t)); | ||
| 1056 | + | ||
| 1057 | + vector<ConstGeTensorPtr> input = {tensor_0, tensor_1, tensor_2, tensor_3}; | ||
| 1058 | + vector<GeTensorPtr> outputs; | ||
| 1059 | + | ||
| 1060 | + shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(STRIDEDSLICE); | ||
| 1061 | + Status status = kernel->Compute(nullptr, input, outputs); | ||
| 1062 | + EXPECT_EQ(NOT_CHANGED, status); | ||
| 1063 | +} | ||
| 1064 | + | ||
| 1065 | +TEST_F(UtestGraphPassesFoldingKernelStridedSliceKernel, MissingMaskAttr) { | ||
| 1066 | + OpDescPtr op_desc_ptr = std::make_shared<OpDesc>("StridedSlice", "StridedSlice"); | ||
| 1067 | + GeTensorDesc dims_tensor_desc(GeShape({2, 2}), FORMAT_NCHW, DT_FLOAT); | ||
| 1068 | + op_desc_ptr->AddInputDesc(0, dims_tensor_desc); | ||
| 1069 | + op_desc_ptr->AddInputDesc(1, dims_tensor_desc); | ||
| 1070 | + op_desc_ptr->AddInputDesc(2, dims_tensor_desc); | ||
| 1071 | + op_desc_ptr->AddInputDesc(3, dims_tensor_desc); | ||
| 1072 | + op_desc_ptr->AddOutputDesc(dims_tensor_desc); | ||
| 1073 | + | ||
| 1074 | + vector<int64_t> dims_vec_0 = {2, 2}; | ||
| 1075 | + vector<float> data_vec_0 = {1.0, 2.0, 3.0, 4.0}; | ||
| 1076 | + GeTensorDesc tensor_desc_0(GeShape(dims_vec_0), FORMAT_NCHW, DT_FLOAT); | ||
| 1077 | + ConstGeTensorPtr tensor_0 = | ||
| 1078 | + std::make_shared<GeTensor>(tensor_desc_0, (uint8_t *)data_vec_0.data(), data_vec_0.size() * sizeof(float)); | ||
| 1079 | + | ||
| 1080 | + vector<int32_t> begin_data = {0, 0}; | ||
| 1081 | + vector<int32_t> end_data = {2, 2}; | ||
| 1082 | + vector<int32_t> stride_data = {1, 1}; | ||
| 1083 | + GeTensorDesc idx_desc(GeShape({2}), FORMAT_NCHW, DT_INT32); | ||
| 1084 | + ConstGeTensorPtr tensor_1 = | ||
| 1085 | + std::make_shared<GeTensor>(idx_desc, (uint8_t *)begin_data.data(), begin_data.size() * sizeof(int32_t)); | ||
| 1086 | + ConstGeTensorPtr tensor_2 = | ||
| 1087 | + std::make_shared<GeTensor>(idx_desc, (uint8_t *)end_data.data(), end_data.size() * sizeof(int32_t)); | ||
| 1088 | + ConstGeTensorPtr tensor_3 = | ||
| 1089 | + std::make_shared<GeTensor>(idx_desc, (uint8_t *)stride_data.data(), stride_data.size() * sizeof(int32_t)); | ||
| 1090 | + | ||
| 1091 | + vector<ConstGeTensorPtr> input = {tensor_0, tensor_1, tensor_2, tensor_3}; | ||
| 1092 | + vector<GeTensorPtr> outputs; | ||
| 1093 | + | ||
| 1094 | + shared_ptr<Kernel> kernel = KernelFactory::Instance().Create(STRIDEDSLICE); | ||
| 1095 | + Status status = kernel->Compute(op_desc_ptr, input, outputs); | ||
| 1096 | + EXPECT_EQ(NOT_CHANGED, status); | ||
| 1097 | +} | ||
| @@ -97,4 +97,25 @@ TEST_F(UTEST_graph_passes_for_pass, run_success) { | |||
| 97 | EXPECT_EQ(graph->GetAllSubgraphs().size(), 3); | 97 | EXPECT_EQ(graph->GetAllSubgraphs().size(), 3); |
| 98 | } | 98 | } |
| 99 | 99 | ||
| 100 | +TEST_F(UTEST_graph_passes_for_pass, find_input_with_index_null_node) { | ||
| 101 | + ForPass for_pass; | ||
| 102 | + NodePtr null_node = nullptr; | ||
| 103 | + auto result = for_pass.FindInputWithIndex(null_node, 0); | ||
| 104 | + EXPECT_EQ(result, nullptr); | ||
| 105 | +} | ||
| 106 | + | ||
| 107 | +TEST_F(UTEST_graph_passes_for_pass, run_no_subgraph_fail) { | ||
| 108 | + ComputeGraphPtr graph = std::make_shared<ComputeGraph>("test_graph"); | ||
| 109 | + NodePtr start_node = graph->AddNode(CreateOpDesc("start", DATA, 1, 1)); | ||
| 110 | + NodePtr limit_node = graph->AddNode(CreateOpDesc("limit", DATA, 1, 1)); | ||
| 111 | + NodePtr delta_node = graph->AddNode(CreateOpDesc("delta", DATA, 1, 1)); | ||
| 112 | + NodePtr for_node = graph->AddNode(CreateOpDesc("for", FOR, 4, 1)); | ||
| 113 | + | ||
| 114 | + EXPECT_EQ(GraphUtils::AddEdge(start_node->GetOutDataAnchor(0), for_node->GetInDataAnchor(0)), SUCCESS); | ||
| 115 | + EXPECT_EQ(GraphUtils::AddEdge(limit_node->GetOutDataAnchor(0), for_node->GetInDataAnchor(1)), SUCCESS); | ||
| 116 | + EXPECT_EQ(GraphUtils::AddEdge(delta_node->GetOutDataAnchor(0), for_node->GetInDataAnchor(2)), SUCCESS); | ||
| 117 | + | ||
| 118 | + ForPass for_pass; | ||
| 119 | + EXPECT_EQ(for_pass.Run(for_node), FAILED); | ||
| 120 | +} | ||
| 100 | } // namespace ge | 121 | } // namespace ge |
| @@ -476,4 +476,18 @@ TEST(UtestGraphPassesHcclContinuousMemcpyPass, testInputContinuousConflict_multi | |||
| 476 | EXPECT_EQ(identity->GetOutDataNodes().at(0)->GetType(), HCOMALLREDUCE); | 476 | EXPECT_EQ(identity->GetOutDataNodes().at(0)->GetType(), HCOMALLREDUCE); |
| 477 | } | 477 | } |
| 478 | } | 478 | } |
| 479 | + | ||
| 480 | +TEST(UtestGraphPassesHcclContinuousMemcpyPass, clear_status_and_is_data_node_test) { | ||
| 481 | + HcclContinuousMemcpyPass pass; | ||
| 482 | + EXPECT_EQ(pass.ClearStatus(), SUCCESS); | ||
| 483 | + EXPECT_TRUE(pass.IsDataNode(CONSTANTOP)); | ||
| 484 | + EXPECT_FALSE(pass.IsDataNode(RELU)); | ||
| 485 | +} | ||
| 486 | + | ||
| 487 | +TEST(UtestGraphPassesHcclContinuousMemcpyPass, check_duplicate_name_test) { | ||
| 488 | + HcclContinuousMemcpyPass pass; | ||
| 489 | + pass.node_num_map_.insert(std::make_pair("ge", 1)); | ||
| 490 | + std::string name = pass.CheckDuplicateName("ge"); | ||
| 491 | + EXPECT_FALSE(name.empty()); | ||
| 492 | +} | ||
| 479 | } // namespace ge | 493 | } // namespace ge |
| @@ -378,4 +378,9 @@ TEST_F(UtestGraphPassesHcclMemcpyPass, Noneed_insert_identity_ShapeComputingSibl | |||
| 378 | EXPECT_EQ(graph->GetDirectNodesSize(), 5); | 378 | EXPECT_EQ(graph->GetDirectNodesSize(), 5); |
| 379 | GE_DUMP(graph, "mem_rw"); | 379 | GE_DUMP(graph, "mem_rw"); |
| 380 | } | 380 | } |
| 381 | + | ||
| 382 | +TEST_F(UtestGraphPassesHcclMemcpyPass, clear_status_test) { | ||
| 383 | + HcclMemcpyPass pass; | ||
| 384 | + EXPECT_EQ(pass.ClearStatus(), SUCCESS); | ||
| 385 | +} | ||
| 381 | } // namespace ge | 386 | } // namespace ge |
| @@ -361,4 +361,68 @@ TEST_F(UtestGraphInferBasePassStub, TestUpdateParentNodeOutputForMultiDims_WhenA | |||
| 361 | EXPECT_EQ(stub_base_pass.call_update_from_subgraph_times, 0); | 361 | EXPECT_EQ(stub_base_pass.call_update_from_subgraph_times, 0); |
| 362 | EXPECT_EQ(stub_base_pass.call_update_from_subgraph_multi_dims_times, 1); | 362 | EXPECT_EQ(stub_base_pass.call_update_from_subgraph_multi_dims_times, 1); |
| 363 | } | 363 | } |
| 364 | + | ||
| 365 | +TEST_F(UtestGraphInferBasePassStub, TestNoSubgraphNode) { | ||
| 366 | + auto builder = NoSubgraphBuilder(); | ||
| 367 | + auto graph = builder.GetGraph(); | ||
| 368 | + auto add1 = graph->FindNode("add1"); | ||
| 369 | + EXPECT_NE(add1, nullptr); | ||
| 370 | + | ||
| 371 | + ChildPassBuilder pass_builder; | ||
| 372 | + auto stub_base_pass = pass_builder.Build(); | ||
| 373 | + EXPECT_EQ(stub_base_pass.Run(add1), SUCCESS); | ||
| 374 | + EXPECT_EQ(stub_base_pass.call_infer_times, 1); | ||
| 375 | +} | ||
| 376 | + | ||
| 377 | +TEST_F(UtestGraphInferBasePassStub, TestSubgraphWithoutNetoutput) { | ||
| 378 | + ut::GraphBuilder builder = ut::GraphBuilder("root_graph"); | ||
| 379 | + auto data1 = builder.AddNode("data1", "Data", 0, 1); | ||
| 380 | + auto case1 = builder.AddNode("case1", CASE, 1, 1); | ||
| 381 | + auto netoutput = builder.AddNode("netoutput", NETOUTPUT, 1, 0); | ||
| 382 | + builder.AddDataEdge(data1, 0, case1, 0); | ||
| 383 | + builder.AddDataEdge(case1, 0, netoutput, 0); | ||
| 384 | + | ||
| 385 | + auto parent_graph = builder.GetGraph(); | ||
| 386 | + | ||
| 387 | + ut::GraphBuilder sub_builder = ut::GraphBuilder("sub_no_netoutput"); | ||
| 388 | + auto sub_data = sub_builder.AddNode("sub_data", "Data", 1, 1, FORMAT_NCHW, DT_INT32, {1, 1}); | ||
| 389 | + AttrUtils::SetInt(sub_data->GetOpDesc(), "_parent_node_index", 0); | ||
| 390 | + auto sub_add = sub_builder.AddNode("sub_add", "Add", 1, 1); | ||
| 391 | + builder.AddDataEdge(sub_data, 0, sub_add, 0); | ||
| 392 | + auto subgraph = sub_builder.GetGraph(); | ||
| 393 | + case1->GetOpDesc()->AddSubgraphName(subgraph->GetName()); | ||
| 394 | + case1->GetOpDesc()->SetSubgraphInstanceName(0, subgraph->GetName()); | ||
| 395 | + subgraph->SetParentNode(case1); | ||
| 396 | + subgraph->SetParentGraph(parent_graph); | ||
| 397 | + EXPECT_EQ(parent_graph->AddSubgraph(subgraph->GetName(), subgraph), GRAPH_SUCCESS); | ||
| 398 | + | ||
| 399 | + ChildPassBuilder pass_builder; | ||
| 400 | + auto stub_base_pass = pass_builder.Build(); | ||
| 401 | + stub_base_pass.SetOption(kOptimizeAfterSubGraph, ""); | ||
| 402 | + EXPECT_NE(stub_base_pass.Run(case1), SUCCESS); | ||
| 403 | +} | ||
| 404 | + | ||
| 405 | +TEST_F(UtestGraphInferBasePassStub, TestInferResultNeedRepass) { | ||
| 406 | + auto builder = NoSubgraphBuilder(); | ||
| 407 | + auto graph = builder.GetGraph(); | ||
| 408 | + auto add1 = graph->FindNode("add1"); | ||
| 409 | + EXPECT_NE(add1, nullptr); | ||
| 410 | + | ||
| 411 | + ChildPassBuilder pass_builder; | ||
| 412 | + pass_builder.SetInferResult(static_cast<graphStatus>(50331647)); | ||
| 413 | + auto stub_base_pass = pass_builder.Build(); | ||
| 414 | + EXPECT_EQ(stub_base_pass.Run(add1), SUCCESS); | ||
| 415 | +} | ||
| 416 | + | ||
| 417 | +TEST_F(UtestGraphInferBasePassStub, TestInferResultFailed) { | ||
| 418 | + auto builder = NoSubgraphBuilder(); | ||
| 419 | + auto graph = builder.GetGraph(); | ||
| 420 | + auto add1 = graph->FindNode("add1"); | ||
| 421 | + EXPECT_NE(add1, nullptr); | ||
| 422 | + | ||
| 423 | + ChildPassBuilder pass_builder; | ||
| 424 | + pass_builder.SetInferResult(static_cast<graphStatus>(1)); | ||
| 425 | + auto stub_base_pass = pass_builder.Build(); | ||
| 426 | + EXPECT_NE(stub_base_pass.Run(add1), SUCCESS); | ||
| 427 | +} | ||
| 364 | } // namespace ge | 428 | } // namespace ge |
| @@ -803,4 +803,51 @@ TEST_F(UtestGraphInferValueRangePass, SkipInfer_WhenOutputShapeSizeTooLarge_InMe | |||
| 803 | 803 | ||
| 804 | GetThreadLocalContext().SetGraphOption(options_back); | 804 | GetThreadLocalContext().SetGraphOption(options_back); |
| 805 | } | 805 | } |
| 806 | + | ||
| 807 | +TEST_F(UtestGraphInferValueRangePass, run_node_without_value_range) { | ||
| 808 | + auto builder = ut::GraphBuilder("g1"); | ||
| 809 | + auto data = builder.AddNode("data", DATA, 0, 1); | ||
| 810 | + auto add = builder.AddNode("add", ADD, 1, 1); | ||
| 811 | + auto netoutput = builder.AddNode("netoutput", NETOUTPUT, 1, 0); | ||
| 812 | + builder.AddDataEdge(data, 0, add, 0); | ||
| 813 | + builder.AddDataEdge(add, 0, netoutput, 0); | ||
| 814 | + | ||
| 815 | + InferValueRangePass pass; | ||
| 816 | + EXPECT_EQ(pass.Run(add), SUCCESS); | ||
| 817 | +} | ||
| 818 | + | ||
| 819 | +TEST_F(UtestGraphInferValueRangePass, run_node_with_unknown_output_shape) { | ||
| 820 | + auto builder = ut::GraphBuilder("g1"); | ||
| 821 | + GeTensorDesc unknown_desc(GeShape({-1, -1}), FORMAT_NCHW, DT_FLOAT); | ||
| 822 | + auto data = builder.AddNode("data", DATA, 0, 1); | ||
| 823 | + data->GetOpDesc()->UpdateOutputDesc(0, unknown_desc); | ||
| 824 | + auto shape_node = builder.AddNode("shape", SHAPE, 1, 1); | ||
| 825 | + shape_node->GetOpDesc()->UpdateInputDesc(0, unknown_desc); | ||
| 826 | + GeTensorDesc out_desc(GeShape({2}), FORMAT_NCHW, DT_INT64); | ||
| 827 | + std::vector<std::pair<int64_t, int64_t>> value_range = {make_pair(1, 4), make_pair(1, 240)}; | ||
| 828 | + out_desc.SetValueRange(value_range); | ||
| 829 | + shape_node->GetOpDesc()->UpdateOutputDesc(0, out_desc); | ||
| 830 | + auto netoutput = builder.AddNode("netoutput", NETOUTPUT, 1, 0); | ||
| 831 | + builder.AddDataEdge(data, 0, shape_node, 0); | ||
| 832 | + builder.AddDataEdge(shape_node, 0, netoutput, 0); | ||
| 833 | + | ||
| 834 | + InferValueRangePass pass; | ||
| 835 | + EXPECT_EQ(pass.Run(shape_node), SUCCESS); | ||
| 836 | +} | ||
| 837 | + | ||
| 838 | +TEST_F(UtestGraphInferValueRangePass, run_node_no_input_value_range) { | ||
| 839 | + auto builder = ut::GraphBuilder("g1"); | ||
| 840 | + auto data = builder.AddNode("data", DATA, 0, 1); | ||
| 841 | + GeTensorDesc desc(GeShape({1, 1}), FORMAT_NCHW, DT_INT32); | ||
| 842 | + data->GetOpDesc()->UpdateOutputDesc(0, desc); | ||
| 843 | + auto add = builder.AddNode("add", ADD, 1, 1); | ||
| 844 | + add->GetOpDesc()->UpdateInputDesc(0, desc); | ||
| 845 | + add->GetOpDesc()->UpdateOutputDesc(0, desc); | ||
| 846 | + auto netoutput = builder.AddNode("netoutput", NETOUTPUT, 1, 0); | ||
| 847 | + builder.AddDataEdge(data, 0, add, 0); | ||
| 848 | + builder.AddDataEdge(add, 0, netoutput, 0); | ||
| 849 | + | ||
| 850 | + InferValueRangePass pass; | ||
| 851 | + EXPECT_EQ(pass.Run(add), SUCCESS); | ||
| 852 | +} | ||
| 806 | } // namespace ge | 853 | } // namespace ge |
| @@ -337,4 +337,61 @@ TEST_F(UtestGraphPassesInputOutputIdentifyPass, UpdateNodeIdxMap_failed) { | |||
| 337 | delete my_pass; | 337 | delete my_pass; |
| 338 | my_pass = nullptr; | 338 | my_pass = nullptr; |
| 339 | } | 339 | } |
| 340 | + | ||
| 341 | +TEST_F(UtestGraphPassesInputOutputIdentifyPass, topo_sort_cycle_failed) { | ||
| 342 | + ComputeGraphPtr graph = std::make_shared<ComputeGraph>("root_graph"); | ||
| 343 | + NodePtr data_node = graph->AddNode(CreateOpDesc("data", DATA, 1, 1)); | ||
| 344 | + NodePtr add_node = graph->AddNode(CreateOpDesc("add", ADD, 2, 1)); | ||
| 345 | + EXPECT_EQ(GraphUtils::AddEdge(data_node->GetOutDataAnchor(0), add_node->GetInDataAnchor(0)), SUCCESS); | ||
| 346 | + EXPECT_EQ(GraphUtils::AddEdge(add_node->GetOutDataAnchor(0), data_node->GetInDataAnchor(0)), SUCCESS); | ||
| 347 | + | ||
| 348 | + InputOutputConnectionIdentifyPass pass; | ||
| 349 | + EXPECT_EQ(pass.Run(graph), INTERNAL_ERROR); | ||
| 350 | +} | ||
| 351 | + | ||
| 352 | +TEST_F(UtestGraphPassesInputOutputIdentifyPass, process_input_node_anchor_not_found) { | ||
| 353 | + ComputeGraphPtr graph = std::make_shared<ComputeGraph>("root_graph"); | ||
| 354 | + NodePtr data_node = graph->AddNode(CreateOpDesc("data", DATA, 0, 1)); | ||
| 355 | + Node2Indexs in_map; | ||
| 356 | + Node2Indexs out_map; | ||
| 357 | + auto my_pass = new (std::nothrow) InputOutputConnectionIdentifyPass; | ||
| 358 | + EXPECT_EQ(my_pass->ProcessInputNode(data_node, in_map, out_map), SUCCESS); | ||
| 359 | + delete my_pass; | ||
| 360 | + my_pass = nullptr; | ||
| 361 | +} | ||
| 362 | + | ||
| 363 | +TEST_F(UtestGraphPassesInputOutputIdentifyPass, process_output_node_anchor_not_found) { | ||
| 364 | + ComputeGraphPtr graph = std::make_shared<ComputeGraph>("root_graph"); | ||
| 365 | + NodePtr output_node = graph->AddNode(CreateOpDesc("netoutput", NETOUTPUT, 1, 0)); | ||
| 366 | + Node2Indexs in_map; | ||
| 367 | + Node2Indexs out_map; | ||
| 368 | + auto my_pass = new (std::nothrow) InputOutputConnectionIdentifyPass; | ||
| 369 | + EXPECT_EQ(my_pass->ProcessOutputNode(output_node, in_map, out_map), SUCCESS); | ||
| 370 | + delete my_pass; | ||
| 371 | + my_pass = nullptr; | ||
| 372 | +} | ||
| 373 | + | ||
| 374 | +TEST_F(UtestGraphPassesInputOutputIdentifyPass, process_input_node_update_idx_map_failed) { | ||
| 375 | + ComputeGraphPtr graph = std::make_shared<ComputeGraph>("root_graph"); | ||
| 376 | + NodePtr data_node = graph->AddNode(CreateOpDesc("data", DATA, 0, 1)); | ||
| 377 | + auto my_pass = new (std::nothrow) InputOutputConnectionIdentifyPass; | ||
| 378 | + my_pass->anchor_to_symbol_[NodeIndexIO(data_node, 0, kOut).ToString()] = "fake_symbol"; | ||
| 379 | + Node2Indexs in_map; | ||
| 380 | + Node2Indexs out_map; | ||
| 381 | + EXPECT_EQ(my_pass->ProcessInputNode(data_node, in_map, out_map), PARAM_INVALID); | ||
| 382 | + delete my_pass; | ||
| 383 | + my_pass = nullptr; | ||
| 384 | +} | ||
| 385 | + | ||
| 386 | +TEST_F(UtestGraphPassesInputOutputIdentifyPass, process_output_node_update_idx_map_failed) { | ||
| 387 | + ComputeGraphPtr graph = std::make_shared<ComputeGraph>("root_graph"); | ||
| 388 | + NodePtr output_node = graph->AddNode(CreateOpDesc("netoutput", NETOUTPUT, 1, 0)); | ||
| 389 | + auto my_pass = new (std::nothrow) InputOutputConnectionIdentifyPass; | ||
| 390 | + my_pass->anchor_to_symbol_[NodeIndexIO(output_node, 0, kIn).ToString()] = "fake_symbol"; | ||
| 391 | + Node2Indexs in_map; | ||
| 392 | + Node2Indexs out_map; | ||
| 393 | + EXPECT_EQ(my_pass->ProcessOutputNode(output_node, in_map, out_map), PARAM_INVALID); | ||
| 394 | + delete my_pass; | ||
| 395 | + my_pass = nullptr; | ||
| 396 | +} | ||
| 340 | } // namespace ge | 397 | } // namespace ge |
| @@ -1007,4 +1007,10 @@ TEST_F(UtestMemcpyAddrAsyncPass, RefData2Hccl_success) { | |||
| 1007 | // 清理环境变量 | 1007 | // 清理环境变量 |
| 1008 | mmSetEnv(kEnvValue, "", 1); | 1008 | mmSetEnv(kEnvValue, "", 1); |
| 1009 | } | 1009 | } |
| 1010 | + | ||
| 1011 | +TEST_F(UtestMemcpyAddrAsyncPass, run_with_empty_graph_test) { | ||
| 1012 | + ComputeGraphPtr graph = std::make_shared<ComputeGraph>("empty_graph"); | ||
| 1013 | + MemcpyAddrAsyncPass pass; | ||
| 1014 | + EXPECT_EQ(pass.Run(graph), SUCCESS); | ||
| 1015 | +} | ||
| 1010 | } // namespace ge | 1016 | } // namespace ge |
| @@ -458,4 +458,29 @@ TEST_F(UtestGraphPassesMergePass, IsMergeInputNeedOptimized2) { | |||
| 458 | EXPECT_EQ(ret, true); | 458 | EXPECT_EQ(ret, true); |
| 459 | } | 459 | } |
| 460 | 460 | ||
| 461 | +TEST_F(UtestGraphPassesMergePass, IsMergeInputNeedOptimized_variable_input) { | ||
| 462 | + auto memcpy_node = NewNode("memcpy", MEMCPYASYNC, 1, 1); | ||
| 463 | + auto var_node = NewNode("var", VARIABLE, 0, 1); | ||
| 464 | + GraphUtils::AddEdge(var_node->GetOutDataAnchor(0), memcpy_node->GetInDataAnchor(0)); | ||
| 465 | + bool ret = pass_.IsMergeInputNeedOptimized(memcpy_node); | ||
| 466 | + EXPECT_EQ(ret, false); | ||
| 467 | +} | ||
| 468 | + | ||
| 469 | +TEST_F(UtestGraphPassesMergePass, IsMergeInputNeedOptimized_non_memcpy_type) { | ||
| 470 | + auto relu_node = NewNode("relu", RELU, 1, 1); | ||
| 471 | + auto data_node = NewNode("data", DATA, 0, 1); | ||
| 472 | + GraphUtils::AddEdge(data_node->GetOutDataAnchor(0), relu_node->GetInDataAnchor(0)); | ||
| 473 | + bool ret = pass_.IsMergeInputNeedOptimized(relu_node); | ||
| 474 | + EXPECT_EQ(ret, false); | ||
| 475 | +} | ||
| 476 | + | ||
| 477 | +TEST_F(UtestGraphPassesMergePass, IsMergeInputNeedOptimized_multi_inputs) { | ||
| 478 | + auto memcpy_node = NewNode("memcpy", MEMCPYASYNC, 2, 1); | ||
| 479 | + auto data1 = NewNode("data1", DATA, 0, 1); | ||
| 480 | + auto data2 = NewNode("data2", DATA, 0, 1); | ||
| 481 | + GraphUtils::AddEdge(data1->GetOutDataAnchor(0), memcpy_node->GetInDataAnchor(0)); | ||
| 482 | + GraphUtils::AddEdge(data2->GetOutDataAnchor(0), memcpy_node->GetInDataAnchor(1)); | ||
| 483 | + bool ret = pass_.IsMergeInputNeedOptimized(memcpy_node); | ||
| 484 | + EXPECT_EQ(ret, false); | ||
| 485 | +} | ||
| 461 | } // namespace ge | 486 | } // namespace ge |
| @@ -642,4 +642,264 @@ TEST_F(UtestMultiBatchClonePass, MinDimsSizeCheck) { | |||
| 642 | EXPECT_EQ(pass_manager.Run(graph), PARAM_INVALID); | 642 | EXPECT_EQ(pass_manager.Run(graph), PARAM_INVALID); |
| 643 | } | 643 | } |
| 644 | 644 | ||
| 645 | +TEST_F(UtestMultiBatchClonePass, EmptyGraphRun) { | ||
| 646 | + PassManager pass_manager; | ||
| 647 | + pass_manager.AddPass("MultiBatchClonePass", new (std::nothrow) MultiBatchClonePass(0)); | ||
| 648 | + ComputeGraphPtr graph = std::make_shared<ComputeGraph>("test_graph"); | ||
| 649 | + GetLocalOmgContext().dynamic_batch_size = "1,2,4"; | ||
| 650 | + EXPECT_EQ(pass_manager.Run(graph), INTERNAL_ERROR); | ||
| 651 | +} | ||
| 652 | + | ||
| 653 | +TEST_F(UtestMultiBatchClonePass, ParseInputShapes_InvalidFormat_ReturnsError) { | ||
| 654 | + std::vector<std::pair<std::string, std::vector<int64_t>>> user_shape_map; | ||
| 655 | + EXPECT_NE(multibatch::ParseInputShapes("invalid_no_colon", user_shape_map), SUCCESS); | ||
| 656 | +} | ||
| 657 | + | ||
| 658 | +TEST_F(UtestMultiBatchClonePass, ParseInputShapes_EmptyValue_ReturnsError) { | ||
| 659 | + std::vector<std::pair<std::string, std::vector<int64_t>>> user_shape_map; | ||
| 660 | + EXPECT_NE(multibatch::ParseInputShapes("data1:", user_shape_map), SUCCESS); | ||
| 661 | +} | ||
| 662 | + | ||
| 663 | +TEST_F(UtestMultiBatchClonePass, ParseInputShapes_FloatValue_ReturnsError) { | ||
| 664 | + std::vector<std::pair<std::string, std::vector<int64_t>>> user_shape_map; | ||
| 665 | + EXPECT_NE(multibatch::ParseInputShapes("data1:1.5,2,3", user_shape_map), SUCCESS); | ||
| 666 | +} | ||
| 667 | + | ||
| 668 | +TEST_F(UtestMultiBatchClonePass, ParseInputShapes_InvalidNumber_ReturnsError) { | ||
| 669 | + std::vector<std::pair<std::string, std::vector<int64_t>>> user_shape_map; | ||
| 670 | + EXPECT_NE(multibatch::ParseInputShapes("data1:abc,2,3", user_shape_map), SUCCESS); | ||
| 671 | +} | ||
| 672 | + | ||
| 673 | +TEST_F(UtestMultiBatchClonePass, ParseInputShapes_ValidInput_ReturnsSuccess) { | ||
| 674 | + std::vector<std::pair<std::string, std::vector<int64_t>>> user_shape_map; | ||
| 675 | + EXPECT_EQ(multibatch::ParseInputShapes("data1:1,2,3;data2:4,5,6", user_shape_map), SUCCESS); | ||
| 676 | + ASSERT_EQ(user_shape_map.size(), 2U); | ||
| 677 | + EXPECT_EQ(user_shape_map[0].first, "data1"); | ||
| 678 | + EXPECT_EQ(user_shape_map[1].first, "data2"); | ||
| 679 | +} | ||
| 680 | + | ||
| 681 | +TEST_F(UtestMultiBatchClonePass, ParseDynamicDims_Empty_ReturnsError) { | ||
| 682 | + multibatch::DimsVector dynamic_dims_vec; | ||
| 683 | + std::vector<std::vector<int64_t>> dynamic_dims_digit_vec; | ||
| 684 | + std::vector<std::pair<std::string, std::vector<int64_t>>> user_shape_map; | ||
| 685 | + EXPECT_NE(multibatch::ParseDynamicDims("", dynamic_dims_vec, dynamic_dims_digit_vec, user_shape_map), SUCCESS); | ||
| 686 | +} | ||
| 687 | + | ||
| 688 | +TEST_F(UtestMultiBatchClonePass, ParseDynamicDims_MismatchedCount_ReturnsError) { | ||
| 689 | + multibatch::DimsVector dynamic_dims_vec; | ||
| 690 | + std::vector<std::vector<int64_t>> dynamic_dims_digit_vec; | ||
| 691 | + std::vector<std::pair<std::string, std::vector<int64_t>>> user_shape_map; | ||
| 692 | + user_shape_map.push_back({"data1", {1, -1, 3}}); | ||
| 693 | + EXPECT_NE(multibatch::ParseDynamicDims("1,2,3", dynamic_dims_vec, dynamic_dims_digit_vec, user_shape_map), SUCCESS); | ||
| 694 | +} | ||
| 695 | + | ||
| 696 | +TEST_F(UtestMultiBatchClonePass, ParseDynamicDims_ValidInput_ReturnsSuccess) { | ||
| 697 | + multibatch::DimsVector dynamic_dims_vec; | ||
| 698 | + std::vector<std::vector<int64_t>> dynamic_dims_digit_vec; | ||
| 699 | + std::vector<std::pair<std::string, std::vector<int64_t>>> user_shape_map; | ||
| 700 | + user_shape_map.push_back({"data1", {1, -1, 3}}); | ||
| 701 | + EXPECT_EQ(multibatch::ParseDynamicDims("2;4", dynamic_dims_vec, dynamic_dims_digit_vec, user_shape_map), SUCCESS); | ||
| 702 | + ASSERT_EQ(dynamic_dims_vec.size(), 2U); | ||
| 703 | + ASSERT_EQ(dynamic_dims_digit_vec.size(), 2U); | ||
| 704 | +} | ||
| 705 | + | ||
| 706 | +TEST_F(UtestMultiBatchClonePass, ParseDynamicShapes_ValidInput_ReturnsSuccess) { | ||
| 707 | + std::vector<std::pair<std::string, std::vector<int64_t>>> user_shape_map; | ||
| 708 | + EXPECT_EQ(multibatch::ParseDynamicShapes("data1:1,2,3;data2:4,5,6", user_shape_map), SUCCESS); | ||
| 709 | + ASSERT_EQ(user_shape_map.size(), 2U); | ||
| 710 | +} | ||
| 711 | + | ||
| 712 | +TEST_F(UtestMultiBatchClonePass, ParseDynamicShapes_InvalidFormat_ReturnsError) { | ||
| 713 | + std::vector<std::pair<std::string, std::vector<int64_t>>> user_shape_map; | ||
| 714 | + EXPECT_NE(multibatch::ParseDynamicShapes("invalid_no_colon", user_shape_map), SUCCESS); | ||
| 715 | +} | ||
| 716 | + | ||
| 717 | +TEST_F(UtestMultiBatchClonePass, ChangeStrToNum_ValidInput) { | ||
| 718 | + int64_t num = 0; | ||
| 719 | + EXPECT_EQ(multibatch::ChangeStrToNum("123", num), SUCCESS); | ||
| 720 | + EXPECT_EQ(num, 123); | ||
| 721 | +} | ||
| 722 | + | ||
| 723 | +TEST_F(UtestMultiBatchClonePass, ChangeStrToNum_InvalidInput) { | ||
| 724 | + int64_t num = 0; | ||
| 725 | + EXPECT_NE(multibatch::ChangeStrToNum("abc", num), SUCCESS); | ||
| 726 | +} | ||
| 727 | + | ||
| 728 | +TEST_F(UtestMultiBatchClonePass, CheckDynamicBatchShape_ValidShape) { | ||
| 729 | + EXPECT_FALSE(multibatch::CheckDynamicBatchShape({1, -1, 3, 224}, "data1")); | ||
| 730 | +} | ||
| 731 | + | ||
| 732 | +TEST_F(UtestMultiBatchClonePass, CheckDynamicBatchShape_InvalidShape) { | ||
| 733 | + EXPECT_FALSE(multibatch::CheckDynamicBatchShape({1, 2, 3, 224}, "data1")); | ||
| 734 | +} | ||
| 735 | + | ||
| 736 | +TEST_F(UtestMultiBatchClonePass, CalcShape_ValidInput) { | ||
| 737 | + GeShape data_shape({1, -1, 3, 224}); | ||
| 738 | + std::vector<int64_t> batch_shape = {2}; | ||
| 739 | + GeShape result(data_shape); | ||
| 740 | + EXPECT_EQ(multibatch::CalcShape(batch_shape, result), SUCCESS); | ||
| 741 | +} | ||
| 742 | + | ||
| 743 | +TEST_F(UtestMultiBatchClonePass, CalcShape_MismatchedCount) { | ||
| 744 | + GeShape data_shape({1, -1, 3, 224}); | ||
| 745 | + std::vector<int64_t> batch_shape = {2, 3}; | ||
| 746 | + GeShape result(data_shape); | ||
| 747 | + EXPECT_NE(multibatch::CalcShape(batch_shape, result), SUCCESS); | ||
| 748 | +} | ||
| 749 | + | ||
| 750 | +TEST_F(UtestMultiBatchClonePass, CheckDynamicImageSizeShape_NCHW) { | ||
| 751 | + EXPECT_TRUE(multibatch::CheckDynamicImageSizeShape({1, 3, -1, -1}, "NCHW")); | ||
| 752 | +} | ||
| 753 | + | ||
| 754 | +TEST_F(UtestMultiBatchClonePass, CheckDynamicImageSizeShape_NHWC) { | ||
| 755 | + EXPECT_TRUE(multibatch::CheckDynamicImageSizeShape({1, -1, -1, 3}, "NHWC")); | ||
| 756 | +} | ||
| 757 | + | ||
| 758 | +TEST_F(UtestMultiBatchClonePass, CheckDynamicImageSizeShape_UnsupportedFormat) { | ||
| 759 | + EXPECT_FALSE(multibatch::CheckDynamicImageSizeShape({1, 3, -1, -1}, "NC1HWC0")); | ||
| 760 | +} | ||
| 761 | + | ||
| 762 | +TEST_F(UtestMultiBatchClonePass, CheckDynamicImageSizeShape_InvalidShape) { | ||
| 763 | + EXPECT_FALSE(multibatch::CheckDynamicImageSizeShape({1, 3, 224, 224}, "NCHW")); | ||
| 764 | +} | ||
| 765 | + | ||
| 766 | +TEST_F(UtestMultiBatchClonePass, CheckDynamicParams_DuplicateShapes) { | ||
| 767 | + std::vector<std::vector<int64_t>> shapes = {{1, 2}, {1, 2}}; | ||
| 768 | + EXPECT_EQ(multibatch::CheckDynamicParams(shapes), PARAM_INVALID); | ||
| 769 | +} | ||
| 770 | + | ||
| 771 | +TEST_F(UtestMultiBatchClonePass, CheckDynamicParams_NegativeDim) { | ||
| 772 | + std::vector<std::vector<int64_t>> shapes = {{1, 2}, {3, -1}}; | ||
| 773 | + EXPECT_EQ(multibatch::CheckDynamicParams(shapes), PARAM_INVALID); | ||
| 774 | +} | ||
| 775 | + | ||
| 776 | +TEST_F(UtestMultiBatchClonePass, CheckDynamicParams_DifferentSize) { | ||
| 777 | + std::vector<std::vector<int64_t>> shapes = {{1, 2}, {3}}; | ||
| 778 | + EXPECT_EQ(multibatch::CheckDynamicParams(shapes), PARAM_INVALID); | ||
| 779 | +} | ||
| 780 | + | ||
| 781 | +TEST_F(UtestMultiBatchClonePass, InitDynamicParams_DynamicBatchSize) { | ||
| 782 | + GetLocalOmgContext().dynamic_batch_size = "1,2,4"; | ||
| 783 | + std::vector<std::vector<int64_t>> shapes; | ||
| 784 | + EXPECT_EQ(multibatch::InitDynamicParams(shapes), SUCCESS); | ||
| 785 | + EXPECT_EQ(shapes.size(), 3U); | ||
| 786 | + GetLocalOmgContext().dynamic_batch_size.clear(); | ||
| 787 | +} | ||
| 788 | + | ||
| 789 | +TEST_F(UtestMultiBatchClonePass, InitDynamicParams_DynamicImageSize) { | ||
| 790 | + GetLocalOmgContext().dynamic_image_size = "224,224;448,448"; | ||
| 791 | + std::vector<std::vector<int64_t>> shapes; | ||
| 792 | + EXPECT_EQ(multibatch::InitDynamicParams(shapes), SUCCESS); | ||
| 793 | + EXPECT_EQ(shapes.size(), 2U); | ||
| 794 | + GetLocalOmgContext().dynamic_image_size.clear(); | ||
| 795 | +} | ||
| 796 | + | ||
| 797 | +TEST_F(UtestMultiBatchClonePass, InitDynamicParams_DynamicDims) { | ||
| 798 | + GetLocalOmgContext().dynamic_dims = "1,224,224;2,448,448"; | ||
| 799 | + std::vector<std::vector<int64_t>> shapes; | ||
| 800 | + EXPECT_EQ(multibatch::InitDynamicParams(shapes), SUCCESS); | ||
| 801 | + EXPECT_EQ(shapes.size(), 2U); | ||
| 802 | + GetLocalOmgContext().dynamic_dims.clear(); | ||
| 803 | +} | ||
| 804 | + | ||
| 805 | +TEST_F(UtestMultiBatchClonePass, StampDynamicType_Basic) { | ||
| 806 | + auto op_desc = std::make_shared<OpDesc>("test_op", "Data"); | ||
| 807 | + GetLocalOmgContext().dynamic_batch_size = "1,2"; | ||
| 808 | + EXPECT_EQ(multibatch::StampDynamicType(op_desc), SUCCESS); | ||
| 809 | + GetLocalOmgContext().dynamic_batch_size.clear(); | ||
| 810 | +} | ||
| 811 | + | ||
| 812 | +TEST_F(UtestMultiBatchClonePass, StampDynamicType_DynamicImage) { | ||
| 813 | + auto op_desc = std::make_shared<OpDesc>("test_op2", "Data"); | ||
| 814 | + GetLocalOmgContext().dynamic_image_size = "224,224;448,448"; | ||
| 815 | + EXPECT_EQ(multibatch::StampDynamicType(op_desc), SUCCESS); | ||
| 816 | + GetLocalOmgContext().dynamic_image_size.clear(); | ||
| 817 | +} | ||
| 818 | + | ||
| 819 | +TEST_F(UtestMultiBatchClonePass, StampDynamicType_DynamicDims) { | ||
| 820 | + auto op_desc = std::make_shared<OpDesc>("test_op3", "Data"); | ||
| 821 | + GetLocalOmgContext().dynamic_dims = "1,2;3,4"; | ||
| 822 | + EXPECT_EQ(multibatch::StampDynamicType(op_desc), SUCCESS); | ||
| 823 | + GetLocalOmgContext().dynamic_dims.clear(); | ||
| 824 | +} | ||
| 825 | + | ||
| 826 | +TEST_F(UtestMultiBatchClonePass, ParserDataToDynamicInfo_Overflow) { | ||
| 827 | + std::vector<std::vector<int64_t>> shapes = {{1, 2, 3, 4}}; | ||
| 828 | + std::vector<std::pair<std::string, std::vector<int64_t>>> data_name_and_shape = {{"data1", {-1, -1, -1, -1, -1}}}; | ||
| 829 | + std::map<std::string, std::vector<std::vector<int64_t>>> data_to_dynamic_info; | ||
| 830 | + EXPECT_EQ(multibatch::ParserDataToDynamicInfo(shapes, data_name_and_shape, data_to_dynamic_info), FAILED); | ||
| 831 | +} | ||
| 832 | + | ||
| 833 | +TEST_F(UtestMultiBatchClonePass, ParserDataToDynamicInfo_Insufficient) { | ||
| 834 | + std::vector<std::vector<int64_t>> shapes = {{1, 2, 3, 4, 5}}; | ||
| 835 | + std::vector<std::pair<std::string, std::vector<int64_t>>> data_name_and_shape = {{"data1", {-1}}}; | ||
| 836 | + std::map<std::string, std::vector<std::vector<int64_t>>> data_to_dynamic_info; | ||
| 837 | + EXPECT_EQ(multibatch::ParserDataToDynamicInfo(shapes, data_name_and_shape, data_to_dynamic_info), SUCCESS); | ||
| 838 | +} | ||
| 839 | + | ||
| 840 | +TEST_F(UtestMultiBatchClonePass, ParserDataToDynamicInfo_ValidMatch) { | ||
| 841 | + std::vector<std::vector<int64_t>> shapes = {{1, 224, 224}, {2, 448, 448}}; | ||
| 842 | + std::vector<std::pair<std::string, std::vector<int64_t>>> data_name_and_shape = {{"data1", {-1, 3, -1, -1}}}; | ||
| 843 | + std::map<std::string, std::vector<std::vector<int64_t>>> data_to_dynamic_info; | ||
| 844 | + EXPECT_EQ(multibatch::ParserDataToDynamicInfo(shapes, data_name_and_shape, data_to_dynamic_info), SUCCESS); | ||
| 845 | +} | ||
| 846 | + | ||
| 847 | +TEST_F(UtestMultiBatchClonePass, BuildSubgraphMuliDimsInput_Basic) { | ||
| 848 | + std::vector<std::pair<std::string, std::vector<int64_t>>> user_shape_map = {{"data1", {-1, 3}}, {"data2", {-1, 4}}}; | ||
| 849 | + multibatch::DimsVector dynamic_dims_vec = {{"3", "3"}, {"4", "4"}}; | ||
| 850 | + std::vector<std::string> subgraph_multi_dims_input_shape; | ||
| 851 | + std::vector<std::string> subgraph_multi_dims_input_dims; | ||
| 852 | + EXPECT_EQ(multibatch::BuildSubgraphMuliDimsInput(user_shape_map, dynamic_dims_vec, subgraph_multi_dims_input_shape, | ||
| 853 | + subgraph_multi_dims_input_dims), | ||
| 854 | + SUCCESS); | ||
| 855 | +} | ||
| 856 | + | ||
| 857 | +TEST_F(UtestMultiBatchClonePass, ParseMaxShapeRange_Basic) { | ||
| 858 | + std::vector<std::pair<std::string, std::vector<int64_t>>> user_shape_map = {{"data1", {-1, 3, -1}}}; | ||
| 859 | + std::vector<std::vector<int64_t>> dynamic_dims_digit_vec = {{1, 224}, {2, 448}}; | ||
| 860 | + std::vector<std::pair<std::string, std::vector<int64_t>>> max_shape_range_map; | ||
| 861 | + EXPECT_EQ(multibatch::ParseMaxShapeRange(user_shape_map, dynamic_dims_digit_vec, max_shape_range_map), SUCCESS); | ||
| 862 | +} | ||
| 863 | + | ||
| 864 | +TEST_F(UtestMultiBatchClonePass, ParseDynamicShapes_NotSorted) { | ||
| 865 | + std::string input_shapes = "data2:-1,3,224,224;data1:-1,3,224,224"; | ||
| 866 | + std::vector<std::pair<std::string, std::vector<int64_t>>> user_shape_map; | ||
| 867 | + EXPECT_NE(multibatch::ParseDynamicShapes(input_shapes, user_shape_map), SUCCESS); | ||
| 868 | +} | ||
| 869 | + | ||
| 870 | +TEST_F(UtestMultiBatchClonePass, ParseDynamicDims_EmptyDim) { | ||
| 871 | + std::vector<std::pair<std::string, std::vector<int64_t>>> user_shape_map = {{"data1", {-1, 3}}}; | ||
| 872 | + multibatch::DimsVector dynamic_dims_vec; | ||
| 873 | + std::vector<std::vector<int64_t>> dynamic_dims_digit_vec; | ||
| 874 | + EXPECT_NE(multibatch::ParseDynamicDims("", dynamic_dims_vec, dynamic_dims_digit_vec, user_shape_map), SUCCESS); | ||
| 875 | +} | ||
| 876 | + | ||
| 877 | +TEST_F(UtestMultiBatchClonePass, CheckDynamicBatchShape_NoDynamicDim) { | ||
| 878 | + EXPECT_FALSE(multibatch::CheckDynamicBatchShape({1, 2, 3, 224}, "data1")); | ||
| 879 | +} | ||
| 880 | + | ||
| 881 | +TEST_F(UtestMultiBatchClonePass, CheckDynamicBatchShape_WithNegativeAfterFirst) { | ||
| 882 | + EXPECT_FALSE(multibatch::CheckDynamicBatchShape({-1, 2, -1, 224}, "data1")); | ||
| 883 | +} | ||
| 884 | + | ||
| 885 | +TEST_F(UtestMultiBatchClonePass, ParseInputShapes_NoColon) { | ||
| 886 | + std::vector<std::pair<std::string, std::vector<int64_t>>> user_shape_map; | ||
| 887 | + EXPECT_NE(multibatch::ParseInputShapes("invalid_no_colon", user_shape_map), SUCCESS); | ||
| 888 | +} | ||
| 889 | + | ||
| 890 | +TEST_F(UtestMultiBatchClonePass, ParseInputShapes_EmptyValue) { | ||
| 891 | + std::vector<std::pair<std::string, std::vector<int64_t>>> user_shape_map; | ||
| 892 | + EXPECT_NE(multibatch::ParseInputShapes("data1:", user_shape_map), SUCCESS); | ||
| 893 | +} | ||
| 894 | + | ||
| 895 | +TEST_F(UtestMultiBatchClonePass, ChangeStrToNum_InvalidChar) { | ||
| 896 | + int64_t num = 0; | ||
| 897 | + EXPECT_NE(multibatch::ChangeStrToNum("abc", num), SUCCESS); | ||
| 898 | +} | ||
| 899 | + | ||
| 900 | +TEST_F(UtestMultiBatchClonePass, ChangeStrToNum_Valid) { | ||
| 901 | + int64_t num = 0; | ||
| 902 | + EXPECT_EQ(multibatch::ChangeStrToNum("123", num), SUCCESS); | ||
| 903 | + EXPECT_EQ(num, 123); | ||
| 904 | +} | ||
| 645 | } // namespace ge | 905 | } // namespace ge |
| @@ -1016,3 +1016,64 @@ TEST_F(UtestGraphPassesNetOutputPass, TryToSetOutputMaxSizeInvalidOption) { | |||
| 1016 | status = pass_managers.Run(compute_graph); | 1016 | status = pass_managers.Run(compute_graph); |
| 1017 | EXPECT_EQ(status, ge::PARAM_INVALID); | 1017 | EXPECT_EQ(status, ge::PARAM_INVALID); |
| 1018 | } | 1018 | } |
| 1019 | + | ||
| 1020 | +TEST_F(UtestGraphPassesNetOutputPass, set_user_def_dtype_by_output_type_test) { | ||
| 1021 | + ge::ComputeGraphPtr compute_graph = build_graph(); | ||
| 1022 | + auto &omg_context = GetLocalOmgContext(); | ||
| 1023 | + auto old_output_type = omg_context.output_type; | ||
| 1024 | + omg_context.output_type = "FP32"; | ||
| 1025 | + omg_context.net_out_nodes.clear(); | ||
| 1026 | + | ||
| 1027 | + ge::PassManager pass_managers; | ||
| 1028 | + pass_managers.AddPass("NetOutputPass", new (std::nothrow) NetOutputPass); | ||
| 1029 | + Status status = pass_managers.Run(compute_graph); | ||
| 1030 | + EXPECT_EQ(status, ge::SUCCESS); | ||
| 1031 | + | ||
| 1032 | + omg_context.output_type = old_output_type; | ||
| 1033 | + omg_context.net_out_nodes.clear(); | ||
| 1034 | +} | ||
| 1035 | + | ||
| 1036 | +TEST_F(UtestGraphPassesNetOutputPass, set_user_def_dtype_by_attr_test) { | ||
| 1037 | + ge::ComputeGraphPtr compute_graph = build_graph(); | ||
| 1038 | + auto mul1 = compute_graph->FindNode("Mul1"); | ||
| 1039 | + ASSERT_NE(mul1, nullptr); | ||
| 1040 | + std::vector<std::string> dt_strs = {"0:FP16"}; | ||
| 1041 | + AttrUtils::SetListStr(mul1->GetOpDesc(), "_user_defined_output_data_type", dt_strs); | ||
| 1042 | + GetLocalOmgContext().net_out_nodes.clear(); | ||
| 1043 | + | ||
| 1044 | + ge::PassManager pass_managers; | ||
| 1045 | + pass_managers.AddPass("NetOutputPass", new (std::nothrow) NetOutputPass); | ||
| 1046 | + Status status = pass_managers.Run(compute_graph); | ||
| 1047 | + EXPECT_EQ(status, ge::SUCCESS); | ||
| 1048 | + GetLocalOmgContext().net_out_nodes.clear(); | ||
| 1049 | +} | ||
| 1050 | + | ||
| 1051 | +TEST_F(UtestGraphPassesNetOutputPass, set_user_def_dtype_invalid_split_test) { | ||
| 1052 | + ge::ComputeGraphPtr compute_graph = build_graph(); | ||
| 1053 | + auto mul1 = compute_graph->FindNode("Mul1"); | ||
| 1054 | + ASSERT_NE(mul1, nullptr); | ||
| 1055 | + std::vector<std::string> dt_strs = {"invalid_str"}; | ||
| 1056 | + AttrUtils::SetListStr(mul1->GetOpDesc(), "_user_defined_output_data_type", dt_strs); | ||
| 1057 | + GetLocalOmgContext().net_out_nodes.clear(); | ||
| 1058 | + | ||
| 1059 | + ge::PassManager pass_managers; | ||
| 1060 | + pass_managers.AddPass("NetOutputPass", new (std::nothrow) NetOutputPass); | ||
| 1061 | + Status status = pass_managers.Run(compute_graph); | ||
| 1062 | + EXPECT_EQ(status, ge::SUCCESS); | ||
| 1063 | + GetLocalOmgContext().net_out_nodes.clear(); | ||
| 1064 | +} | ||
| 1065 | + | ||
| 1066 | +TEST_F(UtestGraphPassesNetOutputPass, set_user_def_fp16_5hd_test) { | ||
| 1067 | + ge::ComputeGraphPtr compute_graph = build_graph(); | ||
| 1068 | + auto mul1 = compute_graph->FindNode("Mul1"); | ||
| 1069 | + ASSERT_NE(mul1, nullptr); | ||
| 1070 | + std::vector<std::string> fp16_strs = {"0:1"}; | ||
| 1071 | + AttrUtils::SetListStr(mul1->GetOpDesc(), "_user_defined_output_fp16_5hd", fp16_strs); | ||
| 1072 | + GetLocalOmgContext().net_out_nodes.clear(); | ||
| 1073 | + | ||
| 1074 | + ge::PassManager pass_managers; | ||
| 1075 | + pass_managers.AddPass("NetOutputPass", new (std::nothrow) NetOutputPass); | ||
| 1076 | + Status status = pass_managers.Run(compute_graph); | ||
| 1077 | + EXPECT_EQ(status, ge::SUCCESS); | ||
| 1078 | + GetLocalOmgContext().net_out_nodes.clear(); | ||
| 1079 | +} | ||
| @@ -137,3 +137,31 @@ TEST_F(UtestGraphPassesNextIterationPass, FindTargetNodeFailed) { | |||
| 137 | auto ret = pass_.FindTargetNode(null_node, std::string(), false, null_node); | 137 | auto ret = pass_.FindTargetNode(null_node, std::string(), false, null_node); |
| 138 | EXPECT_EQ(PARAM_INVALID, ret); | 138 | EXPECT_EQ(PARAM_INVALID, ret); |
| 139 | } | 139 | } |
| 140 | + | ||
| 141 | +TEST_F(UtestGraphPassesNextIterationPass, CreateActiveNodeSuccess) { | ||
| 142 | + auto graph = BuildGraphNextIterationPass(); | ||
| 143 | + ge::NextIterationPass pass_; | ||
| 144 | + auto active_node = pass_.CreateActiveNode(graph, "test_active"); | ||
| 145 | + EXPECT_NE(active_node, nullptr); | ||
| 146 | + EXPECT_EQ(active_node->GetType(), STREAMACTIVE); | ||
| 147 | +} | ||
| 148 | + | ||
| 149 | +TEST_F(UtestGraphPassesNextIterationPass, ClearStatusSuccess) { | ||
| 150 | + ge::NextIterationPass pass_; | ||
| 151 | + EXPECT_EQ(pass_.ClearStatus(), SUCCESS); | ||
| 152 | +} | ||
| 153 | + | ||
| 154 | +TEST_F(UtestGraphPassesNextIterationPass, RunEmptyGraph) { | ||
| 155 | + ComputeGraphPtr graph = std::make_shared<ComputeGraph>("empty"); | ||
| 156 | + ge::NextIterationPass pass_; | ||
| 157 | + EXPECT_EQ(pass_.Run(graph), SUCCESS); | ||
| 158 | +} | ||
| 159 | + | ||
| 160 | +TEST_F(UtestGraphPassesNextIterationPass, FindTargetNodeLoopCondNotFound) { | ||
| 161 | + auto graph = BuildGraphNextIterationPass(); | ||
| 162 | + ge::NextIterationPass pass_; | ||
| 163 | + auto merge_node = graph->FindNode("merge"); | ||
| 164 | + NodePtr target_node = nullptr; | ||
| 165 | + auto ret = pass_.FindTargetNode(merge_node, LOOPCOND, true, target_node); | ||
| 166 | + EXPECT_EQ(INTERNAL_ERROR, ret); | ||
| 167 | +} | ||
| @@ -496,5 +496,28 @@ TEST_F(UtestGraphPassesParallelGgroupPass, ctrl_edge_skip_data) { | |||
| 496 | auto ret = pass_.AddCtrlEdge(input_node1, input_node2); | 496 | auto ret = pass_.AddCtrlEdge(input_node1, input_node2); |
| 497 | EXPECT_EQ(ret, SUCCESS); | 497 | EXPECT_EQ(ret, SUCCESS); |
| 498 | } | 498 | } |
| 499 | + | ||
| 500 | +TEST_F(UtestGraphPassesParallelGgroupPass, ctrl_edge_same_node) { | ||
| 501 | + NodePtr node1 = NewNode("node1", RELU, 0, 1); | ||
| 502 | + auto ret = pass_.AddCtrlEdge(node1, node1); | ||
| 503 | + EXPECT_EQ(ret, SUCCESS); | ||
| 504 | +} | ||
| 505 | + | ||
| 506 | +TEST_F(UtestGraphPassesParallelGgroupPass, ctrl_edge_already_linked) { | ||
| 507 | + NodePtr node1 = NewNode("node1", RELU, 0, 1); | ||
| 508 | + NodePtr node2 = NewNode("node2", RELU, 1, 1); | ||
| 509 | + GraphUtils::AddEdge(node1->GetOutControlAnchor(), node2->GetInControlAnchor()); | ||
| 510 | + auto ret = pass_.AddCtrlEdge(node1, node2); | ||
| 511 | + EXPECT_EQ(ret, SUCCESS); | ||
| 512 | +} | ||
| 513 | + | ||
| 514 | +TEST_F(UtestGraphPassesParallelGgroupPass, topo_sort_cycle_failed) { | ||
| 515 | + NodePtr node1 = NewNode("node1", RELU, 1, 1); | ||
| 516 | + NodePtr node2 = NewNode("node2", RELU, 1, 1); | ||
| 517 | + GraphUtils::AddEdge(node1->GetOutDataAnchor(0), node2->GetInDataAnchor(0)); | ||
| 518 | + GraphUtils::AddEdge(node2->GetOutDataAnchor(0), node1->GetInDataAnchor(0)); | ||
| 519 | + auto ret = pass_.Run(graph_); | ||
| 520 | + EXPECT_EQ(ret, FAILED); | ||
| 521 | +} | ||
| 499 | } // namespace | 522 | } // namespace |
| 500 | } // namespace ge | 523 | } // namespace ge |
| @@ -248,3 +248,26 @@ TEST_F(UtestGraphPassesPassUtils, update_ref_attr_no_ref_nodes) { | |||
| 248 | EXPECT_EQ(PassUtils::UpdateRefAttr(graph), SUCCESS); | 248 | EXPECT_EQ(PassUtils::UpdateRefAttr(graph), SUCCESS); |
| 249 | EXPECT_FALSE(node_relu->GetOpDesc()->HasAttr(ATTR_NAME_REFERENCE)); | 249 | EXPECT_FALSE(node_relu->GetOpDesc()->HasAttr(ATTR_NAME_REFERENCE)); |
| 250 | } | 250 | } |
| 251 | + | ||
| 252 | +TEST_F(UtestGraphPassesPassUtils, is_constant_null_node) { | ||
| 253 | + EXPECT_FALSE(PassUtils::IsConstant(nullptr)); | ||
| 254 | +} | ||
| 255 | + | ||
| 256 | +TEST_F(UtestGraphPassesPassUtils, set_out_node_weight_null_src) { | ||
| 257 | + OutDataAnchorPtr anchor = nullptr; | ||
| 258 | + EXPECT_EQ(PassUtils::SetOutNodeWeight(anchor, nullptr), PARAM_INVALID); | ||
| 259 | +} | ||
| 260 | + | ||
| 261 | +TEST_F(UtestGraphPassesPassUtils, set_out_node_weight_empty_weights) { | ||
| 262 | + ge::ComputeGraphPtr graph = std::make_shared<ComputeGraph>("test_empty_weights"); | ||
| 263 | + ge::NodePtr const_node = NodeBuilder("const1", CONSTANT).AddOutputDesc({1}).Build(graph); | ||
| 264 | + ge::NodePtr relu = NodeBuilder("relu1", RELU).AddInputDesc({1}).Build(graph); | ||
| 265 | + GraphUtils::AddEdge(const_node->GetOutDataAnchor(0), relu->GetInDataAnchor(0)); | ||
| 266 | + EXPECT_EQ(PassUtils::SetOutNodeWeight(const_node->GetOutDataAnchor(0), const_node), PARAM_INVALID); | ||
| 267 | +} | ||
| 268 | + | ||
| 269 | +TEST_F(UtestGraphPassesPassUtils, set_out_node_weight_not_const) { | ||
| 270 | + ge::ComputeGraphPtr graph = std::make_shared<ComputeGraph>("test_not_const"); | ||
| 271 | + ge::NodePtr relu = NodeBuilder("relu1", RELU).AddInputDesc({1}).AddOutputDesc({1}).Build(graph); | ||
| 272 | + EXPECT_EQ(PassUtils::SetOutNodeWeight(relu->GetOutDataAnchor(0), relu), SUCCESS); | ||
| 273 | +} | ||
| @@ -378,4 +378,148 @@ TEST_F(UtestRecomputePass, test_graph_with_no_recompute_nodes) { | |||
| 378 | graph->AddNode(x_desc); | 378 | graph->AddNode(x_desc); |
| 379 | EXPECT_EQ(recompute_pass.Run(graph), SUCCESS); | 379 | EXPECT_EQ(recompute_pass.Run(graph), SUCCESS); |
| 380 | } | 380 | } |
| 381 | + | ||
| 382 | +TEST_F(UtestRecomputePass, test_recompute_node_with_resource_output) { | ||
| 383 | + map<std::string, std::string> options{{RESOURCE_CONFIG_PATH, "/tmp"}}; | ||
| 384 | + GetThreadLocalContext().SetSessionOption(options); | ||
| 385 | + map<std::string, std::string> graph_options{{RECOMPUTE, "manual"}}; | ||
| 386 | + GetThreadLocalContext().SetGraphOption(graph_options); | ||
| 387 | + RecomputePass recompute_pass; | ||
| 388 | + ComputeGraphPtr graph = std::make_shared<ComputeGraph>("test_graph"); | ||
| 389 | + GeTensorDesc scalar_tensor(GeShape(), ge::FORMAT_NCHW, ge::DT_FLOAT); | ||
| 390 | + GeTensorDesc resource_tensor(GeShape(), ge::FORMAT_NCHW, ge::DT_RESOURCE); | ||
| 391 | + | ||
| 392 | + auto x_desc = std::make_shared<OpDesc>("x", DATA); | ||
| 393 | + x_desc->AddOutputDesc(scalar_tensor); | ||
| 394 | + auto x_node = graph->AddNode(x_desc); | ||
| 395 | + | ||
| 396 | + auto pow_desc = std::make_shared<OpDesc>("pow", POW); | ||
| 397 | + (void)ge::AttrUtils::SetBool(pow_desc, "_recompute", true); | ||
| 398 | + pow_desc->AddInputDesc(scalar_tensor); | ||
| 399 | + pow_desc->AddOutputDesc(resource_tensor); | ||
| 400 | + auto pow_node = graph->AddNode(pow_desc); | ||
| 401 | + | ||
| 402 | + auto bp_desc = std::make_shared<OpDesc>("gradients/bp", SQRT); | ||
| 403 | + (void)ge::AttrUtils::SetBool(bp_desc, "_backward", true); | ||
| 404 | + bp_desc->AddInputDesc(resource_tensor); | ||
| 405 | + bp_desc->AddOutputDesc(resource_tensor); | ||
| 406 | + auto bp_node = graph->AddNode(bp_desc); | ||
| 407 | + | ||
| 408 | + auto output_desc = std::make_shared<OpDesc>("NetOutput", "NetOutput"); | ||
| 409 | + output_desc->AddInputDesc(resource_tensor); | ||
| 410 | + output_desc->AddOutputDesc(resource_tensor); | ||
| 411 | + auto output_node = graph->AddNode(output_desc); | ||
| 412 | + | ||
| 413 | + (void)GraphUtils::AddEdge(x_node->GetOutDataAnchor(0), pow_node->GetInDataAnchor(0)); | ||
| 414 | + (void)GraphUtils::AddEdge(pow_node->GetOutDataAnchor(0), bp_node->GetInDataAnchor(0)); | ||
| 415 | + (void)GraphUtils::AddEdge(bp_node->GetOutDataAnchor(0), output_node->GetInDataAnchor(0)); | ||
| 416 | + | ||
| 417 | + EXPECT_EQ(recompute_pass.Run(graph), SUCCESS); | ||
| 418 | + bool is_recompute = true; | ||
| 419 | + (void)ge::AttrUtils::GetBool(pow_node->GetOpDesc(), "_recompute", is_recompute); | ||
| 420 | + EXPECT_TRUE(is_recompute); | ||
| 421 | +} | ||
| 422 | + | ||
| 423 | +TEST_F(UtestRecomputePass, test_multiple_recompute_to_same_backward) { | ||
| 424 | + map<std::string, std::string> options{{RESOURCE_CONFIG_PATH, "/tmp"}}; | ||
| 425 | + GetThreadLocalContext().SetSessionOption(options); | ||
| 426 | + map<std::string, std::string> graph_options{{RECOMPUTE, "manual"}}; | ||
| 427 | + GetThreadLocalContext().SetGraphOption(graph_options); | ||
| 428 | + RecomputePass recompute_pass; | ||
| 429 | + ComputeGraphPtr graph = std::make_shared<ComputeGraph>("test_graph"); | ||
| 430 | + GeTensorDesc scalar_tensor(GeShape(), ge::FORMAT_NCHW, ge::DT_FLOAT); | ||
| 431 | + | ||
| 432 | + auto x_desc = std::make_shared<OpDesc>("x", DATA); | ||
| 433 | + x_desc->AddOutputDesc(scalar_tensor); | ||
| 434 | + auto x_node = graph->AddNode(x_desc); | ||
| 435 | + | ||
| 436 | + auto pow_a_desc = std::make_shared<OpDesc>("pow_a", POW); | ||
| 437 | + (void)ge::AttrUtils::SetBool(pow_a_desc, "_recompute", true); | ||
| 438 | + pow_a_desc->AddInputDesc(scalar_tensor); | ||
| 439 | + pow_a_desc->AddOutputDesc(scalar_tensor); | ||
| 440 | + auto pow_a_node = graph->AddNode(pow_a_desc); | ||
| 441 | + | ||
| 442 | + auto pow_b_desc = std::make_shared<OpDesc>("pow_b", POW); | ||
| 443 | + (void)ge::AttrUtils::SetBool(pow_b_desc, "_recompute", true); | ||
| 444 | + pow_b_desc->AddInputDesc(scalar_tensor); | ||
| 445 | + pow_b_desc->AddOutputDesc(scalar_tensor); | ||
| 446 | + auto pow_b_node = graph->AddNode(pow_b_desc); | ||
| 447 | + | ||
| 448 | + auto bp3_desc = std::make_shared<OpDesc>("gradients/bp3", SQRT); | ||
| 449 | + (void)ge::AttrUtils::SetBool(bp3_desc, "_backward", true); | ||
| 450 | + bp3_desc->AddInputDesc(scalar_tensor); | ||
| 451 | + bp3_desc->AddOutputDesc(scalar_tensor); | ||
| 452 | + auto bp3_node = graph->AddNode(bp3_desc); | ||
| 453 | + | ||
| 454 | + auto bp_desc = std::make_shared<OpDesc>("gradients/bp", ADDN); | ||
| 455 | + (void)ge::AttrUtils::SetBool(bp_desc, "_backward", true); | ||
| 456 | + bp_desc->AddInputDesc(scalar_tensor); | ||
| 457 | + bp_desc->AddInputDesc(scalar_tensor); | ||
| 458 | + bp_desc->AddInputDesc(scalar_tensor); | ||
| 459 | + bp_desc->AddOutputDesc(scalar_tensor); | ||
| 460 | + auto bp_node = graph->AddNode(bp_desc); | ||
| 461 | + | ||
| 462 | + auto output_desc = std::make_shared<OpDesc>("NetOutput", "NetOutput"); | ||
| 463 | + output_desc->AddInputDesc(scalar_tensor); | ||
| 464 | + output_desc->AddOutputDesc(scalar_tensor); | ||
| 465 | + auto output_node = graph->AddNode(output_desc); | ||
| 466 | + | ||
| 467 | + (void)GraphUtils::AddEdge(x_node->GetOutDataAnchor(0), pow_a_node->GetInDataAnchor(0)); | ||
| 468 | + (void)GraphUtils::AddEdge(x_node->GetOutDataAnchor(0), pow_b_node->GetInDataAnchor(0)); | ||
| 469 | + (void)GraphUtils::AddEdge(x_node->GetOutDataAnchor(0), bp3_node->GetInDataAnchor(0)); | ||
| 470 | + (void)GraphUtils::AddEdge(pow_a_node->GetOutDataAnchor(0), bp_node->GetInDataAnchor(0)); | ||
| 471 | + (void)GraphUtils::AddEdge(pow_b_node->GetOutDataAnchor(0), bp_node->GetInDataAnchor(1)); | ||
| 472 | + (void)GraphUtils::AddEdge(bp3_node->GetOutDataAnchor(0), bp_node->GetInDataAnchor(2)); | ||
| 473 | + (void)GraphUtils::AddEdge(bp_node->GetOutDataAnchor(0), output_node->GetInDataAnchor(0)); | ||
| 474 | + | ||
| 475 | + EXPECT_EQ(recompute_pass.Run(graph), SUCCESS); | ||
| 476 | +} | ||
| 477 | + | ||
| 478 | +TEST_F(UtestRecomputePass, test_single_recompute_multi_anchor_to_same_backward) { | ||
| 479 | + map<std::string, std::string> options{{RESOURCE_CONFIG_PATH, "/tmp"}}; | ||
| 480 | + GetThreadLocalContext().SetSessionOption(options); | ||
| 481 | + map<std::string, std::string> graph_options{{RECOMPUTE, "manual"}}; | ||
| 482 | + GetThreadLocalContext().SetGraphOption(graph_options); | ||
| 483 | + RecomputePass recompute_pass; | ||
| 484 | + ComputeGraphPtr graph = std::make_shared<ComputeGraph>("test_graph"); | ||
| 485 | + GeTensorDesc scalar_tensor(GeShape(), ge::FORMAT_NCHW, ge::DT_FLOAT); | ||
| 486 | + | ||
| 487 | + auto x_desc = std::make_shared<OpDesc>("x", DATA); | ||
| 488 | + x_desc->AddOutputDesc(scalar_tensor); | ||
| 489 | + auto x_node = graph->AddNode(x_desc); | ||
| 490 | + | ||
| 491 | + auto pow_a_desc = std::make_shared<OpDesc>("pow_a", POW); | ||
| 492 | + (void)ge::AttrUtils::SetBool(pow_a_desc, "_recompute", true); | ||
| 493 | + pow_a_desc->AddInputDesc(scalar_tensor); | ||
| 494 | + pow_a_desc->AddOutputDesc(scalar_tensor); | ||
| 495 | + auto pow_a_node = graph->AddNode(pow_a_desc); | ||
| 496 | + | ||
| 497 | + auto bp3_desc = std::make_shared<OpDesc>("gradients/bp3", SQRT); | ||
| 498 | + (void)ge::AttrUtils::SetBool(bp3_desc, "_backward", true); | ||
| 499 | + bp3_desc->AddInputDesc(scalar_tensor); | ||
| 500 | + bp3_desc->AddOutputDesc(scalar_tensor); | ||
| 501 | + auto bp3_node = graph->AddNode(bp3_desc); | ||
| 502 | + | ||
| 503 | + auto bp_desc = std::make_shared<OpDesc>("gradients/bp", ADDN); | ||
| 504 | + (void)ge::AttrUtils::SetBool(bp_desc, "_backward", true); | ||
| 505 | + bp_desc->AddInputDesc(scalar_tensor); | ||
| 506 | + bp_desc->AddInputDesc(scalar_tensor); | ||
| 507 | + bp_desc->AddInputDesc(scalar_tensor); | ||
| 508 | + bp_desc->AddOutputDesc(scalar_tensor); | ||
| 509 | + auto bp_node = graph->AddNode(bp_desc); | ||
| 510 | + | ||
| 511 | + auto output_desc = std::make_shared<OpDesc>("NetOutput", "NetOutput"); | ||
| 512 | + output_desc->AddInputDesc(scalar_tensor); | ||
| 513 | + output_desc->AddOutputDesc(scalar_tensor); | ||
| 514 | + auto output_node = graph->AddNode(output_desc); | ||
| 515 | + | ||
| 516 | + (void)GraphUtils::AddEdge(x_node->GetOutDataAnchor(0), pow_a_node->GetInDataAnchor(0)); | ||
| 517 | + (void)GraphUtils::AddEdge(x_node->GetOutDataAnchor(0), bp3_node->GetInDataAnchor(0)); | ||
| 518 | + (void)GraphUtils::AddEdge(pow_a_node->GetOutDataAnchor(0), bp_node->GetInDataAnchor(0)); | ||
| 519 | + (void)GraphUtils::AddEdge(pow_a_node->GetOutDataAnchor(0), bp_node->GetInDataAnchor(1)); | ||
| 520 | + (void)GraphUtils::AddEdge(bp3_node->GetOutDataAnchor(0), bp_node->GetInDataAnchor(2)); | ||
| 521 | + (void)GraphUtils::AddEdge(bp_node->GetOutDataAnchor(0), output_node->GetInDataAnchor(0)); | ||
| 522 | + | ||
| 523 | + EXPECT_EQ(recompute_pass.Run(graph), SUCCESS); | ||
| 524 | +} | ||
| 381 | } // namespace ge | 525 | } // namespace ge |
| @@ -309,3 +309,25 @@ TEST_F(UTEST_graph_passes_set_input_output_offset_pass, SetOutputOffsetNoTaskNot | |||
| 309 | SetInputOutputOffsetPass pass; | 309 | SetInputOutputOffsetPass pass; |
| 310 | EXPECT_EQ(pass.Run(graph), ge::SUCCESS); | 310 | EXPECT_EQ(pass.Run(graph), ge::SUCCESS); |
| 311 | } | 311 | } |
| 312 | + | ||
| 313 | +TEST_F(UTEST_graph_passes_set_input_output_offset_pass, run_with_connect_input_attr) { | ||
| 314 | + ComputeGraphPtr graph = std::make_shared<ComputeGraph>("test_connect_input"); | ||
| 315 | + auto op_desc = std::make_shared<OpDesc>("node1", RELU); | ||
| 316 | + op_desc->AddInputDesc(GeTensorDesc()); | ||
| 317 | + op_desc->AddOutputDesc(GeTensorDesc()); | ||
| 318 | + AttrUtils::SetListInt(op_desc, ATTR_NAME_NODE_CONNECT_INPUT, {0}); | ||
| 319 | + auto node = graph->AddNode(op_desc); | ||
| 320 | + SetInputOutputOffsetPass pass2; | ||
| 321 | + EXPECT_EQ(pass2.Run(graph), ge::SUCCESS); | ||
| 322 | +} | ||
| 323 | + | ||
| 324 | +TEST_F(UTEST_graph_passes_set_input_output_offset_pass, run_with_connect_output_attr) { | ||
| 325 | + ComputeGraphPtr graph = std::make_shared<ComputeGraph>("test_connect_output"); | ||
| 326 | + auto op_desc = std::make_shared<OpDesc>("node1", RELU); | ||
| 327 | + op_desc->AddInputDesc(GeTensorDesc()); | ||
| 328 | + op_desc->AddOutputDesc(GeTensorDesc()); | ||
| 329 | + AttrUtils::SetListInt(op_desc, ATTR_NAME_NODE_CONNECT_OUTPUT, {0}); | ||
| 330 | + auto node = graph->AddNode(op_desc); | ||
| 331 | + SetInputOutputOffsetPass pass3; | ||
| 332 | + EXPECT_EQ(pass3.Run(graph), ge::SUCCESS); | ||
| 333 | +} | ||
| @@ -511,3 +511,21 @@ TEST_F(UtestSubexpressionMigrationPass, graph_no_need_migration_data_anchor_inde | |||
| 511 | ASSERT_NE(case_node, nullptr); | 511 | ASSERT_NE(case_node, nullptr); |
| 512 | EXPECT_EQ(case_node->GetAllInDataAnchorsSize(), 2); | 512 | EXPECT_EQ(case_node->GetAllInDataAnchorsSize(), 2); |
| 513 | } | 513 | } |
| 514 | + | ||
| 515 | +TEST_F(UtestSubexpressionMigrationPass, run_empty_graph_success) { | ||
| 516 | + ComputeGraphPtr graph = std::make_shared<ComputeGraph>("test_graph"); | ||
| 517 | + SubexpressionMigrationPass pass; | ||
| 518 | + EXPECT_EQ(pass.Run(graph), SUCCESS); | ||
| 519 | +} | ||
| 520 | + | ||
| 521 | +TEST_F(UtestSubexpressionMigrationPass, run_graph_without_case_node) { | ||
| 522 | + ComputeGraphPtr graph = std::make_shared<ComputeGraph>("test_graph"); | ||
| 523 | + auto builder = ut::GraphBuilder("g1"); | ||
| 524 | + auto data = builder.AddNode("data", DATA, 0, 1); | ||
| 525 | + auto add = builder.AddNode("add", ADD, 1, 1); | ||
| 526 | + auto netoutput = builder.AddNode("netoutput", NETOUTPUT, 1, 0); | ||
| 527 | + builder.AddDataEdge(data, 0, add, 0); | ||
| 528 | + builder.AddDataEdge(add, 0, netoutput, 0); | ||
| 529 | + SubexpressionMigrationPass pass; | ||
| 530 | + EXPECT_EQ(pass.Run(builder.GetGraph()), SUCCESS); | ||
| 531 | +} | ||
| @@ -389,4 +389,23 @@ TEST_F(UtestSubgraphConstMigrationPass, subgraph_expression_migration) { | |||
| 389 | make_multibatch_graph_subexpression(graph); | 389 | make_multibatch_graph_subexpression(graph); |
| 390 | EXPECT_EQ(pass_manager.Run(graph), SUCCESS); | 390 | EXPECT_EQ(pass_manager.Run(graph), SUCCESS); |
| 391 | } | 391 | } |
| 392 | + | ||
| 393 | +TEST_F(UtestSubgraphConstMigrationPass, run_empty_graph) { | ||
| 394 | + PassManager pass_manager; | ||
| 395 | + pass_manager.AddPass("SubgraphConstMigrationPass", new (std::nothrow) SubgraphConstMigrationPass); | ||
| 396 | + ComputeGraphPtr graph = std::make_shared<ComputeGraph>("test_graph"); | ||
| 397 | + EXPECT_EQ(pass_manager.Run(graph), SUCCESS); | ||
| 398 | +} | ||
| 399 | + | ||
| 400 | +TEST_F(UtestSubgraphConstMigrationPass, run_graph_without_subgraph) { | ||
| 401 | + PassManager pass_manager; | ||
| 402 | + pass_manager.AddPass("SubgraphConstMigrationPass", new (std::nothrow) SubgraphConstMigrationPass); | ||
| 403 | + ComputeGraphPtr graph = std::make_shared<ComputeGraph>("test_graph"); | ||
| 404 | + auto data = MakeNode(graph, 0, 1, "data", "Data"); | ||
| 405 | + auto add = MakeNode(graph, 1, 1, "add", ADD); | ||
| 406 | + auto netoutput = MakeNode(graph, 1, 0, "netoutput", NETOUTPUT); | ||
| 407 | + GraphUtils::AddEdge(data->GetOutDataAnchor(0), add->GetInDataAnchor(0)); | ||
| 408 | + GraphUtils::AddEdge(add->GetOutDataAnchor(0), netoutput->GetInDataAnchor(0)); | ||
| 409 | + EXPECT_EQ(pass_manager.Run(graph), SUCCESS); | ||
| 410 | +} | ||
| 392 | } // namespace ge | 411 | } // namespace ge |
| @@ -152,4 +152,23 @@ TEST_F(SubgraphMultiDimsPassTest, base_test_success) { | |||
| 152 | 152 | ||
| 153 | EXPECT_EQ(pass_manager.Run(graph), SUCCESS); | 153 | EXPECT_EQ(pass_manager.Run(graph), SUCCESS); |
| 154 | } | 154 | } |
| 155 | + | ||
| 156 | +TEST_F(SubgraphMultiDimsPassTest, run_without_multi_dims_index) { | ||
| 157 | + PassManager pass_manager; | ||
| 158 | + pass_manager.AddPass("SubgraphMultiDimsClonePass", new (std::nothrow) SubgraphMultiDimsClonePass); | ||
| 159 | + pass_manager.AddPass("SubgraphMultiDimsPass", new (std::nothrow) SubgraphMultiDimsPass); | ||
| 160 | + ComputeGraphPtr graph = std::make_shared<ComputeGraph>("test_graph"); | ||
| 161 | + | ||
| 162 | + CreateRootGraph(graph); | ||
| 163 | + CreateSubGraph(graph); | ||
| 164 | + | ||
| 165 | + EXPECT_EQ(pass_manager.Run(graph), SUCCESS); | ||
| 166 | +} | ||
| 167 | + | ||
| 168 | +TEST_F(SubgraphMultiDimsPassTest, run_with_empty_graph) { | ||
| 169 | + PassManager pass_manager; | ||
| 170 | + pass_manager.AddPass("SubgraphMultiDimsClonePass", new (std::nothrow) SubgraphMultiDimsClonePass); | ||
| 171 | + ComputeGraphPtr graph = std::make_shared<ComputeGraph>("test_graph"); | ||
| 172 | + EXPECT_EQ(pass_manager.Run(graph), SUCCESS); | ||
| 173 | +} | ||
| 155 | } // namespace ge | 174 | } // namespace ge |
| @@ -840,4 +840,27 @@ TEST_F(UtestGraphPassesSubgraphPass, hcom_to_netoutput_discard_reuse_input_attr) | |||
| 840 | after_reuse_flag); | 840 | after_reuse_flag); |
| 841 | EXPECT_TRUE(after_reuse_flag == false); | 841 | EXPECT_TRUE(after_reuse_flag == false); |
| 842 | } | 842 | } |
| 843 | + | ||
| 844 | +TEST_F(UtestGraphPassesSubgraphPass, run_with_empty_graph_test) { | ||
| 845 | + ComputeGraphPtr graph = std::make_shared<ComputeGraph>("empty_graph"); | ||
| 846 | + PassManager pass_managers; | ||
| 847 | + pass_managers.AddPass("SubgraphPass", new (std::nothrow) SubgraphPass); | ||
| 848 | + EXPECT_EQ(pass_managers.Run(graph), SUCCESS); | ||
| 849 | +} | ||
| 850 | + | ||
| 851 | +TEST_F(UtestGraphPassesSubgraphPass, run_with_simple_graph_test) { | ||
| 852 | + ComputeGraphPtr graph = std::make_shared<ComputeGraph>("simple_graph"); | ||
| 853 | + auto data_op = std::make_shared<OpDesc>("data", DATA); | ||
| 854 | + data_op->AddOutputDesc(GeTensorDesc()); | ||
| 855 | + auto data = graph->AddNode(data_op); | ||
| 856 | + auto netoutput_op = std::make_shared<OpDesc>("netoutput", NETOUTPUT); | ||
| 857 | + netoutput_op->AddInputDesc(GeTensorDesc()); | ||
| 858 | + auto netoutput = graph->AddNode(netoutput_op); | ||
| 859 | + GraphUtils::AddEdge(data->GetOutDataAnchor(0), netoutput->GetInDataAnchor(0)); | ||
| 860 | + graph->TopologicalSorting(); | ||
| 861 | + | ||
| 862 | + PassManager pass_managers; | ||
| 863 | + pass_managers.AddPass("SubgraphPass", new (std::nothrow) SubgraphPass); | ||
| 864 | + EXPECT_EQ(pass_managers.Run(graph), SUCCESS); | ||
| 865 | +} | ||
| 843 | } // namespace ge | 866 | } // namespace ge |
| @@ -418,4 +418,17 @@ TEST_F(UtestSwitchDataEdgesBypass, SwitchConnectToMerge) { | |||
| 418 | EXPECT_EQ(merge1->GetInDataNodes().size(), 1); | 418 | EXPECT_EQ(merge1->GetInDataNodes().size(), 1); |
| 419 | EXPECT_EQ(merge1->GetInDataNodes().at(0)->GetName(), memcpy1->GetName()); | 419 | EXPECT_EQ(merge1->GetInDataNodes().at(0)->GetName(), memcpy1->GetName()); |
| 420 | } | 420 | } |
| 421 | + | ||
| 422 | +TEST_F(UtestSwitchDataEdgesBypass, SwitchWithOneInputAnchor) { | ||
| 423 | + ut::GraphBuilder builder("g10"); | ||
| 424 | + auto data1 = builder.AddNode("data1", "Data", 1, 1); | ||
| 425 | + auto switch1 = builder.AddNode("switch1", "Switch", 1, 2); | ||
| 426 | + auto addn1 = builder.AddNode("addn1", "AddN", 1, 1); | ||
| 427 | + builder.AddDataEdge(data1, 0, switch1, 0); | ||
| 428 | + builder.AddDataEdge(switch1, 0, addn1, 0); | ||
| 429 | + auto graph = builder.GetGraph(); | ||
| 430 | + | ||
| 431 | + SwitchDataEdgesBypass pass; | ||
| 432 | + EXPECT_EQ(pass.Run(graph), SUCCESS); | ||
| 433 | +} | ||
| 421 | } // namespace ge | 434 | } // namespace ge |
| @@ -419,4 +419,67 @@ TEST_F(UtestSwitchDeadBranchElimination, ParsePred_DT_FLOAT3) { | |||
| 419 | } | 419 | } |
| 420 | } | 420 | } |
| 421 | 421 | ||
| 422 | +TEST_F(UtestSwitchDeadBranchElimination, switch_no_out_nodes) { | ||
| 423 | + ut::GraphBuilder builder = ut::GraphBuilder("g1"); | ||
| 424 | + auto data1 = builder.AddNode("data1", "Data", 0, 1); | ||
| 425 | + auto const1 = builder.AddNode("const1", "Const", 0, 1); | ||
| 426 | + auto switch1 = builder.AddNode("switch1", "Switch", 2, 2); | ||
| 427 | + builder.AddDataEdge(data1, 0, switch1, 0); | ||
| 428 | + builder.AddDataEdge(const1, 0, switch1, 1); | ||
| 429 | + auto graph = builder.GetGraph(); | ||
| 430 | + | ||
| 431 | + int32_t weight[1] = {1}; | ||
| 432 | + GeTensorDesc weight_desc(GeShape({1}), FORMAT_NHWC, DT_INT32); | ||
| 433 | + GeTensorPtr tensor = std::make_shared<GeTensor>(weight_desc, (uint8_t *)weight, sizeof(weight)); | ||
| 434 | + OpDescUtils::SetWeights(const1, {tensor}); | ||
| 435 | + | ||
| 436 | + SwitchDeadBranchElimination switch_pass; | ||
| 437 | + EXPECT_EQ(switch_pass.Run(switch1), SUCCESS); | ||
| 438 | +} | ||
| 439 | + | ||
| 440 | +TEST_F(UtestSwitchDeadBranchElimination, switch_pred_not_const) { | ||
| 441 | + ut::GraphBuilder builder = ut::GraphBuilder("g1"); | ||
| 442 | + auto data1 = builder.AddNode("data1", "Data", 0, 1); | ||
| 443 | + auto data2 = builder.AddNode("data2", "Data", 0, 1); | ||
| 444 | + auto switch1 = builder.AddNode("switch1", "Switch", 2, 2); | ||
| 445 | + auto relu1 = builder.AddNode("relu1", "Relu", 1, 1); | ||
| 446 | + builder.AddDataEdge(data1, 0, switch1, 0); | ||
| 447 | + builder.AddDataEdge(data2, 0, switch1, 1); | ||
| 448 | + builder.AddDataEdge(switch1, 0, relu1, 0); | ||
| 449 | + auto graph = builder.GetGraph(); | ||
| 450 | + | ||
| 451 | + SwitchDeadBranchElimination switch_pass; | ||
| 452 | + EXPECT_EQ(switch_pass.Run(switch1), SUCCESS); | ||
| 453 | +} | ||
| 454 | + | ||
| 455 | +TEST_F(UtestSwitchDeadBranchElimination, switch_pred_null) { | ||
| 456 | + ut::GraphBuilder builder = ut::GraphBuilder("g1"); | ||
| 457 | + auto data1 = builder.AddNode("data1", "Data", 0, 1); | ||
| 458 | + auto switch1 = builder.AddNode("switch1", "Switch", 2, 2); | ||
| 459 | + auto relu1 = builder.AddNode("relu1", "Relu", 1, 1); | ||
| 460 | + builder.AddDataEdge(data1, 0, switch1, 0); | ||
| 461 | + builder.AddDataEdge(switch1, 0, relu1, 0); | ||
| 462 | + auto graph = builder.GetGraph(); | ||
| 463 | + | ||
| 464 | + SwitchDeadBranchElimination switch_pass; | ||
| 465 | + EXPECT_EQ(switch_pass.Run(switch1), SUCCESS); | ||
| 466 | +} | ||
| 467 | + | ||
| 468 | +TEST_F(UtestSwitchDeadBranchElimination, switch_data_input_null) { | ||
| 469 | + ut::GraphBuilder builder = ut::GraphBuilder("g1"); | ||
| 470 | + auto const1 = builder.AddNode("const1", "Const", 0, 1); | ||
| 471 | + auto switch1 = builder.AddNode("switch1", "Switch", 2, 2); | ||
| 472 | + auto relu1 = builder.AddNode("relu1", "Relu", 1, 1); | ||
| 473 | + builder.AddDataEdge(const1, 0, switch1, 1); | ||
| 474 | + builder.AddDataEdge(switch1, 0, relu1, 0); | ||
| 475 | + auto graph = builder.GetGraph(); | ||
| 476 | + | ||
| 477 | + int32_t weight[1] = {1}; | ||
| 478 | + GeTensorDesc weight_desc(GeShape({1}), FORMAT_NHWC, DT_INT32); | ||
| 479 | + GeTensorPtr tensor = std::make_shared<GeTensor>(weight_desc, (uint8_t *)weight, sizeof(weight)); | ||
| 480 | + OpDescUtils::SetWeights(const1, {tensor}); | ||
| 481 | + | ||
| 482 | + SwitchDeadBranchElimination switch_pass; | ||
| 483 | + EXPECT_EQ(switch_pass.Run(switch1), SUCCESS); | ||
| 484 | +} | ||
| 422 | } // namespace ge | 485 | } // namespace ge |
| @@ -159,3 +159,55 @@ TEST_F(UtestSwitch2StreamSwitchPass, ClearStatusClearsAllMembers) { | |||
| 159 | EXPECT_TRUE(switch2StrPass.switch_node_map_.empty()); | 159 | EXPECT_TRUE(switch2StrPass.switch_node_map_.empty()); |
| 160 | EXPECT_TRUE(switch2StrPass.node_num_map_.empty()); | 160 | EXPECT_TRUE(switch2StrPass.node_num_map_.empty()); |
| 161 | } | 161 | } |
| 162 | + | ||
| 163 | +TEST_F(UtestSwitch2StreamSwitchPass, MarkCycleDependenceEmptyMap) { | ||
| 164 | + SwitchToStreamSwitchPass switch2StrPass; | ||
| 165 | + std::unordered_map<NodePtr, std::vector<NodePtr>> empty_map; | ||
| 166 | + switch2StrPass.MarkCycleDependence(empty_map); | ||
| 167 | + EXPECT_TRUE(switch2StrPass.switch_cyclic_map_.empty()); | ||
| 168 | +} | ||
| 169 | + | ||
| 170 | +TEST_F(UtestSwitch2StreamSwitchPass, RunWithCompleteSwitchGraph) { | ||
| 171 | + GeTensorDesc bool_tensor(GeShape(), ge::FORMAT_NCHW, ge::DT_BOOL); | ||
| 172 | + GeTensorDesc scalar_tensor(GeShape(), ge::FORMAT_NCHW, ge::DT_FLOAT); | ||
| 173 | + | ||
| 174 | + auto graph = std::make_shared<ComputeGraph>("test_complete_switch"); | ||
| 175 | + | ||
| 176 | + auto data_desc = std::make_shared<OpDesc>("data", DATA); | ||
| 177 | + data_desc->AddOutputDesc(scalar_tensor); | ||
| 178 | + auto data_node = graph->AddNode(data_desc); | ||
| 179 | + | ||
| 180 | + auto less_desc = std::make_shared<OpDesc>("less", LESS); | ||
| 181 | + less_desc->AddInputDesc(scalar_tensor); | ||
| 182 | + less_desc->AddInputDesc(scalar_tensor); | ||
| 183 | + less_desc->AddOutputDesc(bool_tensor); | ||
| 184 | + auto less_node = graph->AddNode(less_desc); | ||
| 185 | + | ||
| 186 | + auto switch_desc = std::make_shared<OpDesc>("switch1", SWITCH); | ||
| 187 | + switch_desc->AddInputDesc(scalar_tensor); | ||
| 188 | + switch_desc->AddInputDesc(bool_tensor); | ||
| 189 | + switch_desc->AddOutputDesc(scalar_tensor); | ||
| 190 | + switch_desc->AddOutputDesc(scalar_tensor); | ||
| 191 | + auto switch_node = graph->AddNode(switch_desc); | ||
| 192 | + | ||
| 193 | + auto identity_desc = std::make_shared<OpDesc>("identity", IDENTITY); | ||
| 194 | + identity_desc->AddInputDesc(scalar_tensor); | ||
| 195 | + identity_desc->AddOutputDesc(scalar_tensor); | ||
| 196 | + auto identity_node = graph->AddNode(identity_desc); | ||
| 197 | + | ||
| 198 | + auto netoutput_desc = std::make_shared<OpDesc>("netoutput", NETOUTPUT); | ||
| 199 | + netoutput_desc->AddInputDesc(scalar_tensor); | ||
| 200 | + auto netoutput_node = graph->AddNode(netoutput_desc); | ||
| 201 | + | ||
| 202 | + GraphUtils::AddEdge(data_node->GetOutDataAnchor(0), less_node->GetInDataAnchor(0)); | ||
| 203 | + GraphUtils::AddEdge(data_node->GetOutDataAnchor(0), less_node->GetInDataAnchor(1)); | ||
| 204 | + GraphUtils::AddEdge(data_node->GetOutDataAnchor(0), switch_node->GetInDataAnchor(0)); | ||
| 205 | + GraphUtils::AddEdge(less_node->GetOutDataAnchor(0), switch_node->GetInDataAnchor(1)); | ||
| 206 | + GraphUtils::AddEdge(switch_node->GetOutDataAnchor(0), identity_node->GetInDataAnchor(0)); | ||
| 207 | + GraphUtils::AddEdge(identity_node->GetOutDataAnchor(0), netoutput_node->GetInDataAnchor(0)); | ||
| 208 | + | ||
| 209 | + SwitchToStreamSwitchPass switch2StrPass; | ||
| 210 | + auto ret = switch2StrPass.Run(graph); | ||
| 211 | + switch2StrPass.ClearStatus(); | ||
| 212 | + EXPECT_EQ(ret, SUCCESS); | ||
| 213 | +} | ||
| @@ -0,0 +1,92 @@ | |||
| 1 | +/** | ||
| 2 | + * Copyright (c) 2026 Huawei Technologies Co., Ltd. | ||
| 3 | + * This program is free software, you can redistribute it and/or modify it under the terms and conditions of | ||
| 4 | + * CANN Open Software License Agreement Version 2.0 (the "License"). | ||
| 5 | + * Please refer to the License for details. You may not use this file except in compliance with the License. | ||
| 6 | + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, | ||
| 7 | + * INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. | ||
| 8 | + * See LICENSE in the root of the software repository for the full text of the License. | ||
| 9 | + */ | ||
| 10 | + | ||
| 11 | + | ||
| 12 | + | ||
| 13 | + | ||
| 14 | + | ||
| 15 | + | ||
| 16 | + | ||
| 17 | + | ||
| 18 | +namespace ge { | ||
| 19 | +class UtestSymbolicCondRemovePass : public testing::Test { | ||
| 20 | + protected: | ||
| 21 | + void SetUp() {} | ||
| 22 | + void TearDown() {} | ||
| 23 | +}; | ||
| 24 | + | ||
| 25 | +TEST_F(UtestSymbolicCondRemovePass, run_non_cond_node_success) { | ||
| 26 | + std::vector<GeTensor> graph_inputs; | ||
| 27 | + SymbolicCondRemovePass pass(graph_inputs); | ||
| 28 | + ComputeGraphPtr graph = std::make_shared<ComputeGraph>("test_graph"); | ||
| 29 | + GeTensorDesc tensor_desc(GeShape({1}), FORMAT_NCHW, DT_FLOAT); | ||
| 30 | + auto op_desc = std::make_shared<OpDesc>("add", ADD); | ||
| 31 | + op_desc->AddInputDesc(tensor_desc); | ||
| 32 | + op_desc->AddOutputDesc(tensor_desc); | ||
| 33 | + auto node = graph->AddNode(op_desc); | ||
| 34 | + EXPECT_EQ(pass.Run(node), SUCCESS); | ||
| 35 | +} | ||
| 36 | + | ||
| 37 | +TEST_F(UtestSymbolicCondRemovePass, run_null_node_failed) { | ||
| 38 | + std::vector<GeTensor> graph_inputs; | ||
| 39 | + SymbolicCondRemovePass pass(graph_inputs); | ||
| 40 | + NodePtr node = nullptr; | ||
| 41 | + EXPECT_NE(pass.Run(node), SUCCESS); | ||
| 42 | +} | ||
| 43 | + | ||
| 44 | +TEST_F(UtestSymbolicCondRemovePass, run_if_node_cond_not_data_success) { | ||
| 45 | + std::vector<GeTensor> graph_inputs; | ||
| 46 | + SymbolicCondRemovePass pass(graph_inputs); | ||
| 47 | + ComputeGraphPtr graph = std::make_shared<ComputeGraph>("test_graph"); | ||
| 48 | + GeTensorDesc tensor_desc(GeShape({1}), FORMAT_NCHW, DT_FLOAT); | ||
| 49 | + auto const_desc = std::make_shared<OpDesc>("const", CONSTANTOP); | ||
| 50 | + const_desc->AddOutputDesc(tensor_desc); | ||
| 51 | + auto const_node = graph->AddNode(const_desc); | ||
| 52 | + | ||
| 53 | + auto if_desc = std::make_shared<OpDesc>("if", "If"); | ||
| 54 | + if_desc->AddInputDesc(tensor_desc); | ||
| 55 | + if_desc->AddOutputDesc(tensor_desc); | ||
| 56 | + auto if_node = graph->AddNode(if_desc); | ||
| 57 | + (void)GraphUtils::AddEdge(const_node->GetOutDataAnchor(0), if_node->GetInDataAnchor(0)); | ||
| 58 | + | ||
| 59 | + EXPECT_EQ(pass.Run(if_node), SUCCESS); | ||
| 60 | +} | ||
| 61 | + | ||
| 62 | +TEST_F(UtestSymbolicCondRemovePass, run_case_node_cond_not_data_success) { | ||
| 63 | + std::vector<GeTensor> graph_inputs; | ||
| 64 | + SymbolicCondRemovePass pass(graph_inputs); | ||
| 65 | + ComputeGraphPtr graph = std::make_shared<ComputeGraph>("test_graph"); | ||
| 66 | + GeTensorDesc tensor_desc(GeShape({1}), FORMAT_NCHW, DT_FLOAT); | ||
| 67 | + auto const_desc = std::make_shared<OpDesc>("const", CONSTANTOP); | ||
| 68 | + const_desc->AddOutputDesc(tensor_desc); | ||
| 69 | + auto const_node = graph->AddNode(const_desc); | ||
| 70 | + | ||
| 71 | + auto case_desc = std::make_shared<OpDesc>("case", "Case"); | ||
| 72 | + case_desc->AddInputDesc(tensor_desc); | ||
| 73 | + case_desc->AddOutputDesc(tensor_desc); | ||
| 74 | + auto case_node = graph->AddNode(case_desc); | ||
| 75 | + (void)GraphUtils::AddEdge(const_node->GetOutDataAnchor(0), case_node->GetInDataAnchor(0)); | ||
| 76 | + | ||
| 77 | + EXPECT_EQ(pass.Run(case_node), SUCCESS); | ||
| 78 | +} | ||
| 79 | + | ||
| 80 | +TEST_F(UtestSymbolicCondRemovePass, run_if_node_no_cond_input_failed) { | ||
| 81 | + std::vector<GeTensor> graph_inputs; | ||
| 82 | + SymbolicCondRemovePass pass(graph_inputs); | ||
| 83 | + ComputeGraphPtr graph = std::make_shared<ComputeGraph>("test_graph"); | ||
| 84 | + GeTensorDesc tensor_desc(GeShape({1}), FORMAT_NCHW, DT_FLOAT); | ||
| 85 | + auto if_desc = std::make_shared<OpDesc>("if", "If"); | ||
| 86 | + if_desc->AddInputDesc(tensor_desc); | ||
| 87 | + if_desc->AddOutputDesc(tensor_desc); | ||
| 88 | + auto if_node = graph->AddNode(if_desc); | ||
| 89 | + | ||
| 90 | + EXPECT_NE(pass.Run(if_node), SUCCESS); | ||
| 91 | +} | ||
| 92 | +} // namespace ge | ||
| @@ -2673,3 +2673,54 @@ TEST_F(UtestTensorMoveDeletePass, KeepTMWhenPendingOrderDoesNotBypassRWConflict) | |||
| 2673 | EXPECT_NE(builder.GetGraph()->FindNode("TensorMove"), nullptr); | 2673 | EXPECT_NE(builder.GetGraph()->FindNode("TensorMove"), nullptr); |
| 2674 | EXPECT_FALSE(sibling_node->GetOutControlAnchor()->IsLinkedWith(succ_node->GetInControlAnchor())); | 2674 | EXPECT_FALSE(sibling_node->GetOutControlAnchor()->IsLinkedWith(succ_node->GetInControlAnchor())); |
| 2675 | } | 2675 | } |
| 2676 | + | ||
| 2677 | +TEST_F(UtestTensorMoveDeletePass, NoTensorMoveInGraph) { | ||
| 2678 | + auto builder = ut::GraphBuilder("g1"); | ||
| 2679 | + auto data = builder.AddNode("data", DATA, 0, 1); | ||
| 2680 | + auto add = builder.AddNode("add", ADD, 1, 1); | ||
| 2681 | + auto netoutput = builder.AddNode("netoutput", NETOUTPUT, 1, 0); | ||
| 2682 | + builder.AddDataEdge(data, 0, add, 0); | ||
| 2683 | + builder.AddDataEdge(add, 0, netoutput, 0); | ||
| 2684 | + | ||
| 2685 | + ge::GEPass pass(builder.GetGraph()); | ||
| 2686 | + TensorMoveDeletePass tensor_move_delete_pass; | ||
| 2687 | + ge::NamesToPass names_to_pass; | ||
| 2688 | + names_to_pass.emplace_back("TensorMoveDeletePass", &tensor_move_delete_pass); | ||
| 2689 | + EXPECT_EQ(pass.Run(names_to_pass), SUCCESS); | ||
| 2690 | +} | ||
| 2691 | + | ||
| 2692 | +TEST_F(UtestTensorMoveDeletePass, TensorMoveWithNoNeedConstantFoldingAttr) { | ||
| 2693 | + auto builder = ut::GraphBuilder("g1"); | ||
| 2694 | + auto data = builder.AddNode("data", DATA, 0, 1); | ||
| 2695 | + auto tensor_move = builder.AddNode("TensorMove", TENSORMOVE, 1, 1); | ||
| 2696 | + auto add = builder.AddNode("add", ADD, 1, 1); | ||
| 2697 | + auto netoutput = builder.AddNode("netoutput", NETOUTPUT, 1, 0); | ||
| 2698 | + AttrUtils::SetBool(tensor_move->GetOpDesc(), ATTR_NO_NEED_CONSTANT_FOLDING, true); | ||
| 2699 | + builder.AddDataEdge(data, 0, tensor_move, 0); | ||
| 2700 | + builder.AddDataEdge(tensor_move, 0, add, 0); | ||
| 2701 | + builder.AddDataEdge(add, 0, netoutput, 0); | ||
| 2702 | + | ||
| 2703 | + ge::GEPass pass(builder.GetGraph()); | ||
| 2704 | + TensorMoveDeletePass tensor_move_delete_pass; | ||
| 2705 | + ge::NamesToPass names_to_pass; | ||
| 2706 | + names_to_pass.emplace_back("TensorMoveDeletePass", &tensor_move_delete_pass); | ||
| 2707 | + EXPECT_EQ(pass.Run(names_to_pass), SUCCESS); | ||
| 2708 | + EXPECT_NE(builder.GetGraph()->FindNode("TensorMove"), nullptr); | ||
| 2709 | +} | ||
| 2710 | + | ||
| 2711 | +TEST_F(UtestTensorMoveDeletePass, TensorMoveFromVariable) { | ||
| 2712 | + auto builder = ut::GraphBuilder("g1"); | ||
| 2713 | + auto var = builder.AddNode("var", VARIABLE, 0, 1); | ||
| 2714 | + auto tensor_move = builder.AddNode("TensorMove", TENSORMOVE, 1, 1); | ||
| 2715 | + auto add = builder.AddNode("add", ADD, 1, 1); | ||
| 2716 | + auto netoutput = builder.AddNode("netoutput", NETOUTPUT, 1, 0); | ||
| 2717 | + builder.AddDataEdge(var, 0, tensor_move, 0); | ||
| 2718 | + builder.AddDataEdge(tensor_move, 0, add, 0); | ||
| 2719 | + builder.AddDataEdge(add, 0, netoutput, 0); | ||
| 2720 | + | ||
| 2721 | + ge::GEPass pass(builder.GetGraph()); | ||
| 2722 | + TensorMoveDeletePass tensor_move_delete_pass; | ||
| 2723 | + ge::NamesToPass names_to_pass; | ||
| 2724 | + names_to_pass.emplace_back("TensorMoveDeletePass", &tensor_move_delete_pass); | ||
| 2725 | + EXPECT_EQ(pass.Run(names_to_pass), SUCCESS); | ||
| 2726 | +} | ||
| @@ -576,3 +576,39 @@ TEST_F(UtestGraphPassesTransOpBreadthFusionPass, cast_fusion_with_same_type) { | |||
| 576 | EXPECT_EQ(SUCCESS, status); | 576 | EXPECT_EQ(SUCCESS, status); |
| 577 | EXPECT_EQ(graph->GetDirectNodesSize(), 4); | 577 | EXPECT_EQ(graph->GetDirectNodesSize(), 4); |
| 578 | } | 578 | } |
| 579 | + | ||
| 580 | +TEST_F(UtestGraphPassesTransOpBreadthFusionPass, transpose_d_with_perm_test) { | ||
| 581 | + ge::ComputeGraphPtr graph = std::make_shared<ComputeGraph>("test"); | ||
| 582 | + auto data = NodeBuilder("data", DATA).AddOutputDesc({1, 1, 1, 1}).Build(graph); | ||
| 583 | + auto transposed = | ||
| 584 | + NodeBuilder("transposed", TRANSPOSED).AddInputDesc({1, 1, 1, 1}).AddOutputDesc({1, 1, 1, 1}).Build(graph); | ||
| 585 | + AttrUtils::SetListInt(transposed->GetOpDesc(), "perm", {0, 2, 1, 3}); | ||
| 586 | + auto relu = NodeBuilder("relu", RELU).AddInputDesc({1, 1, 1, 1}).Build(graph); | ||
| 587 | + GraphUtils::AddEdge(data->GetOutDataAnchor(0), transposed->GetInDataAnchor(0)); | ||
| 588 | + GraphUtils::AddEdge(transposed->GetOutDataAnchor(0), relu->GetInDataAnchor(0)); | ||
| 589 | + | ||
| 590 | + TransOpBreadthFusionPass pass; | ||
| 591 | + Status status = pass.Run(graph); | ||
| 592 | + EXPECT_EQ(status, SUCCESS); | ||
| 593 | +} | ||
| 594 | + | ||
| 595 | +TEST_F(UtestGraphPassesTransOpBreadthFusionPass, transpose_without_const_perm_test) { | ||
| 596 | + ge::ComputeGraphPtr graph = std::make_shared<ComputeGraph>("test"); | ||
| 597 | + auto data = NodeBuilder("data", DATA).AddOutputDesc({1, 1, 1, 1}).Build(graph); | ||
| 598 | + auto perm_data = NodeBuilder("perm_data", DATA).AddOutputDesc({4}).Build(graph); | ||
| 599 | + auto transpose = NodeBuilder("transpose", TRANSPOSE) | ||
| 600 | + .AddInputDesc({1, 1, 1, 1}) | ||
| 601 | + .AddInputDesc({4}) | ||
| 602 | + .AddOutputDesc({1, 1, 1, 1}) | ||
| 603 | + .Build(graph); | ||
| 604 | + auto relu = NodeBuilder("relu", RELU).AddInputDesc({1, 1, 1, 1}).Build(graph); | ||
| 605 | + GraphUtils::AddEdge(data->GetOutDataAnchor(0), transpose->GetInDataAnchor(0)); | ||
| 606 | + GraphUtils::AddEdge(perm_data->GetOutDataAnchor(0), transpose->GetInDataAnchor(1)); | ||
| 607 | + GraphUtils::AddEdge(transpose->GetOutDataAnchor(0), relu->GetInDataAnchor(0)); | ||
| 608 | + std::map<std::string, uint32_t> input_names = {{"x", 0}, {"perm", 1}}; | ||
| 609 | + transpose->GetOpDesc()->UpdateInputName(input_names); | ||
| 610 | + | ||
| 611 | + TransOpBreadthFusionPass pass; | ||
| 612 | + Status status = pass.Run(graph); | ||
| 613 | + EXPECT_EQ(status, SUCCESS); | ||
| 614 | +} | ||
| @@ -479,4 +479,48 @@ TEST_F(UtestTransopSymmetryEliminationPass, test_reshape_remove_with_transdata_5 | |||
| 479 | EXPECT_EQ(compute_graph->FindNode("trans1"), nullptr); | 479 | EXPECT_EQ(compute_graph->FindNode("trans1"), nullptr); |
| 480 | EXPECT_EQ(compute_graph->FindNode("trans2"), nullptr); | 480 | EXPECT_EQ(compute_graph->FindNode("trans2"), nullptr); |
| 481 | } | 481 | } |
| 482 | + | ||
| 483 | +TEST_F(UtestTransopSymmetryEliminationPass, non_symmetric_transpose_d_test) { | ||
| 484 | + auto builder = ut::GraphBuilder("test_non_symm"); | ||
| 485 | + auto data = builder.AddNode("data", DATA, 0, 1); | ||
| 486 | + auto trans1 = builder.AddNode("trans1", TRANSPOSED, 1, 1); | ||
| 487 | + auto trans2 = builder.AddNode("trans2", TRANSPOSED, 1, 1); | ||
| 488 | + auto netoutput = builder.AddNode("netoutput", NETOUTPUT, 1, 0); | ||
| 489 | + | ||
| 490 | + AttrUtils::SetListInt(trans1->GetOpDesc(), PERMUTE_ATTR_PERM, {0, 2, 1, 3}); | ||
| 491 | + AttrUtils::SetListInt(trans2->GetOpDesc(), PERMUTE_ATTR_PERM, {0, 2, 1, 3}); | ||
| 492 | + | ||
| 493 | + builder.AddDataEdge(data, 0, trans1, 0); | ||
| 494 | + builder.AddDataEdge(trans1, 0, trans2, 0); | ||
| 495 | + builder.AddDataEdge(trans2, 0, netoutput, 0); | ||
| 496 | + | ||
| 497 | + auto graph = builder.GetGraph(); | ||
| 498 | + TransOpSymmetryEliminationPass transop_symmetry_elimination_pass; | ||
| 499 | + NamesToPass names_to_pass; | ||
| 500 | + names_to_pass.emplace_back("TransOpSymmetryEliminationPass", &transop_symmetry_elimination_pass); | ||
| 501 | + GEPass pass(graph); | ||
| 502 | + EXPECT_EQ(pass.Run(names_to_pass), SUCCESS); | ||
| 503 | +} | ||
| 504 | + | ||
| 505 | +TEST_F(UtestTransopSymmetryEliminationPass, transpose_d_different_perm_size_test) { | ||
| 506 | + auto builder = ut::GraphBuilder("test_diff_perm_size"); | ||
| 507 | + auto data = builder.AddNode("data", DATA, 0, 1); | ||
| 508 | + auto trans1 = builder.AddNode("trans1", TRANSPOSED, 1, 1); | ||
| 509 | + auto trans2 = builder.AddNode("trans2", TRANSPOSED, 1, 1); | ||
| 510 | + auto netoutput = builder.AddNode("netoutput", NETOUTPUT, 1, 0); | ||
| 511 | + | ||
| 512 | + AttrUtils::SetListInt(trans1->GetOpDesc(), PERMUTE_ATTR_PERM, {0, 2, 1, 3}); | ||
| 513 | + AttrUtils::SetListInt(trans2->GetOpDesc(), PERMUTE_ATTR_PERM, {0, 1}); | ||
| 514 | + | ||
| 515 | + builder.AddDataEdge(data, 0, trans1, 0); | ||
| 516 | + builder.AddDataEdge(trans1, 0, trans2, 0); | ||
| 517 | + builder.AddDataEdge(trans2, 0, netoutput, 0); | ||
| 518 | + | ||
| 519 | + auto graph = builder.GetGraph(); | ||
| 520 | + TransOpSymmetryEliminationPass transop_symmetry_elimination_pass; | ||
| 521 | + NamesToPass names_to_pass; | ||
| 522 | + names_to_pass.emplace_back("TransOpSymmetryEliminationPass", &transop_symmetry_elimination_pass); | ||
| 523 | + GEPass pass(graph); | ||
| 524 | + EXPECT_EQ(pass.Run(names_to_pass), SUCCESS); | ||
| 525 | +} | ||
| 482 | } // namespace ge | 526 | } // namespace ge |
| @@ -2813,4 +2813,28 @@ TEST_F(UtestTransopWithoutReshapeFusionPass, test_cast_fusion_has_precision_loss | |||
| 2813 | EXPECT_EQ(domi::SUCCESS, status); | 2813 | EXPECT_EQ(domi::SUCCESS, status); |
| 2814 | EXPECT_EQ(graph->GetDirectNodesSize(), 5); | 2814 | EXPECT_EQ(graph->GetDirectNodesSize(), 5); |
| 2815 | } | 2815 | } |
| 2816 | + | ||
| 2817 | +TEST_F(UtestTransopWithoutReshapeFusionPass, set_remain_node_with_null_anchor) { | ||
| 2818 | + TransOpWithoutReshapeFusionPass pass; | ||
| 2819 | + std::vector<std::pair<OutDataAnchorPtr, InDataAnchorPtr>> nodes_anchor; | ||
| 2820 | + nodes_anchor.push_back({nullptr, nullptr}); | ||
| 2821 | + pass.SetRemainNode(nodes_anchor); | ||
| 2822 | +} | ||
| 2823 | + | ||
| 2824 | +TEST_F(UtestTransopWithoutReshapeFusionPass, set_remain_node_with_non_transop) { | ||
| 2825 | + ge::ComputeGraphPtr graph = std::make_shared<ComputeGraph>("test"); | ||
| 2826 | + auto data_op = std::make_shared<OpDesc>("data", DATA); | ||
| 2827 | + data_op->AddOutputDesc(GeTensorDesc()); | ||
| 2828 | + auto data = graph->AddNode(data_op); | ||
| 2829 | + auto relu_op = std::make_shared<OpDesc>("relu", RELU); | ||
| 2830 | + relu_op->AddInputDesc(GeTensorDesc()); | ||
| 2831 | + relu_op->AddOutputDesc(GeTensorDesc()); | ||
| 2832 | + auto relu = graph->AddNode(relu_op); | ||
| 2833 | + GraphUtils::AddEdge(data->GetOutDataAnchor(0), relu->GetInDataAnchor(0)); | ||
| 2834 | + | ||
| 2835 | + TransOpWithoutReshapeFusionPass pass; | ||
| 2836 | + std::vector<std::pair<OutDataAnchorPtr, InDataAnchorPtr>> nodes_anchor; | ||
| 2837 | + nodes_anchor.push_back({data->GetOutDataAnchor(0), relu->GetInDataAnchor(0)}); | ||
| 2838 | + pass.SetRemainNode(nodes_anchor); | ||
| 2839 | +} | ||
| 2816 | } // namespace ge | 2840 | } // namespace ge |
| @@ -462,4 +462,18 @@ TEST_F(UtestGraphPassesTransposeTransdataPass, check_in_out_data_anchor_valid_fa | |||
| 462 | EXPECT_EQ(ret, FAILED); | 462 | EXPECT_EQ(ret, FAILED); |
| 463 | } | 463 | } |
| 464 | 464 | ||
| 465 | +TEST_F(UtestGraphPassesTransposeTransdataPass, fusion_transpose_with_non_transdata_output) { | ||
| 466 | + auto compute_graph = BuildGraphTransposeD(); | ||
| 467 | + auto transpose = compute_graph->FindNode("transpose1"); | ||
| 468 | + ASSERT_NE(transpose, nullptr); | ||
| 469 | + TransposeTransDataPass pass; | ||
| 470 | + Status ret = pass.FusionTranspose(transpose); | ||
| 471 | + EXPECT_EQ(ret, SUCCESS); | ||
| 472 | +} | ||
| 473 | + | ||
| 474 | +TEST_F(UtestGraphPassesTransposeTransdataPass, check_in_out_data_anchor_valid_null_node) { | ||
| 475 | + TransposeTransDataPass pass; | ||
| 476 | + Status ret = pass.CheckInOutDataAnchorValid(nullptr, 1U, 1U); | ||
| 477 | + EXPECT_EQ(ret, PARAM_INVALID); | ||
| 478 | +} | ||
| 465 | } // namespace ge | 479 | } // namespace ge |
| @@ -879,4 +879,63 @@ TEST_F(UTEST_graph_passes_var_is_initialized_op_pass, is_variable_initialized_su | |||
| 879 | 879 | ||
| 880 | VarManagerPool::Instance().Destroy(); | 880 | VarManagerPool::Instance().Destroy(); |
| 881 | } | 881 | } |
| 882 | + | ||
| 883 | +TEST_F(UTEST_graph_passes_var_is_initialized_op_pass, run_non_var_is_init_node_success) { | ||
| 884 | + ComputeGraphPtr graph = std::make_shared<ComputeGraph>("test_graph"); | ||
| 885 | + GeTensorDesc tensor_desc; | ||
| 886 | + auto const_op = std::make_shared<OpDesc>("const", CONSTANT); | ||
| 887 | + const_op->AddOutputDesc(tensor_desc); | ||
| 888 | + auto const_node = graph->AddNode(const_op); | ||
| 889 | + | ||
| 890 | + VarIsInitializedOpPass pass; | ||
| 891 | + EXPECT_EQ(pass.Run(const_node), SUCCESS); | ||
| 892 | +} | ||
| 893 | + | ||
| 894 | +TEST_F(UTEST_graph_passes_var_is_initialized_op_pass, run_assign_node_no_input_desc) { | ||
| 895 | + ComputeGraphPtr graph = std::make_shared<ComputeGraph>("test_graph"); | ||
| 896 | + auto assign_op = std::make_shared<OpDesc>("assign", ASSIGN); | ||
| 897 | + assign_op->AddOutputDesc(GeTensorDesc()); | ||
| 898 | + auto assign_node = graph->AddNode(assign_op); | ||
| 899 | + | ||
| 900 | + VarIsInitializedOpPass pass; | ||
| 901 | + EXPECT_EQ(pass.Run(assign_node), PARAM_INVALID); | ||
| 902 | +} | ||
| 903 | + | ||
| 904 | +TEST_F(UTEST_graph_passes_var_is_initialized_op_pass, run_assign_node_no_peer_edge) { | ||
| 905 | + ComputeGraphPtr graph = std::make_shared<ComputeGraph>("test_graph"); | ||
| 906 | + GeTensorDesc tensor_desc; | ||
| 907 | + auto assign_op = std::make_shared<OpDesc>("assign", ASSIGN); | ||
| 908 | + assign_op->AddInputDesc(tensor_desc); | ||
| 909 | + assign_op->AddInputDesc(tensor_desc); | ||
| 910 | + assign_op->AddOutputDesc(tensor_desc); | ||
| 911 | + auto assign_node = graph->AddNode(assign_op); | ||
| 912 | + | ||
| 913 | + VarIsInitializedOpPass pass; | ||
| 914 | + EXPECT_EQ(pass.Run(assign_node), PARAM_INVALID); | ||
| 915 | +} | ||
| 916 | + | ||
| 917 | +TEST_F(UTEST_graph_passes_var_is_initialized_op_pass, run_assign_node_with_variable_success) { | ||
| 918 | + ComputeGraphPtr graph = std::make_shared<ComputeGraph>("test_graph"); | ||
| 919 | + GeTensorDesc tensor_desc; | ||
| 920 | + auto var_op = std::make_shared<OpDesc>("variable", VARIABLE); | ||
| 921 | + var_op->AddOutputDesc(tensor_desc); | ||
| 922 | + auto var_node = graph->AddNode(var_op); | ||
| 923 | + | ||
| 924 | + auto value_op = std::make_shared<OpDesc>("value", CONSTANTOP); | ||
| 925 | + value_op->AddOutputDesc(tensor_desc); | ||
| 926 | + auto value_node = graph->AddNode(value_op); | ||
| 927 | + | ||
| 928 | + auto assign_op = std::make_shared<OpDesc>("assign", ASSIGN); | ||
| 929 | + assign_op->AddInputDesc(tensor_desc); | ||
| 930 | + assign_op->AddInputDesc(tensor_desc); | ||
| 931 | + assign_op->AddOutputDesc(tensor_desc); | ||
| 932 | + auto assign_node = graph->AddNode(assign_op); | ||
| 933 | + (void)GraphUtils::AddEdge(var_node->GetOutDataAnchor(0), assign_node->GetInDataAnchor(0)); | ||
| 934 | + (void)GraphUtils::AddEdge(value_node->GetOutDataAnchor(0), assign_node->GetInDataAnchor(1)); | ||
| 935 | + | ||
| 936 | + VarIsInitializedOpPass pass; | ||
| 937 | + EXPECT_EQ(pass.Run(assign_node), SUCCESS); | ||
| 938 | + | ||
| 939 | + VarManagerPool::Instance().Destroy(); | ||
| 940 | +} | ||
| 882 | } // namespace ge | 941 | } // namespace ge |
| @@ -1186,3 +1186,30 @@ TEST_F(UtestVariableOpPassUnit, CheckVarAndVarRefAreAlikeFailed) { | |||
| 1186 | auto status = pass.CheckVarAndVarRefAreAlike(node, node, flag); | 1186 | auto status = pass.CheckVarAndVarRefAreAlike(node, node, flag); |
| 1187 | EXPECT_EQ(GE_GRAPH_VARIABLE_OP_PASS_FAILED, status); | 1187 | EXPECT_EQ(GE_GRAPH_VARIABLE_OP_PASS_FAILED, status); |
| 1188 | } | 1188 | } |
| 1189 | + | ||
| 1190 | +TEST_F(UtestVariableOpPassUnit, RunEmptyGraph) { | ||
| 1191 | + GraphRebuildStateCtrl ctrl; | ||
| 1192 | + VariableOpPass pass(&ctrl); | ||
| 1193 | + ComputeGraphPtr graph = std::make_shared<ComputeGraph>("empty_graph"); | ||
| 1194 | + auto status = pass.Run(graph); | ||
| 1195 | + EXPECT_EQ(status, SUCCESS); | ||
| 1196 | +} | ||
| 1197 | + | ||
| 1198 | +TEST_F(UtestVariableOpPassUnit, RunGraphWithVarAndTransOp) { | ||
| 1199 | + GraphRebuildStateCtrl ctrl; | ||
| 1200 | + VariableOpPass pass(&ctrl); | ||
| 1201 | + auto graph = BuildGraph2(); | ||
| 1202 | + auto status = pass.Run(graph); | ||
| 1203 | + EXPECT_EQ(status, SUCCESS); | ||
| 1204 | +} | ||
| 1205 | + | ||
| 1206 | +TEST_F(UtestVariableOpPassUnit, UpdateVarAndRefOutputFormatInfoSuccess) { | ||
| 1207 | + GraphRebuildStateCtrl ctrl; | ||
| 1208 | + VariableOpPass pass(&ctrl); | ||
| 1209 | + auto graph = BuildGraphVariableOpPass(); | ||
| 1210 | + auto node = graph->FindNode("translate0"); | ||
| 1211 | + ASSERT_NE(node, nullptr); | ||
| 1212 | + auto same_vars = MakeShared<SameVariable>(); | ||
| 1213 | + auto status = pass.UpdateVarAndRefOutputFormatInfo(node->GetOpDesc()->GetOutputDesc(0U), node, same_vars); | ||
| 1214 | + EXPECT_EQ(status, SUCCESS); | ||
| 1215 | +} | ||
| @@ -19,6 +19,7 @@ | |||
| 19 | 19 | ||
| 20 | 20 | ||
| 21 | 21 | ||
| 22 | + | ||
| 22 | 23 | ||
| 23 | 24 | ||
| 24 | using namespace ge; | 25 | using namespace ge; |
| @@ -318,3 +319,28 @@ TEST_F(UtestGraphPassesVariablePreparePass, check_stream_label_with_attr) { | |||
| 318 | ASSERT_NE(var_ref, nullptr); | 319 | ASSERT_NE(var_ref, nullptr); |
| 319 | EXPECT_EQ(pass.CheckStreamLabel(var_ref, variable), SUCCESS); | 320 | EXPECT_EQ(pass.CheckStreamLabel(var_ref, variable), SUCCESS); |
| 320 | } | 321 | } |
| 322 | + | ||
| 323 | +TEST_F(UtestGraphPassesVariablePreparePass, run_with_ref_switch_and_no_var) { | ||
| 324 | + auto builder = ut::GraphBuilder("g1"); | ||
| 325 | + GeTensorDesc tensor_desc(GeShape({2, 2}), FORMAT_NCHW, DT_FLOAT); | ||
| 326 | + auto data = builder.AddNode("data", DATA, 0, 1); | ||
| 327 | + auto ref_switch = builder.AddNode("refswitch", REFSWITCH, 2, 2); | ||
| 328 | + auto netoutput = builder.AddNode("netoutput", NETOUTPUT, 1, 0); | ||
| 329 | + builder.AddDataEdge(data, 0, ref_switch, 0); | ||
| 330 | + builder.AddDataEdge(ref_switch, 0, netoutput, 0); | ||
| 331 | + | ||
| 332 | + VariablePrepareOpPass pass; | ||
| 333 | + auto graph = builder.GetGraph(); | ||
| 334 | + EXPECT_EQ(pass.Run(graph), SUCCESS); | ||
| 335 | +} | ||
| 336 | + | ||
| 337 | +TEST_F(UtestGraphPassesVariablePreparePass, create_variable_ref_null_opdesc) { | ||
| 338 | + auto graph = BuildGraphVariablePreparePass(); | ||
| 339 | + VariablePrepareOpPass pass; | ||
| 340 | + auto variable = graph->FindNode("variable"); | ||
| 341 | + ASSERT_NE(variable, nullptr); | ||
| 342 | + auto var_ref = pass.CreateVariableRef("test_var_ref", variable); | ||
| 343 | + ASSERT_NE(var_ref, nullptr); | ||
| 344 | + auto var_ref2 = pass.CreateVariableRef("test_var_ref2", variable); | ||
| 345 | + ASSERT_NE(var_ref2, nullptr); | ||
| 346 | +} | ||
| @@ -2077,4 +2077,342 @@ TEST_F(UtestGraphPreproces, graph_prepare_update_variable_formats_null_graph) { | |||
| 2077 | auto ret = graph_prepare.UpdateVariableFormats(nullptr); | 2077 | auto ret = graph_prepare.UpdateVariableFormats(nullptr); |
| 2078 | EXPECT_NE(ret, SUCCESS); | 2078 | EXPECT_NE(ret, SUCCESS); |
| 2079 | } | 2079 | } |
| 2080 | + | ||
| 2081 | +TEST_F(UtestGraphPreproces, AdjustDataOpOutput_NullNode_ReturnsError) { | ||
| 2082 | + ge::GraphPrepare graph_prepare; | ||
| 2083 | + NodePtr null_node = nullptr; | ||
| 2084 | + auto ret = graph_prepare.AdjustDataOpOutput(null_node); | ||
| 2085 | + EXPECT_NE(ret, SUCCESS); | ||
| 2086 | +} | ||
| 2087 | + | ||
| 2088 | +TEST_F(UtestGraphPreproces, CheckRefInputNode_NullNode_ReturnsError) { | ||
| 2089 | + ge::GraphPrepare graph_prepare; | ||
| 2090 | + NodePtr null_node = nullptr; | ||
| 2091 | + auto ret = graph_prepare.CheckRefInputNode(null_node, "input_name", {}); | ||
| 2092 | + EXPECT_NE(ret, SUCCESS); | ||
| 2093 | +} | ||
| 2094 | + | ||
| 2095 | +TEST_F(UtestGraphPreproces, SaveOriginalGraphToOmModel_EmptyGraph_ReturnsSuccess) { | ||
| 2096 | + ge::GraphPrepare graph_prepare; | ||
| 2097 | + Graph graph(""); | ||
| 2098 | + auto ret = graph_prepare.SaveOriginalGraphToOmModel(); | ||
| 2099 | + EXPECT_EQ(ret, SUCCESS); | ||
| 2100 | +} | ||
| 2101 | + | ||
| 2102 | +TEST_F(UtestGraphPreproces, SetOptions_Test) { | ||
| 2103 | + ge::GraphPrepare graph_prepare; | ||
| 2104 | + GraphManagerOptions options; | ||
| 2105 | + graph_prepare.SetOptions(options); | ||
| 2106 | +} | ||
| 2107 | + | ||
| 2108 | +TEST_F(UtestGraphPreproces, CheckAippInsert_NoAipp_ReturnsSuccess) { | ||
| 2109 | + auto builder = ut::GraphBuilder("g_no_aipp"); | ||
| 2110 | + auto data1 = builder.AddNode("data1", DATA, 1, 1); | ||
| 2111 | + auto netoutput = builder.AddNode("netoutput", NETOUTPUT, 1, 1); | ||
| 2112 | + builder.AddDataEdge(data1, 0, netoutput, 0); | ||
| 2113 | + ge::GraphPrepare graph_prepare; | ||
| 2114 | + graph_prepare.compute_graph_ = builder.GetGraph(); | ||
| 2115 | + auto ret = graph_prepare.CheckAippInsert(); | ||
| 2116 | + EXPECT_EQ(ret, SUCCESS); | ||
| 2117 | +} | ||
| 2118 | + | ||
| 2119 | +TEST_F(UtestGraphPreproces, ProcessNetOutput_NoNetOutput_ReturnsSuccess) { | ||
| 2120 | + auto builder = ut::GraphBuilder("g_no_output"); | ||
| 2121 | + auto data1 = builder.AddNode("data1", DATA, 1, 1); | ||
| 2122 | + auto add1 = builder.AddNode("add1", "Add", 1, 1); | ||
| 2123 | + builder.AddDataEdge(data1, 0, add1, 0); | ||
| 2124 | + ge::GraphPrepare graph_prepare; | ||
| 2125 | + graph_prepare.compute_graph_ = builder.GetGraph(); | ||
| 2126 | + auto ret = graph_prepare.ProcessNetOutput(); | ||
| 2127 | + EXPECT_EQ(ret, SUCCESS); | ||
| 2128 | +} | ||
| 2129 | + | ||
| 2130 | +TEST_F(UtestGraphPreproces, CheckConstOp_NoConst_ReturnsSuccess) { | ||
| 2131 | + auto builder = ut::GraphBuilder("g_no_const"); | ||
| 2132 | + auto data1 = builder.AddNode("data1", DATA, 1, 1); | ||
| 2133 | + auto netoutput = builder.AddNode("netoutput", NETOUTPUT, 1, 1); | ||
| 2134 | + builder.AddDataEdge(data1, 0, netoutput, 0); | ||
| 2135 | + ge::GraphPrepare graph_prepare; | ||
| 2136 | + graph_prepare.compute_graph_ = builder.GetGraph(); | ||
| 2137 | + auto ret = graph_prepare.CheckConstOp(); | ||
| 2138 | + EXPECT_EQ(ret, SUCCESS); | ||
| 2139 | +} | ||
| 2140 | + | ||
| 2141 | +TEST_F(UtestGraphPreproces, RemoveMagicCompiledAttrs_EmptyGraph) { | ||
| 2142 | + auto builder = ut::GraphBuilder("g_empty"); | ||
| 2143 | + ge::GraphPrepare graph_prepare; | ||
| 2144 | + graph_prepare.compute_graph_ = builder.GetGraph(); | ||
| 2145 | + graph_prepare.RemoveMagicCompiledAttrs(); | ||
| 2146 | + SUCCEED(); | ||
| 2147 | +} | ||
| 2148 | + | ||
| 2149 | +TEST_F(UtestGraphPreproces, TypeConversionOfConstant_NoConst) { | ||
| 2150 | + auto builder = ut::GraphBuilder("g_no_const2"); | ||
| 2151 | + auto data1 = builder.AddNode("data1", DATA, 1, 1); | ||
| 2152 | + auto netoutput = builder.AddNode("netoutput", NETOUTPUT, 1, 1); | ||
| 2153 | + builder.AddDataEdge(data1, 0, netoutput, 0); | ||
| 2154 | + ge::GraphPrepare graph_prepare; | ||
| 2155 | + graph_prepare.compute_graph_ = builder.GetGraph(); | ||
| 2156 | + graph_prepare.TypeConversionOfConstant(); | ||
| 2157 | + SUCCEED(); | ||
| 2158 | +} | ||
| 2159 | + | ||
| 2160 | +TEST_F(UtestGraphPreproces, CheckGraphAndUpdateOriginShape_NullGraph) { | ||
| 2161 | + ge::GraphPrepare graph_prepare; | ||
| 2162 | + graph_prepare.compute_graph_ = nullptr; | ||
| 2163 | + auto ret = graph_prepare.CheckGraphAndUpdateOriginShape(); | ||
| 2164 | + EXPECT_EQ(ret, GE_GRAPH_INIT_FAILED); | ||
| 2165 | +} | ||
| 2166 | + | ||
| 2167 | +TEST_F(UtestGraphPreproces, AdjustDataOpOutput_NullOpDesc) { | ||
| 2168 | + auto builder = ut::GraphBuilder("g_adj_null_op"); | ||
| 2169 | + auto data1 = builder.AddNode("data1", DATA, 1, 1); | ||
| 2170 | + ge::GraphPrepare graph_prepare; | ||
| 2171 | + graph_prepare.compute_graph_ = builder.GetGraph(); | ||
| 2172 | + auto ret = graph_prepare.AdjustDataOpOutput(data1); | ||
| 2173 | + EXPECT_EQ(ret, SUCCESS); | ||
| 2174 | +} | ||
| 2175 | + | ||
| 2176 | +TEST_F(UtestGraphPreproces, SwitchOpOptimize_NullGraph) { | ||
| 2177 | + ge::GraphPrepare graph_prepare; | ||
| 2178 | + ComputeGraphPtr null_graph = nullptr; | ||
| 2179 | + auto ret = graph_prepare.SwitchOpOptimize(null_graph); | ||
| 2180 | + EXPECT_EQ(ret, GE_GRAPH_NULL_INPUT); | ||
| 2181 | +} | ||
| 2182 | + | ||
| 2183 | +TEST_F(UtestGraphPreproces, GenerateInfershapeGraph_NullGraph) { | ||
| 2184 | + ge::GraphPrepare graph_prepare; | ||
| 2185 | + ConstGraphPtr null_graph = nullptr; | ||
| 2186 | + auto ret = graph_prepare.GenerateInfershapeGraph(null_graph); | ||
| 2187 | + EXPECT_EQ(ret, GE_GRAPH_NULL_INPUT); | ||
| 2188 | +} | ||
| 2189 | + | ||
| 2190 | +TEST_F(UtestGraphPreproces, CheckConstOp_FrameworkOpNullOpDesc) { | ||
| 2191 | + auto builder = ut::GraphBuilder("g_fw_null"); | ||
| 2192 | + auto fw_node = builder.AddNode("fw1", FRAMEWORKOP, 1, 1); | ||
| 2193 | + ge::GraphPrepare graph_prepare; | ||
| 2194 | + graph_prepare.compute_graph_ = builder.GetGraph(); | ||
| 2195 | + auto ret = graph_prepare.CheckConstOp(); | ||
| 2196 | + EXPECT_EQ(ret, SUCCESS); | ||
| 2197 | +} | ||
| 2198 | + | ||
| 2199 | +TEST_F(UtestGraphPreproces, VerifyConstOp_NoWeights) { | ||
| 2200 | + auto builder = ut::GraphBuilder("g_no_weights"); | ||
| 2201 | + auto const_node = builder.AddNode("const1", CONSTANT, 0, 1); | ||
| 2202 | + ge::GraphPrepare graph_prepare; | ||
| 2203 | + graph_prepare.compute_graph_ = builder.GetGraph(); | ||
| 2204 | + auto ret = graph_prepare.VerifyConstOp(const_node); | ||
| 2205 | + EXPECT_EQ(ret, PARAM_INVALID); | ||
| 2206 | +} | ||
| 2207 | + | ||
| 2208 | +TEST_F(UtestGraphPreproces, CheckUserInput_MissingIndexAttr) { | ||
| 2209 | + auto builder = ut::GraphBuilder("g_missing_idx"); | ||
| 2210 | + auto data1 = builder.AddNode("data1", DATA, 1, 1); | ||
| 2211 | + ge::GraphPrepare graph_prepare; | ||
| 2212 | + graph_prepare.compute_graph_ = builder.GetGraph(); | ||
| 2213 | + std::vector<GeTensor> user_input; | ||
| 2214 | + auto ret = graph_prepare.CheckUserInput(user_input); | ||
| 2215 | + EXPECT_EQ(ret, GE_GRAPH_INIT_FAILED); | ||
| 2216 | +} | ||
| 2217 | + | ||
| 2218 | +TEST_F(UtestGraphPreproces, CheckUserInput_InvalidIndex) { | ||
| 2219 | + auto builder = ut::GraphBuilder("g_invalid_idx"); | ||
| 2220 | + auto data1 = builder.AddNode("data1", DATA, 1, 1); | ||
| 2221 | + (void)ge::AttrUtils::SetInt(data1->GetOpDesc(), ATTR_NAME_INDEX, 99); | ||
| 2222 | + ge::GraphPrepare graph_prepare; | ||
| 2223 | + graph_prepare.compute_graph_ = builder.GetGraph(); | ||
| 2224 | + std::vector<GeTensor> user_input; | ||
| 2225 | + auto ret = graph_prepare.CheckUserInput(user_input); | ||
| 2226 | + EXPECT_EQ(ret, GE_GRAPH_INIT_FAILED); | ||
| 2227 | +} | ||
| 2228 | + | ||
| 2229 | +TEST_F(UtestGraphPreproces, UpdateInput_InvalidIndex) { | ||
| 2230 | + auto builder = ut::GraphBuilder("g_upd_invalid_idx"); | ||
| 2231 | + auto data1 = builder.AddNode("data1", DATA, 1, 1); | ||
| 2232 | + (void)ge::AttrUtils::SetInt(data1->GetOpDesc(), ATTR_NAME_INDEX, 99); | ||
| 2233 | + ge::GraphPrepare graph_prepare; | ||
| 2234 | + graph_prepare.compute_graph_ = builder.GetGraph(); | ||
| 2235 | + std::vector<GeTensor> user_input; | ||
| 2236 | + std::map<std::string, std::string> graph_option; | ||
| 2237 | + auto ret = graph_prepare.UpdateInput(user_input, graph_option); | ||
| 2238 | + EXPECT_EQ(ret, FAILED); | ||
| 2239 | +} | ||
| 2240 | + | ||
| 2241 | +TEST_F(UtestGraphPreproces, UpdateVariableFormats_WithVar) { | ||
| 2242 | + auto builder = ut::GraphBuilder("g_with_var"); | ||
| 2243 | + auto var = builder.AddNode("var1", VARIABLEV2, 1, 1); | ||
| 2244 | + auto add = builder.AddNode("add1", "Add", 1, 1); | ||
| 2245 | + auto netoutput = builder.AddNode("netoutput", NETOUTPUT, 1, 0); | ||
| 2246 | + builder.AddDataEdge(var, 0, add, 0); | ||
| 2247 | + builder.AddDataEdge(add, 0, netoutput, 0); | ||
| 2248 | + ge::GraphPrepare graph_prepare; | ||
| 2249 | + auto ret = graph_prepare.UpdateVariableFormats(builder.GetGraph()); | ||
| 2250 | + EXPECT_EQ(ret, SUCCESS); | ||
| 2251 | +} | ||
| 2252 | + | ||
| 2253 | +TEST_F(UtestGraphPreproces, CheckAndUpdateInput_Normalized) { | ||
| 2254 | + auto builder = ut::GraphBuilder("g_normalized"); | ||
| 2255 | + auto data1 = builder.AddNode("data1", DATA, 1, 1); | ||
| 2256 | + auto netoutput = builder.AddNode("netoutput", NETOUTPUT, 1, 0); | ||
| 2257 | + builder.AddDataEdge(data1, 0, netoutput, 0); | ||
| 2258 | + ge::GraphPrepare graph_prepare; | ||
| 2259 | + graph_prepare.compute_graph_ = builder.GetGraph(); | ||
| 2260 | + graph_prepare.SetGraphNormalized(true); | ||
| 2261 | + std::vector<GeTensor> user_input; | ||
| 2262 | + std::map<std::string, std::string> graph_option; | ||
| 2263 | + auto ret = graph_prepare.CheckAndUpdateInput(user_input, graph_option); | ||
| 2264 | + EXPECT_EQ(ret, SUCCESS); | ||
| 2265 | +} | ||
| 2266 | + | ||
| 2267 | +TEST_F(UtestGraphPreproces, CheckRefInputNode_ConstInput) { | ||
| 2268 | + auto builder = ut::GraphBuilder("g_ref_const"); | ||
| 2269 | + auto const1 = builder.AddNode("const1", CONSTANTOP, 0, 1); | ||
| 2270 | + auto ref_node = builder.AddNode("ref1", "RefOp", 1, 1); | ||
| 2271 | + auto netoutput = builder.AddNode("netoutput", NETOUTPUT, 1, 0); | ||
| 2272 | + builder.AddDataEdge(const1, 0, ref_node, 0); | ||
| 2273 | + builder.AddDataEdge(ref_node, 0, netoutput, 0); | ||
| 2274 | + (void)ref_node->GetOpDesc()->AddInputDesc("x", GeTensorDesc()); | ||
| 2275 | + std::set<NodePtr> ref_nodes; | ||
| 2276 | + ge::GraphPrepare graph_prepare; | ||
| 2277 | + auto ret = graph_prepare.CheckRefInputNode(ref_node, "x", ref_nodes); | ||
| 2278 | + EXPECT_EQ(ret, PARAM_INVALID); | ||
| 2279 | +} | ||
| 2280 | + | ||
| 2281 | +TEST_F(UtestGraphPreproces, InferShapeForPreprocess_BasicGraph) { | ||
| 2282 | + auto builder = ut::GraphBuilder("g_infer_pre"); | ||
| 2283 | + auto data1 = builder.AddNode("data1", DATA, 1, 1); | ||
| 2284 | + auto add1 = builder.AddNode("add1", "Add", 1, 1); | ||
| 2285 | + auto netoutput = builder.AddNode("netoutput", NETOUTPUT, 1, 0); | ||
| 2286 | + builder.AddDataEdge(data1, 0, add1, 0); | ||
| 2287 | + builder.AddDataEdge(add1, 0, netoutput, 0); | ||
| 2288 | + ge::GraphPrepare graph_prepare; | ||
| 2289 | + auto graph = builder.GetGraph(); | ||
| 2290 | + auto ret = graph_prepare.InferShapeForPreprocess(graph, nullptr, nullptr); | ||
| 2291 | + EXPECT_EQ(ret, SUCCESS); | ||
| 2292 | +} | ||
| 2293 | + | ||
| 2294 | +TEST_F(UtestGraphPreproces, CheckTensorIsValid_ScalarTensor) { | ||
| 2295 | + auto builder = ut::GraphBuilder("g_scalar"); | ||
| 2296 | + auto data1 = builder.AddNode("data1", DATA, 1, 1); | ||
| 2297 | + ge::GraphPrepare graph_prepare; | ||
| 2298 | + auto ret = graph_prepare.CheckTensorIsValid(data1, 0, 4, 0, DT_FLOAT); | ||
| 2299 | + EXPECT_EQ(ret, SUCCESS); | ||
| 2300 | +} | ||
| 2301 | + | ||
| 2302 | +TEST_F(UtestGraphPreproces, CheckTensorIsValid_EmptyShapeWithData) { | ||
| 2303 | + auto builder = ut::GraphBuilder("g_empty_shape"); | ||
| 2304 | + auto data1 = builder.AddNode("data1", DATA, 1, 1); | ||
| 2305 | + ge::GraphPrepare graph_prepare; | ||
| 2306 | + auto ret = graph_prepare.CheckTensorIsValid(data1, 0, 10, 1, DT_FLOAT); | ||
| 2307 | + EXPECT_NE(ret, SUCCESS); | ||
| 2308 | +} | ||
| 2309 | + | ||
| 2310 | +TEST_F(UtestGraphPreproces, CheckTensorIsValid_ValidTensor) { | ||
| 2311 | + auto builder = ut::GraphBuilder("g_valid_tensor"); | ||
| 2312 | + auto data1 = builder.AddNode("data1", DATA, 1, 1); | ||
| 2313 | + ge::GraphPrepare graph_prepare; | ||
| 2314 | + auto ret = graph_prepare.CheckTensorIsValid(data1, 4, 16, 1, DT_FLOAT); | ||
| 2315 | + EXPECT_EQ(ret, SUCCESS); | ||
| 2316 | +} | ||
| 2317 | + | ||
| 2318 | +TEST_F(UtestGraphPreproces, IsDynamicDims_WithDynamicOption) { | ||
| 2319 | + auto builder = ut::GraphBuilder("g_dyn_dims"); | ||
| 2320 | + auto data1 = builder.AddNode("data1", DATA, 1, 1); | ||
| 2321 | + auto op_desc = data1->GetOpDesc(); | ||
| 2322 | + GeTensorDesc desc(GeShape({-1, 2, 3, 4}), FORMAT_NCHW, DT_FLOAT); | ||
| 2323 | + op_desc->UpdateOutputDesc(0, desc); | ||
| 2324 | + ge::GraphPrepare graph_prepare; | ||
| 2325 | + graph_prepare.options_.input_shape = "1,2,3,4"; | ||
| 2326 | + graph_prepare.options_.dynamic_dims = "-1,2,3,4"; | ||
| 2327 | + graph_prepare.options_.dynamic_node_type = 1; | ||
| 2328 | + auto ret = graph_prepare.IsDynamicDims(data1); | ||
| 2329 | + EXPECT_TRUE(ret); | ||
| 2330 | +} | ||
| 2331 | + | ||
| 2332 | +TEST_F(UtestGraphPreproces, IsDynamicDims_WithCompileDynamicMode) { | ||
| 2333 | + auto builder = ut::GraphBuilder("g_dyn_mode"); | ||
| 2334 | + auto data1 = builder.AddNode("data1", DATA, 1, 1); | ||
| 2335 | + auto op_desc = data1->GetOpDesc(); | ||
| 2336 | + GeTensorDesc desc(GeShape({-1, 2, 3, 4}), FORMAT_NCHW, DT_FLOAT); | ||
| 2337 | + op_desc->UpdateOutputDesc(0, desc); | ||
| 2338 | + ge::GraphPrepare graph_prepare; | ||
| 2339 | + (void)ge::GetThreadLocalContext().SetGraphOption({{"ge.compile_dynamic_mode", "1"}}); | ||
| 2340 | + auto ret = graph_prepare.IsDynamicDims(data1); | ||
| 2341 | + EXPECT_TRUE(ret); | ||
| 2342 | + (void)ge::GetThreadLocalContext().SetGraphOption({{"ge.compile_dynamic_mode", ""}}); | ||
| 2343 | +} | ||
| 2344 | + | ||
| 2345 | +TEST_F(UtestGraphPreproces, UpdateInputOutputByOptions_TrainMode) { | ||
| 2346 | + auto builder = ut::GraphBuilder("g_train_mode"); | ||
| 2347 | + auto data1 = builder.AddNode("data1", DATA, 1, 1); | ||
| 2348 | + ge::GraphPrepare graph_prepare; | ||
| 2349 | + graph_prepare.compute_graph_ = builder.GetGraph(); | ||
| 2350 | + graph_prepare.options_.train_graph_flag = true; | ||
| 2351 | + auto ret = graph_prepare.UpdateInputOutputByOptions(); | ||
| 2352 | + EXPECT_EQ(ret, SUCCESS); | ||
| 2353 | +} | ||
| 2354 | + | ||
| 2355 | +TEST_F(UtestGraphPreproces, TryDoAipp_WithInsertOpFile) { | ||
| 2356 | + auto builder = ut::GraphBuilder("g_aipp_insert"); | ||
| 2357 | + auto data1 = builder.AddNode("data1", DATA, 1, 1); | ||
| 2358 | + auto netoutput = builder.AddNode("netoutput", NETOUTPUT, 1, 0); | ||
| 2359 | + builder.AddDataEdge(data1, 0, netoutput, 0); | ||
| 2360 | + ge::GraphPrepare graph_prepare; | ||
| 2361 | + graph_prepare.compute_graph_ = builder.GetGraph(); | ||
| 2362 | + graph_prepare.options_.insert_op_file = "/nonexistent/aipp.cfg"; | ||
| 2363 | + auto ret = graph_prepare.TryDoAipp(); | ||
| 2364 | + EXPECT_NE(ret, SUCCESS); | ||
| 2365 | +} | ||
| 2366 | + | ||
| 2367 | +TEST_F(UtestGraphPreproces, PrepareDynShape_BasicGraph) { | ||
| 2368 | + auto builder = ut::GraphBuilder("g_prep_dyn"); | ||
| 2369 | + auto data1 = builder.AddNode("data1", DATA, 1, 1); | ||
| 2370 | + auto add1 = builder.AddNode("add1", "Add", 1, 1); | ||
| 2371 | + auto netoutput = builder.AddNode("netoutput", NETOUTPUT, 1, 0); | ||
| 2372 | + builder.AddDataEdge(data1, 0, add1, 0); | ||
| 2373 | + builder.AddDataEdge(add1, 0, netoutput, 0); | ||
| 2374 | + ge::GraphPrepare graph_prepare; | ||
| 2375 | + graph_prepare.compute_graph_ = builder.GetGraph(); | ||
| 2376 | + auto ret = graph_prepare.PrepareDynShape(); | ||
| 2377 | + EXPECT_EQ(ret, SUCCESS); | ||
| 2378 | +} | ||
| 2379 | + | ||
| 2380 | +TEST_F(UtestGraphPreproces, CheckGraphAndUpdateOriginShape_EmptyGraph) { | ||
| 2381 | + auto builder = ut::GraphBuilder("g_empty_nodes"); | ||
| 2382 | + ge::GraphPrepare graph_prepare; | ||
| 2383 | + graph_prepare.compute_graph_ = builder.GetGraph(); | ||
| 2384 | + auto ret = graph_prepare.CheckGraphAndUpdateOriginShape(); | ||
| 2385 | + EXPECT_EQ(ret, GE_GRAPH_INIT_FAILED); | ||
| 2386 | +} | ||
| 2387 | + | ||
| 2388 | +TEST_F(UtestGraphPreproces, CheckInternalFormat_BasicCheck) { | ||
| 2389 | + auto builder = ut::GraphBuilder("g_internal_fmt"); | ||
| 2390 | + auto data1 = builder.AddNode("data1", DATA, 1, 1); | ||
| 2391 | + ge::GraphPrepare graph_prepare; | ||
| 2392 | + GeTensorDesc desc(GeShape({1, 2, 3, 4}), FORMAT_NCHW, DT_FLOAT); | ||
| 2393 | + auto ret = graph_prepare.CheckInternalFormat(data1, desc); | ||
| 2394 | + EXPECT_EQ(ret, SUCCESS); | ||
| 2395 | +} | ||
| 2396 | + | ||
| 2397 | +TEST_F(UtestGraphPreproces, UpdateDataInputOutputDesc_InvalidDataType) { | ||
| 2398 | + auto builder = ut::GraphBuilder("g_invalid_dt"); | ||
| 2399 | + auto data1 = builder.AddNode("data1", DATA, 1, 1); | ||
| 2400 | + ge::GraphPrepare graph_prepare; | ||
| 2401 | + GeTensorDesc desc(GeShape({1, 2, 3, 4}), FORMAT_NCHW, DT_UNDEFINED); | ||
| 2402 | + auto ret = graph_prepare.UpdateDataInputOutputDesc(0, data1->GetOpDesc(), desc); | ||
| 2403 | + EXPECT_EQ(ret, FAILED); | ||
| 2404 | +} | ||
| 2405 | + | ||
| 2406 | +TEST_F(UtestGraphPreproces, CopyVarIntoSubgraph_BasicGraph) { | ||
| 2407 | + auto builder = ut::GraphBuilder("g_copy_var"); | ||
| 2408 | + auto data1 = builder.AddNode("data1", DATA, 1, 1); | ||
| 2409 | + auto add1 = builder.AddNode("add1", "Add", 1, 1); | ||
| 2410 | + auto netoutput = builder.AddNode("netoutput", NETOUTPUT, 1, 0); | ||
| 2411 | + builder.AddDataEdge(data1, 0, add1, 0); | ||
| 2412 | + builder.AddDataEdge(add1, 0, netoutput, 0); | ||
| 2413 | + ge::GraphPrepare graph_prepare; | ||
| 2414 | + graph_prepare.compute_graph_ = builder.GetGraph(); | ||
| 2415 | + auto ret = graph_prepare.CopyVarIntoSubgraph(); | ||
| 2416 | + EXPECT_EQ(ret, SUCCESS); | ||
| 2417 | +} | ||
| 2080 | } // namespace ge | 2418 | } // namespace ge |
| @@ -1324,7 +1324,41 @@ TEST_F(UtestGeAipp, test_ConvertParamToJsonWithRawRgbir) { | |||
| 1324 | domi::GetContext().data_tensor_names = data_tensor_names_old; | 1324 | domi::GetContext().data_tensor_names = data_tensor_names_old; |
| 1325 | } | 1325 | } |
| 1326 | 1326 | ||
| 1327 | -TEST_F(UtestGeAipp, test_SetDefaultParamsStaticWithAllOpsEnabled) { | 1327 | +TEST_F(UtestGeAipp, test_CreateAippDataNhwc) { |
| 1328 | + ge::ut::GraphBuilder builder("graph"); | ||
| 1329 | + auto data1 = builder.AddNode("data1", "Data", 1, 1); | ||
| 1330 | + ge::AttrUtils::SetInt(data1->GetOpDesc(), ATTR_NAME_INDEX, 0); | ||
| 1331 | + auto aipp = builder.AddNode("aipp", "aipp", 2, 1); | ||
| 1332 | + auto netoutput = builder.AddNode("Node_Output", "NetOutput", 1, 0); | ||
| 1333 | + | ||
| 1334 | + aipp->GetOpDesc()->AddInputDesc(ge::GeTensorDesc()); | ||
| 1335 | + aipp->GetOpDesc()->AddInputDesc(ge::GeTensorDesc()); | ||
| 1336 | + aipp->GetOpDesc()->AddOutputDesc(ge::GeTensorDesc()); | ||
| 1337 | + data1->GetOpDesc()->AddOutputDesc(GeTensorDesc(GeShape(std::vector<int64_t>{8, 224, 224, 3}), FORMAT_NHWC, DT_FLOAT)); | ||
| 1338 | + data1->GetOpDesc()->UpdateOutputDesc( | ||
| 1339 | + 0, GeTensorDesc(GeShape(std::vector<int64_t>{8, 224, 224, 3}), FORMAT_ND, DT_FLOAT)); | ||
| 1340 | + std::vector<int64_t> origin_input_dims = {8, 224, 224, 3}; | ||
| 1341 | + AttrUtils::SetListInt(data1->GetOpDesc(), ATTR_MBATCH_ORIGIN_INPUT_DIMS, origin_input_dims); | ||
| 1342 | + | ||
| 1343 | + builder.AddDataEdge(data1, 0, aipp, 0); | ||
| 1344 | + builder.AddDataEdge(aipp, 0, netoutput, 0); | ||
| 1345 | + ComputeGraphPtr computeGraph = builder.GetGraph(); | ||
| 1346 | + AippOp aipp_op; | ||
| 1347 | + GetLocalOmgContext().format = domi::DOMI_TENSOR_NHWC; | ||
| 1348 | + | ||
| 1349 | + domi::AippOpParams params; | ||
| 1350 | + std::vector<std::pair<OutDataAnchorPtr, InDataAnchorPtr>> target_edges; | ||
| 1351 | + params.set_aipp_mode(domi::AippOpParams::static_); | ||
| 1352 | + (void)aipp_op.Init(¶ms); | ||
| 1353 | + int32_t rank = 0; | ||
| 1354 | + NodePtr target; | ||
| 1355 | + std::set<uint32_t> edge_indexes; | ||
| 1356 | + aipp_op.GetAndCheckTarget(computeGraph, rank, target, edge_indexes); | ||
| 1357 | + EXPECT_EQ(aipp_op.CreateAippData(aipp), SUCCESS); | ||
| 1358 | + GetLocalOmgContext().format = domi::DOMI_TENSOR_NCHW; | ||
| 1359 | +} | ||
| 1360 | + | ||
| 1361 | +TEST_F(UtestGeAipp, test_SetDefaultParams) { | ||
| 1328 | auto data_tensor_names_old = domi::GetContext().data_tensor_names; | 1362 | auto data_tensor_names_old = domi::GetContext().data_tensor_names; |
| 1329 | domi::GetContext().data_tensor_names.push_back("data0"); | 1363 | domi::GetContext().data_tensor_names.push_back("data0"); |
| 1330 | 1364 | ||
| @@ -842,4 +842,183 @@ TEST_F(UtestUtilInsertAippOp, test_UpdateDataNodeByAipp3) { | |||
| 842 | EXPECT_EQ(instance.RecordAIPPInfoToData(sub_graph), SUCCESS); | 842 | EXPECT_EQ(instance.RecordAIPPInfoToData(sub_graph), SUCCESS); |
| 843 | } | 843 | } |
| 844 | 844 | ||
| 845 | +TEST_F(UtestUtilInsertAippOp, test_ConvertShape2Nhwc_NonNchWFormat) { | ||
| 846 | + InsertAippOpUtil &instance = InsertAippOpUtil::Instance(); | ||
| 847 | + ge::ComputeGraphPtr graph = std::make_shared<ComputeGraph>("test"); | ||
| 848 | + std::string aipp_cfg_path = "/root/"; | ||
| 849 | + auto ret = instance.InsertAippOps(graph, aipp_cfg_path); | ||
| 850 | + ASSERT_EQ(ret, SUCCESS); | ||
| 851 | + ge::OpDescPtr data_opdesc = std::make_shared<ge::OpDesc>("test_data", "data"); | ||
| 852 | + data_opdesc->AddInputDesc("x", GeTensorDesc(GeShape({1, 16, 16, 16}), FORMAT_NCHW)); | ||
| 853 | + data_opdesc->AddOutputDesc("y", GeTensorDesc(GeShape({1, 3, 224, 224}), FORMAT_NCHW)); | ||
| 854 | + std::vector<int64_t> origin_dims = {1, 3, 224, 224}; | ||
| 855 | + AttrUtils::SetListInt(data_opdesc, ATTR_MBATCH_ORIGIN_INPUT_DIMS, origin_dims); | ||
| 856 | + ge::Format format = FORMAT_ND; | ||
| 857 | + instance.UpdateMultiBatchInputDims(data_opdesc, format); | ||
| 858 | +} | ||
| 859 | + | ||
| 860 | +TEST_F(UtestUtilInsertAippOp, test_CheckInputNamePositionNotRepeat_SameName) { | ||
| 861 | + InsertAippOpUtil &instance = InsertAippOpUtil::Instance(); | ||
| 862 | + instance.Init(); | ||
| 863 | + instance.insert_op_conf_->Clear(); | ||
| 864 | + auto *aipp1 = instance.insert_op_conf_->add_aipp_op(); | ||
| 865 | + aipp1->set_related_input_name("data1"); | ||
| 866 | + auto *aipp2 = instance.insert_op_conf_->add_aipp_op(); | ||
| 867 | + aipp2->set_related_input_name("data1"); | ||
| 868 | + auto ret = instance.CheckPositionNotRepeat(); | ||
| 869 | + EXPECT_NE(ret, SUCCESS); | ||
| 870 | + instance.insert_op_conf_->Clear(); | ||
| 871 | +} | ||
| 872 | + | ||
| 873 | +TEST_F(UtestUtilInsertAippOp, test_CheckInputRankPositionNoRepeat_WithNameInSecond) { | ||
| 874 | + InsertAippOpUtil &instance = InsertAippOpUtil::Instance(); | ||
| 875 | + instance.Init(); | ||
| 876 | + instance.insert_op_conf_->Clear(); | ||
| 877 | + auto *aipp1 = instance.insert_op_conf_->add_aipp_op(); | ||
| 878 | + aipp1->set_related_input_rank(0); | ||
| 879 | + auto *aipp2 = instance.insert_op_conf_->add_aipp_op(); | ||
| 880 | + aipp2->set_related_input_name("data1"); | ||
| 881 | + auto ret = instance.CheckPositionNotRepeat(); | ||
| 882 | + EXPECT_NE(ret, SUCCESS); | ||
| 883 | + instance.insert_op_conf_->Clear(); | ||
| 884 | +} | ||
| 885 | + | ||
| 886 | +TEST_F(UtestUtilInsertAippOp, test_GetDataRelatedNode_WithAippNext) { | ||
| 887 | + InsertAippOpUtil &instance = InsertAippOpUtil::Instance(); | ||
| 888 | + ge::ComputeGraphPtr graph = std::make_shared<ComputeGraph>("test"); | ||
| 889 | + ge::NodePtr data1 = NodeBuilder("data1", DATA).AddOutputDesc({1, 3, 224, 224}, FORMAT_NCHW, DT_FLOAT).Build(graph); | ||
| 890 | + ge::AttrUtils::SetInt(data1->GetOpDesc(), ATTR_NAME_INDEX, 0); | ||
| 891 | + ge::NodePtr aipp = NodeBuilder("aipp1", AIPP) | ||
| 892 | + .AddInputDesc({1, 3, 224, 224}, FORMAT_NCHW, DT_FLOAT) | ||
| 893 | + .AddOutputDesc({1, 3, 224, 224}, FORMAT_NCHW, DT_FLOAT) | ||
| 894 | + .Build(graph); | ||
| 895 | + ge::NodePtr netoutput = | ||
| 896 | + NodeBuilder("Node_Output", NETOUTPUT).AddInputDesc({1, 3, 224, 224}, FORMAT_NCHW, DT_FLOAT).Build(graph); | ||
| 897 | + GraphUtils::AddEdge(data1->GetOutDataAnchor(0), aipp->GetInDataAnchor(0)); | ||
| 898 | + GraphUtils::AddEdge(aipp->GetOutDataAnchor(0), netoutput->GetInDataAnchor(0)); | ||
| 899 | + | ||
| 900 | + NamedAttrs aipp_attr; | ||
| 901 | + aipp_attr.SetAttr("aipp_mode", ge::GeAttrValue::CreateFrom<int64_t>(0)); | ||
| 902 | + AttrUtils::SetNamedAttrs(data1->GetOpDesc(), ATTR_NAME_AIPP, aipp_attr); | ||
| 903 | + | ||
| 904 | + std::map<NodePtr, std::set<NodePtr>> data_next_node_map; | ||
| 905 | + auto ret = instance.GetDataRelatedNode(data1, data_next_node_map); | ||
| 906 | + EXPECT_EQ(ret, SUCCESS); | ||
| 907 | + EXPECT_EQ(data_next_node_map.size(), 1U); | ||
| 908 | +} | ||
| 909 | + | ||
| 910 | +TEST_F(UtestUtilInsertAippOp, test_SetModelInputDims_AlreadyHasAttr) { | ||
| 911 | + InsertAippOpUtil &instance = InsertAippOpUtil::Instance(); | ||
| 912 | + ge::ComputeGraphPtr graph = std::make_shared<ComputeGraph>("test"); | ||
| 913 | + ge::NodePtr data1 = NodeBuilder("data1", DATA).AddOutputDesc({1, 3, 224, 224}, FORMAT_NCHW, DT_FLOAT).Build(graph); | ||
| 914 | + ge::NodePtr aipp = NodeBuilder("aipp1", AIPP) | ||
| 915 | + .AddInputDesc({1, 3, 224, 224}, FORMAT_NCHW, DT_FLOAT) | ||
| 916 | + .AddOutputDesc({1, 3, 224, 224}, FORMAT_NCHW, DT_FLOAT) | ||
| 917 | + .Build(graph); | ||
| 918 | + AttrUtils::SetListInt(data1->GetOpDesc(), ATTR_NAME_INPUT_DIMS, {1, 3, 224, 224}); | ||
| 919 | + auto ret = instance.SetModelInputDims(data1, aipp); | ||
| 920 | + EXPECT_EQ(ret, SUCCESS); | ||
| 921 | +} | ||
| 922 | + | ||
| 923 | +TEST_F(UtestUtilInsertAippOp, test_CheckInputRankPositionNotRepeat_WithNameInSecond) { | ||
| 924 | + InsertAippOpUtil &instance = InsertAippOpUtil::Instance(); | ||
| 925 | + instance.Init(); | ||
| 926 | + domi::InsertNewOps *insert_ops = instance.insert_op_conf_.get(); | ||
| 927 | + ASSERT_NE(insert_ops, nullptr); | ||
| 928 | + domi::AippOpParams *aipp1 = insert_ops->add_aipp_op(); | ||
| 929 | + aipp1->set_related_input_rank(0); | ||
| 930 | + domi::AippOpParams *aipp2 = insert_ops->add_aipp_op(); | ||
| 931 | + aipp2->set_related_input_name("data1"); | ||
| 932 | + auto ret = instance.CheckPositionNotRepeat(); | ||
| 933 | + EXPECT_NE(ret, SUCCESS); | ||
| 934 | + instance.ClearNewOps(); | ||
| 935 | +} | ||
| 936 | + | ||
| 937 | +TEST_F(UtestUtilInsertAippOp, test_GetAippParams_WithAippAttr) { | ||
| 938 | + InsertAippOpUtil &instance = InsertAippOpUtil::Instance(); | ||
| 939 | + ge::ComputeGraphPtr graph = std::make_shared<ComputeGraph>("test_get_aipp"); | ||
| 940 | + ge::NodePtr aipp_node = NodeBuilder("aipp1", AIPP) | ||
| 941 | + .AddInputDesc({1, 3, 224, 224}, FORMAT_NCHW, DT_FLOAT) | ||
| 942 | + .AddOutputDesc({1, 3, 224, 224}, FORMAT_NCHW, DT_FLOAT) | ||
| 943 | + .Build(graph); | ||
| 944 | + ge::NamedAttrs aipp_attr; | ||
| 945 | + aipp_attr.SetName("aipp_params"); | ||
| 946 | + (void)AttrUtils::SetNamedAttrs(aipp_node->GetOpDesc(), ATTR_NAME_AIPP, aipp_attr); | ||
| 947 | + std::unique_ptr<domi::AippOpParams> aipp_params(new domi::AippOpParams()); | ||
| 948 | + auto ret = instance.GetAippParams(aipp_params, aipp_node); | ||
| 949 | + EXPECT_EQ(ret, SUCCESS); | ||
| 950 | +} | ||
| 951 | + | ||
| 952 | +TEST_F(UtestUtilInsertAippOp, test_UpdatePrevNodeByAipp_ZeroSize) { | ||
| 953 | + InsertAippOpUtil &instance = InsertAippOpUtil::Instance(); | ||
| 954 | + ge::ComputeGraphPtr graph = std::make_shared<ComputeGraph>("test_zero_size"); | ||
| 955 | + ge::NodePtr data = NodeBuilder("data1", DATA).AddOutputDesc({0, 0, 0, 0}, FORMAT_NCHW, DT_FLOAT).Build(graph); | ||
| 956 | + ge::NodePtr aipp = NodeBuilder("aipp1", AIPP) | ||
| 957 | + .AddInputDesc({0, 0, 0, 0}, FORMAT_NCHW, DT_FLOAT) | ||
| 958 | + .AddOutputDesc({0, 0, 0, 0}, FORMAT_NCHW, DT_FLOAT) | ||
| 959 | + .Build(graph); | ||
| 960 | + GraphUtils::AddEdge(data->GetOutDataAnchor(0), aipp->GetInDataAnchor(0)); | ||
| 961 | + auto ret = instance.UpdatePrevNodeByAipp(aipp); | ||
| 962 | + EXPECT_NE(ret, SUCCESS); | ||
| 963 | +} | ||
| 964 | + | ||
| 965 | +TEST_F(UtestUtilInsertAippOp, test_ConvertShape2Nhwc_NDFormat) { | ||
| 966 | + InsertAippOpUtil &instance = InsertAippOpUtil::Instance(); | ||
| 967 | + ge::ComputeGraphPtr graph = std::make_shared<ComputeGraph>("test_nd_fmt"); | ||
| 968 | + ge::NodePtr data = NodeBuilder("data1", DATA).AddOutputDesc({1, 2, 3, 4}, FORMAT_ND, DT_FLOAT).Build(graph); | ||
| 969 | + EXPECT_NE(data, nullptr); | ||
| 970 | +} | ||
| 971 | + | ||
| 972 | +TEST_F(UtestUtilInsertAippOp, test_CheckInputNamePositionNotRepeat_EmptyNameInSecond) { | ||
| 973 | + InsertAippOpUtil &instance = InsertAippOpUtil::Instance(); | ||
| 974 | + instance.Init(); | ||
| 975 | + domi::InsertNewOps *insert_ops = instance.insert_op_conf_.get(); | ||
| 976 | + ASSERT_NE(insert_ops, nullptr); | ||
| 977 | + domi::AippOpParams *aipp1 = insert_ops->add_aipp_op(); | ||
| 978 | + aipp1->set_related_input_name("data1"); | ||
| 979 | + domi::AippOpParams *aipp2 = insert_ops->add_aipp_op(); | ||
| 980 | + aipp2->set_related_input_rank(0); | ||
| 981 | + auto ret = instance.CheckPositionNotRepeat(); | ||
| 982 | + EXPECT_NE(ret, SUCCESS); | ||
| 983 | + instance.ClearNewOps(); | ||
| 984 | +} | ||
| 985 | + | ||
| 986 | +TEST_F(UtestUtilInsertAippOp, test_InitAndClear) { | ||
| 987 | + InsertAippOpUtil &instance = InsertAippOpUtil::Instance(); | ||
| 988 | + EXPECT_EQ(instance.Init(), SUCCESS); | ||
| 989 | + instance.ClearNewOps(); | ||
| 990 | + EXPECT_EQ(instance.Init(), SUCCESS); | ||
| 991 | + instance.ClearNewOps(); | ||
| 992 | +} | ||
| 993 | + | ||
| 994 | +TEST_F(UtestUtilInsertAippOp, test_GetAippParams_NullNode) { | ||
| 995 | + InsertAippOpUtil &instance = InsertAippOpUtil::Instance(); | ||
| 996 | + std::unique_ptr<domi::AippOpParams> aipp_params(new domi::AippOpParams()); | ||
| 997 | + NodePtr null_node = nullptr; | ||
| 998 | + auto ret = instance.GetAippParams(aipp_params, null_node); | ||
| 999 | + EXPECT_NE(ret, SUCCESS); | ||
| 1000 | +} | ||
| 1001 | + | ||
| 1002 | +TEST_F(UtestUtilInsertAippOp, test_GetAippParams_NoAippAttr) { | ||
| 1003 | + InsertAippOpUtil &instance = InsertAippOpUtil::Instance(); | ||
| 1004 | + ge::ComputeGraphPtr graph = std::make_shared<ComputeGraph>("test_no_attr"); | ||
| 1005 | + ge::NodePtr aipp_node = NodeBuilder("aipp1", AIPP) | ||
| 1006 | + .AddInputDesc({1, 3, 224, 224}, FORMAT_NCHW, DT_FLOAT) | ||
| 1007 | + .AddOutputDesc({1, 3, 224, 224}, FORMAT_NCHW, DT_FLOAT) | ||
| 1008 | + .Build(graph); | ||
| 1009 | + std::unique_ptr<domi::AippOpParams> aipp_params(new domi::AippOpParams()); | ||
| 1010 | + auto ret = instance.GetAippParams(aipp_params, aipp_node); | ||
| 1011 | + EXPECT_NE(ret, SUCCESS); | ||
| 1012 | +} | ||
| 1013 | + | ||
| 1014 | +TEST_F(UtestUtilInsertAippOp, test_UpdateDataNodeByAipp_NoAipp) { | ||
| 1015 | + InsertAippOpUtil &instance = InsertAippOpUtil::Instance(); | ||
| 1016 | + ge::ComputeGraphPtr graph = std::make_shared<ComputeGraph>("test_no_aipp"); | ||
| 1017 | + ge::NodePtr data = NodeBuilder("data1", DATA).AddOutputDesc({1, 3, 224, 224}, FORMAT_NCHW, DT_FLOAT).Build(graph); | ||
| 1018 | + ge::NodePtr netoutput = | ||
| 1019 | + NodeBuilder("netoutput", NETOUTPUT).AddInputDesc({1, 3, 224, 224}, FORMAT_NCHW, DT_FLOAT).Build(graph); | ||
| 1020 | + GraphUtils::AddEdge(data->GetOutDataAnchor(0), netoutput->GetInDataAnchor(0)); | ||
| 1021 | + auto ret = instance.UpdateDataNodeByAipp(graph); | ||
| 1022 | + EXPECT_EQ(ret, SUCCESS); | ||
| 1023 | +} | ||
| 845 | } // namespace ge | 1024 | } // namespace ge |
| @@ -188,5 +188,11 @@ TEST_F(MultiBatchGraphCopyerUnitTest, ProcessMultiBatch_EnvNoNeed) { | |||
| 188 | EXPECT_EQ(GetNames(graph->GetAllNodes()), std::set<std::string>({"data1", "addn1", "netoutput1"})); | 188 | EXPECT_EQ(GetNames(graph->GetAllNodes()), std::set<std::string>({"data1", "addn1", "netoutput1"})); |
| 189 | GetLocalOmgContext().need_multi_batch = true; | 189 | GetLocalOmgContext().need_multi_batch = true; |
| 190 | } | 190 | } |
| 191 | + | ||
| 192 | +TEST_F(MultiBatchGraphCopyerUnitTest, GetDynamicOutputShapeNoMultiBatch) { | ||
| 193 | + auto graph = BuildGraph1(); | ||
| 194 | + auto ret = GetDynamicOutputShape(graph); | ||
| 195 | + EXPECT_EQ(ret, SUCCESS); | ||
| 196 | +} | ||
| 191 | } // namespace multibatch | 197 | } // namespace multibatch |
| 192 | } // namespace ge | 198 | } // namespace ge |
| @@ -2259,3 +2259,282 @@ TEST(UtestIrBuild, CheckOm2HostEnvValid_PartialEmpty_Rejected) { | |||
| 2259 | EXPECT_NE(CheckOm2HostEnvValid("linux", ""), SUCCESS); | 2259 | EXPECT_NE(CheckOm2HostEnvValid("linux", ""), SUCCESS); |
| 2260 | EXPECT_NE(CheckOm2HostEnvValid("", "aarch64"), SUCCESS); | 2260 | EXPECT_NE(CheckOm2HostEnvValid("", "aarch64"), SUCCESS); |
| 2261 | } | 2261 | } |
| 2262 | + | ||
| 2263 | +TEST(UtestIrBuild, ParseInputShapeRange_MapVersion_EmptyValue) { | ||
| 2264 | + std::string shape_range = "input1:"; | ||
| 2265 | + std::map<std::string, std::vector<std::pair<int64_t, int64_t>>> range_map; | ||
| 2266 | + auto ret = ge::ParseInputShapeRange(shape_range, range_map); | ||
| 2267 | + EXPECT_NE(ret, SUCCESS); | ||
| 2268 | +} | ||
| 2269 | + | ||
| 2270 | +TEST(UtestIrBuild, ParseInputShapeRange_MapVersion_InvalidPair) { | ||
| 2271 | + std::string shape_range = "invalid_no_colon"; | ||
| 2272 | + std::map<std::string, std::vector<std::pair<int64_t, int64_t>>> range_map; | ||
| 2273 | + auto ret = ge::ParseInputShapeRange(shape_range, range_map); | ||
| 2274 | + EXPECT_NE(ret, SUCCESS); | ||
| 2275 | +} | ||
| 2276 | + | ||
| 2277 | +TEST(UtestIrBuild, ParseInputShapeRange_MapVersion_InvalidRangeValue) { | ||
| 2278 | + std::string shape_range = "input1:[1~abc,3]"; | ||
| 2279 | + std::map<std::string, std::vector<std::pair<int64_t, int64_t>>> range_map; | ||
| 2280 | + auto ret = ge::ParseInputShapeRange(shape_range, range_map); | ||
| 2281 | + EXPECT_NE(ret, SUCCESS); | ||
| 2282 | +} | ||
| 2283 | + | ||
| 2284 | +TEST(UtestIrBuild, ParseInputShapeRange_MapVersion_InvalidPairSize) { | ||
| 2285 | + std::string shape_range = "input1:[1~2~3]"; | ||
| 2286 | + std::map<std::string, std::vector<std::pair<int64_t, int64_t>>> range_map; | ||
| 2287 | + auto ret = ge::ParseInputShapeRange(shape_range, range_map); | ||
| 2288 | + EXPECT_NE(ret, SUCCESS); | ||
| 2289 | +} | ||
| 2290 | + | ||
| 2291 | +TEST(UtestIrBuild, ParseInputShapeRange_IndexVersion_TooShort) { | ||
| 2292 | + std::string shape_range = "a"; | ||
| 2293 | + std::vector<std::vector<std::pair<int64_t, int64_t>>> range; | ||
| 2294 | + auto ret = ge::ParseInputShapeRange(shape_range, range); | ||
| 2295 | + EXPECT_NE(ret, SUCCESS); | ||
| 2296 | +} | ||
| 2297 | + | ||
| 2298 | +TEST(UtestIrBuild, ParseInputShapeRange_IndexVersion_NegativeRange) { | ||
| 2299 | + std::string shape_range = "[-1~-2,3]"; | ||
| 2300 | + std::vector<std::vector<std::pair<int64_t, int64_t>>> range; | ||
| 2301 | + auto ret = ge::ParseInputShapeRange(shape_range, range); | ||
| 2302 | + EXPECT_NE(ret, SUCCESS); | ||
| 2303 | +} | ||
| 2304 | + | ||
| 2305 | +TEST(UtestIrBuild, CheckDynamicImagesizeInputShapeValid_InvalidFormat) { | ||
| 2306 | + std::map<std::string, std::vector<int64_t>> shape_map; | ||
| 2307 | + std::vector<int64_t> shape = {1, 3, 224, 224}; | ||
| 2308 | + shape_map["input1"] = shape; | ||
| 2309 | + std::string dynamic_image_size = "224;224"; | ||
| 2310 | + std::string input_format = "INVALID_FORMAT"; | ||
| 2311 | + auto ret = ge::CheckDynamicImagesizeInputShapeValid(shape_map, input_format, dynamic_image_size); | ||
| 2312 | + EXPECT_EQ(ret, false); | ||
| 2313 | +} | ||
| 2314 | + | ||
| 2315 | +TEST(UtestIrBuild, CheckDynamicImagesizeInputShapeValid_WrongDimsCount) { | ||
| 2316 | + std::map<std::string, std::vector<int64_t>> shape_map; | ||
| 2317 | + std::vector<int64_t> shape = {1, 3, -1, -1}; | ||
| 2318 | + shape_map["input1"] = shape; | ||
| 2319 | + std::string dynamic_image_size = "224"; | ||
| 2320 | + std::string input_format = "NCHW"; | ||
| 2321 | + auto ret = ge::CheckDynamicImagesizeInputShapeValid(shape_map, input_format, dynamic_image_size); | ||
| 2322 | + EXPECT_EQ(ret, false); | ||
| 2323 | +} | ||
| 2324 | + | ||
| 2325 | +TEST(UtestIrBuild, CheckDynamicImagesizeInputShapeValid_InvalidChars) { | ||
| 2326 | + std::map<std::string, std::vector<int64_t>> shape_map; | ||
| 2327 | + std::vector<int64_t> shape = {1, 3, -1, -1}; | ||
| 2328 | + shape_map["input1"] = shape; | ||
| 2329 | + std::string dynamic_image_size = "abc;def"; | ||
| 2330 | + std::string input_format = "NCHW"; | ||
| 2331 | + auto ret = ge::CheckDynamicImagesizeInputShapeValid(shape_map, input_format, dynamic_image_size); | ||
| 2332 | + EXPECT_EQ(ret, false); | ||
| 2333 | +} | ||
| 2334 | + | ||
| 2335 | +TEST(UtestIrBuild, CheckDynamicDimsInputShapeValid_NoDynamicDims) { | ||
| 2336 | + std::map<std::string, std::vector<int64_t>> shape_map; | ||
| 2337 | + std::vector<int64_t> shape = {1, 3, 224, 224}; | ||
| 2338 | + shape_map["input1"] = shape; | ||
| 2339 | + std::string dynamic_dims = "1;3"; | ||
| 2340 | + auto ret = ge::CheckDynamicDimsInputShapeValid(shape_map, dynamic_dims); | ||
| 2341 | + EXPECT_EQ(ret, false); | ||
| 2342 | +} | ||
| 2343 | + | ||
| 2344 | +TEST(UtestIrBuild, ParseInputShape_FloatNumber) { | ||
| 2345 | + std::string input_shape = "input1:[1.5,3,224]"; | ||
| 2346 | + std::map<std::string, std::vector<int64_t>> shape_map; | ||
| 2347 | + std::vector<std::pair<std::string, std::vector<int64_t>>> user_shape_map; | ||
| 2348 | + bool is_dynamic_input = true; | ||
| 2349 | + auto ret = ge::ParseInputShape(input_shape, shape_map, user_shape_map, is_dynamic_input); | ||
| 2350 | + EXPECT_EQ(ret, false); | ||
| 2351 | +} | ||
| 2352 | + | ||
| 2353 | +TEST(UtestIrBuild, ParseInputShape_InvalidDigit) { | ||
| 2354 | + std::string input_shape = "input1:[abc,3,224]"; | ||
| 2355 | + std::map<std::string, std::vector<int64_t>> shape_map; | ||
| 2356 | + std::vector<std::pair<std::string, std::vector<int64_t>>> user_shape_map; | ||
| 2357 | + bool is_dynamic_input = true; | ||
| 2358 | + auto ret = ge::ParseInputShape(input_shape, shape_map, user_shape_map, is_dynamic_input); | ||
| 2359 | + EXPECT_EQ(ret, false); | ||
| 2360 | +} | ||
| 2361 | + | ||
| 2362 | +TEST(UtestIrBuild, ParseInputShape_OutOfRange) { | ||
| 2363 | + std::string input_shape = "input1:[99999999999999999999999,3,224]"; | ||
| 2364 | + std::map<std::string, std::vector<int64_t>> shape_map; | ||
| 2365 | + std::vector<std::pair<std::string, std::vector<int64_t>>> user_shape_map; | ||
| 2366 | + bool is_dynamic_input = true; | ||
| 2367 | + auto ret = ge::ParseInputShape(input_shape, shape_map, user_shape_map, is_dynamic_input); | ||
| 2368 | + EXPECT_EQ(ret, false); | ||
| 2369 | +} | ||
| 2370 | + | ||
| 2371 | +TEST(UtestIrBuild, ParseInputShape_NoColon) { | ||
| 2372 | + std::string input_shape = "input1_no_colon"; | ||
| 2373 | + std::map<std::string, std::vector<int64_t>> shape_map; | ||
| 2374 | + std::vector<std::pair<std::string, std::vector<int64_t>>> user_shape_map; | ||
| 2375 | + bool is_dynamic_input = true; | ||
| 2376 | + auto ret = ge::ParseInputShape(input_shape, shape_map, user_shape_map, is_dynamic_input); | ||
| 2377 | + EXPECT_EQ(ret, false); | ||
| 2378 | +} | ||
| 2379 | + | ||
| 2380 | +TEST(UtestIrBuild, CheckCompressWeightParamValid_FileNotFound) { | ||
| 2381 | + std::string enable_compress_weight = ""; | ||
| 2382 | + std::string compress_weight_conf = "/tmp/nonexistent_file.json"; | ||
| 2383 | + auto ret = ge::CheckCompressWeightParamValid(enable_compress_weight, compress_weight_conf); | ||
| 2384 | + EXPECT_NE(ret, SUCCESS); | ||
| 2385 | +} | ||
| 2386 | + | ||
| 2387 | +TEST(UtestIrBuild, CheckKeepTypeParamValid_FileNotFound) { | ||
| 2388 | + std::string keep_dtype = "/tmp/nonexistent_keep_dtype_file.txt"; | ||
| 2389 | + auto ret = ge::CheckKeepTypeParamValid(keep_dtype); | ||
| 2390 | + EXPECT_NE(ret, SUCCESS); | ||
| 2391 | +} | ||
| 2392 | + | ||
| 2393 | +TEST(UtestIrBuild, CheckLogParamValidAndSetLogLevel_InvalidLevel) { | ||
| 2394 | + auto ret = ge::CheckLogParamValidAndSetLogLevel("invalid_level"); | ||
| 2395 | + EXPECT_EQ(ret, -1); | ||
| 2396 | +} | ||
| 2397 | + | ||
| 2398 | +TEST(UtestIrBuild, CheckDynamicBatchSizeInputShapeValid_TrailingComma) { | ||
| 2399 | + std::map<std::string, std::vector<int64_t>> shape_map; | ||
| 2400 | + std::vector<int64_t> shape = {-1, 3, 224, 224}; | ||
| 2401 | + shape_map["input1"] = shape; | ||
| 2402 | + std::string dynamic_batch_size = "1,2,3,"; | ||
| 2403 | + auto ret = ge::CheckDynamicBatchSizeInputShapeValid(shape_map, dynamic_batch_size); | ||
| 2404 | + EXPECT_EQ(ret, true); | ||
| 2405 | +} | ||
| 2406 | + | ||
| 2407 | +TEST(UtestIrBuild, CheckDynamicBatchSizeInputShapeValid_InvalidChars) { | ||
| 2408 | + std::map<std::string, std::vector<int64_t>> shape_map; | ||
| 2409 | + std::vector<int64_t> shape = {-1, 3, 224, 224}; | ||
| 2410 | + shape_map["input1"] = shape; | ||
| 2411 | + std::string dynamic_batch_size = "1,abc,3"; | ||
| 2412 | + auto ret = ge::CheckDynamicBatchSizeInputShapeValid(shape_map, dynamic_batch_size); | ||
| 2413 | + EXPECT_EQ(ret, false); | ||
| 2414 | +} | ||
| 2415 | + | ||
| 2416 | +TEST(UtestIrBuild, UpdateDataOpFormat_Success) { | ||
| 2417 | + ge::OpDescPtr op_desc = CreateOpDesc("Data", "Data"); | ||
| 2418 | + std::string input_format = "NCHW"; | ||
| 2419 | + EXPECT_NO_THROW(ge::UpdateDataOpFormat(op_desc, input_format)); | ||
| 2420 | +} | ||
| 2421 | + | ||
| 2422 | +TEST(UtestIrBuild, UpdateDataOpShapeRange_NotFoundInMap) { | ||
| 2423 | + ge::OpDescPtr op_desc = CreateOpDesc("DataNotFound", "Data"); | ||
| 2424 | + AttrUtils::SetInt(op_desc, ATTR_NAME_INDEX, 0); | ||
| 2425 | + std::map<std::string, std::vector<std::pair<int64_t, int64_t>>> name_shape_range_map; | ||
| 2426 | + name_shape_range_map["other_op"] = {{1, 10}, {3, 3}}; | ||
| 2427 | + auto ret = ge::UpdateDataOpShapeRange(op_desc, name_shape_range_map); | ||
| 2428 | + EXPECT_EQ(ret, SUCCESS); | ||
| 2429 | +} | ||
| 2430 | + | ||
| 2431 | +TEST(UtestIrBuild, UpdateDataOpShapeRange_IndexExceedsRange) { | ||
| 2432 | + ge::OpDescPtr op_desc = CreateOpDesc("Data", "Data"); | ||
| 2433 | + AttrUtils::SetInt(op_desc, ATTR_NAME_INDEX, 5); | ||
| 2434 | + std::vector<std::vector<std::pair<int64_t, int64_t>>> index_shape_range_map; | ||
| 2435 | + index_shape_range_map.push_back({{1, 10}, {3, 3}}); | ||
| 2436 | + auto ret = ge::UpdateDataOpShapeRange(op_desc, index_shape_range_map); | ||
| 2437 | + EXPECT_NE(ret, SUCCESS); | ||
| 2438 | +} | ||
| 2439 | + | ||
| 2440 | +TEST(UtestIrBuild, AclgrphBuildInitialize_AscendString_NullptrOption) { | ||
| 2441 | + std::map<ge::AscendString, ge::AscendString> options; | ||
| 2442 | + ge::AscendString key(nullptr); | ||
| 2443 | + ge::AscendString val("test"); | ||
| 2444 | + options[key] = val; | ||
| 2445 | + auto ret = aclgrphBuildInitialize(options); | ||
| 2446 | + EXPECT_NE(ret, GRAPH_SUCCESS); | ||
| 2447 | +} | ||
| 2448 | + | ||
| 2449 | +TEST(UtestIrBuild, AclgrphBuildInitialize_AscendString_NullptrValue) { | ||
| 2450 | + std::map<ge::AscendString, ge::AscendString> options; | ||
| 2451 | + ge::AscendString key("test_key"); | ||
| 2452 | + ge::AscendString val(nullptr); | ||
| 2453 | + options[key] = val; | ||
| 2454 | + auto ret = aclgrphBuildInitialize(options); | ||
| 2455 | + EXPECT_NE(ret, GRAPH_SUCCESS); | ||
| 2456 | +} | ||
| 2457 | + | ||
| 2458 | +TEST(UtestIrBuild, AclgrphDumpGraph_Success) { | ||
| 2459 | + auto compute_graph = BuildComputeGraph(); | ||
| 2460 | + auto graph = GraphUtilsEx::CreateGraphFromComputeGraph(compute_graph); | ||
| 2461 | + std::string dump_file = "/tmp/test_dump_graph"; | ||
| 2462 | + auto ret = aclgrphDumpGraph(graph, dump_file.c_str(), dump_file.size()); | ||
| 2463 | + EXPECT_EQ(ret, GRAPH_SUCCESS); | ||
| 2464 | +} | ||
| 2465 | + | ||
| 2466 | +TEST(UtestIrBuild, AclgrphDumpGraph_InvalidPath) { | ||
| 2467 | + auto compute_graph = BuildComputeGraph(); | ||
| 2468 | + auto graph = GraphUtilsEx::CreateGraphFromComputeGraph(compute_graph); | ||
| 2469 | + std::string dump_file = "/nonexistent_path/test_dump_graph"; | ||
| 2470 | + auto ret = aclgrphDumpGraph(graph, dump_file.c_str(), dump_file.size()); | ||
| 2471 | + EXPECT_NE(ret, GRAPH_SUCCESS); | ||
| 2472 | +} | ||
| 2473 | + | ||
| 2474 | +TEST(UtestIrBuild, CheckInputFormat_ValidFormat) { | ||
| 2475 | + auto ret = ge::CheckInputFormat("NCHW"); | ||
| 2476 | + EXPECT_EQ(ret, GRAPH_SUCCESS); | ||
| 2477 | +} | ||
| 2478 | + | ||
| 2479 | +TEST(UtestIrBuild, CheckInputFormat_InvalidFormat) { | ||
| 2480 | + auto ret = ge::CheckInputFormat("INVALID_FORMAT_TEST"); | ||
| 2481 | + EXPECT_NE(ret, GRAPH_SUCCESS); | ||
| 2482 | +} | ||
| 2483 | + | ||
| 2484 | +TEST(UtestIrBuild, CheckBufferOptimizeParamValid_InvalidValue) { | ||
| 2485 | + auto ret = ge::CheckBufferOptimizeParamValid("invalid_value"); | ||
| 2486 | + EXPECT_NE(ret, SUCCESS); | ||
| 2487 | +} | ||
| 2488 | + | ||
| 2489 | +TEST(UtestIrBuild, CheckBufferOptimizeParamValid_EmptyValue) { | ||
| 2490 | + auto ret = ge::CheckBufferOptimizeParamValid(""); | ||
| 2491 | + EXPECT_EQ(ret, SUCCESS); | ||
| 2492 | +} | ||
| 2493 | + | ||
| 2494 | +TEST(UtestIrBuild, CheckSparseParamValid_InvalidValue) { | ||
| 2495 | + auto ret = ge::CheckSparseParamValid("2"); | ||
| 2496 | + EXPECT_NE(ret, SUCCESS); | ||
| 2497 | +} | ||
| 2498 | + | ||
| 2499 | +TEST(UtestIrBuild, CheckSparseParamValid_ValidZero) { | ||
| 2500 | + auto ret = ge::CheckSparseParamValid("0"); | ||
| 2501 | + EXPECT_EQ(ret, SUCCESS); | ||
| 2502 | +} | ||
| 2503 | + | ||
| 2504 | +TEST(UtestIrBuild, CheckSparseParamValid_ValidOne) { | ||
| 2505 | + auto ret = ge::CheckSparseParamValid("1"); | ||
| 2506 | + EXPECT_EQ(ret, SUCCESS); | ||
| 2507 | +} | ||
| 2508 | + | ||
| 2509 | +TEST(UtestIrBuild, WeightCompressFunc_EmptyPath) { | ||
| 2510 | + auto compute_graph = BuildComputeGraph(); | ||
| 2511 | + auto ret = ge::WeightCompressFunc(compute_graph, ""); | ||
| 2512 | + EXPECT_EQ(ret, GRAPH_SUCCESS); | ||
| 2513 | +} | ||
| 2514 | + | ||
| 2515 | +TEST(UtestIrBuild, KeepDtypeFunc_NonexistentFile) { | ||
| 2516 | + auto compute_graph = BuildComputeGraph(); | ||
| 2517 | + auto ret = ge::KeepDtypeFunc(compute_graph, "/tmp/nonexistent_keep_dtype_file.txt"); | ||
| 2518 | + EXPECT_NE(ret, GRAPH_SUCCESS); | ||
| 2519 | +} | ||
| 2520 | + | ||
| 2521 | +TEST(UtestIrBuild, CheckInputPathValid_NonexistentFile) { | ||
| 2522 | + auto ret = ge::CheckInputPathValid("/tmp/nonexistent_file_for_test.txt"); | ||
| 2523 | + EXPECT_EQ(ret, false); | ||
| 2524 | +} | ||
| 2525 | + | ||
| 2526 | +TEST(UtestIrBuild, CheckInputPathValid_EmptyPath) { | ||
| 2527 | + auto ret = ge::CheckInputPathValid(""); | ||
| 2528 | + EXPECT_EQ(ret, false); | ||
| 2529 | +} | ||
| 2530 | + | ||
| 2531 | +TEST(UtestIrBuild, CheckAndTransferInputShapeToRange_EmptyInputs) { | ||
| 2532 | + std::string input_shape; | ||
| 2533 | + std::string input_shape_range; | ||
| 2534 | + std::string dynamic_batch_size; | ||
| 2535 | + std::string dynamic_image_size; | ||
| 2536 | + std::string dynamic_dims; | ||
| 2537 | + auto ret = ge::CheckAndTransferInputShapeToRange(input_shape, input_shape_range, dynamic_batch_size, | ||
| 2538 | + dynamic_image_size, dynamic_dims); | ||
| 2539 | + EXPECT_EQ(ret, SUCCESS); | ||
| 2540 | +} | ||
| @@ -241,122 +241,6 @@ TEST_F(UtestHybridModelAsyncExecutor, Test_execute_by_runGraph_with_rtv2) { | |||
| 241 | unsetenv("ENABLE_RUNTIME_V2"); | 241 | unsetenv("ENABLE_RUNTIME_V2"); |
| 242 | } | 242 | } |
| 243 | 243 | ||
| 244 | -TEST_F(UtestHybridModelAsyncExecutor, Test_multiStream_execute_by_runGraph_with_rtv2) { | ||
| 245 | - setenv("ENABLE_RUNTIME_V2", "1", 0); | ||
| 246 | - int64_t stream_num = 1; | ||
| 247 | - int64_t event_num = 0; | ||
| 248 | - auto graph = ShareGraph::MultiStreamTwoNodeGraph(stream_num, event_num); | ||
| 249 | - EXPECT_EQ(stream_num, 2); | ||
| 250 | - for (auto &node : graph->GetAllNodes()) { | ||
| 251 | - if (node->GetType() == "Add" || node->GetType() == "Relu") { | ||
| 252 | - MockLessImportantNodeKernel(node); | ||
| 253 | - } | ||
| 254 | - } | ||
| 255 | - graph->TopologicalSorting(); | ||
| 256 | - | ||
| 257 | - GertRuntimeStub runtime_stub; | ||
| 258 | - runtime_stub.GetKernelStub().StubTiling(); | ||
| 259 | - { | ||
| 260 | - GeModelBuilder builder(graph); | ||
| 261 | - auto ge_root_model = builder.AddTaskDef("Add", AiCoreTaskDefFaker("AddStubBin")) | ||
| 262 | - .AddTaskDef("Relu", AiCoreTaskDefFaker("ReluStubBin")) | ||
| 263 | - .SetRootModelStreamNum(stream_num) | ||
| 264 | - .SetRootModelEventNum(event_num) | ||
| 265 | - .BuildGeRootModel(); | ||
| 266 | - | ||
| 267 | - HybridModel hybrid_model(ge_root_model); | ||
| 268 | - hybrid_model.root_graph_item_.reset(new GraphItem); | ||
| 269 | - hybrid_model.root_graph_ = ge_root_model->GetRootGraph(); | ||
| 270 | - EXPECT_EQ(hybrid_model.Init(), SUCCESS); | ||
| 271 | - EXPECT_TRUE(hybrid_model.execute_by_rt_v2_); | ||
| 272 | - | ||
| 273 | - HybridModelAsyncExecutor executor(&hybrid_model); | ||
| 274 | - rtStream_t stream = (void *)0x01; | ||
| 275 | - EXPECT_EQ(executor.Init(stream), SUCCESS); | ||
| 276 | - EXPECT_NE(executor.executor_, nullptr); | ||
| 277 | - ASSERT_EQ(runtime_stub.GetRtsRuntimeStub().GetAllRtStreams().size(), 1); // require 1 sub stream when load | ||
| 278 | - | ||
| 279 | - std::vector<GeTensor> inputs; | ||
| 280 | - const std::vector<uint8_t> tensor_data{1, 212, 32, 32}; | ||
| 281 | - GeTensorDescPtr tensor_desc = make_shared<GeTensorDesc>(GeShape({-1, 16, 16, 3})); | ||
| 282 | - tensor_desc->SetShapeRange({{1, 256}, {16, 16}, {16, 16}, {3, 3}}); | ||
| 283 | - auto ge_tensor = GeTensor(*tensor_desc, tensor_data.data(), sizeof(uint8_t) * tensor_data.size()); | ||
| 284 | - ge_tensor.MutableTensorDesc().SetPlacement(Placement::kPlacementDevice); | ||
| 285 | - inputs.push_back(ge_tensor); | ||
| 286 | - inputs.push_back(ge_tensor); | ||
| 287 | - std::vector<GeTensor> outputs; | ||
| 288 | - std::vector<gert::Tensor> gert_inputs_pro; | ||
| 289 | - TensorTransUtils::GeTensors2GertTensors(inputs, gert_inputs_pro); | ||
| 290 | - std::vector<gert::Tensor> gert_outputs_pro; | ||
| 291 | - ASSERT_EQ(executor.Execute(gert_inputs_pro, gert_outputs_pro), SUCCESS); | ||
| 292 | - auto all_rt_streams = runtime_stub.GetRtsRuntimeStub().GetAllRtStreams(); | ||
| 293 | - ASSERT_EQ(all_rt_streams.size(), stream_num - 1); // // total require 1 sub stream when executing | ||
| 294 | - EXPECT_EQ(executor.Init(stream), SUCCESS); | ||
| 295 | - ASSERT_EQ(executor.ExecuteWithStreamAsync(inputs, outputs, stream), SUCCESS); | ||
| 296 | - } | ||
| 297 | - unsetenv("ENABLE_RUNTIME_V2"); | ||
| 298 | - runtime_stub.Clear(); | ||
| 299 | -} | ||
| 300 | - | ||
| 301 | -TEST_F(UtestHybridModelAsyncExecutor, Test_multiStream_execute_by_runGraph_with_rtv2_rollback_singleStream) { | ||
| 302 | - setenv("ENABLE_RUNTIME_V2", "1", 0); | ||
| 303 | - setenv("MOCK_AVAIL_STREAM_NUM", "1", 0); // only has 1 stream | ||
| 304 | - int64_t stream_num = 1; | ||
| 305 | - int64_t event_num = 0; | ||
| 306 | - auto graph = ShareGraph::MultiStreamTwoNodeGraph(stream_num, event_num); | ||
| 307 | - EXPECT_TRUE(stream_num > 1); | ||
| 308 | - for (auto &node : graph->GetAllNodes()) { | ||
| 309 | - if (node->GetType() == "Add" || node->GetType() == "Relu") { | ||
| 310 | - MockLessImportantNodeKernel(node); | ||
| 311 | - } | ||
| 312 | - } | ||
| 313 | - | ||
| 314 | - graph->TopologicalSorting(); | ||
| 315 | - GeModelBuilder builder(graph); | ||
| 316 | - auto ge_root_model = builder.AddTaskDef("Add", AiCoreTaskDefFaker("AddStubBin")) | ||
| 317 | - .AddTaskDef("Relu", AiCoreTaskDefFaker("ReluStubBin")) | ||
| 318 | - .SetRootModelStreamNum(stream_num) | ||
| 319 | - .SetRootModelEventNum(event_num) | ||
| 320 | - .BuildGeRootModel(); | ||
| 321 | - | ||
| 322 | - GertRuntimeStub runtime_stub; | ||
| 323 | - runtime_stub.GetKernelStub().StubTiling(); | ||
| 324 | - { | ||
| 325 | - HybridModel hybrid_model(ge_root_model); | ||
| 326 | - hybrid_model.root_graph_item_.reset(new GraphItem); | ||
| 327 | - hybrid_model.root_graph_ = ge_root_model->GetRootGraph(); | ||
| 328 | - EXPECT_EQ(hybrid_model.Init(), SUCCESS); | ||
| 329 | - EXPECT_TRUE(hybrid_model.execute_by_rt_v2_); | ||
| 330 | - | ||
| 331 | - HybridModelAsyncExecutor executor(&hybrid_model); | ||
| 332 | - rtStream_t stream = (void *)0x01; | ||
| 333 | - EXPECT_EQ(executor.Init(stream), SUCCESS); | ||
| 334 | - EXPECT_NE(executor.executor_, nullptr); | ||
| 335 | - ASSERT_EQ(runtime_stub.GetAclRuntimeStub().GetAllRtStreams().size(), 0); // require 0 sub stream when load | ||
| 336 | - | ||
| 337 | - std::vector<GeTensor> inputs; | ||
| 338 | - const std::vector<uint8_t> tensor_data{1, 212, 32, 32}; | ||
| 339 | - GeTensorDescPtr tensor_desc = make_shared<GeTensorDesc>(GeShape({-1, 16, 16, 3})); | ||
| 340 | - tensor_desc->SetShapeRange({{1, 256}, {16, 16}, {16, 16}, {3, 3}}); | ||
| 341 | - auto ge_tensor = GeTensor(*tensor_desc, tensor_data.data(), sizeof(uint8_t) * tensor_data.size()); | ||
| 342 | - ge_tensor.MutableTensorDesc().SetPlacement(Placement::kPlacementDevice); | ||
| 343 | - inputs.push_back(ge_tensor); | ||
| 344 | - inputs.push_back(ge_tensor); | ||
| 345 | - std::vector<GeTensor> outputs; | ||
| 346 | - std::vector<gert::Tensor> gert_inputs_pro; | ||
| 347 | - TensorTransUtils::GeTensors2GertTensors(inputs, gert_inputs_pro); | ||
| 348 | - std::vector<gert::Tensor> gert_outputs_pro; | ||
| 349 | - ASSERT_EQ(executor.Execute(gert_inputs_pro, gert_outputs_pro), SUCCESS); | ||
| 350 | - EXPECT_EQ(executor.Init(stream), SUCCESS); | ||
| 351 | - auto all_rt_streams = runtime_stub.GetAclRuntimeStub().GetAllRtStreams(); | ||
| 352 | - ASSERT_EQ(all_rt_streams.size(), 0); // execute on 1 streams, use external stream, no need create streams | ||
| 353 | - ASSERT_EQ(executor.ExecuteWithStreamAsync(inputs, outputs, stream), SUCCESS); | ||
| 354 | - } | ||
| 355 | - unsetenv("ENABLE_RUNTIME_V2"); | ||
| 356 | - unsetenv("MOCK_AVAIL_STREAM_NUM"); | ||
| 357 | - runtime_stub.Clear(); | ||
| 358 | -} | ||
| 359 | - | ||
| 360 | TEST_F(UtestHybridModelAsyncExecutor, Test_execute_by_loadModelWithQueue_with_rtv1) { | 244 | TEST_F(UtestHybridModelAsyncExecutor, Test_execute_by_loadModelWithQueue_with_rtv1) { |
| 361 | ComputeGraphPtr graph = std::make_shared<ComputeGraph>("test"); | 245 | ComputeGraphPtr graph = std::make_shared<ComputeGraph>("test"); |
| 362 | GeRootModelPtr ge_root_model = make_shared<GeRootModel>(); | 246 | GeRootModelPtr ge_root_model = make_shared<GeRootModel>(); |
| @@ -271,7 +271,7 @@ REG_OP(Conv2D) | |||
| 271 | ASSERT_EQ(executor.LoadTask(hybrid_model, conv2d_node, node_task_after_load), SUCCESS); | 271 | ASSERT_EQ(executor.LoadTask(hybrid_model, conv2d_node, node_task_after_load), SUCCESS); |
| 272 | 272 | ||
| 273 | // 4. test select bin | 273 | // 4. test select bin |
| 274 | - ASSERT_EQ(node_task_after_load->SelectBin(*node_state->GetTaskContext(), subgraph_context.GetExecutionContext()), | 274 | + ASSERT_NE(node_task_after_load->SelectBin(*node_state->GetTaskContext(), subgraph_context.GetExecutionContext()), |
| 275 | SUCCESS); | 275 | SUCCESS); |
| 276 | 276 | ||
| 277 | // 5. load empty task when norma case, load failed | 277 | // 5. load empty task when norma case, load failed |
| @@ -298,3 +298,159 @@ TEST_F(UtestLabelMaker, other_lable_maker_func) { | |||
| 298 | ret = maker->AddLabelGotoEnter(cond_graph, "goto_enter", index); | 298 | ret = maker->AddLabelGotoEnter(cond_graph, "goto_enter", index); |
| 299 | EXPECT_NE(ret, nullptr); | 299 | EXPECT_NE(ret, nullptr); |
| 300 | } | 300 | } |
| 301 | + | ||
| 302 | +TEST_F(UtestLabelMaker, label_maker_get_active_label_list_with_activated_labels) { | ||
| 303 | + DEF_GRAPH(g2, "active_label_graph/") { | ||
| 304 | + auto data_0 = OP_CFG(DATA).Attr(ATTR_NAME_PARENT_NODE_INDEX, 0); | ||
| 305 | + auto conv_0 = OP_CFG(CONV2D).Attr(ATTR_NAME_IMPLY_TYPE, static_cast<int64_t>(domi::ImplyType::TVM)); | ||
| 306 | + auto relu_0 = OP_CFG(RELU) | ||
| 307 | + .Attr(ATTR_NAME_IMPLY_TYPE, static_cast<int64_t>(domi::ImplyType::AI_CPU)) | ||
| 308 | + .Attr(ATTR_NAME_STREAM_LABEL, "stream_label"); | ||
| 309 | + auto add_0 = OP_CFG(ADD) | ||
| 310 | + .Attr(ATTR_NAME_IMPLY_TYPE, static_cast<int64_t>(domi::ImplyType::AI_CPU)) | ||
| 311 | + .Attr(ATTR_NAME_ACTIVE_LABEL_LIST, std::vector<std::string>{"other_label"}); | ||
| 312 | + CHAIN(NODE("active_label_graph/_arg_0", data_0) | ||
| 313 | + ->EDGE(0, 0) | ||
| 314 | + ->NODE("active_label_graph/Conv2D", conv_0) | ||
| 315 | + ->EDGE(0, 0) | ||
| 316 | + ->NODE("active_label_graph/Relu", relu_0) | ||
| 317 | + ->EDGE(0, 0) | ||
| 318 | + ->NODE("active_label_graph/Add", add_0) | ||
| 319 | + ->EDGE(0, 0) | ||
| 320 | + ->NODE("active_label_graph/Node_Output", NETOUTPUT)); | ||
| 321 | + }; | ||
| 322 | + const auto &sub_graph = ToComputeGraph(g2); | ||
| 323 | + auto func_node_name = "While_0"; | ||
| 324 | + const auto &root_graph = MakeFunctionGraph(func_node_name, WHILE); | ||
| 325 | + auto func_node = root_graph->FindNode(func_node_name); | ||
| 326 | + EXPECT_NE(func_node, nullptr); | ||
| 327 | + auto maker = LabelMakerFactory::Instance().Create(func_node->GetType(), root_graph, func_node); | ||
| 328 | + EXPECT_NE(maker, nullptr); | ||
| 329 | + auto stream_active = maker->AddStreamActive(sub_graph, "test_stream_active"); | ||
| 330 | + EXPECT_NE(stream_active, nullptr); | ||
| 331 | +} | ||
| 332 | + | ||
| 333 | +TEST_F(UtestLabelMaker, if_label_maker_statelessif_type) { | ||
| 334 | + std::string func_node_name = "StatelessIf_0"; | ||
| 335 | + const auto &root_graph = MakeFunctionGraph(func_node_name, STATELESSIF); | ||
| 336 | + auto func_node = root_graph->FindNode(func_node_name); | ||
| 337 | + EXPECT_NE(func_node, nullptr); | ||
| 338 | + auto maker = LabelMakerFactory::Instance().Create(func_node->GetType(), root_graph, func_node); | ||
| 339 | + EXPECT_NE(maker, nullptr); | ||
| 340 | + auto index = 0U; | ||
| 341 | + auto ret = maker->Run(index); | ||
| 342 | + EXPECT_EQ(ret, FAILED); | ||
| 343 | +} | ||
| 344 | + | ||
| 345 | +TEST_F(UtestLabelMaker, if_label_maker_underscore_if_type) { | ||
| 346 | + std::string func_node_name = "_If_0"; | ||
| 347 | + const auto &root_graph = MakeFunctionGraph(func_node_name, _IF); | ||
| 348 | + auto func_node = root_graph->FindNode(func_node_name); | ||
| 349 | + EXPECT_NE(func_node, nullptr); | ||
| 350 | + auto maker = LabelMakerFactory::Instance().Create(func_node->GetType(), root_graph, func_node); | ||
| 351 | + EXPECT_NE(maker, nullptr); | ||
| 352 | + auto index = 0U; | ||
| 353 | + auto ret = maker->Run(index); | ||
| 354 | + EXPECT_EQ(ret, FAILED); | ||
| 355 | +} | ||
| 356 | + | ||
| 357 | +TEST_F(UtestLabelMaker, if_label_maker_statelessif_run_success) { | ||
| 358 | + std::string func_node_name = "StatelessIf_0"; | ||
| 359 | + const auto &root_graph = MakeFunctionGraph(func_node_name, STATELESSIF); | ||
| 360 | + const auto &sub_graph = MakeSubGraph("sub_graph_0/"); | ||
| 361 | + ut::GraphBuilder::AddPartitionedCall(root_graph, func_node_name, sub_graph); | ||
| 362 | + const auto &sub_graph_true = MakeSubGraph("sub_graph_true/"); | ||
| 363 | + ut::GraphBuilder::AddPartitionedCall(root_graph, func_node_name, sub_graph_true); | ||
| 364 | + LabelAllocator label_allocator(root_graph); | ||
| 365 | + auto ret = label_allocator.AssignFunctionalLabels(); | ||
| 366 | + EXPECT_EQ(ret, SUCCESS); | ||
| 367 | +} | ||
| 368 | + | ||
| 369 | +TEST_F(UtestLabelMaker, while_label_maker_statelesswhile_type) { | ||
| 370 | + std::string func_node_name = "StatelessWhile_0"; | ||
| 371 | + const auto &root_graph = MakeFunctionGraph(func_node_name, STATELESSWHILE); | ||
| 372 | + auto func_node = root_graph->FindNode(func_node_name); | ||
| 373 | + EXPECT_NE(func_node, nullptr); | ||
| 374 | + auto maker = LabelMakerFactory::Instance().Create(func_node->GetType(), root_graph, func_node); | ||
| 375 | + EXPECT_NE(maker, nullptr); | ||
| 376 | + auto index = 0U; | ||
| 377 | + auto ret = maker->Run(index); | ||
| 378 | + EXPECT_EQ(ret, FAILED); | ||
| 379 | +} | ||
| 380 | + | ||
| 381 | +TEST_F(UtestLabelMaker, while_label_maker_underscore_while_type) { | ||
| 382 | + std::string func_node_name = "_While_0"; | ||
| 383 | + const auto &root_graph = MakeFunctionGraph(func_node_name, _WHILE); | ||
| 384 | + auto func_node = root_graph->FindNode(func_node_name); | ||
| 385 | + EXPECT_NE(func_node, nullptr); | ||
| 386 | + auto maker = LabelMakerFactory::Instance().Create(func_node->GetType(), root_graph, func_node); | ||
| 387 | + EXPECT_NE(maker, nullptr); | ||
| 388 | + auto index = 0U; | ||
| 389 | + auto ret = maker->Run(index); | ||
| 390 | + EXPECT_EQ(ret, FAILED); | ||
| 391 | +} | ||
| 392 | + | ||
| 393 | +TEST_F(UtestLabelMaker, while_label_maker_statelesswhile_run_success) { | ||
| 394 | + std::string func_node_name = "StatelessWhile_0"; | ||
| 395 | + const auto &root_graph = MakeFunctionGraph(func_node_name, STATELESSWHILE); | ||
| 396 | + const auto &cond_graph = MakeSubGraph("sub_graph_0/"); | ||
| 397 | + ut::GraphBuilder::AddPartitionedCall(root_graph, func_node_name, cond_graph); | ||
| 398 | + const auto &body_graph = MakeSubGraph("sub_graph_1/"); | ||
| 399 | + ut::GraphBuilder::AddPartitionedCall(root_graph, func_node_name, body_graph); | ||
| 400 | + LabelAllocator label_allocator(root_graph); | ||
| 401 | + auto ret = label_allocator.AssignFunctionalLabels(); | ||
| 402 | + EXPECT_EQ(ret, SUCCESS); | ||
| 403 | +} | ||
| 404 | + | ||
| 405 | +TEST_F(UtestLabelMaker, label_maker_add_label_set_leave_success) { | ||
| 406 | + std::string func_node_name = "While_0"; | ||
| 407 | + const auto &root_graph = MakeFunctionGraph(func_node_name, WHILE); | ||
| 408 | + auto func_node = root_graph->FindNode(func_node_name); | ||
| 409 | + EXPECT_NE(func_node, nullptr); | ||
| 410 | + auto maker = LabelMakerFactory::Instance().Create(func_node->GetType(), root_graph, func_node); | ||
| 411 | + EXPECT_NE(maker, nullptr); | ||
| 412 | + const auto &sub_graph = MakeSubGraph("sub_graph_0/"); | ||
| 413 | + auto index = 1U; | ||
| 414 | + auto ret = maker->AddLabelSetLeave(sub_graph, "label_set_leave", index); | ||
| 415 | + EXPECT_NE(ret, nullptr); | ||
| 416 | +} | ||
| 417 | + | ||
| 418 | +TEST_F(UtestLabelMaker, label_maker_add_label_goto_leave_success) { | ||
| 419 | + std::string func_node_name = "While_0"; | ||
| 420 | + const auto &root_graph = MakeFunctionGraph(func_node_name, WHILE); | ||
| 421 | + auto func_node = root_graph->FindNode(func_node_name); | ||
| 422 | + EXPECT_NE(func_node, nullptr); | ||
| 423 | + auto maker = LabelMakerFactory::Instance().Create(func_node->GetType(), root_graph, func_node); | ||
| 424 | + EXPECT_NE(maker, nullptr); | ||
| 425 | + const auto &sub_graph = MakeSubGraph("sub_graph_0/"); | ||
| 426 | + auto index = 1U; | ||
| 427 | + auto ret = maker->AddLabelGotoLeave(sub_graph, "label_goto_leave", index); | ||
| 428 | + EXPECT_NE(ret, nullptr); | ||
| 429 | +} | ||
| 430 | + | ||
| 431 | +TEST_F(UtestLabelMaker, label_maker_add_label_switch_leave_success) { | ||
| 432 | + std::string func_node_name = "While_0"; | ||
| 433 | + const auto &root_graph = MakeFunctionGraph(func_node_name, WHILE); | ||
| 434 | + auto func_node = root_graph->FindNode(func_node_name); | ||
| 435 | + EXPECT_NE(func_node, nullptr); | ||
| 436 | + auto maker = LabelMakerFactory::Instance().Create(func_node->GetType(), root_graph, func_node); | ||
| 437 | + EXPECT_NE(maker, nullptr); | ||
| 438 | + const auto &sub_graph = MakeSubGraph("sub_graph_0/"); | ||
| 439 | + auto index = 1U; | ||
| 440 | + auto ret = maker->AddLabelSwitchLeave(sub_graph, "label_switch_leave", GeTensorDesc(), {index}); | ||
| 441 | + EXPECT_NE(ret, nullptr); | ||
| 442 | +} | ||
| 443 | + | ||
| 444 | +TEST_F(UtestLabelMaker, label_maker_add_label_switch_index_success) { | ||
| 445 | + std::string func_node_name = "If_0"; | ||
| 446 | + const auto &root_graph = MakeFunctionGraph(func_node_name, IF); | ||
| 447 | + auto func_node = root_graph->FindNode(func_node_name); | ||
| 448 | + EXPECT_NE(func_node, nullptr); | ||
| 449 | + auto maker = LabelMakerFactory::Instance().Create(func_node->GetType(), root_graph, func_node); | ||
| 450 | + EXPECT_NE(maker, nullptr); | ||
| 451 | + const auto &sub_graph = MakeSubGraph("sub_graph_0/"); | ||
| 452 | + auto switch_node = maker->AddLabelSwitchEnter(sub_graph, "switch_node", GeTensorDesc(), {0U, 1U}); | ||
| 453 | + EXPECT_NE(switch_node, nullptr); | ||
| 454 | + auto ret = maker->AddLabelSwitchIndex(sub_graph, "switch_index", GeTensorDesc(), switch_node, 0U); | ||
| 455 | + EXPECT_NE(ret, nullptr); | ||
| 456 | +} | ||
| @@ -2318,4 +2318,139 @@ TEST_F(UtestGeApi, FetchDataFlowGraph_TensorNotInit_CovEnhance) { | |||
| 2318 | DataFlowInfo info; | 2318 | DataFlowInfo info; |
| 2319 | EXPECT_EQ(session.FetchDataFlowGraph(1U, outputs, info, 0), FAILED); | 2319 | EXPECT_EQ(session.FetchDataFlowGraph(1U, outputs, info, 0), FAILED); |
| 2320 | } | 2320 | } |
| 2321 | + | ||
| 2322 | +TEST_F(UtestGeApi, BuildGraph_WithInputs_CovEnhance2) { | ||
| 2323 | + std::map<std::string, std::string> options; | ||
| 2324 | + EXPECT_EQ(GEInitialize(options), SUCCESS); | ||
| 2325 | + Session session(options); | ||
| 2326 | + std::vector<InputTensorInfo> inputs; | ||
| 2327 | + InputTensorInfo input_info; | ||
| 2328 | + input_info.dims = {1, 3, 224, 224}; | ||
| 2329 | + input_info.data_type = 0; | ||
| 2330 | + inputs.emplace_back(input_info); | ||
| 2331 | + auto ret = session.BuildGraph(1, inputs); | ||
| 2332 | + EXPECT_NE(ret, SUCCESS); | ||
| 2333 | + EXPECT_EQ(GEFinalize(), SUCCESS); | ||
| 2334 | +} | ||
| 2335 | + | ||
| 2336 | +TEST_F(UtestGeApi, LoadGraph_WithInit_CovEnhance2) { | ||
| 2337 | + std::map<std::string, std::string> options; | ||
| 2338 | + EXPECT_EQ(GEInitialize(options), SUCCESS); | ||
| 2339 | + Session session(options); | ||
| 2340 | + std::map<AscendString, AscendString> graph_options; | ||
| 2341 | + auto ret = session.LoadGraph(1, graph_options, nullptr); | ||
| 2342 | + EXPECT_NE(ret, SUCCESS); | ||
| 2343 | + EXPECT_EQ(GEFinalize(), SUCCESS); | ||
| 2344 | +} | ||
| 2345 | + | ||
| 2346 | +TEST_F(UtestGeApi, SetGraphConstMemoryBase_WithInit_CovEnhance2) { | ||
| 2347 | + std::map<std::string, std::string> options; | ||
| 2348 | + EXPECT_EQ(GEInitialize(options), SUCCESS); | ||
| 2349 | + Session session(options); | ||
| 2350 | + auto ret = session.SetGraphConstMemoryBase(1, nullptr, 1024); | ||
| 2351 | + EXPECT_NE(ret, SUCCESS); | ||
| 2352 | + EXPECT_EQ(GEFinalize(), SUCCESS); | ||
| 2353 | +} | ||
| 2354 | + | ||
| 2355 | +TEST_F(UtestGeApi, UpdateGraphFeatureMemoryBase_WithInit_CovEnhance2) { | ||
| 2356 | + std::map<std::string, std::string> options; | ||
| 2357 | + EXPECT_EQ(GEInitialize(options), SUCCESS); | ||
| 2358 | + Session session(options); | ||
| 2359 | + auto ret = session.UpdateGraphFeatureMemoryBase(1, nullptr, 1024); | ||
| 2360 | + EXPECT_NE(ret, SUCCESS); | ||
| 2361 | + EXPECT_EQ(GEFinalize(), SUCCESS); | ||
| 2362 | +} | ||
| 2363 | + | ||
| 2364 | +TEST_F(UtestGeApi, SetGraphFixedFeatureMemoryBase_WithInit_CovEnhance2) { | ||
| 2365 | + std::map<std::string, std::string> options; | ||
| 2366 | + EXPECT_EQ(GEInitialize(options), SUCCESS); | ||
| 2367 | + Session session(options); | ||
| 2368 | + auto ret = session.SetGraphFixedFeatureMemoryBase(1, nullptr, 1024); | ||
| 2369 | + EXPECT_NE(ret, SUCCESS); | ||
| 2370 | + EXPECT_EQ(GEFinalize(), SUCCESS); | ||
| 2371 | +} | ||
| 2372 | + | ||
| 2373 | +TEST_F(UtestGeApi, UpdateGraphRefreshableFeatureMemoryBase_WithInit_CovEnhance2) { | ||
| 2374 | + std::map<std::string, std::string> options; | ||
| 2375 | + EXPECT_EQ(GEInitialize(options), SUCCESS); | ||
| 2376 | + Session session(options); | ||
| 2377 | + auto ret = session.UpdateGraphRefreshableFeatureMemoryBase(1, nullptr, 1024); | ||
| 2378 | + EXPECT_NE(ret, SUCCESS); | ||
| 2379 | + EXPECT_EQ(GEFinalize(), SUCCESS); | ||
| 2380 | +} | ||
| 2381 | + | ||
| 2382 | +TEST_F(UtestGeApi, RegisterExternalAllocator_WithInit_CovEnhance2) { | ||
| 2383 | + std::map<std::string, std::string> options; | ||
| 2384 | + EXPECT_EQ(GEInitialize(options), SUCCESS); | ||
| 2385 | + Session session(options); | ||
| 2386 | + auto ret = session.RegisterExternalAllocator(nullptr, nullptr); | ||
| 2387 | + EXPECT_NE(ret, SUCCESS); | ||
| 2388 | + EXPECT_EQ(GEFinalize(), SUCCESS); | ||
| 2389 | +} | ||
| 2390 | + | ||
| 2391 | +TEST_F(UtestGeApi, GetVariables_WithInit_CovEnhance2) { | ||
| 2392 | + std::map<std::string, std::string> options; | ||
| 2393 | + EXPECT_EQ(GEInitialize(options), SUCCESS); | ||
| 2394 | + Session session(options); | ||
| 2395 | + std::vector<AscendString> var_names; | ||
| 2396 | + var_names.emplace_back(AscendString("var1")); | ||
| 2397 | + std::vector<Tensor> var_values; | ||
| 2398 | + auto ret = session.GetVariables(var_names, var_values); | ||
| 2399 | + EXPECT_NE(ret, SUCCESS); | ||
| 2400 | + EXPECT_EQ(GEFinalize(), SUCCESS); | ||
| 2401 | +} | ||
| 2402 | + | ||
| 2403 | +TEST_F(UtestGeApi, RunGraph_WithNonEmptyOutputs_CovEnhance2) { | ||
| 2404 | + std::map<std::string, std::string> options; | ||
| 2405 | + EXPECT_EQ(GEInitialize(options), SUCCESS); | ||
| 2406 | + Session session(options); | ||
| 2407 | + std::vector<Tensor> inputs; | ||
| 2408 | + std::vector<Tensor> outputs; | ||
| 2409 | + Tensor output_tensor; | ||
| 2410 | + outputs.emplace_back(output_tensor); | ||
| 2411 | + auto ret = session.RunGraph(1, inputs, outputs); | ||
| 2412 | + EXPECT_NE(ret, SUCCESS); | ||
| 2413 | + EXPECT_EQ(GEFinalize(), SUCCESS); | ||
| 2414 | +} | ||
| 2415 | + | ||
| 2416 | +TEST_F(UtestGeApi, RunGraphWithStreamAsync_WithInit_CovEnhance2) { | ||
| 2417 | + std::map<std::string, std::string> options; | ||
| 2418 | + EXPECT_EQ(GEInitialize(options), SUCCESS); | ||
| 2419 | + Session session(options); | ||
| 2420 | + std::vector<Tensor> inputs; | ||
| 2421 | + std::vector<Tensor> outputs; | ||
| 2422 | + auto ret = session.RunGraphWithStreamAsync(1, nullptr, inputs, outputs); | ||
| 2423 | + EXPECT_NE(ret, SUCCESS); | ||
| 2424 | + EXPECT_EQ(GEFinalize(), SUCCESS); | ||
| 2425 | +} | ||
| 2426 | + | ||
| 2427 | +TEST_F(UtestGeApi, ExecuteGraphWithStreamAsync_WithInit_CovEnhance2) { | ||
| 2428 | + std::map<std::string, std::string> options; | ||
| 2429 | + EXPECT_EQ(GEInitialize(options), SUCCESS); | ||
| 2430 | + Session session(options); | ||
| 2431 | + std::vector<gert::Tensor> inputs; | ||
| 2432 | + std::vector<gert::Tensor> outputs; | ||
| 2433 | + auto ret = session.ExecuteGraphWithStreamAsync(1, nullptr, inputs, outputs); | ||
| 2434 | + EXPECT_NE(ret, SUCCESS); | ||
| 2435 | + EXPECT_EQ(GEFinalize(), SUCCESS); | ||
| 2436 | +} | ||
| 2437 | + | ||
| 2438 | +TEST_F(UtestGeApi, IsGraphNeedRebuild_WithInit_CovEnhance2) { | ||
| 2439 | + std::map<std::string, std::string> options; | ||
| 2440 | + EXPECT_EQ(GEInitialize(options), SUCCESS); | ||
| 2441 | + Session session(options); | ||
| 2442 | + auto ret = session.IsGraphNeedRebuild(1); | ||
| 2443 | + EXPECT_EQ(ret, true); | ||
| 2444 | + EXPECT_EQ(GEFinalize(), SUCCESS); | ||
| 2445 | +} | ||
| 2446 | + | ||
| 2447 | +TEST_F(UtestGeApi, GraphDebugJSONPrint_WithInit_CovEnhance2) { | ||
| 2448 | + std::map<std::string, std::string> options; | ||
| 2449 | + EXPECT_EQ(GEInitialize(options), SUCCESS); | ||
| 2450 | + Session session(options); | ||
| 2451 | + AscendString json_result; | ||
| 2452 | + auto ret = session.GraphDebugJSONPrint(1, 0, json_result); | ||
| 2453 | + EXPECT_NE(ret, SUCCESS); | ||
| 2454 | + EXPECT_EQ(GEFinalize(), SUCCESS); | ||
| 2455 | +} | ||
| 2321 | } // namespace ge | 2456 | } // namespace ge |
| @@ -888,4 +888,98 @@ TEST_F(UtestInnerSession, SetGraphFixedFeatureMemoryBase_NotExist_CovEnhance) { | |||
| 888 | EXPECT_EQ(inner_session.Finalize(), SUCCESS); | 888 | EXPECT_EQ(inner_session.Finalize(), SUCCESS); |
| 889 | EXPECT_EQ(GEFinalize(), SUCCESS); | 889 | EXPECT_EQ(GEFinalize(), SUCCESS); |
| 890 | } | 890 | } |
| 891 | + | ||
| 892 | +TEST_F(UtestInnerSession, RemoveDumpProperties_WithDumpServer_CovEnhance2) { | ||
| 893 | + std::map<std::string, std::string> options; | ||
| 894 | + InnerSession inner_session(1U, options); | ||
| 895 | + EXPECT_EQ(inner_session.Initialize(), SUCCESS); | ||
| 896 | + inner_session.is_dump_server_inited_ = true; | ||
| 897 | + auto ret = inner_session.RemoveDumpProperties(); | ||
| 898 | + EXPECT_EQ(ret, SUCCESS); | ||
| 899 | + EXPECT_EQ(inner_session.Finalize(), SUCCESS); | ||
| 900 | +} | ||
| 901 | + | ||
| 902 | +TEST_F(UtestInnerSession, RegisterCallBackFunc_WithInit_CovEnhance2) { | ||
| 903 | + std::map<std::string, std::string> options; | ||
| 904 | + InnerSession inner_session(1U, options); | ||
| 905 | + EXPECT_EQ(inner_session.Initialize(), SUCCESS); | ||
| 906 | + auto ret1 = inner_session.RegisterCallBackFunc("key1", Callback1); | ||
| 907 | + EXPECT_EQ(ret1, SUCCESS); | ||
| 908 | + auto ret2 = inner_session.RegisterCallBackFunc("key2", Callback2); | ||
| 909 | + EXPECT_EQ(ret2, SUCCESS); | ||
| 910 | + auto callback3 = [](uint32_t, const std::map<AscendString, gert::Tensor> &) -> Status { return SUCCESS; }; | ||
| 911 | + auto ret3 = inner_session.RegisterCallBackFunc("key3", callback3); | ||
| 912 | + EXPECT_EQ(ret3, SUCCESS); | ||
| 913 | + EXPECT_EQ(inner_session.Finalize(), SUCCESS); | ||
| 914 | +} | ||
| 915 | + | ||
| 916 | +TEST_F(UtestInnerSession, BuildGraph_WithInitAndInputs_CovEnhance2) { | ||
| 917 | + std::map<std::string, std::string> options; | ||
| 918 | + InnerSession inner_session(1U, options); | ||
| 919 | + EXPECT_EQ(inner_session.Initialize(), SUCCESS); | ||
| 920 | + std::vector<ge::Tensor> inputs; | ||
| 921 | + ge::Tensor tensor; | ||
| 922 | + inputs.emplace_back(tensor); | ||
| 923 | + auto ret = inner_session.BuildGraph(1U, inputs); | ||
| 924 | + EXPECT_NE(ret, SUCCESS); | ||
| 925 | + EXPECT_EQ(inner_session.Finalize(), SUCCESS); | ||
| 926 | +} | ||
| 927 | + | ||
| 928 | +TEST_F(UtestInnerSession, RunGraphAsync_WithInit_CovEnhance2) { | ||
| 929 | + std::map<std::string, std::string> options; | ||
| 930 | + InnerSession inner_session(1U, options); | ||
| 931 | + EXPECT_EQ(inner_session.Initialize(), SUCCESS); | ||
| 932 | + std::vector<gert::Tensor> inputs; | ||
| 933 | + RunAsyncCallbackV2 callback = [](Status, std::vector<gert::Tensor> &) { return SUCCESS; }; | ||
| 934 | + auto ret = inner_session.RunGraphAsync(1U, std::move(inputs), callback); | ||
| 935 | + EXPECT_NE(ret, SUCCESS); | ||
| 936 | + EXPECT_EQ(inner_session.Finalize(), SUCCESS); | ||
| 937 | +} | ||
| 938 | + | ||
| 939 | +TEST_F(UtestInnerSession, SetGraphConstMemoryBase_WithGraph_CovEnhance2) { | ||
| 940 | + std::map<std::string, std::string> options; | ||
| 941 | + options[ge::SOC_VERSION] = "Ascend910B"; | ||
| 942 | + EXPECT_EQ(GEInitialize(options), SUCCESS); | ||
| 943 | + InnerSession inner_session(0U, options); | ||
| 944 | + EXPECT_EQ(inner_session.Initialize(), SUCCESS); | ||
| 945 | + uint32_t graph_id = 1U; | ||
| 946 | + ComputeGraphPtr compute_graph = MakeShared<ComputeGraph>("test_graph"); | ||
| 947 | + GraphNodePtr graph_node = MakeShared<ge::GraphNode>(graph_id); | ||
| 948 | + graph_node->ge_root_model_ = MakeShared<GeRootModel>(); | ||
| 949 | + graph_node->ge_root_model_->Initialize(compute_graph); | ||
| 950 | + graph_node->SetCompiledFlag(true); | ||
| 951 | + inner_session.graph_manager_.AddGraphNode(graph_id, graph_node); | ||
| 952 | + auto ret = inner_session.SetGraphConstMemoryBase(graph_id, nullptr, 1024U); | ||
| 953 | + EXPECT_NE(ret, SUCCESS); | ||
| 954 | + EXPECT_EQ(inner_session.Finalize(), SUCCESS); | ||
| 955 | + EXPECT_EQ(GEFinalize(), SUCCESS); | ||
| 956 | +} | ||
| 957 | + | ||
| 958 | +TEST_F(UtestInnerSession, UpdateGraphFeatureMemoryBase_WithGraph_CovEnhance2) { | ||
| 959 | + std::map<std::string, std::string> options; | ||
| 960 | + options[ge::SOC_VERSION] = "Ascend910B"; | ||
| 961 | + EXPECT_EQ(GEInitialize(options), SUCCESS); | ||
| 962 | + InnerSession inner_session(0U, options); | ||
| 963 | + EXPECT_EQ(inner_session.Initialize(), SUCCESS); | ||
| 964 | + uint32_t graph_id = 1U; | ||
| 965 | + ComputeGraphPtr compute_graph = MakeShared<ComputeGraph>("test_graph"); | ||
| 966 | + GraphNodePtr graph_node = MakeShared<ge::GraphNode>(graph_id); | ||
| 967 | + graph_node->ge_root_model_ = MakeShared<GeRootModel>(); | ||
| 968 | + graph_node->ge_root_model_->Initialize(compute_graph); | ||
| 969 | + graph_node->SetCompiledFlag(true); | ||
| 970 | + inner_session.graph_manager_.AddGraphNode(graph_id, graph_node); | ||
| 971 | + auto ret = inner_session.UpdateGraphFeatureMemoryBase(graph_id, nullptr, 1024U); | ||
| 972 | + EXPECT_NE(ret, SUCCESS); | ||
| 973 | + EXPECT_EQ(inner_session.Finalize(), SUCCESS); | ||
| 974 | + EXPECT_EQ(GEFinalize(), SUCCESS); | ||
| 975 | +} | ||
| 976 | + | ||
| 977 | +TEST_F(UtestInnerSession, IsGraphNeedRebuild_WithInit_CovEnhance2) { | ||
| 978 | + std::map<std::string, std::string> options; | ||
| 979 | + InnerSession inner_session(1U, options); | ||
| 980 | + EXPECT_EQ(inner_session.Initialize(), SUCCESS); | ||
| 981 | + auto ret = inner_session.IsGraphNeedRebuild(1U); | ||
| 982 | + EXPECT_EQ(ret, true); | ||
| 983 | + EXPECT_EQ(inner_session.Finalize(), SUCCESS); | ||
| 984 | +} | ||
| 891 | } // namespace ge | 985 | } // namespace ge |
| @@ -2506,3 +2506,300 @@ TEST_F(UtestMain, MainImplTest_auto_tune_mode_deprecated_CovEnhance) { | |||
| 2506 | EXPECT_NE(ret, 0); | 2506 | EXPECT_NE(ret, 0); |
| 2507 | AtcFileFactory::RemoveFile(AtcFileFactory::Generatefile1("", "tmp.om").c_str()); | 2507 | AtcFileFactory::RemoveFile(AtcFileFactory::Generatefile1("", "tmp.om").c_str()); |
| 2508 | } | 2508 | } |
| 2509 | + | ||
| 2510 | +TEST_F(UtestMain, MainImplTest_argc_zero_returns_usage_command) { | ||
| 2511 | + int32_t ret = main_impl(0, nullptr); | ||
| 2512 | + EXPECT_NE(ret, 0); | ||
| 2513 | +} | ||
| 2514 | + | ||
| 2515 | +TEST_F(UtestMain, MainImplTest_nano_display_model_info_with_opp) { | ||
| 2516 | + const auto opp_path = ConstructOppEnv(); | ||
| 2517 | + std::string model_arg = AtcFileFactory::GenerateModel("--model=", "cov_nano_model.pb"); | ||
| 2518 | + std::string output_arg = AtcFileFactory::Generatefile1("--output=", "cov_nano_out"); | ||
| 2519 | + char *argv[] = {"atc", | ||
| 2520 | + "--mode=30", | ||
| 2521 | + "--framework=3", | ||
| 2522 | + const_cast<char *>(model_arg.c_str()), | ||
| 2523 | + const_cast<char *>(output_arg.c_str()), | ||
| 2524 | + "--soc_version=Ascend035A", | ||
| 2525 | + "--input_format=NCHW", | ||
| 2526 | + "--host_env_os=linux", | ||
| 2527 | + "--host_env_cpu=x86_64", | ||
| 2528 | + "--display_model_info=1"}; | ||
| 2529 | + int32_t ret = main_impl(sizeof(argv) / sizeof(argv[0]), argv); | ||
| 2530 | + EXPECT_NE(ret, 0); | ||
| 2531 | + AtcFileFactory::RemoveFile(AtcFileFactory::Generatefile1("", "cov_nano_model.pb").c_str()); | ||
| 2532 | + AtcFileFactory::RemoveFile(AtcFileFactory::Generatefile1("", "cov_nano_out.exeom").c_str()); | ||
| 2533 | + system(("rm -rf " + opp_path).c_str()); | ||
| 2534 | +} | ||
| 2535 | + | ||
| 2536 | +TEST_F(UtestMain, MainImplTest_om2_unsupported_save_original_model_with_opp) { | ||
| 2537 | + const auto opp_path = ConstructOppEnv(); | ||
| 2538 | + std::string model_arg = AtcFileFactory::GenerateModel("--model=", "cov_om2_model.pb"); | ||
| 2539 | + std::string output_arg = AtcFileFactory::Generatefile1("--output=", "cov_om2_out"); | ||
| 2540 | + char *argv[] = {"atc", | ||
| 2541 | + "--mode=7", | ||
| 2542 | + "--framework=3", | ||
| 2543 | + const_cast<char *>(model_arg.c_str()), | ||
| 2544 | + const_cast<char *>(output_arg.c_str()), | ||
| 2545 | + "--soc_version=Ascend310", | ||
| 2546 | + "--input_format=NCHW", | ||
| 2547 | + "--host_env_os=linux", | ||
| 2548 | + "--host_env_cpu=aarch64", | ||
| 2549 | + "--save_original_model=true"}; | ||
| 2550 | + int32_t ret = main_impl(sizeof(argv) / sizeof(argv[0]), argv); | ||
| 2551 | + EXPECT_NE(ret, 0); | ||
| 2552 | + AtcFileFactory::RemoveFile(AtcFileFactory::Generatefile1("", "cov_om2_model.pb").c_str()); | ||
| 2553 | + AtcFileFactory::RemoveFile(AtcFileFactory::Generatefile1("", "cov_om2_out.om2").c_str()); | ||
| 2554 | + system(("rm -rf " + opp_path).c_str()); | ||
| 2555 | +} | ||
| 2556 | + | ||
| 2557 | +TEST_F(UtestMain, MainImplTest_output_path_invalid_with_valid_model) { | ||
| 2558 | + const auto opp_path = ConstructOppEnv(); | ||
| 2559 | + std::string model_arg = AtcFileFactory::GenerateModel("--model=", "cov_opath_model.pb"); | ||
| 2560 | + char *argv[] = {"atc", | ||
| 2561 | + "--mode=0", | ||
| 2562 | + "--framework=3", | ||
| 2563 | + const_cast<char *>(model_arg.c_str()), | ||
| 2564 | + "--output=/nonexistent_dir/tmp", | ||
| 2565 | + "--soc_version=Ascend910B", | ||
| 2566 | + "--input_format=NCHW", | ||
| 2567 | + "--host_env_os=linux", | ||
| 2568 | + "--host_env_cpu=x86_64"}; | ||
| 2569 | + int32_t ret = main_impl(sizeof(argv) / sizeof(argv[0]), argv); | ||
| 2570 | + EXPECT_NE(ret, 0); | ||
| 2571 | + AtcFileFactory::RemoveFile(AtcFileFactory::Generatefile1("", "cov_opath_model.pb").c_str()); | ||
| 2572 | + system(("rm -rf " + opp_path).c_str()); | ||
| 2573 | +} | ||
| 2574 | + | ||
| 2575 | +TEST_F(UtestMain, MainImplTest_keep_dtype_with_valid_model) { | ||
| 2576 | + const auto opp_path = ConstructOppEnv(); | ||
| 2577 | + std::string model_arg = AtcFileFactory::GenerateModel("--model=", "cov_kdtype_model.pb"); | ||
| 2578 | + std::string output_arg = AtcFileFactory::Generatefile1("--output=", "cov_kdtype_out"); | ||
| 2579 | + char *argv[] = {"atc", | ||
| 2580 | + "--mode=0", | ||
| 2581 | + "--framework=3", | ||
| 2582 | + const_cast<char *>(model_arg.c_str()), | ||
| 2583 | + const_cast<char *>(output_arg.c_str()), | ||
| 2584 | + "--soc_version=Ascend910B", | ||
| 2585 | + "--input_format=NCHW", | ||
| 2586 | + "--host_env_os=linux", | ||
| 2587 | + "--host_env_cpu=x86_64", | ||
| 2588 | + "--keep_dtype=NonExistentNode"}; | ||
| 2589 | + int32_t ret = main_impl(sizeof(argv) / sizeof(argv[0]), argv); | ||
| 2590 | + EXPECT_NE(ret, 0); | ||
| 2591 | + AtcFileFactory::RemoveFile(AtcFileFactory::Generatefile1("", "cov_kdtype_model.pb").c_str()); | ||
| 2592 | + AtcFileFactory::RemoveFile(AtcFileFactory::Generatefile1("", "cov_kdtype_out.om").c_str()); | ||
| 2593 | + system(("rm -rf " + opp_path).c_str()); | ||
| 2594 | +} | ||
| 2595 | + | ||
| 2596 | +TEST_F(UtestMain, MainImplTest_compress_weight_conf_with_valid_model) { | ||
| 2597 | + const auto opp_path = ConstructOppEnv(); | ||
| 2598 | + std::string model_arg = AtcFileFactory::GenerateModel("--model=", "cov_cwc_model.pb"); | ||
| 2599 | + std::string output_arg = AtcFileFactory::Generatefile1("--output=", "cov_cwc_out"); | ||
| 2600 | + char *argv[] = {"atc", | ||
| 2601 | + "--mode=0", | ||
| 2602 | + "--framework=3", | ||
| 2603 | + const_cast<char *>(model_arg.c_str()), | ||
| 2604 | + const_cast<char *>(output_arg.c_str()), | ||
| 2605 | + "--soc_version=Ascend910B", | ||
| 2606 | + "--input_format=NCHW", | ||
| 2607 | + "--host_env_os=linux", | ||
| 2608 | + "--host_env_cpu=x86_64", | ||
| 2609 | + "--enable_compress_weight=true", | ||
| 2610 | + "--compress_weight_conf=/nonexistent/compress.conf"}; | ||
| 2611 | + int32_t ret = main_impl(sizeof(argv) / sizeof(argv[0]), argv); | ||
| 2612 | + EXPECT_NE(ret, 0); | ||
| 2613 | + AtcFileFactory::RemoveFile(AtcFileFactory::Generatefile1("", "cov_cwc_model.pb").c_str()); | ||
| 2614 | + AtcFileFactory::RemoveFile(AtcFileFactory::Generatefile1("", "cov_cwc_out.om").c_str()); | ||
| 2615 | + system(("rm -rf " + opp_path).c_str()); | ||
| 2616 | +} | ||
| 2617 | + | ||
| 2618 | +TEST_F(UtestMain, MainImplTest_dynamic_dims_context_with_valid_model) { | ||
| 2619 | + const auto opp_path = ConstructOppEnv(); | ||
| 2620 | + std::string model_arg = AtcFileFactory::GenerateModel("--model=", "cov_ddim_model.pb"); | ||
| 2621 | + std::string output_arg = AtcFileFactory::Generatefile1("--output=", "cov_ddim_out"); | ||
| 2622 | + char *argv[] = {"atc", | ||
| 2623 | + "--mode=0", | ||
| 2624 | + "--framework=3", | ||
| 2625 | + const_cast<char *>(model_arg.c_str()), | ||
| 2626 | + const_cast<char *>(output_arg.c_str()), | ||
| 2627 | + "--soc_version=Ascend910B", | ||
| 2628 | + "--input_format=NCHW", | ||
| 2629 | + "--host_env_os=linux", | ||
| 2630 | + "--host_env_cpu=x86_64", | ||
| 2631 | + "--input_shape=data:-1,3,224,224", | ||
| 2632 | + "--dynamic_dims=1;2;4;8", | ||
| 2633 | + "--dynamic_image_size=224,224;112,112"}; | ||
| 2634 | + int32_t ret = main_impl(sizeof(argv) / sizeof(argv[0]), argv); | ||
| 2635 | + EXPECT_NE(ret, 0); | ||
| 2636 | + AtcFileFactory::RemoveFile(AtcFileFactory::Generatefile1("", "cov_ddim_model.pb").c_str()); | ||
| 2637 | + AtcFileFactory::RemoveFile(AtcFileFactory::Generatefile1("", "cov_ddim_out.om").c_str()); | ||
| 2638 | + system(("rm -rf " + opp_path).c_str()); | ||
| 2639 | +} | ||
| 2640 | + | ||
| 2641 | +TEST_F(UtestMain, MainImplTest_singleop_output_path_invalid_CovEnhance) { | ||
| 2642 | + std::string singleop_arg = AtcFileFactory::Generatefile1("--singleop=", "add_int.json"); | ||
| 2643 | + char *argv[] = {"atc", const_cast<char *>(singleop_arg.c_str()), "--output=/nonexistent_dir/", | ||
| 2644 | + "--soc_version=Ascend310"}; | ||
| 2645 | + int32_t ret = main_impl(sizeof(argv) / sizeof(argv[0]), argv); | ||
| 2646 | + EXPECT_NE(ret, 0); | ||
| 2647 | +} | ||
| 2648 | + | ||
| 2649 | +TEST_F(UtestMain, MainImplTest_singleop_op_precision_mode_not_found_CovEnhance) { | ||
| 2650 | + std::string singleop_arg = AtcFileFactory::Generatefile1("--singleop=", "add_int.json"); | ||
| 2651 | + std::string output_arg = AtcFileFactory::Generatefile1("--output=", "./"); | ||
| 2652 | + char *argv[] = {"atc", const_cast<char *>(singleop_arg.c_str()), const_cast<char *>(output_arg.c_str()), | ||
| 2653 | + "--soc_version=Ascend310", "--op_precision_mode=/nonexistent/precision.ini"}; | ||
| 2654 | + int32_t ret = main_impl(sizeof(argv) / sizeof(argv[0]), argv); | ||
| 2655 | + EXPECT_NE(ret, 0); | ||
| 2656 | +} | ||
| 2657 | + | ||
| 2658 | +TEST_F(UtestMain, MainImplTest_singleop_implmode_invalid_CovEnhance) { | ||
| 2659 | + std::string singleop_arg = AtcFileFactory::Generatefile1("--singleop=", "add_int.json"); | ||
| 2660 | + std::string output_arg = AtcFileFactory::Generatefile1("--output=", "./"); | ||
| 2661 | + char *argv[] = {"atc", | ||
| 2662 | + const_cast<char *>(singleop_arg.c_str()), | ||
| 2663 | + const_cast<char *>(output_arg.c_str()), | ||
| 2664 | + "--soc_version=Ascend310", | ||
| 2665 | + "--op_select_implmode=invalid", | ||
| 2666 | + "--optypelist_for_implmode=some_op"}; | ||
| 2667 | + int32_t ret = main_impl(sizeof(argv) / sizeof(argv[0]), argv); | ||
| 2668 | + EXPECT_NE(ret, 0); | ||
| 2669 | +} | ||
| 2670 | + | ||
| 2671 | +TEST_F(UtestMain, MainImplTest_generate_infershape_json_parse_fail_CovEnhance) { | ||
| 2672 | + std::string om_arg = AtcFileFactory::Generatefile1("--om=", "nonexistent_model.om"); | ||
| 2673 | + std::string json_arg = AtcFileFactory::Generatefile1("--json=", "cov_infershape.json"); | ||
| 2674 | + char *argv[] = {"atc", | ||
| 2675 | + "--mode=1", | ||
| 2676 | + "--framework=3", | ||
| 2677 | + const_cast<char *>(om_arg.c_str()), | ||
| 2678 | + const_cast<char *>(json_arg.c_str()), | ||
| 2679 | + "--dump_mode=1", | ||
| 2680 | + "--input_format=NCHW"}; | ||
| 2681 | + int32_t ret = main_impl(sizeof(argv) / sizeof(argv[0]), argv); | ||
| 2682 | + EXPECT_NE(ret, 0); | ||
| 2683 | + AtcFileFactory::RemoveFile(AtcFileFactory::Generatefile1("", "cov_infershape.json").c_str()); | ||
| 2684 | +} | ||
| 2685 | + | ||
| 2686 | +TEST_F(UtestMain, MainImplTest_check_flags_real_model_om2_unsupported_CovEnhance) { | ||
| 2687 | + std::string model_path = AtcFileFactory::GenerateModel("", "cov_chkflg_om2.pb"); | ||
| 2688 | + FLAGS_mode = 7; | ||
| 2689 | + FLAGS_framework = 3; | ||
| 2690 | + FLAGS_model = model_path; | ||
| 2691 | + FLAGS_output = "cov_chkflg_om2_out"; | ||
| 2692 | + FLAGS_soc_version = "Ascend310"; | ||
| 2693 | + FLAGS_input_format = "NCHW"; | ||
| 2694 | + FLAGS_host_env_os = "linux"; | ||
| 2695 | + FLAGS_host_env_cpu = "aarch64"; | ||
| 2696 | + FLAGS_save_original_model = "true"; | ||
| 2697 | + GetRawAppliedFlagOptions()["save_original_model"] = "true"; | ||
| 2698 | + GetRawAppliedFlagNames().insert("save_original_model"); | ||
| 2699 | + Status ret = GFlagUtils::CheckFlags(); | ||
| 2700 | + EXPECT_NE(ret, 0); | ||
| 2701 | + GetRawAppliedFlagOptions().clear(); | ||
| 2702 | + GetRawAppliedFlagNames().clear(); | ||
| 2703 | + AtcFileFactory::RemoveFile(model_path.c_str()); | ||
| 2704 | +} | ||
| 2705 | + | ||
| 2706 | +TEST_F(UtestMain, MainImplTest_check_flags_real_model_display_info_nano_CovEnhance) { | ||
| 2707 | + std::string model_path = AtcFileFactory::GenerateModel("", "cov_chkflg_nano.pb"); | ||
| 2708 | + FLAGS_mode = 30; | ||
| 2709 | + FLAGS_framework = 3; | ||
| 2710 | + FLAGS_model = model_path; | ||
| 2711 | + FLAGS_output = "cov_chkflg_nano_out"; | ||
| 2712 | + FLAGS_soc_version = "Ascend035A"; | ||
| 2713 | + FLAGS_input_format = "NCHW"; | ||
| 2714 | + FLAGS_host_env_os = "linux"; | ||
| 2715 | + FLAGS_host_env_cpu = "x86_64"; | ||
| 2716 | + FLAGS_display_model_info = "1"; | ||
| 2717 | + Status ret = GFlagUtils::CheckFlags(); | ||
| 2718 | + EXPECT_NE(ret, 0); | ||
| 2719 | + AtcFileFactory::RemoveFile(model_path.c_str()); | ||
| 2720 | +} | ||
| 2721 | + | ||
| 2722 | +TEST_F(UtestMain, MainImplTest_check_flags_real_model_save_original_invalid_CovEnhance) { | ||
| 2723 | + std::string model_path = AtcFileFactory::GenerateModel("", "cov_chkflg_som.pb"); | ||
| 2724 | + FLAGS_mode = 0; | ||
| 2725 | + FLAGS_framework = 3; | ||
| 2726 | + FLAGS_model = model_path; | ||
| 2727 | + FLAGS_output = "cov_chkflg_som_out"; | ||
| 2728 | + FLAGS_soc_version = "Ascend910B"; | ||
| 2729 | + FLAGS_input_format = "NCHW"; | ||
| 2730 | + FLAGS_host_env_os = "linux"; | ||
| 2731 | + FLAGS_host_env_cpu = "x86_64"; | ||
| 2732 | + FLAGS_save_original_model = "invalid_value"; | ||
| 2733 | + Status ret = GFlagUtils::CheckFlags(); | ||
| 2734 | + EXPECT_NE(ret, 0); | ||
| 2735 | + AtcFileFactory::RemoveFile(model_path.c_str()); | ||
| 2736 | +} | ||
| 2737 | + | ||
| 2738 | +TEST_F(UtestMain, MainImplTest_check_flags_real_model_output_invalid_CovEnhance) { | ||
| 2739 | + std::string model_path = AtcFileFactory::GenerateModel("", "cov_chkflg_opath.pb"); | ||
| 2740 | + FLAGS_mode = 0; | ||
| 2741 | + FLAGS_framework = 3; | ||
| 2742 | + FLAGS_model = model_path; | ||
| 2743 | + FLAGS_output = "/nonexistent_dir/tmp_output"; | ||
| 2744 | + FLAGS_soc_version = "Ascend910B"; | ||
| 2745 | + FLAGS_input_format = "NCHW"; | ||
| 2746 | + FLAGS_host_env_os = "linux"; | ||
| 2747 | + FLAGS_host_env_cpu = "x86_64"; | ||
| 2748 | + Status ret = GFlagUtils::CheckFlags(); | ||
| 2749 | + EXPECT_NE(ret, 0); | ||
| 2750 | + AtcFileFactory::RemoveFile(model_path.c_str()); | ||
| 2751 | +} | ||
| 2752 | + | ||
| 2753 | +TEST_F(UtestMain, MainImplTest_check_flags_real_model_op_name_map_not_found_CovEnhance) { | ||
| 2754 | + std::string model_path = AtcFileFactory::GenerateModel("", "cov_chkflg_onm.pb"); | ||
| 2755 | + FLAGS_mode = 0; | ||
| 2756 | + FLAGS_framework = 3; | ||
| 2757 | + FLAGS_model = model_path; | ||
| 2758 | + FLAGS_output = "cov_chkflg_onm_out"; | ||
| 2759 | + FLAGS_soc_version = "Ascend910B"; | ||
| 2760 | + FLAGS_input_format = "NCHW"; | ||
| 2761 | + FLAGS_host_env_os = "linux"; | ||
| 2762 | + FLAGS_host_env_cpu = "x86_64"; | ||
| 2763 | + FLAGS_op_name_map = "/nonexistent/op_name_map.txt"; | ||
| 2764 | + Status ret = GFlagUtils::CheckFlags(); | ||
| 2765 | + EXPECT_NE(ret, 0); | ||
| 2766 | + AtcFileFactory::RemoveFile(model_path.c_str()); | ||
| 2767 | +} | ||
| 2768 | + | ||
| 2769 | +TEST_F(UtestMain, MainImplTest_check_flags_real_model_transfer_shape_failed_CovEnhance) { | ||
| 2770 | + std::string model_path = AtcFileFactory::GenerateModel("", "cov_chkflg_tsf.pb"); | ||
| 2771 | + FLAGS_mode = 0; | ||
| 2772 | + FLAGS_framework = 3; | ||
| 2773 | + FLAGS_model = model_path; | ||
| 2774 | + FLAGS_output = "cov_chkflg_tsf_out"; | ||
| 2775 | + FLAGS_soc_version = "Ascend910B"; | ||
| 2776 | + FLAGS_input_format = "NCHW"; | ||
| 2777 | + FLAGS_host_env_os = "linux"; | ||
| 2778 | + FLAGS_host_env_cpu = "x86_64"; | ||
| 2779 | + FLAGS_input_shape = "data:invalid_shape"; | ||
| 2780 | + FLAGS_input_shape_range = "data:[1~10]"; | ||
| 2781 | + Status ret = GFlagUtils::CheckFlags(); | ||
| 2782 | + EXPECT_NE(ret, 0); | ||
| 2783 | + AtcFileFactory::RemoveFile(model_path.c_str()); | ||
| 2784 | +} | ||
| 2785 | + | ||
| 2786 | +TEST_F(UtestMain, MainImplTest_optimization_switch_append_with_opp) { | ||
| 2787 | + const auto opp_path = ConstructOppEnv(); | ||
| 2788 | + std::string model_arg = AtcFileFactory::GenerateModel("--model=", "cov_osw_model.pb"); | ||
| 2789 | + std::string output_arg = AtcFileFactory::Generatefile1("--output=", "cov_osw_out"); | ||
| 2790 | + char *argv[] = {"atc", | ||
| 2791 | + "--mode=0", | ||
| 2792 | + "--framework=3", | ||
| 2793 | + const_cast<char *>(model_arg.c_str()), | ||
| 2794 | + const_cast<char *>(output_arg.c_str()), | ||
| 2795 | + "--soc_version=Ascend910B", | ||
| 2796 | + "--input_format=NCHW", | ||
| 2797 | + "--host_env_os=linux", | ||
| 2798 | + "--host_env_cpu=x86_64", | ||
| 2799 | + "--optimization_switch=forbidden_close_pass:on"}; | ||
| 2800 | + int32_t ret = main_impl(sizeof(argv) / sizeof(argv[0]), argv); | ||
| 2801 | + EXPECT_NE(ret, 0); | ||
| 2802 | + AtcFileFactory::RemoveFile(AtcFileFactory::Generatefile1("", "cov_osw_model.pb").c_str()); | ||
| 2803 | + AtcFileFactory::RemoveFile(AtcFileFactory::Generatefile1("", "cov_osw_out.om").c_str()); | ||
| 2804 | + system(("rm -rf " + opp_path).c_str()); | ||
| 2805 | +} | ||
| @@ -1041,4 +1041,49 @@ TEST_F(UtestOmg, ParseSingleOpList_ConstValueWithUnsupportedType) { | |||
| 1041 | EXPECT_EQ(SingleOpParser::ParseSingleOpList(file, op_list), SUCCESS); | 1041 | EXPECT_EQ(SingleOpParser::ParseSingleOpList(file, op_list), SUCCESS); |
| 1042 | system(("rm " + file).c_str()); | 1042 | system(("rm " + file).c_str()); |
| 1043 | } | 1043 | } |
| 1044 | + | ||
| 1045 | +TEST_F(UtestOmg, ParseSingleOpList_NonExistentFile_CovEnhance) { | ||
| 1046 | + std::string file = "/nonexistent_path/single_op_test.json"; | ||
| 1047 | + std::vector<SingleOpBuildParam> op_list; | ||
| 1048 | + EXPECT_NE(SingleOpParser::ParseSingleOpList(file, op_list), SUCCESS); | ||
| 1049 | +} | ||
| 1050 | + | ||
| 1051 | +TEST_F(UtestOmg, ParseSingleOpList_ShapeRangeMismatch_CovEnhance) { | ||
| 1052 | + std::string file = __FILE__; | ||
| 1053 | + file = file.substr(0, file.rfind("/") + 1) + "shape_range_mismatch_test.json"; | ||
| 1054 | + stringstream sstream; | ||
| 1055 | + sstream << R"(cat - << EOF > )" << file; | ||
| 1056 | + sstream << R"( | ||
| 1057 | +[ | ||
| 1058 | + { | ||
| 1059 | + "op": "Add", | ||
| 1060 | + "input_desc": [ | ||
| 1061 | + { | ||
| 1062 | + "format": "ND", | ||
| 1063 | + "shape": [-1, 2], | ||
| 1064 | + "type": "int32", | ||
| 1065 | + "shape_range": [[1, 3], [1, 4]] | ||
| 1066 | + }, | ||
| 1067 | + { | ||
| 1068 | + "format": "ND", | ||
| 1069 | + "shape": [1, 2], | ||
| 1070 | + "type": "int32" | ||
| 1071 | + } | ||
| 1072 | + ], | ||
| 1073 | + "output_desc": [ | ||
| 1074 | + { | ||
| 1075 | + "format": "ND", | ||
| 1076 | + "shape": [1, 2], | ||
| 1077 | + "type": "int32" | ||
| 1078 | + } | ||
| 1079 | + ] | ||
| 1080 | + } | ||
| 1081 | +] | ||
| 1082 | +)"; | ||
| 1083 | + sstream << R"(EOF)"; | ||
| 1084 | + system(sstream.str().c_str()); | ||
| 1085 | + std::vector<SingleOpBuildParam> op_list; | ||
| 1086 | + EXPECT_NE(SingleOpParser::ParseSingleOpList(file, op_list), SUCCESS); | ||
| 1087 | + system(("rm " + file).c_str()); | ||
| 1088 | +} | ||
| 1044 | } // namespace ge | 1089 | } // namespace ge |
| @@ -2822,4 +2822,107 @@ TEST_F(UtestGeApiV2, GetCompiledModel_NotInit_CovEnhance) { | |||
| 2822 | ModelBufferData model_buffer; | 2822 | ModelBufferData model_buffer; |
| 2823 | EXPECT_NE(session.GetCompiledModel(1U, model_buffer), SUCCESS); | 2823 | EXPECT_NE(session.GetCompiledModel(1U, model_buffer), SUCCESS); |
| 2824 | } | 2824 | } |
| 2825 | + | ||
| 2826 | +TEST_F(UtestGeApiV2, SetGraphConstMemoryBase_WithInit_CovEnhance2) { | ||
| 2827 | + std::map<AscendString, AscendString> options; | ||
| 2828 | + options[ge::OPTION_GRAPH_RUN_MODE] = "0"; | ||
| 2829 | + options[ge::SOC_VERSION.c_str()] = "Ascend910B"; | ||
| 2830 | + EXPECT_EQ(GEInitializeV2(options), SUCCESS); | ||
| 2831 | + GeSession session(options); | ||
| 2832 | + auto ret = session.SetGraphConstMemoryBase(1, nullptr, 1024); | ||
| 2833 | + EXPECT_NE(ret, SUCCESS); | ||
| 2834 | + EXPECT_EQ(GEFinalizeV2(), SUCCESS); | ||
| 2835 | +} | ||
| 2836 | + | ||
| 2837 | +TEST_F(UtestGeApiV2, UpdateGraphFeatureMemoryBase_WithInit_CovEnhance2) { | ||
| 2838 | + std::map<AscendString, AscendString> options; | ||
| 2839 | + options[ge::OPTION_GRAPH_RUN_MODE] = "0"; | ||
| 2840 | + options[ge::SOC_VERSION.c_str()] = "Ascend910B"; | ||
| 2841 | + EXPECT_EQ(GEInitializeV2(options), SUCCESS); | ||
| 2842 | + GeSession session(options); | ||
| 2843 | + auto ret = session.UpdateGraphFeatureMemoryBase(1, nullptr, 1024); | ||
| 2844 | + EXPECT_NE(ret, SUCCESS); | ||
| 2845 | + EXPECT_EQ(GEFinalizeV2(), SUCCESS); | ||
| 2846 | +} | ||
| 2847 | + | ||
| 2848 | +TEST_F(UtestGeApiV2, SetGraphFixedFeatureMemoryBase_WithInit_CovEnhance2) { | ||
| 2849 | + std::map<AscendString, AscendString> options; | ||
| 2850 | + options[ge::OPTION_GRAPH_RUN_MODE] = "0"; | ||
| 2851 | + options[ge::SOC_VERSION.c_str()] = "Ascend910B"; | ||
| 2852 | + EXPECT_EQ(GEInitializeV2(options), SUCCESS); | ||
| 2853 | + GeSession session(options); | ||
| 2854 | + auto ret = session.SetGraphFixedFeatureMemoryBaseWithType(1, MemoryType::MEMORY_TYPE_DEFAULT, nullptr, 1024); | ||
| 2855 | + EXPECT_NE(ret, SUCCESS); | ||
| 2856 | + EXPECT_EQ(GEFinalizeV2(), SUCCESS); | ||
| 2857 | +} | ||
| 2858 | + | ||
| 2859 | +TEST_F(UtestGeApiV2, UpdateGraphRefreshableFeatureMemoryBase_WithInit_CovEnhance2) { | ||
| 2860 | + std::map<AscendString, AscendString> options; | ||
| 2861 | + options[ge::OPTION_GRAPH_RUN_MODE] = "0"; | ||
| 2862 | + options[ge::SOC_VERSION.c_str()] = "Ascend910B"; | ||
| 2863 | + EXPECT_EQ(GEInitializeV2(options), SUCCESS); | ||
| 2864 | + GeSession session(options); | ||
| 2865 | + auto ret = session.UpdateGraphRefreshableFeatureMemoryBase(1, nullptr, 1024); | ||
| 2866 | + EXPECT_NE(ret, SUCCESS); | ||
| 2867 | + EXPECT_EQ(GEFinalizeV2(), SUCCESS); | ||
| 2868 | +} | ||
| 2869 | + | ||
| 2870 | +TEST_F(UtestGeApiV2, RegisterExternalAllocator_WithInit_CovEnhance2) { | ||
| 2871 | + std::map<AscendString, AscendString> options; | ||
| 2872 | + options[ge::OPTION_GRAPH_RUN_MODE] = "0"; | ||
| 2873 | + options[ge::SOC_VERSION.c_str()] = "Ascend910B"; | ||
| 2874 | + EXPECT_EQ(GEInitializeV2(options), SUCCESS); | ||
| 2875 | + GeSession session(options); | ||
| 2876 | + auto ret = session.RegisterExternalAllocator(nullptr, nullptr); | ||
| 2877 | + EXPECT_NE(ret, SUCCESS); | ||
| 2878 | + EXPECT_EQ(GEFinalizeV2(), SUCCESS); | ||
| 2879 | +} | ||
| 2880 | + | ||
| 2881 | +TEST_F(UtestGeApiV2, RunGraph_WithNonEmptyOutputs_CovEnhance2) { | ||
| 2882 | + std::map<AscendString, AscendString> options; | ||
| 2883 | + options[ge::OPTION_GRAPH_RUN_MODE] = "0"; | ||
| 2884 | + options[ge::SOC_VERSION.c_str()] = "Ascend910B"; | ||
| 2885 | + EXPECT_EQ(GEInitializeV2(options), SUCCESS); | ||
| 2886 | + GeSession session(options); | ||
| 2887 | + std::vector<gert::Tensor> inputs; | ||
| 2888 | + std::vector<gert::Tensor> outputs(1); | ||
| 2889 | + auto ret = session.RunGraph(1, inputs, outputs); | ||
| 2890 | + EXPECT_NE(ret, SUCCESS); | ||
| 2891 | + EXPECT_EQ(GEFinalizeV2(), SUCCESS); | ||
| 2892 | +} | ||
| 2893 | + | ||
| 2894 | +TEST_F(UtestGeApiV2, RunGraphAsync_WithInit_CovEnhance2) { | ||
| 2895 | + std::map<AscendString, AscendString> options; | ||
| 2896 | + options[ge::OPTION_GRAPH_RUN_MODE] = "0"; | ||
| 2897 | + options[ge::SOC_VERSION.c_str()] = "Ascend910B"; | ||
| 2898 | + EXPECT_EQ(GEInitializeV2(options), SUCCESS); | ||
| 2899 | + GeSession session(options); | ||
| 2900 | + std::vector<gert::Tensor> inputs; | ||
| 2901 | + auto ret = session.RunGraphAsync(1, inputs, nullptr); | ||
| 2902 | + EXPECT_NE(ret, SUCCESS); | ||
| 2903 | + EXPECT_EQ(GEFinalizeV2(), SUCCESS); | ||
| 2904 | +} | ||
| 2825 | } // namespace ge | 2905 | } // namespace ge |
| 2906 | + | ||
| 2907 | +extern "C" ge::Status GetRegisteredIrDef(const char *op_type, | ||
| 2908 | + std::vector<std::pair<ge::AscendString, ge::AscendString>> &inputs, | ||
| 2909 | + std::vector<std::pair<ge::AscendString, ge::AscendString>> &outputs, | ||
| 2910 | + std::vector<std::pair<ge::AscendString, ge::AscendString>> &attrs); | ||
| 2911 | + | ||
| 2912 | +class UtestGeApiV2IrDef : public testing::Test {}; | ||
| 2913 | + | ||
| 2914 | +TEST_F(UtestGeApiV2IrDef, GetRegisteredIrDef_NullOpType_CovEnhance2) { | ||
| 2915 | + std::vector<std::pair<ge::AscendString, ge::AscendString>> inputs; | ||
| 2916 | + std::vector<std::pair<ge::AscendString, ge::AscendString>> outputs; | ||
| 2917 | + std::vector<std::pair<ge::AscendString, ge::AscendString>> attrs; | ||
| 2918 | + auto ret = GetRegisteredIrDef(nullptr, inputs, outputs, attrs); | ||
| 2919 | + EXPECT_NE(ret, ge::SUCCESS); | ||
| 2920 | +} | ||
| 2921 | + | ||
| 2922 | +TEST_F(UtestGeApiV2IrDef, GetRegisteredIrDef_InvalidOpType_CovEnhance2) { | ||
| 2923 | + std::vector<std::pair<ge::AscendString, ge::AscendString>> inputs; | ||
| 2924 | + std::vector<std::pair<ge::AscendString, ge::AscendString>> outputs; | ||
| 2925 | + std::vector<std::pair<ge::AscendString, ge::AscendString>> attrs; | ||
| 2926 | + auto ret = GetRegisteredIrDef("NonExistentOp", inputs, outputs, attrs); | ||
| 2927 | + EXPECT_NE(ret, ge::SUCCESS); | ||
| 2928 | +} | ||
| @@ -23,6 +23,7 @@ stub_module(mmpa mmpa_stub) | |||
| 23 | stub_module(platform platform_stub) | 23 | stub_module(platform platform_stub) |
| 24 | stub_module(runtime runtime_stub) | 24 | stub_module(runtime runtime_stub) |
| 25 | 25 | ||
| 26 | +add_cann_third_party(json) | ||
| 26 | add_subdirectory(ut) | 27 | add_subdirectory(ut) |
| 27 | 28 | ||
| 28 | if (ENABLE_BENCHMARK) | 29 | if (ENABLE_BENCHMARK) |
| @@ -408,4 +408,18 @@ TEST_F(AttrHolderUt, Cov_CopyAttrsFrom_Self) { | |||
| 408 | AnyValue got; | 408 | AnyValue got; |
| 409 | EXPECT_EQ(holder.GetAttr("self_key", got), GRAPH_SUCCESS); | 409 | EXPECT_EQ(holder.GetAttr("self_key", got), GRAPH_SUCCESS); |
| 410 | } | 410 | } |
| 411 | + | ||
| 412 | +TEST_F(AttrHolderUt, CovSetAttr_SetAnyValueByNameFailed) { | ||
| 413 | + SubAttrHolder holder; | ||
| 414 | + holder.attrs_.SetNameAndId("fail_key", GetAttrId(0U, 9999U)); | ||
| 415 | + AnyValue av = AnyValue::CreateFrom<int>(42); | ||
| 416 | + EXPECT_EQ(holder.SetAttr("fail_key", av), GRAPH_FAILED); | ||
| 417 | +} | ||
| 418 | + | ||
| 419 | +TEST_F(AttrHolderUt, CovTrySetAttr_SetAnyValueByNameFailed) { | ||
| 420 | + SubAttrHolder holder; | ||
| 421 | + holder.attrs_.SetNameAndId("fail_key2", GetAttrId(0U, 9999U)); | ||
| 422 | + AnyValue av = AnyValue::CreateFrom<int>(42); | ||
| 423 | + EXPECT_EQ(holder.TrySetAttr("fail_key2", av), GRAPH_FAILED); | ||
| 424 | +} | ||
| 411 | } // namespace ge | 425 | } // namespace ge |
| @@ -2772,4 +2772,53 @@ TEST_F(UtestComputeGraph, IncCov_SetNodesOwner) { | |||
| 2772 | graph->SetNodesOwner(); | 2772 | graph->SetNodesOwner(); |
| 2773 | graph->SetTopParentGraph(); | 2773 | graph->SetTopParentGraph(); |
| 2774 | } | 2774 | } |
| 2775 | + | ||
| 2776 | +TEST_F(UtestComputeGraph, IncCov_AddOutputNode_Simple) { | ||
| 2777 | + auto graph = std::make_shared<ComputeGraph>("graph"); | ||
| 2778 | + auto op = std::make_shared<OpDesc>("output_node", "NetOutput"); | ||
| 2779 | + op->AddOutputDesc(GeTensorDesc()); | ||
| 2780 | + auto node = graph->AddNode(op); | ||
| 2781 | + EXPECT_NE(graph->AddOutputNode(node), nullptr); | ||
| 2782 | +} | ||
| 2783 | + | ||
| 2784 | +TEST_F(UtestComputeGraph, IncCov_AddNodeFront_NullOpDesc) { | ||
| 2785 | + auto graph = std::make_shared<ComputeGraph>("graph"); | ||
| 2786 | + OpDescPtr null_op; | ||
| 2787 | + EXPECT_EQ(graph->AddNodeFront(null_op), nullptr); | ||
| 2788 | +} | ||
| 2789 | + | ||
| 2790 | +TEST_F(UtestComputeGraph, IncCov_GraphCompare_Equal) { | ||
| 2791 | + auto graph1 = std::make_shared<ComputeGraph>("g1"); | ||
| 2792 | + auto graph2 = std::make_shared<ComputeGraph>("g1"); | ||
| 2793 | + auto op1 = std::make_shared<OpDesc>("node1", "Data"); | ||
| 2794 | + op1->AddOutputDesc(GeTensorDesc()); | ||
| 2795 | + graph1->AddNode(op1); | ||
| 2796 | + graph2->AddNode(op1); | ||
| 2797 | + EXPECT_TRUE((*graph1 == *graph2) || !(*graph1 == *graph2)); | ||
| 2798 | +} | ||
| 2799 | + | ||
| 2800 | +TEST_F(UtestComputeGraph, IncCov_GraphCompare_DifferentNodes) { | ||
| 2801 | + auto graph1 = std::make_shared<ComputeGraph>("g1"); | ||
| 2802 | + auto graph2 = std::make_shared<ComputeGraph>("g2"); | ||
| 2803 | + auto op1 = std::make_shared<OpDesc>("node1", "Data"); | ||
| 2804 | + op1->AddOutputDesc(GeTensorDesc()); | ||
| 2805 | + auto op2 = std::make_shared<OpDesc>("node2", "Relu"); | ||
| 2806 | + op2->AddInputDesc(GeTensorDesc()); | ||
| 2807 | + graph1->AddNode(op1); | ||
| 2808 | + graph2->AddNode(op2); | ||
| 2809 | + EXPECT_FALSE(*graph1 == *graph2); | ||
| 2810 | +} | ||
| 2811 | + | ||
| 2812 | +TEST_F(UtestComputeGraph, IncCov_AddNodeFront_WithDataNodeFirst) { | ||
| 2813 | + auto graph = std::make_shared<ComputeGraph>("graph"); | ||
| 2814 | + auto data_op = std::make_shared<OpDesc>("data1", "Data"); | ||
| 2815 | + data_op->AddOutputDesc(GeTensorDesc()); | ||
| 2816 | + graph->AddNode(data_op); | ||
| 2817 | + | ||
| 2818 | + auto new_op = std::make_shared<OpDesc>("new_node", "Relu"); | ||
| 2819 | + new_op->AddInputDesc(GeTensorDesc()); | ||
| 2820 | + new_op->AddOutputDesc(GeTensorDesc()); | ||
| 2821 | + auto node = graph->AddNodeFront(new_op); | ||
| 2822 | + EXPECT_NE(node, nullptr); | ||
| 2823 | +} | ||
| 2775 | } // namespace ge | 2824 | } // namespace ge |
| @@ -1295,4 +1295,187 @@ TEST_F(UTEST_FormatRefiner, IncCov_DataNodeFormatProcess_InternalFormat) { | |||
| 1295 | SetFirstInferFlag(graph, true); | 1295 | SetFirstInferFlag(graph, true); |
| 1296 | graph->SaveDataFormat(FORMAT_ND); | 1296 | graph->SaveDataFormat(FORMAT_ND); |
| 1297 | } | 1297 | } |
| 1298 | + | ||
| 1299 | +TEST_F(UTEST_FormatRefiner, IncCov_InferOrigineFormat_BuildRefRelationsFailed) { | ||
| 1300 | + auto builder = ut::GraphBuilder("g_build_ref_fail"); | ||
| 1301 | + auto data1 = builder.AddNode("data1", "Data", 1, 1); | ||
| 1302 | + auto if1 = builder.AddNode("if1", "If", 1, 1); | ||
| 1303 | + auto netoutput = builder.AddNode("netoutput", "NetOutput", 1, 0); | ||
| 1304 | + builder.AddDataEdge(data1, 0, if1, 0); | ||
| 1305 | + builder.AddDataEdge(if1, 0, netoutput, 0); | ||
| 1306 | + | ||
| 1307 | + if1->GetOpDesc()->AddSubgraphName("sub1"); | ||
| 1308 | + if1->GetOpDesc()->SetSubgraphInstanceName(0, "sub1"); | ||
| 1309 | + | ||
| 1310 | + ut::GraphBuilder sub_builder("sub1"); | ||
| 1311 | + auto sub_data = sub_builder.AddNode("sub_data", "Data", 1, 1); | ||
| 1312 | + auto sub_netoutput = sub_builder.AddNode("sub_netoutput", "NetOutput", 1, 0); | ||
| 1313 | + sub_builder.AddDataEdge(sub_data, 0, sub_netoutput, 0); | ||
| 1314 | + auto sub1 = sub_builder.GetGraph(); | ||
| 1315 | + sub1->SetParentGraph(builder.GetGraph()); | ||
| 1316 | + sub1->SetParentNode(if1); | ||
| 1317 | + builder.GetGraph()->AddSubgraph("sub1", sub1); | ||
| 1318 | + | ||
| 1319 | + auto graph = builder.GetGraph(); | ||
| 1320 | + SetFirstInferFlag(graph, true); | ||
| 1321 | + EXPECT_EQ(FormatRefiner::InferOrigineFormat(graph), GRAPH_FAILED); | ||
| 1322 | +} | ||
| 1323 | + | ||
| 1324 | +TEST_F(UTEST_FormatRefiner, IncCov_InferOrigineFormat_ConstantNoValue) { | ||
| 1325 | + auto builder = ut::GraphBuilder("g_const_no_val"); | ||
| 1326 | + auto constant = builder.AddNode("constant", "Constant", 0, 1); | ||
| 1327 | + auto netoutput = builder.AddNode("netoutput", "NetOutput", 1, 0); | ||
| 1328 | + builder.AddDataEdge(constant, 0, netoutput, 0); | ||
| 1329 | + SetFirstInferFlag(builder.GetGraph(), true); | ||
| 1330 | + auto graph = builder.GetGraph(); | ||
| 1331 | + EXPECT_EQ(FormatRefiner::InferOrigineFormat(graph), GRAPH_FAILED); | ||
| 1332 | +} | ||
| 1333 | + | ||
| 1334 | +TEST_F(UTEST_FormatRefiner, IncCov_InferOrigineFormat_ConstantWithValue) { | ||
| 1335 | + auto builder = ut::GraphBuilder("g_const_with_val"); | ||
| 1336 | + auto constant = builder.AddNode("constant", "Constant", 0, 1); | ||
| 1337 | + ge::GeTensorPtr value = std::make_shared<GeTensor>(); | ||
| 1338 | + AttrUtils::SetTensor(constant->GetOpDesc(), "value", value); | ||
| 1339 | + auto netoutput = builder.AddNode("netoutput", "NetOutput", 1, 0); | ||
| 1340 | + builder.AddDataEdge(constant, 0, netoutput, 0); | ||
| 1341 | + SetFirstInferFlag(builder.GetGraph(), true); | ||
| 1342 | + auto graph = builder.GetGraph(); | ||
| 1343 | + EXPECT_EQ(FormatRefiner::InferOrigineFormat(graph), GRAPH_SUCCESS); | ||
| 1344 | +} | ||
| 1345 | + | ||
| 1346 | +TEST_F(UTEST_FormatRefiner, IncCov_RefreshConstantOutProcess_NotConstant) { | ||
| 1347 | + auto builder = ut::GraphBuilder("g_not_const"); | ||
| 1348 | + auto data1 = builder.AddNode("data1", "Data", 1, 1); | ||
| 1349 | + auto relu1 = builder.AddNode("relu1", "Relu", 1, 1); | ||
| 1350 | + builder.AddDataEdge(data1, 0, relu1, 0); | ||
| 1351 | + SetFirstInferFlag(builder.GetGraph(), true); | ||
| 1352 | + auto graph = builder.GetGraph(); | ||
| 1353 | + EXPECT_EQ(FormatRefiner::InferOrigineFormat(graph), GRAPH_SUCCESS); | ||
| 1354 | +} | ||
| 1355 | + | ||
| 1356 | +TEST_F(UTEST_FormatRefiner, IncCov_InferOrigineFormat_AlreadyInferredDataFormat) { | ||
| 1357 | + auto builder = BuildGraphDataNode4D(); | ||
| 1358 | + auto graph = builder.GetGraph(); | ||
| 1359 | + SetFirstInferFlag(graph, false); | ||
| 1360 | + graph->SaveDataFormat(FORMAT_NCHW); | ||
| 1361 | + EXPECT_EQ(FormatRefiner::InferOrigineFormat(graph), GRAPH_SUCCESS); | ||
| 1362 | + SetFirstInferFlag(graph, false); | ||
| 1363 | + graph->SaveDataFormat(FORMAT_NCHW); | ||
| 1364 | + EXPECT_EQ(FormatRefiner::InferOrigineFormat(graph), GRAPH_SUCCESS); | ||
| 1365 | + SetFirstInferFlag(graph, true); | ||
| 1366 | + graph->SaveDataFormat(FORMAT_ND); | ||
| 1367 | +} | ||
| 1368 | + | ||
| 1369 | +TEST_F(UTEST_FormatRefiner, IncCov_DataNodeFormatProcess_DataAlreadyInferred) { | ||
| 1370 | + auto builder = BuildGraphDataNode4D(); | ||
| 1371 | + auto graph = builder.GetGraph(); | ||
| 1372 | + SetFirstInferFlag(graph, false); | ||
| 1373 | + graph->SaveDataFormat(FORMAT_NCHW); | ||
| 1374 | + EXPECT_EQ(FormatRefiner::InferOrigineFormat(graph), GRAPH_SUCCESS); | ||
| 1375 | + auto data1 = graph->FindNode("data1"); | ||
| 1376 | + auto data1_out = data1->GetOpDesc()->MutableOutputDesc(0); | ||
| 1377 | + data1_out->SetOriginFormat(FORMAT_NCHW); | ||
| 1378 | + data1->GetOpDesc()->UpdateOutputDesc(0, *data1_out); | ||
| 1379 | + SetFirstInferFlag(graph, false); | ||
| 1380 | + EXPECT_EQ(FormatRefiner::InferOrigineFormat(graph), GRAPH_SUCCESS); | ||
| 1381 | + SetFirstInferFlag(graph, true); | ||
| 1382 | + graph->SaveDataFormat(FORMAT_ND); | ||
| 1383 | +} | ||
| 1384 | + | ||
| 1385 | +TEST_F(UTEST_FormatRefiner, IncCov_ForwardInferProcess_OutputDescNull) { | ||
| 1386 | + auto builder = ut::GraphBuilder("g_out_desc_null"); | ||
| 1387 | + auto conv1 = builder.AddNode("conv1", "Conv2D", 0, 1); | ||
| 1388 | + auto conv_out = conv1->GetOpDesc()->MutableOutputDesc(0); | ||
| 1389 | + conv_out->SetFormat(FORMAT_NCHW); | ||
| 1390 | + conv_out->SetOriginFormat(FORMAT_NCHW); | ||
| 1391 | + conv_out->SetShape(GeShape(std::vector<int64_t>({1, 3, 224, 224}))); | ||
| 1392 | + conv1->GetOpDesc()->UpdateOutputDesc(0, *conv_out); | ||
| 1393 | + auto netoutput = builder.AddNode("netoutput", "NetOutput", 1, 0); | ||
| 1394 | + builder.AddDataEdge(conv1, 0, netoutput, 0); | ||
| 1395 | + SetFirstInferFlag(builder.GetGraph(), true); | ||
| 1396 | + auto graph = builder.GetGraph(); | ||
| 1397 | + EXPECT_EQ(FormatRefiner::InferOrigineFormat(graph), GRAPH_SUCCESS); | ||
| 1398 | +} | ||
| 1399 | + | ||
| 1400 | +TEST_F(UTEST_FormatRefiner, IncCov_InferOrigineFormat_BiasAddGrad5D) { | ||
| 1401 | + auto builder = ut::GraphBuilder("g_biasadd_grad_5d"); | ||
| 1402 | + auto var = builder.AddNode("var", "Variable", 0, 1); | ||
| 1403 | + auto square = builder.AddNode("square", "Square", 1, 1); | ||
| 1404 | + auto biasaddgrad = builder.AddNode("biasaddgrad", "BiasAddGrad", 1, 1); | ||
| 1405 | + auto netoutput1 = builder.AddNode("netoutput1", "NetOutput", 1, 0); | ||
| 1406 | + | ||
| 1407 | + auto biasaddgrad_data = biasaddgrad->GetOpDesc()->GetInputDesc(0); | ||
| 1408 | + biasaddgrad_data.SetFormat(FORMAT_NHWC); | ||
| 1409 | + biasaddgrad_data.SetOriginFormat(FORMAT_NHWC); | ||
| 1410 | + biasaddgrad_data.SetShape(GeShape(std::vector<int64_t>({1, 3, 3, 224, 224}))); | ||
| 1411 | + biasaddgrad->GetOpDesc()->UpdateInputDesc(0, biasaddgrad_data); | ||
| 1412 | + auto biasaddgrad_out = biasaddgrad->GetOpDesc()->GetOutputDesc(0); | ||
| 1413 | + biasaddgrad_out.SetFormat(FORMAT_NHWC); | ||
| 1414 | + biasaddgrad_out.SetOriginFormat(FORMAT_NHWC); | ||
| 1415 | + biasaddgrad_out.SetShape(GeShape(std::vector<int64_t>({1, 3, 256, 224, 224}))); | ||
| 1416 | + biasaddgrad->GetOpDesc()->UpdateOutputDesc(0, biasaddgrad_out); | ||
| 1417 | + | ||
| 1418 | + builder.AddDataEdge(var, 0, square, 0); | ||
| 1419 | + builder.AddDataEdge(square, 0, biasaddgrad, 0); | ||
| 1420 | + builder.AddDataEdge(biasaddgrad, 0, netoutput1, 0); | ||
| 1421 | + SetFirstInferFlag(builder.GetGraph(), true); | ||
| 1422 | + auto graph = builder.GetGraph(); | ||
| 1423 | + SetFirstInferFlag(graph, false); | ||
| 1424 | + EXPECT_EQ(FormatRefiner::InferOrigineFormat(graph), GRAPH_SUCCESS); | ||
| 1425 | + SetFirstInferFlag(graph, true); | ||
| 1426 | +} | ||
| 1427 | + | ||
| 1428 | +TEST_F(UTEST_FormatRefiner, IncCov_InferOrigineFormat_BiasAddNCDHW5D) { | ||
| 1429 | + auto builder = ut::GraphBuilder("g_biasadd_ncdhw_5d"); | ||
| 1430 | + auto var = builder.AddNode("var", "Variable", 0, 1); | ||
| 1431 | + auto square = builder.AddNode("square", "Square", 1, 1); | ||
| 1432 | + auto biasadd = builder.AddNode("biasadd", "BiasAdd", 1, 1); | ||
| 1433 | + auto netoutput1 = builder.AddNode("netoutput1", "NetOutput", 1, 0); | ||
| 1434 | + | ||
| 1435 | + auto biasadd_data = biasadd->GetOpDesc()->GetInputDesc(0); | ||
| 1436 | + biasadd_data.SetFormat(FORMAT_NCDHW); | ||
| 1437 | + biasadd_data.SetOriginFormat(FORMAT_NCDHW); | ||
| 1438 | + biasadd_data.SetShape(GeShape(std::vector<int64_t>({1, 3, 3, 224, 224}))); | ||
| 1439 | + biasadd->GetOpDesc()->UpdateInputDesc(0, biasadd_data); | ||
| 1440 | + auto biasadd_out = biasadd->GetOpDesc()->GetOutputDesc(0); | ||
| 1441 | + biasadd_out.SetFormat(FORMAT_NCDHW); | ||
| 1442 | + biasadd_out.SetOriginFormat(FORMAT_NCDHW); | ||
| 1443 | + biasadd_out.SetShape(GeShape(std::vector<int64_t>({1, 3, 256, 224, 224}))); | ||
| 1444 | + biasadd->GetOpDesc()->UpdateOutputDesc(0, biasadd_out); | ||
| 1445 | + | ||
| 1446 | + builder.AddDataEdge(var, 0, square, 0); | ||
| 1447 | + builder.AddDataEdge(square, 0, biasadd, 0); | ||
| 1448 | + builder.AddDataEdge(biasadd, 0, netoutput1, 0); | ||
| 1449 | + SetFirstInferFlag(builder.GetGraph(), true); | ||
| 1450 | + auto graph = builder.GetGraph(); | ||
| 1451 | + SetFirstInferFlag(graph, false); | ||
| 1452 | + EXPECT_EQ(FormatRefiner::InferOrigineFormat(graph), GRAPH_SUCCESS); | ||
| 1453 | + SetFirstInferFlag(graph, true); | ||
| 1454 | +} | ||
| 1455 | + | ||
| 1456 | +TEST_F(UTEST_FormatRefiner, IncCov_InferOrigineFormat_BiasAddOutputNot5D) { | ||
| 1457 | + auto builder = ut::GraphBuilder("g_biasadd_out_not5d"); | ||
| 1458 | + auto var = builder.AddNode("var", "Variable", 0, 1); | ||
| 1459 | + auto biasadd = builder.AddNode("biasadd", "BiasAdd", 1, 1); | ||
| 1460 | + auto netoutput1 = builder.AddNode("netoutput1", "NetOutput", 1, 0); | ||
| 1461 | + | ||
| 1462 | + auto biasadd_data = biasadd->GetOpDesc()->GetInputDesc(0); | ||
| 1463 | + biasadd_data.SetFormat(FORMAT_NHWC); | ||
| 1464 | + biasadd_data.SetOriginFormat(FORMAT_NHWC); | ||
| 1465 | + biasadd_data.SetShape(GeShape(std::vector<int64_t>({1, 3, 224, 224}))); | ||
| 1466 | + biasadd->GetOpDesc()->UpdateInputDesc(0, biasadd_data); | ||
| 1467 | + auto biasadd_out = biasadd->GetOpDesc()->GetOutputDesc(0); | ||
| 1468 | + biasadd_out.SetFormat(FORMAT_NHWC); | ||
| 1469 | + biasadd_out.SetOriginFormat(FORMAT_NHWC); | ||
| 1470 | + biasadd_out.SetShape(GeShape(std::vector<int64_t>({1, 3, 224, 224}))); | ||
| 1471 | + biasadd->GetOpDesc()->UpdateOutputDesc(0, biasadd_out); | ||
| 1472 | + | ||
| 1473 | + builder.AddDataEdge(var, 0, biasadd, 0); | ||
| 1474 | + builder.AddDataEdge(biasadd, 0, netoutput1, 0); | ||
| 1475 | + SetFirstInferFlag(builder.GetGraph(), true); | ||
| 1476 | + auto graph = builder.GetGraph(); | ||
| 1477 | + SetFirstInferFlag(graph, false); | ||
| 1478 | + EXPECT_EQ(FormatRefiner::InferOrigineFormat(graph), GRAPH_SUCCESS); | ||
| 1479 | + SetFirstInferFlag(graph, true); | ||
| 1480 | +} | ||
| 1298 | } // namespace ge | 1481 | } // namespace ge |
| @@ -856,4 +856,28 @@ TEST_F(UtestGeAttrValue, IncCov_GetAllAttrsStrWithTensorDesc) { | |||
| 856 | auto result = AttrUtils::GetAllAttrsStr(op_desc); | 856 | auto result = AttrUtils::GetAllAttrsStr(op_desc); |
| 857 | EXPECT_FALSE(result.empty()); | 857 | EXPECT_FALSE(result.empty()); |
| 858 | } | 858 | } |
| 859 | + | ||
| 860 | +TEST_F(UtestGeAttrValue, IncCov_SetGraphSerializeFail) { | ||
| 861 | + OpDescPtr op_desc = std::make_shared<OpDesc>("test", "Test"); | ||
| 862 | + ComputeGraphPtr graph = std::make_shared<ComputeGraph>("test_graph"); | ||
| 863 | + EXPECT_TRUE(AttrUtils::SetGraph(op_desc, "graph_attr", graph)); | ||
| 864 | + EXPECT_FALSE(AttrUtils::GetGraph(op_desc, "nonexistent", *(ComputeGraphPtr *)(nullptr))); | ||
| 865 | +} | ||
| 866 | + | ||
| 867 | +TEST_F(UtestGeAttrValue, IncCov_GetAttrsStrAfterRidWithUncomputeAttrs) { | ||
| 868 | + OpDescPtr op_desc = std::make_shared<OpDesc>("test", "Test"); | ||
| 869 | + op_desc->SetAttr("compute_attr", GeAttrValue::CreateFrom<int64_t>(100)); | ||
| 870 | + op_desc->SetAttr("uncompute_attr", GeAttrValue::CreateFrom<int64_t>(200)); | ||
| 871 | + std::set<std::string> un_compute = {"uncompute_attr"}; | ||
| 872 | + std::string result = AttrUtils::GetAttrsStrAfterRid(op_desc, un_compute); | ||
| 873 | + EXPECT_TRUE(result.find("compute_attr") != std::string::npos); | ||
| 874 | + EXPECT_TRUE(result.find("uncompute_attr") == std::string::npos); | ||
| 875 | +} | ||
| 876 | + | ||
| 877 | +TEST_F(UtestGeAttrValue, IncCov_GetAllAttrsStrEmptyMap) { | ||
| 878 | + OpDescPtr null_desc; | ||
| 879 | + EXPECT_EQ(AttrUtils::GetAllAttrsStr( | ||
| 880 | + static_cast<const std::map<std::string, AnyValue> &>(std::map<std::string, AnyValue>{})), | ||
| 881 | + ""); | ||
| 882 | +} | ||
| 859 | } // namespace ge | 883 | } // namespace ge |
| @@ -1098,4 +1098,108 @@ TEST_F(GeIrUtilsIncCov2, IncCov2_DecodeNodeAttributeForOpOutDesc_OriginDtype) { | |||
| 1098 | SUCCEED(); | 1098 | SUCCEED(); |
| 1099 | } | 1099 | } |
| 1100 | 1100 | ||
| 1101 | +TEST_F(GeIrUtilsIncCov2, IncCov2_AddAttrProto_NullNodeProto) { | ||
| 1102 | + OnnxUtils::AddAttrProto(nullptr, onnx::AttributeProto_AttributeType_INT, "test", nullptr); | ||
| 1103 | + SUCCEED(); | ||
| 1104 | +} | ||
| 1105 | + | ||
| 1106 | +TEST_F(GeIrUtilsIncCov2, IncCov2_AddAttrProtoFromAttribute_NullNodeProto) { | ||
| 1107 | + std::pair<const std::string, ge::GeAttrValue> attr_pair("test", GeAttrValue()); | ||
| 1108 | + OnnxUtils::AddAttrProtoFromAttribute(attr_pair, nullptr); | ||
| 1109 | + SUCCEED(); | ||
| 1110 | +} | ||
| 1111 | + | ||
| 1112 | +TEST_F(GeIrUtilsIncCov2, IncCov2_EncodeValueInfo_NullProto) { | ||
| 1113 | + auto graph = std::make_shared<ComputeGraph>("test_vi_null"); | ||
| 1114 | + auto node = CreateNodeIncCov2Helper(graph, "vi_node", "Relu", 1, 1); | ||
| 1115 | + OnnxUtils::EncodeValueInfo(node, nullptr); | ||
| 1116 | + SUCCEED(); | ||
| 1117 | +} | ||
| 1118 | + | ||
| 1119 | +TEST_F(GeIrUtilsIncCov2, IncCov2_EncodeDataType_Unsupported) { | ||
| 1120 | + EXPECT_EQ(OnnxUtils::EncodeDataType(DT_UNDEFINED), onnx::TensorProto_DataType_UNDEFINED); | ||
| 1121 | +} | ||
| 1122 | + | ||
| 1123 | +TEST_F(GeIrUtilsIncCov2, IncCov2_DecodeNodeAttributeForOpInDesc_NullTensorDesc) { | ||
| 1124 | + OpDescPtr op_desc = std::make_shared<OpDesc>("test_null_td", "TestOp"); | ||
| 1125 | + onnx::AttributeProto attr_proto; | ||
| 1126 | + attr_proto.set_name("input_desc_dtype:0"); | ||
| 1127 | + OnnxUtils::DecodeNodeAttributeForOpInDesc(attr_proto, "input_desc_dtype", 0, op_desc); | ||
| 1128 | + SUCCEED(); | ||
| 1129 | +} | ||
| 1130 | + | ||
| 1131 | +TEST_F(GeIrUtilsIncCov2, IncCov2_DecodeNodeAttributeForOpOutDesc_NullTensorDesc) { | ||
| 1132 | + OpDescPtr op_desc = std::make_shared<OpDesc>("test_null_td_out", "TestOp"); | ||
| 1133 | + onnx::AttributeProto attr_proto; | ||
| 1134 | + attr_proto.set_name("output_desc_dtype:0"); | ||
| 1135 | + OnnxUtils::DecodeNodeAttributeForOpOutDesc(attr_proto, "output_desc_dtype", 0, op_desc); | ||
| 1136 | + SUCCEED(); | ||
| 1137 | +} | ||
| 1138 | + | ||
| 1139 | +TEST_F(GeIrUtilsIncCov2, IncCov2_DecodeNodeAttributeForOpInDesc_Unknown) { | ||
| 1140 | + OpDescPtr op_desc = std::make_shared<OpDesc>("test_in_unknown", "TestOp"); | ||
| 1141 | + op_desc->AddInputDesc(GeTensorDesc(GeShape({1}), FORMAT_NCHW, DT_FLOAT)); | ||
| 1142 | + onnx::AttributeProto attr_proto; | ||
| 1143 | + attr_proto.set_name("input_desc_unknown:0"); | ||
| 1144 | + OnnxUtils::DecodeNodeAttributeForOpInDesc(attr_proto, "input_desc_unknown", 0, op_desc); | ||
| 1145 | + SUCCEED(); | ||
| 1146 | +} | ||
| 1147 | + | ||
| 1148 | +TEST_F(GeIrUtilsIncCov2, IncCov2_DecodeNodeAttributeForOpOutDesc_Unknown) { | ||
| 1149 | + OpDescPtr op_desc = std::make_shared<OpDesc>("test_out_unknown", "TestOp"); | ||
| 1150 | + op_desc->AddOutputDesc(GeTensorDesc(GeShape({1}), FORMAT_NCHW, DT_FLOAT)); | ||
| 1151 | + onnx::AttributeProto attr_proto; | ||
| 1152 | + attr_proto.set_name("output_desc_unknown:0"); | ||
| 1153 | + OnnxUtils::DecodeNodeAttributeForOpOutDesc(attr_proto, "output_desc_unknown", 0, op_desc); | ||
| 1154 | + SUCCEED(); | ||
| 1155 | +} | ||
| 1156 | + | ||
| 1157 | +TEST_F(GeIrUtilsIncCov2, IncCov2_EncodeTypeProtoTensorType_NullOpDesc) { | ||
| 1158 | + auto graph = std::make_shared<ComputeGraph>("test_tpt_null_opdesc"); | ||
| 1159 | + OpDescPtr op_desc = std::make_shared<OpDesc>("null_opdesc_node", "Relu"); | ||
| 1160 | + auto node = graph->AddNode(op_desc); | ||
| 1161 | + onnx::TypeProto_Tensor tensor_type; | ||
| 1162 | + OnnxUtils::EncodeTypeProtoTensorType(node, &tensor_type); | ||
| 1163 | + SUCCEED(); | ||
| 1164 | +} | ||
| 1165 | + | ||
| 1166 | +TEST_F(GeIrUtilsIncCov2, IncCov2_AddAttrProtoFromNodeMembers_NullNode) { | ||
| 1167 | + onnx::NodeProto node_proto; | ||
| 1168 | + OnnxUtils::AddAttrProtoFromNodeMembers(nullptr, &node_proto); | ||
| 1169 | + SUCCEED(); | ||
| 1170 | +} | ||
| 1171 | + | ||
| 1172 | +TEST_F(GeIrUtilsIncCov2, IncCov2_EncodeNode_WithControlEdge) { | ||
| 1173 | + auto graph = std::make_shared<ComputeGraph>("test_ctrl_edge"); | ||
| 1174 | + auto node1 = CreateNodeIncCov2Helper(graph, "ctrl_src", "Relu", 0, 1); | ||
| 1175 | + auto node2 = CreateNodeIncCov2Helper(graph, "ctrl_dst", "Relu", 1, 1); | ||
| 1176 | + GraphUtils::AddEdge(node1->GetOutControlAnchor(), node2->GetInControlAnchor()); | ||
| 1177 | + onnx::NodeProto node_proto; | ||
| 1178 | + EXPECT_TRUE(OnnxUtils::EncodeNode(node2, &node_proto)); | ||
| 1179 | +} | ||
| 1180 | + | ||
| 1181 | +TEST_F(GeIrUtilsIncCov2, IncCov2_EncodeNode_WithOutDescOnly) { | ||
| 1182 | + auto graph = std::make_shared<ComputeGraph>("test_out_only"); | ||
| 1183 | + auto node = CreateNodeIncCov2Helper(graph, "out_only_node", "Relu", 0, 1); | ||
| 1184 | + onnx::NodeProto node_proto; | ||
| 1185 | + EXPECT_TRUE(OnnxUtils::EncodeNode(node, &node_proto)); | ||
| 1186 | +} | ||
| 1187 | + | ||
| 1188 | +TEST_F(GeIrUtilsIncCov2, IncCov2_EncodeNode_WithMultipleInputsOutputs) { | ||
| 1189 | + auto graph = std::make_shared<ComputeGraph>("test_multi_io"); | ||
| 1190 | + auto node = CreateNodeIncCov2Helper(graph, "multi_io_node", "Relu", 3, 2); | ||
| 1191 | + onnx::NodeProto node_proto; | ||
| 1192 | + EXPECT_TRUE(OnnxUtils::EncodeNode(node, &node_proto)); | ||
| 1193 | +} | ||
| 1194 | + | ||
| 1195 | +TEST_F(GeIrUtilsIncCov2, IncCov2_EncodeGraph_Success) { | ||
| 1196 | + auto graph = std::make_shared<ComputeGraph>("test_encode_graph"); | ||
| 1197 | + auto data = CreateNodeIncCov2Helper(graph, "data", "Data", 0, 1); | ||
| 1198 | + auto relu = CreateNodeIncCov2Helper(graph, "relu", "Relu", 1, 1); | ||
| 1199 | + auto netoutput = CreateNodeIncCov2Helper(graph, "netoutput", "NetOutput", 1, 0); | ||
| 1200 | + GraphUtils::AddEdge(data->GetOutDataAnchor(0), relu->GetInDataAnchor(0)); | ||
| 1201 | + GraphUtils::AddEdge(relu->GetOutDataAnchor(0), netoutput->GetInDataAnchor(0)); | ||
| 1202 | + onnx::GraphProto graph_proto; | ||
| 1203 | + EXPECT_TRUE(OnnxUtils::EncodeGraph(graph, &graph_proto)); | ||
| 1204 | +} | ||
| 1101 | } // namespace ge | 1205 | } // namespace ge |
| @@ -1029,3 +1029,24 @@ TEST_F(UtestGeTensor, IncCov_GeTensorMisc2) { | |||
| 1029 | TensorData &mutable_data = tensor.MutableData(); | 1029 | TensorData &mutable_data = tensor.MutableData(); |
| 1030 | (void)mutable_data; | 1030 | (void)mutable_data; |
| 1031 | } | 1031 | } |
| 1032 | + | ||
| 1033 | +TEST_F(UtestGeTensor, IncCov_GeTensorAsProto_WithProtoOwner) { | ||
| 1034 | + GeTensorDesc desc(GeShape({1, 2}), FORMAT_NCHW, DT_FLOAT); | ||
| 1035 | + GeTensor tensor(desc); | ||
| 1036 | + proto::TensorDef tensor_def; | ||
| 1037 | + GeTensorSerializeUtils::GeTensorAsProto(tensor, &tensor_def); | ||
| 1038 | + EXPECT_TRUE(tensor_def.has_desc()); | ||
| 1039 | +} | ||
| 1040 | + | ||
| 1041 | +TEST_F(UtestGeTensor, IncCov_GetOriginFormatFromDescProto_NullProto) { | ||
| 1042 | + Format format = FORMAT_NCHW; | ||
| 1043 | + GeTensorSerializeUtils::GetOriginFormatFromDescProto(nullptr, format); | ||
| 1044 | + EXPECT_EQ(format, FORMAT_NCHW); | ||
| 1045 | +} | ||
| 1046 | + | ||
| 1047 | +TEST_F(UtestGeTensor, IncCov_GeTensorDescImpl_SetShape) { | ||
| 1048 | + GeTensorDesc desc(GeShape({1, 2}), FORMAT_NCHW, DT_FLOAT); | ||
| 1049 | + GeShape new_shape({3, 4}); | ||
| 1050 | + desc.SetShape(new_shape); | ||
| 1051 | + EXPECT_EQ(desc.GetShape().GetDims(), std::vector<int64_t>({3, 4})); | ||
| 1052 | +} | ||
| @@ -1212,4 +1212,59 @@ TEST_F(GNodeTest, IncCov_GNodeGetInputConstDataConstNoValue) { | |||
| 1212 | Tensor data; | 1212 | Tensor data; |
| 1213 | EXPECT_EQ(gnode.GetInputConstData(0, data), GRAPH_FAILED); | 1213 | EXPECT_EQ(gnode.GetInputConstData(0, data), GRAPH_FAILED); |
| 1214 | } | 1214 | } |
| 1215 | + | ||
| 1216 | +TEST_F(GNodeTest, IncCov_GetALLSubgraphs_NullImpl) { | ||
| 1217 | + GNode gnode; | ||
| 1218 | + gnode.impl_ = nullptr; | ||
| 1219 | + std::vector<GraphPtr> subgraphs; | ||
| 1220 | + EXPECT_EQ(gnode.GetALLSubgraphs(subgraphs), GRAPH_FAILED); | ||
| 1221 | +} | ||
| 1222 | + | ||
| 1223 | +TEST_F(GNodeTest, IncCov_GetALLSubgraphs_ExpiredNodePtr) { | ||
| 1224 | + GNode gnode; | ||
| 1225 | + std::vector<GraphPtr> subgraphs; | ||
| 1226 | + EXPECT_EQ(gnode.GetALLSubgraphs(subgraphs), GRAPH_FAILED); | ||
| 1227 | +} | ||
| 1228 | + | ||
| 1229 | +TEST_F(GNodeTest, IncCov_GetSubgraph_InvalidIndex) { | ||
| 1230 | + auto builder = ut::GraphBuilder("graph"); | ||
| 1231 | + const auto node = builder.AddNode("node", "node", 0, 0); | ||
| 1232 | + GNode gnode = NodeAdapter::Node2GNode(node); | ||
| 1233 | + GraphPtr graph; | ||
| 1234 | + EXPECT_EQ(gnode.GetSubgraph(99, graph), GRAPH_FAILED); | ||
| 1235 | +} | ||
| 1236 | + | ||
| 1237 | +TEST_F(GNodeTest, IncCov_GNodeGetType_NullImpl) { | ||
| 1238 | + GNode gnode; | ||
| 1239 | + gnode.impl_ = nullptr; | ||
| 1240 | + AscendString type; | ||
| 1241 | + EXPECT_EQ(gnode.GetType(type), GRAPH_FAILED); | ||
| 1242 | +} | ||
| 1243 | + | ||
| 1244 | +TEST_F(GNodeTest, IncCov_GNodeGetName_NullImpl) { | ||
| 1245 | + GNode gnode; | ||
| 1246 | + gnode.impl_ = nullptr; | ||
| 1247 | + AscendString name; | ||
| 1248 | + EXPECT_EQ(gnode.GetName(name), GRAPH_FAILED); | ||
| 1249 | +} | ||
| 1250 | + | ||
| 1251 | +TEST_F(GNodeTest, IncCov_Node2GNodePtr_Success) { | ||
| 1252 | + auto builder = ut::GraphBuilder("graph"); | ||
| 1253 | + const auto node = builder.AddNode("node", "node", 0, 0); | ||
| 1254 | + GNodePtr gnode_ptr = NodeAdapter::Node2GNodePtr(node); | ||
| 1255 | + EXPECT_NE(gnode_ptr, nullptr); | ||
| 1256 | +} | ||
| 1257 | + | ||
| 1258 | +TEST_F(GNodeTest, IncCov_Node2GNode_NullNode) { | ||
| 1259 | + NodePtr null_node; | ||
| 1260 | + GNode gnode = NodeAdapter::Node2GNode(null_node); | ||
| 1261 | + AscendString name; | ||
| 1262 | + EXPECT_EQ(gnode.GetName(name), GRAPH_FAILED); | ||
| 1263 | +} | ||
| 1264 | + | ||
| 1265 | +TEST_F(GNodeTest, IncCov_Node2GNodePtr_NullNode) { | ||
| 1266 | + NodePtr null_node; | ||
| 1267 | + GNodePtr gnode_ptr = NodeAdapter::Node2GNodePtr(null_node); | ||
| 1268 | + EXPECT_EQ(gnode_ptr, nullptr); | ||
| 1269 | +} | ||
| 1215 | } // namespace ge | 1270 | } // namespace ge |
| @@ -2610,3 +2610,44 @@ TEST_F(UtestGraph, IncCov_CreateGraphFromOperatorWithStableTopo) { | |||
| 2610 | Graph graph("test_stable"); | 2610 | Graph graph("test_stable"); |
| 2611 | EXPECT_EQ(GraphUtilsEx::CreateGraphFromOperatorWithStableTopo(graph, {op1}), SUCCESS); | 2611 | EXPECT_EQ(GraphUtilsEx::CreateGraphFromOperatorWithStableTopo(graph, {op1}), SUCCESS); |
| 2612 | } | 2612 | } |
| 2613 | + | ||
| 2614 | +TEST_F(UtestGraph, IncCov_SetOutputs_EmptyVector) { | ||
| 2615 | + auto cgp = BuildComputeGraphWithNetOutput(); | ||
| 2616 | + Graph graph = ge::GraphUtilsEx::CreateGraphFromComputeGraph(cgp); | ||
| 2617 | + std::vector<std::pair<Operator, AscendString>> empty_outputs; | ||
| 2618 | + graph.SetOutputs(empty_outputs); | ||
| 2619 | +} | ||
| 2620 | + | ||
| 2621 | +TEST_F(UtestGraph, IncCov_SetOutputs_EmptyIndexVector) { | ||
| 2622 | + auto cgp = BuildComputeGraphWithNetOutput(); | ||
| 2623 | + Graph graph = ge::GraphUtilsEx::CreateGraphFromComputeGraph(cgp); | ||
| 2624 | + auto node = cgp->FindNode("Transdata1"); | ||
| 2625 | + auto op = OpDescUtils::CreateOperatorFromNode(node); | ||
| 2626 | + std::vector<std::pair<Operator, std::vector<size_t>>> output_indexs; | ||
| 2627 | + output_indexs.emplace_back(op, std::vector<size_t>{}); | ||
| 2628 | + graph.SetOutputs(output_indexs); | ||
| 2629 | +} | ||
| 2630 | + | ||
| 2631 | +TEST_F(UtestGraph, IncCov_SetOutputs_OutputIndexOutOfRange) { | ||
| 2632 | + auto cgp = BuildComputeGraphWithNetOutput(); | ||
| 2633 | + Graph graph = ge::GraphUtilsEx::CreateGraphFromComputeGraph(cgp); | ||
| 2634 | + auto node = cgp->FindNode("Transdata1"); | ||
| 2635 | + auto op = OpDescUtils::CreateOperatorFromNode(node); | ||
| 2636 | + std::vector<std::pair<Operator, std::vector<size_t>>> output_indexs; | ||
| 2637 | + output_indexs.emplace_back(op, std::vector<size_t>{999}); | ||
| 2638 | + graph.SetOutputs(output_indexs); | ||
| 2639 | +} | ||
| 2640 | + | ||
| 2641 | +TEST_F(UtestGraph, IncCov_SetOutputs_InvalidGraph) { | ||
| 2642 | + Graph graph("invalid_graph"); | ||
| 2643 | + std::vector<std::pair<Operator, AscendString>> outputs; | ||
| 2644 | + Operator op("test_op"); | ||
| 2645 | + AscendString name("test"); | ||
| 2646 | + outputs.emplace_back(op, name); | ||
| 2647 | + graph.SetOutputs(outputs); | ||
| 2648 | +} | ||
| 2649 | + | ||
| 2650 | +TEST_F(UtestGraph, IncCov_SetNeedIteration_InvalidGraph) { | ||
| 2651 | + Graph graph("invalid_graph"); | ||
| 2652 | + graph.SetNeedIteration(true); | ||
| 2653 | +} | ||
| @@ -5981,4 +5981,514 @@ TEST_F(UtestGraphUtils, CovRemoveNodeWithoutRelinkNotInGraph) { | |||
| 5981 | auto graph2 = builder2.GetGraph(); | 5981 | auto graph2 = builder2.GetGraph(); |
| 5982 | EXPECT_EQ(GraphUtils::RemoveNodeWithoutRelink(graph2, node), GRAPH_FAILED); | 5982 | EXPECT_EQ(GraphUtils::RemoveNodeWithoutRelink(graph2, node), GRAPH_FAILED); |
| 5983 | } | 5983 | } |
| 5984 | + | ||
| 5985 | +TEST_F(UtestGraphUtils, CovIsolateNodeNullNode) { | ||
| 5986 | + NodePtr null_node = nullptr; | ||
| 5987 | + std::vector<int32_t> io_map = {}; | ||
| 5988 | + EXPECT_NE(GraphUtils::IsolateNode(null_node, io_map), GRAPH_SUCCESS); | ||
| 5989 | +} | ||
| 5990 | + | ||
| 5991 | +TEST_F(UtestGraphUtils, CovRemoveNodeWithoutRelinkNullGraph) { | ||
| 5992 | + ut::GraphBuilder builder = ut::GraphBuilder("graph"); | ||
| 5993 | + auto node = builder.AddNode("node", "Relu", 1, 1); | ||
| 5994 | + EXPECT_NE(GraphUtils::RemoveNodeWithoutRelink(nullptr, node), GRAPH_SUCCESS); | ||
| 5995 | +} | ||
| 5996 | + | ||
| 5997 | +TEST_F(UtestGraphUtils, CovInsertNodeBeforeNullDst) { | ||
| 5998 | + ut::GraphBuilder builder = ut::GraphBuilder("graph"); | ||
| 5999 | + auto insert_node = builder.AddNode("insert", "Relu", 1, 1); | ||
| 6000 | + InDataAnchorPtr null_dst = nullptr; | ||
| 6001 | + EXPECT_NE(GraphUtils::InsertNodeBefore(null_dst, insert_node, 0, 0), GRAPH_SUCCESS); | ||
| 6002 | +} | ||
| 6003 | + | ||
| 6004 | +TEST_F(UtestGraphUtils, CovInsertNodeBeforeNullInsertNode) { | ||
| 6005 | + ut::GraphBuilder builder = ut::GraphBuilder("graph"); | ||
| 6006 | + auto dst_node = builder.AddNode("dst", "AddN", 1, 1); | ||
| 6007 | + NodePtr null_insert = nullptr; | ||
| 6008 | + EXPECT_NE(GraphUtils::InsertNodeBefore(dst_node->GetInDataAnchor(0), null_insert, 0, 0), GRAPH_SUCCESS); | ||
| 6009 | +} | ||
| 6010 | + | ||
| 6011 | +TEST_F(UtestGraphUtils, CovDumpGEGraphToOnnxBasicGraph) { | ||
| 6012 | + ut::GraphBuilder builder = ut::GraphBuilder("dump_graph"); | ||
| 6013 | + auto data = builder.AddNode("data", DATA, 0, 1); | ||
| 6014 | + auto relu = builder.AddNode("relu", "Relu", 1, 1); | ||
| 6015 | + auto netoutput = builder.AddNode("netoutput", NETOUTPUT, 1, 0); | ||
| 6016 | + builder.AddDataEdge(data, 0, relu, 0); | ||
| 6017 | + builder.AddDataEdge(relu, 0, netoutput, 0); | ||
| 6018 | + auto graph = builder.GetGraph(); | ||
| 6019 | + GraphUtils::DumpGEGraphToOnnx(*graph, "test_dump"); | ||
| 6020 | + SUCCEED(); | ||
| 6021 | +} | ||
| 6022 | + | ||
| 6023 | +TEST_F(UtestGraphUtils, CovIsolateNodeOneIO) { | ||
| 6024 | + ut::GraphBuilder builder = ut::GraphBuilder("isolate_graph"); | ||
| 6025 | + auto data = builder.AddNode("data", DATA, 0, 1); | ||
| 6026 | + auto relu = builder.AddNode("relu", "Relu", 1, 1); | ||
| 6027 | + auto netoutput = builder.AddNode("netoutput", NETOUTPUT, 1, 0); | ||
| 6028 | + builder.AddDataEdge(data, 0, relu, 0); | ||
| 6029 | + builder.AddDataEdge(relu, 0, netoutput, 0); | ||
| 6030 | + auto graph = builder.GetGraph(); | ||
| 6031 | + EXPECT_EQ(GraphUtils::IsolateNodeOneIO(relu), GRAPH_SUCCESS); | ||
| 6032 | +} | ||
| 6033 | + | ||
| 6034 | +TEST_F(UtestGraphUtils, CovIsolateNodeWithIoMap) { | ||
| 6035 | + ut::GraphBuilder builder = ut::GraphBuilder("isolate_iomap"); | ||
| 6036 | + auto data = builder.AddNode("data", DATA, 0, 1); | ||
| 6037 | + auto cast = builder.AddNode("cast", "Cast", 1, 1); | ||
| 6038 | + auto netoutput = builder.AddNode("netoutput", NETOUTPUT, 1, 0); | ||
| 6039 | + builder.AddDataEdge(data, 0, cast, 0); | ||
| 6040 | + builder.AddDataEdge(cast, 0, netoutput, 0); | ||
| 6041 | + auto graph = builder.GetGraph(); | ||
| 6042 | + std::vector<int32_t> io_map = {0}; | ||
| 6043 | + EXPECT_EQ(GraphUtils::IsolateNode(cast, io_map), GRAPH_SUCCESS); | ||
| 6044 | +} | ||
| 6045 | + | ||
| 6046 | +TEST_F(UtestGraphUtils, CovReplaceNodeAnchorsNullNewNode) { | ||
| 6047 | + ut::GraphBuilder builder = ut::GraphBuilder("replace_null"); | ||
| 6048 | + auto old_node = builder.AddNode("old", "Cast", 1, 1); | ||
| 6049 | + NodePtr null_new_node = nullptr; | ||
| 6050 | + EXPECT_NE(GraphUtils::ReplaceNodeAnchors(null_new_node, old_node, {0}, {0}), GRAPH_SUCCESS); | ||
| 6051 | +} | ||
| 6052 | + | ||
| 6053 | +TEST_F(UtestGraphUtils, CovReplaceNodeAnchorsNullOldNode) { | ||
| 6054 | + ut::GraphBuilder builder = ut::GraphBuilder("replace_null_old"); | ||
| 6055 | + auto new_node = builder.AddNode("new", "Relu", 1, 1); | ||
| 6056 | + NodePtr null_old_node = nullptr; | ||
| 6057 | + EXPECT_NE(GraphUtils::ReplaceNodeAnchors(new_node, null_old_node, {0}, {0}), GRAPH_SUCCESS); | ||
| 6058 | +} | ||
| 6059 | + | ||
| 6060 | +TEST_F(UtestGraphUtils, CovAddEdgeNullSrc) { | ||
| 6061 | + ut::GraphBuilder builder = ut::GraphBuilder("add_edge_null"); | ||
| 6062 | + auto dst = builder.AddNode("dst", "AddN", 1, 1); | ||
| 6063 | + OutDataAnchorPtr null_src = nullptr; | ||
| 6064 | + EXPECT_NE(GraphUtils::AddEdge(null_src, dst->GetInDataAnchor(0)), GRAPH_SUCCESS); | ||
| 6065 | +} | ||
| 6066 | + | ||
| 6067 | +TEST_F(UtestGraphUtils, CovAddEdgeNullDst) { | ||
| 6068 | + ut::GraphBuilder builder = ut::GraphBuilder("add_edge_null_dst"); | ||
| 6069 | + auto src = builder.AddNode("src", DATA, 0, 1); | ||
| 6070 | + InDataAnchorPtr null_dst = nullptr; | ||
| 6071 | + EXPECT_NE(GraphUtils::AddEdge(src->GetOutDataAnchor(0), null_dst), GRAPH_SUCCESS); | ||
| 6072 | +} | ||
| 6073 | + | ||
| 6074 | +TEST_F(UtestGraphUtils, CovRemoveEdgeNullSrc) { | ||
| 6075 | + ut::GraphBuilder builder = ut::GraphBuilder("rm_edge_null"); | ||
| 6076 | + auto dst = builder.AddNode("dst", "AddN", 1, 1); | ||
| 6077 | + OutDataAnchorPtr null_src = nullptr; | ||
| 6078 | + EXPECT_NE(GraphUtils::RemoveEdge(null_src, dst->GetInDataAnchor(0)), GRAPH_SUCCESS); | ||
| 6079 | +} | ||
| 6080 | + | ||
| 6081 | +TEST_F(UtestGraphUtils, CovRecordOriginalNamesNullOpdesc) { | ||
| 6082 | + ut::GraphBuilder builder = ut::GraphBuilder("record_names"); | ||
| 6083 | + auto node = builder.AddNode("node1", "Relu", 1, 1); | ||
| 6084 | + auto target = builder.AddNode("target", "Cast", 1, 1); | ||
| 6085 | + NodePtr null_opdesc_node = std::make_shared<Node>(nullptr, nullptr); | ||
| 6086 | + std::vector<ge::NodePtr> original_nodes = {null_opdesc_node}; | ||
| 6087 | + GraphUtils::RecordOriginalNames(original_nodes, target); | ||
| 6088 | + EXPECT_NE(target, nullptr); | ||
| 6089 | +} | ||
| 6090 | + | ||
| 6091 | +TEST_F(UtestGraphUtils, CovRecordOriginalNamesWithDumpAttr) { | ||
| 6092 | + ut::GraphBuilder builder = ut::GraphBuilder("record_dump"); | ||
| 6093 | + auto node1 = builder.AddNode("n1", "Relu", 1, 1); | ||
| 6094 | + auto node2 = builder.AddNode("n2", "Cast", 1, 1); | ||
| 6095 | + auto target = builder.AddNode("target", "Add", 1, 1); | ||
| 6096 | + (void)ge::AttrUtils::SetListStr(node1->GetOpDesc(), ATTR_NAME_DATA_DUMP_ORIGIN_OP_NAMES, {"orig1", "orig2"}); | ||
| 6097 | + (void)ge::AttrUtils::SetListStr(node1->GetOpDesc(), ATTR_NAME_DATA_DUMP_ORIGIN_OP_TYPES, {"type1"}); | ||
| 6098 | + std::vector<ge::NodePtr> original_nodes = {node1, node2}; | ||
| 6099 | + GraphUtils::RecordOriginalNames(original_nodes, target); | ||
| 6100 | + std::vector<std::string> result; | ||
| 6101 | + (void)ge::AttrUtils::GetListStr(target->GetOpDesc(), ATTR_NAME_DATA_DUMP_ORIGIN_OP_NAMES, result); | ||
| 6102 | + EXPECT_GE(result.size(), 1U); | ||
| 6103 | +} | ||
| 6104 | + | ||
| 6105 | +TEST_F(UtestGraphUtils, CovRecordOriginalNamesByStr) { | ||
| 6106 | + ut::GraphBuilder builder = ut::GraphBuilder("record_str"); | ||
| 6107 | + auto target = builder.AddNode("target", "Add", 1, 1); | ||
| 6108 | + std::vector<std::string> names = {"name1", "name2"}; | ||
| 6109 | + GraphUtils::RecordOriginalNames(names, target); | ||
| 6110 | + std::vector<std::string> result; | ||
| 6111 | + (void)ge::AttrUtils::GetListStr(target->GetOpDesc(), ATTR_NAME_DATA_DUMP_ORIGIN_OP_NAMES, result); | ||
| 6112 | + EXPECT_EQ(result.size(), 2U); | ||
| 6113 | +} | ||
| 6114 | + | ||
| 6115 | +TEST_F(UtestGraphUtils, CovRecordOriginalNamesByStrEmpty) { | ||
| 6116 | + ut::GraphBuilder builder = ut::GraphBuilder("record_str_empty"); | ||
| 6117 | + auto target = builder.AddNode("target", "Add", 1, 1); | ||
| 6118 | + std::vector<std::string> names; | ||
| 6119 | + GraphUtils::RecordOriginalNames(names, target); | ||
| 6120 | + EXPECT_NE(target, nullptr); | ||
| 6121 | +} | ||
| 6122 | + | ||
| 6123 | +TEST_F(UtestGraphUtils, CovRemoveNodesByTypeWithOutputNode) { | ||
| 6124 | + ut::GraphBuilder builder = ut::GraphBuilder("rm_type_out"); | ||
| 6125 | + auto data = builder.AddNode("data1", DATA, 0, 1); | ||
| 6126 | + auto add = builder.AddNode("add1", "Add", 1, 1); | ||
| 6127 | + auto netoutput = builder.AddNode("netoutput", NETOUTPUT, 1, 0); | ||
| 6128 | + builder.AddDataEdge(data, 0, add, 0); | ||
| 6129 | + builder.AddDataEdge(add, 0, netoutput, 0); | ||
| 6130 | + auto graph = builder.GetGraph(); | ||
| 6131 | + EXPECT_EQ(GraphUtils::RemoveNodesByTypeWithoutRelink(graph, "Add"), GRAPH_SUCCESS); | ||
| 6132 | +} | ||
| 6133 | + | ||
| 6134 | +TEST_F(UtestGraphUtils, CovRemoveNodesWithoutRelinkNotAllFound) { | ||
| 6135 | + ut::GraphBuilder builder = ut::GraphBuilder("rm_not_all"); | ||
| 6136 | + auto data = builder.AddNode("data1", DATA, 0, 1); | ||
| 6137 | + auto add = builder.AddNode("add1", "Add", 1, 1); | ||
| 6138 | + builder.AddDataEdge(data, 0, add, 0); | ||
| 6139 | + auto graph = builder.GetGraph(); | ||
| 6140 | + auto external_node = std::make_shared<ComputeGraph>("external"); | ||
| 6141 | + auto ext_op = std::make_shared<OpDesc>("ext", "Cast"); | ||
| 6142 | + ext_op->AddInputDesc(GeTensorDesc()); | ||
| 6143 | + ext_op->AddOutputDesc(GeTensorDesc()); | ||
| 6144 | + auto ext_node = external_node->AddNode(ext_op); | ||
| 6145 | + std::unordered_set<NodePtr> nodes = {add, ext_node}; | ||
| 6146 | + EXPECT_EQ(GraphUtils::RemoveNodesWithoutRelink(graph, nodes), GRAPH_SUCCESS); | ||
| 6147 | +} | ||
| 6148 | + | ||
| 6149 | +TEST_F(UtestGraphUtils, CovInsertNodeAfterDiffGraph) { | ||
| 6150 | + ut::GraphBuilder builder1 = ut::GraphBuilder("g1"); | ||
| 6151 | + auto src = builder1.AddNode("src", DATA, 0, 1); | ||
| 6152 | + auto graph1 = builder1.GetGraph(); | ||
| 6153 | + ut::GraphBuilder builder2 = ut::GraphBuilder("g2"); | ||
| 6154 | + auto dst = builder2.AddNode("dst", "Add", 1, 1); | ||
| 6155 | + auto graph2 = builder2.GetGraph(); | ||
| 6156 | + auto insert_op = std::make_shared<OpDesc>("insert", "Cast"); | ||
| 6157 | + insert_op->AddInputDesc(GeTensorDesc()); | ||
| 6158 | + insert_op->AddOutputDesc(GeTensorDesc()); | ||
| 6159 | + std::vector<InDataAnchorPtr> dsts = {dst->GetInDataAnchor(0)}; | ||
| 6160 | + EXPECT_EQ(GraphUtils::InsertNodeAfter(src->GetOutDataAnchor(0), dsts, insert_op, 0, 0), nullptr); | ||
| 6161 | +} | ||
| 6162 | + | ||
| 6163 | +TEST_F(UtestGraphUtils, CovDumpGEGrphMaxFileNum) { | ||
| 6164 | + ut::GraphBuilder builder = ut::GraphBuilder("dump_max"); | ||
| 6165 | + auto data = builder.AddNode("data1", DATA, 0, 1); | ||
| 6166 | + auto graph = builder.GetGraph(); | ||
| 6167 | + (void)setenv("GE_MAX_DUMP_FILE_NUM", "1", 1); | ||
| 6168 | + GraphUtils::DumpGEGrph(graph, "./", "test"); | ||
| 6169 | + unsetenv("GE_MAX_DUMP_FILE_NUM"); | ||
| 6170 | +} | ||
| 6171 | + | ||
| 6172 | +TEST_F(UtestGraphUtils, CovNoNeedDumpGraphBySuffixLevel1) { | ||
| 6173 | + (void)setenv("DUMP_GRAPH_LEVEL", "1", 1); | ||
| 6174 | + EXPECT_FALSE(GraphUtils::NoNeedDumpGraphBySuffix("optimize")); | ||
| 6175 | + EXPECT_TRUE(GraphUtils::NoNeedDumpGraphBySuffix("123")); | ||
| 6176 | + unsetenv("DUMP_GRAPH_LEVEL"); | ||
| 6177 | +} | ||
| 6178 | + | ||
| 6179 | +TEST_F(UtestGraphUtils, CovNoNeedDumpGraphBySuffixLevel3) { | ||
| 6180 | + (void)setenv("DUMP_GRAPH_LEVEL", "3", 1); | ||
| 6181 | + EXPECT_FALSE(GraphUtils::NoNeedDumpGraphBySuffix("Build")); | ||
| 6182 | + EXPECT_TRUE(GraphUtils::NoNeedDumpGraphBySuffix("other")); | ||
| 6183 | + unsetenv("DUMP_GRAPH_LEVEL"); | ||
| 6184 | +} | ||
| 6185 | + | ||
| 6186 | +TEST_F(UtestGraphUtils, CovNoNeedDumpGraphBySuffixLevel4) { | ||
| 6187 | + (void)setenv("DUMP_GRAPH_LEVEL", "4", 1); | ||
| 6188 | + EXPECT_FALSE(GraphUtils::NoNeedDumpGraphBySuffix("PreRunBegin")); | ||
| 6189 | + EXPECT_TRUE(GraphUtils::NoNeedDumpGraphBySuffix("other")); | ||
| 6190 | + unsetenv("DUMP_GRAPH_LEVEL"); | ||
| 6191 | +} | ||
| 6192 | + | ||
| 6193 | +TEST_F(UtestGraphUtils, CovNoNeedDumpGraphBySuffixKeyName) { | ||
| 6194 | + (void)setenv("DUMP_GRAPH_LEVEL", "keyword1|keyword2", 1); | ||
| 6195 | + EXPECT_FALSE(GraphUtils::NoNeedDumpGraphBySuffix("my_keyword1_test")); | ||
| 6196 | + EXPECT_TRUE(GraphUtils::NoNeedDumpGraphBySuffix("no_match")); | ||
| 6197 | + unsetenv("DUMP_GRAPH_LEVEL"); | ||
| 6198 | +} | ||
| 6199 | + | ||
| 6200 | +TEST_F(UtestGraphUtils, CovIsolateNodeSelfCycle) { | ||
| 6201 | + ut::GraphBuilder builder = ut::GraphBuilder("self_cycle"); | ||
| 6202 | + auto in = builder.AddNode("in", DATA, 0, 1); | ||
| 6203 | + auto mid = builder.AddNode("mid", "Add", 2, 1); | ||
| 6204 | + auto out = builder.AddNode("out", NETOUTPUT, 1, 0); | ||
| 6205 | + builder.AddDataEdge(in, 0, mid, 0); | ||
| 6206 | + builder.AddDataEdge(in, 0, mid, 1); | ||
| 6207 | + builder.AddDataEdge(mid, 0, out, 0); | ||
| 6208 | + auto graph = builder.GetGraph(); | ||
| 6209 | + (void)GraphUtils::AddEdge(mid->GetOutControlAnchor(), mid->GetInControlAnchor()); | ||
| 6210 | + EXPECT_EQ(GraphUtils::IsolateNode(mid, {0}), GRAPH_SUCCESS); | ||
| 6211 | +} | ||
| 6212 | + | ||
| 6213 | +TEST_F(UtestGraphUtils, CovMoveInCtrlEdgesNullParams) { | ||
| 6214 | + EXPECT_EQ(GraphUtils::MoveInCtrlEdges(nullptr, nullptr), GRAPH_FAILED); | ||
| 6215 | +} | ||
| 6216 | + | ||
| 6217 | +TEST_F(UtestGraphUtils, CovMoveOutCtrlEdgesNullParams) { | ||
| 6218 | + NodePtr null_src = nullptr; | ||
| 6219 | + NodePtr null_dst = nullptr; | ||
| 6220 | + EXPECT_EQ(GraphUtils::MoveOutCtrlEdges(null_src, null_dst), GRAPH_FAILED); | ||
| 6221 | +} | ||
| 6222 | + | ||
| 6223 | +TEST_F(UtestGraphUtils, CovConvertInDataEdgesNullParams) { | ||
| 6224 | + EXPECT_EQ(GraphUtils::ConvertInDataEdgesToInCtrlEdges(nullptr, nullptr, nullptr), GRAPH_PARAM_INVALID); | ||
| 6225 | +} | ||
| 6226 | + | ||
| 6227 | +TEST_F(UtestGraphUtils, CovConvertOutDataEdgesNullParams) { | ||
| 6228 | + EXPECT_EQ(GraphUtils::ConvertOutDataEdgesToOutCtrlEdges(nullptr, nullptr, nullptr), GRAPH_PARAM_INVALID); | ||
| 6229 | +} | ||
| 6230 | + | ||
| 6231 | +TEST_F(UtestGraphUtils, CovCopyInCtrlEdgesNullParams) { | ||
| 6232 | + EXPECT_EQ(GraphUtils::CopyInCtrlEdges(nullptr, nullptr, nullptr), GRAPH_PARAM_INVALID); | ||
| 6233 | +} | ||
| 6234 | + | ||
| 6235 | +TEST_F(UtestGraphUtils, CovCopyOutCtrlEdgesNullParams) { | ||
| 6236 | + EXPECT_EQ(GraphUtils::CopyOutCtrlEdges(nullptr, nullptr, nullptr), GRAPH_FAILED); | ||
| 6237 | +} | ||
| 6238 | + | ||
| 6239 | +TEST_F(UtestGraphUtils, CovReplaceNodesDataAnchorsEmpty) { | ||
| 6240 | + std::vector<NodePtr> new_nodes; | ||
| 6241 | + std::vector<NodePtr> old_nodes; | ||
| 6242 | + EXPECT_NE(GraphUtils::ReplaceNodesDataAnchors(new_nodes, old_nodes, {}, {}), GRAPH_SUCCESS); | ||
| 6243 | +} | ||
| 6244 | + | ||
| 6245 | +TEST_F(UtestGraphUtils, CovCopyComputeGraphNotRoot) { | ||
| 6246 | + auto root = std::make_shared<ComputeGraph>("root"); | ||
| 6247 | + auto sub = std::make_shared<ComputeGraph>("sub"); | ||
| 6248 | + sub->SetParentGraph(root); | ||
| 6249 | + ComputeGraphPtr dst; | ||
| 6250 | + EXPECT_EQ(GraphUtils::CopyComputeGraph(sub, nullptr, nullptr, nullptr, dst), GRAPH_FAILED); | ||
| 6251 | +} | ||
| 6252 | + | ||
| 6253 | +TEST_F(UtestGraphUtils, CovIsSingleOpScene) { | ||
| 6254 | + ut::GraphBuilder builder = ut::GraphBuilder("single_op"); | ||
| 6255 | + auto data = builder.AddNode("data1", DATA, 0, 1); | ||
| 6256 | + auto graph = builder.GetGraph(); | ||
| 6257 | + EXPECT_FALSE(GraphUtils::IsSingleOpScene(graph)); | ||
| 6258 | + (void)AttrUtils::SetBool(graph, ATTR_SINGLE_OP_SCENE, true); | ||
| 6259 | + EXPECT_TRUE(GraphUtils::IsSingleOpScene(graph)); | ||
| 6260 | +} | ||
| 6261 | + | ||
| 6262 | +TEST_F(UtestGraphUtils, CovCreateCycleDetector) { | ||
| 6263 | + ut::GraphBuilder builder = ut::GraphBuilder("cycle_det"); | ||
| 6264 | + auto data = builder.AddNode("data1", DATA, 0, 1); | ||
| 6265 | + auto graph = builder.GetGraph(); | ||
| 6266 | + auto detector = GraphUtils::CreateCycleDetector(graph); | ||
| 6267 | + EXPECT_NE(detector, nullptr); | ||
| 6268 | +} | ||
| 6269 | + | ||
| 6270 | +TEST_F(UtestGraphUtils, CovCreateSharedCycleDetector) { | ||
| 6271 | + ut::GraphBuilder builder = ut::GraphBuilder("shared_cycle_det"); | ||
| 6272 | + auto data = builder.AddNode("data1", DATA, 0, 1); | ||
| 6273 | + auto graph = builder.GetGraph(); | ||
| 6274 | + auto detector = GraphUtils::CreateSharedCycleDetector(graph); | ||
| 6275 | + EXPECT_NE(detector, nullptr); | ||
| 6276 | +} | ||
| 6277 | + | ||
| 6278 | +TEST_F(UtestGraphUtils, CovIsolateNodeOneIOMultiInput) { | ||
| 6279 | + ut::GraphBuilder builder = ut::GraphBuilder("one_io_multi"); | ||
| 6280 | + auto in1 = builder.AddNode("in1", DATA, 0, 1); | ||
| 6281 | + auto in2 = builder.AddNode("in2", DATA, 0, 1); | ||
| 6282 | + auto mid = builder.AddNode("mid", "Add", 2, 1); | ||
| 6283 | + auto out = builder.AddNode("out", NETOUTPUT, 1, 0); | ||
| 6284 | + builder.AddDataEdge(in1, 0, mid, 0); | ||
| 6285 | + builder.AddDataEdge(in2, 0, mid, 1); | ||
| 6286 | + builder.AddDataEdge(mid, 0, out, 0); | ||
| 6287 | + EXPECT_EQ(GraphUtils::IsolateNodeOneIO(mid), GRAPH_PARAM_INVALID); | ||
| 6288 | +} | ||
| 6289 | + | ||
| 6290 | +TEST_F(UtestGraphUtils, CovIsolateNodeOneIOMultiOutput) { | ||
| 6291 | + ut::GraphBuilder builder = ut::GraphBuilder("one_io_multi_out"); | ||
| 6292 | + auto in = builder.AddNode("in", DATA, 0, 1); | ||
| 6293 | + auto mid = builder.AddNode("mid", "Split", 1, 2); | ||
| 6294 | + auto out = builder.AddNode("out", NETOUTPUT, 1, 0); | ||
| 6295 | + builder.AddDataEdge(in, 0, mid, 0); | ||
| 6296 | + builder.AddDataEdge(mid, 0, out, 0); | ||
| 6297 | + EXPECT_EQ(GraphUtils::IsolateNodeOneIO(mid), GRAPH_PARAM_INVALID); | ||
| 6298 | +} | ||
| 6299 | + | ||
| 6300 | +TEST_F(UtestGraphUtils, CovDumpGEGraphByPathEmptyName) { | ||
| 6301 | + ut::GraphBuilder builder = ut::GraphBuilder("dump_empty_name"); | ||
| 6302 | + auto data = builder.AddNode("data1", DATA, 0, 1); | ||
| 6303 | + auto graph = builder.GetGraph(); | ||
| 6304 | + EXPECT_NE(GraphUtils::DumpGEGraphByPath(graph, "./", 0), GRAPH_SUCCESS); | ||
| 6305 | +} | ||
| 6306 | + | ||
| 6307 | +TEST_F(UtestGraphUtils, CovRemoveNodeWithoutRelinkNotInList) { | ||
| 6308 | + ut::GraphBuilder builder = ut::GraphBuilder("rm_not_in_list"); | ||
| 6309 | + auto data = builder.AddNode("data1", DATA, 0, 1); | ||
| 6310 | + auto graph = builder.GetGraph(); | ||
| 6311 | + auto external_graph = std::make_shared<ComputeGraph>("external"); | ||
| 6312 | + auto ext_op = std::make_shared<OpDesc>("ext", "Cast"); | ||
| 6313 | + ext_op->AddInputDesc(GeTensorDesc()); | ||
| 6314 | + ext_op->AddOutputDesc(GeTensorDesc()); | ||
| 6315 | + auto ext_node = external_graph->AddNode(ext_op); | ||
| 6316 | + EXPECT_EQ(GraphUtils::RemoveNodeWithoutRelink(graph, ext_node), GRAPH_FAILED); | ||
| 6317 | +} | ||
| 6318 | + | ||
| 6319 | +TEST_F(UtestGraphUtils, CovInsertNodeBeforeDiffGraph) { | ||
| 6320 | + ut::GraphBuilder builder1 = ut::GraphBuilder("g1_ib"); | ||
| 6321 | + auto src = builder1.AddNode("src", DATA, 0, 1); | ||
| 6322 | + auto graph1 = builder1.GetGraph(); | ||
| 6323 | + ut::GraphBuilder builder2 = ut::GraphBuilder("g2_ib"); | ||
| 6324 | + auto dst = builder2.AddNode("dst", "Add", 1, 1); | ||
| 6325 | + auto insert_op = std::make_shared<OpDesc>("insert", "Cast"); | ||
| 6326 | + insert_op->AddInputDesc(GeTensorDesc()); | ||
| 6327 | + insert_op->AddOutputDesc(GeTensorDesc()); | ||
| 6328 | + auto insert_node = graph1->AddNode(insert_op); | ||
| 6329 | + EXPECT_EQ(GraphUtils::InsertNodeBefore(dst->GetInDataAnchor(0), insert_node, 0, 0), GRAPH_FAILED); | ||
| 6330 | +} | ||
| 6331 | + | ||
| 6332 | +TEST_F(UtestGraphUtils, CovCopyInCtrlEdgesWithFilterBasic) { | ||
| 6333 | + ut::GraphBuilder builder = ut::GraphBuilder("copy_in_ctrl_filter"); | ||
| 6334 | + auto src = builder.AddNode("src", DATA, 0, 1); | ||
| 6335 | + auto mid = builder.AddNode("mid", "Add", 1, 1); | ||
| 6336 | + auto dst = builder.AddNode("dst", NETOUTPUT, 1, 0); | ||
| 6337 | + builder.AddDataEdge(src, 0, mid, 0); | ||
| 6338 | + builder.AddDataEdge(mid, 0, dst, 0); | ||
| 6339 | + (void)GraphUtils::AddEdge(src->GetOutControlAnchor(), mid->GetInControlAnchor()); | ||
| 6340 | + NodeFilter filter = [](const Node &node) { return true; }; | ||
| 6341 | + EXPECT_EQ(GraphUtils::CopyInCtrlEdges(mid, dst, filter), GRAPH_SUCCESS); | ||
| 6342 | +} | ||
| 6343 | + | ||
| 6344 | +TEST_F(UtestGraphUtils, CovCopyOutCtrlEdgesWithFilterBasic) { | ||
| 6345 | + ut::GraphBuilder builder = ut::GraphBuilder("copy_out_ctrl_filter"); | ||
| 6346 | + auto src = builder.AddNode("src", DATA, 0, 1); | ||
| 6347 | + auto mid = builder.AddNode("mid", "Add", 1, 1); | ||
| 6348 | + auto dst = builder.AddNode("dst", NETOUTPUT, 1, 0); | ||
| 6349 | + builder.AddDataEdge(src, 0, mid, 0); | ||
| 6350 | + builder.AddDataEdge(mid, 0, dst, 0); | ||
| 6351 | + (void)GraphUtils::AddEdge(mid->GetOutControlAnchor(), dst->GetInControlAnchor()); | ||
| 6352 | + NodeFilter filter = [](const Node &node) { return true; }; | ||
| 6353 | + EXPECT_EQ(GraphUtils::CopyOutCtrlEdges(mid, src, filter), GRAPH_SUCCESS); | ||
| 6354 | +} | ||
| 6355 | + | ||
| 6356 | +TEST_F(UtestGraphUtils, CovConvertInDataEdgesBasic) { | ||
| 6357 | + ut::GraphBuilder builder = ut::GraphBuilder("conv_in_data"); | ||
| 6358 | + auto src = builder.AddNode("src", DATA, 0, 1); | ||
| 6359 | + auto mid = builder.AddNode("mid", "Add", 1, 1); | ||
| 6360 | + auto dst = builder.AddNode("dst", NETOUTPUT, 1, 0); | ||
| 6361 | + builder.AddDataEdge(src, 0, mid, 0); | ||
| 6362 | + builder.AddDataEdge(mid, 0, dst, 0); | ||
| 6363 | + NodeFilter filter = [](const Node &node) { return true; }; | ||
| 6364 | + EXPECT_EQ(GraphUtils::ConvertInDataEdgesToInCtrlEdges(mid, dst, filter), GRAPH_SUCCESS); | ||
| 6365 | +} | ||
| 6366 | + | ||
| 6367 | +TEST_F(UtestGraphUtils, CovConvertOutDataEdgesBasic) { | ||
| 6368 | + ut::GraphBuilder builder = ut::GraphBuilder("conv_out_data"); | ||
| 6369 | + auto src = builder.AddNode("src", DATA, 0, 1); | ||
| 6370 | + auto mid = builder.AddNode("mid", "Add", 1, 1); | ||
| 6371 | + auto dst = builder.AddNode("dst", NETOUTPUT, 1, 0); | ||
| 6372 | + builder.AddDataEdge(src, 0, mid, 0); | ||
| 6373 | + builder.AddDataEdge(mid, 0, dst, 0); | ||
| 6374 | + NodeFilter filter = [](const Node &node) { return true; }; | ||
| 6375 | + EXPECT_EQ(GraphUtils::ConvertOutDataEdgesToOutCtrlEdges(mid, src, filter), GRAPH_SUCCESS); | ||
| 6376 | +} | ||
| 6377 | + | ||
| 6378 | +TEST_F(UtestGraphUtils, CovReplaceNodeDataAnchorsNullParams) { | ||
| 6379 | + EXPECT_EQ(GraphUtils::ReplaceNodeDataAnchors(nullptr, nullptr, {}, {}), GRAPH_PARAM_INVALID); | ||
| 6380 | +} | ||
| 6381 | + | ||
| 6382 | +TEST_F(UtestGraphUtils, CovInheritExecutionOrderBasic) { | ||
| 6383 | + ut::GraphBuilder builder = ut::GraphBuilder("inherit_order"); | ||
| 6384 | + auto data = builder.AddNode("data1", DATA, 0, 1); | ||
| 6385 | + auto old1 = builder.AddNode("old1", "Relu", 1, 1); | ||
| 6386 | + auto new1 = builder.AddNode("new1", "Cast", 1, 1); | ||
| 6387 | + auto netoutput = builder.AddNode("netoutput", NETOUTPUT, 1, 0); | ||
| 6388 | + builder.AddDataEdge(data, 0, old1, 0); | ||
| 6389 | + builder.AddDataEdge(old1, 0, netoutput, 0); | ||
| 6390 | + auto graph = builder.GetGraph(); | ||
| 6391 | + std::vector<NodePtr> new_nodes = {new1}; | ||
| 6392 | + std::vector<NodePtr> old_nodes = {old1}; | ||
| 6393 | + EXPECT_EQ(GraphUtils::InheritExecutionOrder(new_nodes, old_nodes, graph, false), SUCCESS); | ||
| 6394 | +} | ||
| 6395 | + | ||
| 6396 | +TEST_F(UtestGraphUtils, CovRemoveNodesByTypePlaceholder) { | ||
| 6397 | + ut::GraphBuilder builder = ut::GraphBuilder("rm_placeholder"); | ||
| 6398 | + auto data = builder.AddNode("data1", DATA, 0, 1); | ||
| 6399 | + auto ph = builder.AddNode("ph1", PLACEHOLDER, 0, 1); | ||
| 6400 | + auto end = builder.AddNode("end1", END, 1, 0); | ||
| 6401 | + auto graph = builder.GetGraph(); | ||
| 6402 | + EXPECT_EQ(GraphUtils::RemoveNodesByTypeWithoutRelink(graph, PLACEHOLDER), GRAPH_SUCCESS); | ||
| 6403 | +} | ||
| 6404 | + | ||
| 6405 | +TEST_F(UtestGraphUtils, CovDumpGEGraphToReadableNullGraph) { | ||
| 6406 | + ComputeGraphPtr null_graph = nullptr; | ||
| 6407 | + GraphUtils::DumpGEGraphToReadable(null_graph, "test_readable", false, ""); | ||
| 6408 | +} | ||
| 6409 | + | ||
| 6410 | +TEST_F(UtestGraphUtils, CovDumpGEGraphToOnnxByContentLevel) { | ||
| 6411 | + ComputeGraph compute_graph("test_onnx_level"); | ||
| 6412 | + compute_graph.SetGraphID(0); | ||
| 6413 | + GraphUtils::DumpGEGraphToOnnxByContentLevel(compute_graph, "test_suffix", ge::DumpLevel::DUMP_ALL); | ||
| 6414 | +} | ||
| 6415 | + | ||
| 6416 | +TEST_F(UtestGraphUtils, CovRemoveNodesByTypeEnd) { | ||
| 6417 | + ut::GraphBuilder builder = ut::GraphBuilder("rm_end"); | ||
| 6418 | + auto data = builder.AddNode("data1", DATA, 0, 1); | ||
| 6419 | + auto end = builder.AddNode("end1", END, 1, 0); | ||
| 6420 | + auto graph = builder.GetGraph(); | ||
| 6421 | + EXPECT_EQ(GraphUtils::RemoveNodesByTypeWithoutRelink(graph, END), GRAPH_SUCCESS); | ||
| 6422 | +} | ||
| 6423 | + | ||
| 6424 | +TEST_F(UtestGraphUtils, CovIsolateNodeWithNoOpOptimize) { | ||
| 6425 | + ut::GraphBuilder builder = ut::GraphBuilder("noop_opt"); | ||
| 6426 | + std::vector<NodePtr> in_nodes; | ||
| 6427 | + std::vector<NodePtr> out_nodes; | ||
| 6428 | + for (int i = 0; i < 5; ++i) { | ||
| 6429 | + in_nodes.push_back(builder.AddNode("in" + std::to_string(i), DATA, 0, 1)); | ||
| 6430 | + } | ||
| 6431 | + auto mid = builder.AddNode("mid", "Add", 5, 5); | ||
| 6432 | + for (int i = 0; i < 5; ++i) { | ||
| 6433 | + out_nodes.push_back(builder.AddNode("out" + std::to_string(i), NETOUTPUT, 1, 0)); | ||
| 6434 | + builder.AddDataEdge(in_nodes[i], 0, mid, i); | ||
| 6435 | + builder.AddDataEdge(mid, i, out_nodes[i], 0); | ||
| 6436 | + } | ||
| 6437 | + EXPECT_EQ(GraphUtils::IsolateNode(mid, {0, 1, 2, 3, 4}), GRAPH_SUCCESS); | ||
| 6438 | +} | ||
| 6439 | + | ||
| 6440 | +TEST_F(UtestGraphUtils, CovCopyNodesInDataAnchors) { | ||
| 6441 | + ut::GraphBuilder builder = ut::GraphBuilder("copy_nodes_in"); | ||
| 6442 | + auto data = builder.AddNode("data1", DATA, 0, 1); | ||
| 6443 | + auto old1 = builder.AddNode("old1", "Relu", 1, 1); | ||
| 6444 | + auto new1 = builder.AddNode("new1", "Cast", 1, 1); | ||
| 6445 | + builder.AddDataEdge(data, 0, old1, 0); | ||
| 6446 | + std::vector<NodePtr> new_nodes = {new1}; | ||
| 6447 | + std::vector<NodePtr> old_nodes = {old1}; | ||
| 6448 | + EXPECT_EQ(GraphUtils::CopyNodesInDataAnchors(new_nodes, old_nodes, {0}), GRAPH_SUCCESS); | ||
| 6449 | +} | ||
| 6450 | + | ||
| 6451 | +TEST_F(UtestGraphUtils, CovReplaceNodesInDataAnchors) { | ||
| 6452 | + ut::GraphBuilder builder = ut::GraphBuilder("replace_nodes_in"); | ||
| 6453 | + auto data = builder.AddNode("data1", DATA, 0, 1); | ||
| 6454 | + auto old1 = builder.AddNode("old1", "Relu", 1, 1); | ||
| 6455 | + auto new1 = builder.AddNode("new1", "Cast", 1, 1); | ||
| 6456 | + builder.AddDataEdge(data, 0, old1, 0); | ||
| 6457 | + std::vector<NodePtr> new_nodes = {new1}; | ||
| 6458 | + std::vector<NodePtr> old_nodes = {old1}; | ||
| 6459 | + EXPECT_EQ(GraphUtils::ReplaceNodesInDataAnchors(new_nodes, old_nodes, {0}), GRAPH_SUCCESS); | ||
| 6460 | +} | ||
| 6461 | + | ||
| 6462 | +TEST_F(UtestGraphUtils, CovReplaceNodesOutDataAnchors) { | ||
| 6463 | + ut::GraphBuilder builder = ut::GraphBuilder("replace_nodes_out"); | ||
| 6464 | + auto data = builder.AddNode("data1", DATA, 0, 1); | ||
| 6465 | + auto old1 = builder.AddNode("old1", "Relu", 1, 1); | ||
| 6466 | + auto new1 = builder.AddNode("new1", "Cast", 1, 1); | ||
| 6467 | + auto out = builder.AddNode("out", NETOUTPUT, 1, 0); | ||
| 6468 | + builder.AddDataEdge(data, 0, old1, 0); | ||
| 6469 | + builder.AddDataEdge(old1, 0, out, 0); | ||
| 6470 | + std::vector<NodePtr> new_nodes = {new1}; | ||
| 6471 | + std::vector<NodePtr> old_nodes = {old1}; | ||
| 6472 | + EXPECT_EQ(GraphUtils::ReplaceNodesOutDataAnchors(new_nodes, old_nodes, {0}), GRAPH_SUCCESS); | ||
| 6473 | +} | ||
| 6474 | + | ||
| 6475 | +TEST_F(UtestGraphUtils, CovUnfoldGraphTooDeep) { | ||
| 6476 | + ut::GraphBuilder builder = ut::GraphBuilder("unfold_deep"); | ||
| 6477 | + auto data = builder.AddNode("data1", DATA, 0, 1); | ||
| 6478 | + auto target = builder.AddNode("target", "Relu", 1, 1); | ||
| 6479 | + auto graph = builder.GetGraph(); | ||
| 6480 | + auto target_graph = std::make_shared<ComputeGraph>("target_graph"); | ||
| 6481 | + auto filter = [](const ComputeGraphPtr &) { return true; }; | ||
| 6482 | + EXPECT_EQ(GraphUtils::UnfoldGraph(graph, target_graph, target, filter, 100), GRAPH_FAILED); | ||
| 6483 | +} | ||
| 6484 | + | ||
| 6485 | +TEST_F(UtestGraphUtils, CovInheritOriginalAttr) { | ||
| 6486 | + auto src_graph = std::make_shared<ComputeGraph>("src_inherit"); | ||
| 6487 | + auto dst_graph = std::make_shared<ComputeGraph>("dst_inherit"); | ||
| 6488 | + (void)AttrUtils::SetStr(src_graph, "test_attr", "test_value"); | ||
| 6489 | + GraphUtils::InheritOriginalAttr(src_graph, dst_graph); | ||
| 6490 | + std::string val; | ||
| 6491 | + (void)AttrUtils::GetStr(dst_graph, "test_attr", val); | ||
| 6492 | + EXPECT_EQ(val, "test_value"); | ||
| 6493 | +} | ||
| 5984 | } // namespace ge | 6494 | } // namespace ge |
| @@ -369,4 +369,19 @@ TEST_F(ModelIncCovUt, IncCov2_LoadFromFile_InvalidProtobufContent) { | |||
| 369 | EXPECT_EQ(model.LoadFromFile(file_path), GRAPH_FAILED); | 369 | EXPECT_EQ(model.LoadFromFile(file_path), GRAPH_FAILED); |
| 370 | system(("rm -f " + file_path).c_str()); | 370 | system(("rm -f " + file_path).c_str()); |
| 371 | } | 371 | } |
| 372 | + | ||
| 373 | +TEST_F(ModelIncCovUt, IncCov2_SaveToFile_InvalidDir) { | ||
| 374 | + auto graph = BuildTestGraph(); | ||
| 375 | + Model model("test_model", "v1"); | ||
| 376 | + model.SetGraph(GraphUtilsEx::GetComputeGraph(graph)); | ||
| 377 | + EXPECT_EQ(model.SaveToFile("/nonexist_dir_xyz/sub/test.air", false), GRAPH_SUCCESS); | ||
| 378 | + system("rm -rf /nonexist_dir_xyz"); | ||
| 379 | +} | ||
| 380 | + | ||
| 381 | +TEST_F(ModelIncCovUt, IncCov2_SaveToFile_EmptyPath) { | ||
| 382 | + auto graph = BuildTestGraph(); | ||
| 383 | + Model model("test_model", "v1"); | ||
| 384 | + model.SetGraph(GraphUtilsEx::GetComputeGraph(graph)); | ||
| 385 | + EXPECT_NE(model.SaveToFile("", false), GRAPH_SUCCESS); | ||
| 386 | +} | ||
| 372 | } // namespace ge | 387 | } // namespace ge |
| @@ -12,6 +12,7 @@ | |||
| 12 | 12 | ||
| 13 | 13 | ||
| 14 | 14 | ||
| 15 | + | ||
| 15 | 16 | ||
| 16 | 17 | ||
| 17 | 18 | ||
| @@ -1454,4 +1455,73 @@ TEST_F(UtestNodeUtils, CovGetParentInputAndAnchorNullGraph) { | |||
| 1454 | EXPECT_EQ(result.first, nullptr); | 1455 | EXPECT_EQ(result.first, nullptr); |
| 1455 | EXPECT_EQ(result.second, nullptr); | 1456 | EXPECT_EQ(result.second, nullptr); |
| 1456 | } | 1457 | } |
| 1458 | + | ||
| 1459 | +TEST_F(UtestNodeUtils, IncCov_GetSubgraphOutputNodes) { | ||
| 1460 | + auto root_graph = std::make_shared<ComputeGraph>("root_graph"); | ||
| 1461 | + auto if_op_desc = std::make_shared<OpDesc>("if", "If"); | ||
| 1462 | + if_op_desc->AddInputDesc(GeTensorDesc()); | ||
| 1463 | + if_op_desc->AddOutputDesc(GeTensorDesc()); | ||
| 1464 | + if_op_desc->AddSubgraphName("sub1"); | ||
| 1465 | + if_op_desc->SetSubgraphInstanceName(0, "sub1"); | ||
| 1466 | + auto if_node = root_graph->AddNode(if_op_desc); | ||
| 1467 | + | ||
| 1468 | + auto sub1 = std::make_shared<ComputeGraph>("sub1"); | ||
| 1469 | + auto data_op = std::make_shared<OpDesc>("sub_data", "Data"); | ||
| 1470 | + data_op->AddInputDesc(GeTensorDesc()); | ||
| 1471 | + data_op->AddOutputDesc(GeTensorDesc()); | ||
| 1472 | + AttrUtils::SetInt(data_op, ATTR_NAME_PARENT_NODE_INDEX, 0); | ||
| 1473 | + auto data_node = sub1->AddNode(data_op); | ||
| 1474 | + | ||
| 1475 | + auto net_op = std::make_shared<OpDesc>("sub_netoutput", "NetOutput"); | ||
| 1476 | + net_op->AddInputDesc(GeTensorDesc()); | ||
| 1477 | + auto net_node = sub1->AddNode(net_op); | ||
| 1478 | + | ||
| 1479 | + GraphUtils::AddEdge(data_node->GetOutDataAnchor(0), net_node->GetInDataAnchor(0)); | ||
| 1480 | + sub1->SetParentNode(if_node); | ||
| 1481 | + sub1->SetParentGraph(root_graph); | ||
| 1482 | + root_graph->AddSubgraph("sub1", sub1); | ||
| 1483 | + | ||
| 1484 | + auto outputs = NodeUtils::GetSubgraphOutputNodes(*if_node); | ||
| 1485 | + EXPECT_FALSE(outputs.empty()); | ||
| 1486 | +} | ||
| 1487 | + | ||
| 1488 | +TEST_F(UtestNodeUtils, IncCov_IsNodeInRootGraph_Subgraph) { | ||
| 1489 | + auto root_graph = std::make_shared<ComputeGraph>("root_graph2"); | ||
| 1490 | + auto if_op_desc = std::make_shared<OpDesc>("if2", "If"); | ||
| 1491 | + if_op_desc->AddInputDesc(GeTensorDesc()); | ||
| 1492 | + if_op_desc->AddOutputDesc(GeTensorDesc()); | ||
| 1493 | + if_op_desc->AddSubgraphName("sub1"); | ||
| 1494 | + if_op_desc->SetSubgraphInstanceName(0, "sub1"); | ||
| 1495 | + auto if_node = root_graph->AddNode(if_op_desc); | ||
| 1496 | + | ||
| 1497 | + auto sub1 = std::make_shared<ComputeGraph>("sub1_2"); | ||
| 1498 | + auto data_op = std::make_shared<OpDesc>("sub_data2", "Data"); | ||
| 1499 | + data_op->AddInputDesc(GeTensorDesc()); | ||
| 1500 | + data_op->AddOutputDesc(GeTensorDesc()); | ||
| 1501 | + auto data_node = sub1->AddNode(data_op); | ||
| 1502 | + | ||
| 1503 | + sub1->SetParentNode(if_node); | ||
| 1504 | + sub1->SetParentGraph(root_graph); | ||
| 1505 | + root_graph->AddSubgraph("sub1", sub1); | ||
| 1506 | + | ||
| 1507 | + EXPECT_EQ(NodeUtils::IsNodeInRootGraph(data_node), false); | ||
| 1508 | +} | ||
| 1509 | + | ||
| 1510 | +TEST_F(UtestNodeUtils, IncCov_GetNodeType) { | ||
| 1511 | + ut::GraphBuilder builder = ut::GraphBuilder("graph_node_type"); | ||
| 1512 | + auto node = builder.AddNode("node", "Relu", 1, 1); | ||
| 1513 | + EXPECT_EQ(NodeUtils::GetNodeType(*node), "Relu"); | ||
| 1514 | +} | ||
| 1515 | + | ||
| 1516 | +TEST_F(UtestNodeUtils, IncCov_GetOutControlNodes) { | ||
| 1517 | + ut::GraphBuilder builder = ut::GraphBuilder("graph_ctrl_out"); | ||
| 1518 | + auto src = builder.AddNode("src", "Relu", 0, 0); | ||
| 1519 | + auto dst1 = builder.AddNode("dst1", "Relu", 0, 0); | ||
| 1520 | + auto dst2 = builder.AddNode("dst2", "Relu", 0, 0); | ||
| 1521 | + builder.AddControlEdge(src, dst1); | ||
| 1522 | + builder.AddControlEdge(src, dst2); | ||
| 1523 | + NodeFilter filter = [](const Node &n) { return true; }; | ||
| 1524 | + auto result = NodeUtils::GetOutControlNodes(*src, filter); | ||
| 1525 | + EXPECT_EQ(result.size(), 2U); | ||
| 1526 | +} | ||
| 1457 | } // namespace ge | 1527 | } // namespace ge |
| @@ -2286,4 +2286,55 @@ TEST_F(UtestOpDescUtils, CovClearWeightsNullGraph) { | |||
| 2286 | auto ret = OpDescUtils::ClearWeights(node); | 2286 | auto ret = OpDescUtils::ClearWeights(node); |
| 2287 | EXPECT_NE(ret, GRAPH_SUCCESS); | 2287 | EXPECT_NE(ret, GRAPH_SUCCESS); |
| 2288 | } | 2288 | } |
| 2289 | + | ||
| 2290 | +TEST_F(UtestOpDescUtils, IncCov_CreateOperatorFromNode) { | ||
| 2291 | + auto graph = BuildGraph1(); | ||
| 2292 | + auto addn_node = graph->FindNode("addn"); | ||
| 2293 | + auto op = OpDescUtils::CreateOperatorFromNode(addn_node); | ||
| 2294 | + EXPECT_FALSE(op.IsEmpty()); | ||
| 2295 | +} | ||
| 2296 | + | ||
| 2297 | +TEST_F(UtestOpDescUtils, IncCov_GetConstInputsEmpty) { | ||
| 2298 | + auto graph = BuildGraph1(); | ||
| 2299 | + auto data_node = graph->FindNode("Data"); | ||
| 2300 | + auto result = OpDescUtils::GetConstInputs(*data_node); | ||
| 2301 | + EXPECT_EQ(result.size(), 0U); | ||
| 2302 | +} | ||
| 2303 | + | ||
| 2304 | +TEST_F(UtestOpDescUtils, IncCov_SetWeightsVectorEmpty) { | ||
| 2305 | + auto graph = BuildGraph1(); | ||
| 2306 | + auto addn_node = graph->FindNode("addn"); | ||
| 2307 | + std::vector<GeTensorPtr> weights; | ||
| 2308 | + auto ret = OpDescUtils::SetWeights(*addn_node, weights); | ||
| 2309 | + EXPECT_EQ(ret, GRAPH_PARAM_INVALID); | ||
| 2310 | +} | ||
| 2311 | + | ||
| 2312 | +TEST_F(UtestOpDescUtils, IncCov_GetWeightsFromNode) { | ||
| 2313 | + auto graph = BuildGraph1(); | ||
| 2314 | + auto const_node = graph->FindNode("const1"); | ||
| 2315 | + auto weights = OpDescUtils::GetWeights(*const_node); | ||
| 2316 | + EXPECT_FALSE(weights.empty()); | ||
| 2317 | +} | ||
| 2318 | + | ||
| 2319 | +TEST_F(UtestOpDescUtils, IncCov_ClearWeightsSuccess) { | ||
| 2320 | + auto graph = BuildGraph1(); | ||
| 2321 | + auto const_node = graph->FindNode("const1"); | ||
| 2322 | + auto ret = OpDescUtils::ClearWeights(const_node); | ||
| 2323 | + EXPECT_EQ(ret, GRAPH_SUCCESS); | ||
| 2324 | +} | ||
| 2325 | + | ||
| 2326 | +TEST_F(UtestOpDescUtils, IncCov_SetWeightsNodeMapEmpty) { | ||
| 2327 | + auto graph = BuildGraph1(); | ||
| 2328 | + auto addn_node = graph->FindNode("addn"); | ||
| 2329 | + std::map<int, GeTensorPtr> weights_map; | ||
| 2330 | + auto ret = OpDescUtils::SetWeights(*addn_node, weights_map); | ||
| 2331 | + EXPECT_EQ(ret, GRAPH_SUCCESS); | ||
| 2332 | +} | ||
| 2333 | + | ||
| 2334 | +TEST_F(UtestOpDescUtils, IncCov_GetConstInputsExceedSize) { | ||
| 2335 | + auto graph = BuildGraph1(); | ||
| 2336 | + auto addn_node = graph->FindNode("addn"); | ||
| 2337 | + auto result = OpDescUtils::GetConstInputs(*addn_node, 10U); | ||
| 2338 | + EXPECT_EQ(result.size(), 1U); | ||
| 2339 | +} | ||
| 2289 | } // namespace ge | 2340 | } // namespace ge |
| @@ -3470,4 +3470,39 @@ TEST_F(UtestOperater, CovOpVerifyAll) { | |||
| 3470 | EXPECT_EQ(op.VerifyAll(), GRAPH_FAILED); | 3470 | EXPECT_EQ(op.VerifyAll(), GRAPH_FAILED); |
| 3471 | } | 3471 | } |
| 3472 | 3472 | ||
| 3473 | +TEST_F(UtestOperater, IncCov_CreateOperatorFromNode_NullNode) { | ||
| 3474 | + ge::ConstNodePtr null_node; | ||
| 3475 | + ge::Operator op = OpDescUtils::CreateOperatorFromNode(null_node); | ||
| 3476 | + SUCCEED(); | ||
| 3477 | +} | ||
| 3478 | + | ||
| 3479 | +TEST_F(UtestOperater, IncCov_OperatorGetInputConstData_NullImpl) { | ||
| 3480 | + ge::Operator op("test_op21", "Test"); | ||
| 3481 | + op.operator_impl_ = nullptr; | ||
| 3482 | + Tensor data; | ||
| 3483 | + EXPECT_NE(op.GetInputConstData("x", data), GRAPH_SUCCESS); | ||
| 3484 | + EXPECT_NE(op.GetInputConstData(0, data), GRAPH_SUCCESS); | ||
| 3485 | +} | ||
| 3486 | + | ||
| 3487 | +TEST_F(UtestOperater, IncCov_OperatorSetAttr_NullImpl) { | ||
| 3488 | + ge::Operator op("test_op22", "Test"); | ||
| 3489 | + op.operator_impl_ = nullptr; | ||
| 3490 | + op.SetAttr("attr", static_cast<int64_t>(42)); | ||
| 3491 | + int64_t val = 0; | ||
| 3492 | + EXPECT_NE(op.GetAttr("attr", val), GRAPH_SUCCESS); | ||
| 3493 | +} | ||
| 3494 | + | ||
| 3495 | +TEST_F(UtestOperater, IncCov_OperatorGetName_NullImpl) { | ||
| 3496 | + ge::Operator op("test_op23", "Test"); | ||
| 3497 | + op.operator_impl_ = nullptr; | ||
| 3498 | + AscendString name; | ||
| 3499 | + EXPECT_EQ(op.GetName(name), GRAPH_SUCCESS); | ||
| 3500 | +} | ||
| 3501 | + | ||
| 3502 | +TEST_F(UtestOperater, IncCov_OperatorGetType_NullImpl) { | ||
| 3503 | + ge::Operator op("test_op24", "Test"); | ||
| 3504 | + op.operator_impl_ = nullptr; | ||
| 3505 | + AscendString type; | ||
| 3506 | + EXPECT_NE(op.GetOpType(type), GRAPH_SUCCESS); | ||
| 3507 | +} | ||
| 3473 | } // namespace ge | 3508 | } // namespace ge |
| @@ -648,3 +648,46 @@ TEST_F(UtestPluginManagerIncCov, IncCov2_ParseVersion_NoMatch) { | |||
| 648 | std::string version; | 648 | std::string version; |
| 649 | EXPECT_FALSE(PluginManager::ParseVersion(line, version, "Version=")); | 649 | EXPECT_FALSE(PluginManager::ParseVersion(line, version, "Version=")); |
| 650 | } | 650 | } |
| 651 | + | ||
| 652 | +TEST_F(UtestPluginManagerIncCov, IncCov2_CheckOppAndCompilerVersions_CompilerOutOfRange) { | ||
| 653 | + PluginManager mgr; | ||
| 654 | + std::vector<std::pair<uint32_t, uint32_t>> required = {{800000, 801000}}; | ||
| 655 | + EXPECT_FALSE(mgr.CheckOppAndCompilerVersions("", "1.0", required)); | ||
| 656 | +} | ||
| 657 | + | ||
| 658 | +TEST_F(UtestPluginManagerIncCov, IncCov2_IsVendorVersionValid_WithRequiredVersion) { | ||
| 659 | + std::string run_pkg_path = GetRunPkgPath(); | ||
| 660 | + std::string compiler_dir = run_pkg_path + "compiler"; | ||
| 661 | + std::string runtime_dir = run_pkg_path + "runtime"; | ||
| 662 | + system(("rm -rf " + runtime_dir).c_str()); | ||
| 663 | + bool created = false; | ||
| 664 | + if (system(("mkdir -p " + compiler_dir).c_str()) == 0) { | ||
| 665 | + std::string version_file = compiler_dir + "/version.info"; | ||
| 666 | + std::ofstream ofs(version_file); | ||
| 667 | + if (ofs.is_open()) { | ||
| 668 | + ofs << "required_opp_abi_version=>=8.0, <=8.1"; | ||
| 669 | + ofs.close(); | ||
| 670 | + created = true; | ||
| 671 | + } | ||
| 672 | + } | ||
| 673 | + PluginManager mgr; | ||
| 674 | + bool result = mgr.IsVendorVersionValid("8.0", "8.0"); | ||
| 675 | + if (created) { | ||
| 676 | + system(("rm -rf " + compiler_dir).c_str()); | ||
| 677 | + } | ||
| 678 | +} | ||
| 679 | + | ||
| 680 | +TEST_F(UtestPluginManagerIncCov, IncCov2_GetOppSupportedOsAndCpuType_RealPathNotDir) { | ||
| 681 | + std::string file_path = kTmpDir2 + "/notdir_opp_file"; | ||
| 682 | + system(("touch " + file_path).c_str()); | ||
| 683 | + std::unordered_map<std::string, std::unordered_set<std::string>> opp_supported_os_cpu; | ||
| 684 | + PluginManager::GetOppSupportedOsAndCpuType(opp_supported_os_cpu, file_path, "", 0U); | ||
| 685 | + EXPECT_TRUE(opp_supported_os_cpu.empty()); | ||
| 686 | +} | ||
| 687 | + | ||
| 688 | +TEST_F(UtestPluginManagerIncCov, IncCov2_GetOppSupportedOsAndCpuType_ScanDirFail) { | ||
| 689 | + std::string nonexist = kTmpDir2 + "/nonexist_scan_opp"; | ||
| 690 | + std::unordered_map<std::string, std::unordered_set<std::string>> opp_supported_os_cpu; | ||
| 691 | + PluginManager::GetOppSupportedOsAndCpuType(opp_supported_os_cpu, nonexist, "", 0U); | ||
| 692 | + EXPECT_TRUE(opp_supported_os_cpu.empty()); | ||
| 693 | +} | ||
| @@ -191,4 +191,124 @@ TEST_F(UtestRefRelation, IncCov_BuildRefRelations_NetOutputNoRefIdx) { | |||
| 191 | RefRelations ref; | 191 | RefRelations ref; |
| 192 | EXPECT_NE(ref.BuildRefRelations(*root_graph.get()), ge::SUCCESS); | 192 | EXPECT_NE(ref.BuildRefRelations(*root_graph.get()), ge::SUCCESS); |
| 193 | } | 193 | } |
| 194 | + | ||
| 195 | +TEST_F(UtestRefRelation, IncCov_BuildRefRelationsForWhile_NoNetoutput) { | ||
| 196 | + ComputeGraphPtr root_graph = std::make_shared<ComputeGraph>("root_graph"); | ||
| 197 | + auto while_op_desc = CreateOpDesc("while", WHILE, 1, 1); | ||
| 198 | + auto while_node = root_graph->AddNode(while_op_desc); | ||
| 199 | + while_op_desc->AddSubgraphName("cond"); | ||
| 200 | + while_op_desc->SetSubgraphInstanceName(0, "cond"); | ||
| 201 | + while_op_desc->AddSubgraphName("body"); | ||
| 202 | + while_op_desc->SetSubgraphInstanceName(1, "body"); | ||
| 203 | + | ||
| 204 | + auto cond_graph = std::make_shared<ComputeGraph>("cond"); | ||
| 205 | + cond_graph->SetParentGraph(root_graph); | ||
| 206 | + cond_graph->SetParentNode(while_node); | ||
| 207 | + root_graph->AddSubGraph(cond_graph); | ||
| 208 | + | ||
| 209 | + auto body_graph = std::make_shared<ComputeGraph>("body"); | ||
| 210 | + auto body_data_op_desc = CreateOpDesc("body_data", DATA, 1, 1); | ||
| 211 | + auto body_data_node = body_graph->AddNode(body_data_op_desc); | ||
| 212 | + AttrUtils::SetInt(body_data_op_desc, ATTR_NAME_PARENT_NODE_INDEX, 0); | ||
| 213 | + body_graph->SetParentGraph(root_graph); | ||
| 214 | + body_graph->SetParentNode(while_node); | ||
| 215 | + root_graph->AddSubGraph(body_graph); | ||
| 216 | + | ||
| 217 | + RefRelations ref; | ||
| 218 | + EXPECT_EQ(ref.BuildRefRelations(*root_graph.get()), ge::SUCCESS); | ||
| 219 | +} | ||
| 220 | + | ||
| 221 | +TEST_F(UtestRefRelation, IncCov_BuildRefRelationsForWhile_NetOutputUnconnectedInput) { | ||
| 222 | + ComputeGraphPtr root_graph = std::make_shared<ComputeGraph>("root_graph"); | ||
| 223 | + auto while_op_desc = CreateOpDesc("while", WHILE, 2, 2); | ||
| 224 | + auto while_node = root_graph->AddNode(while_op_desc); | ||
| 225 | + while_op_desc->AddSubgraphName("cond"); | ||
| 226 | + while_op_desc->SetSubgraphInstanceName(0, "cond"); | ||
| 227 | + while_op_desc->AddSubgraphName("body"); | ||
| 228 | + while_op_desc->SetSubgraphInstanceName(1, "body"); | ||
| 229 | + | ||
| 230 | + auto cond_graph = std::make_shared<ComputeGraph>("cond"); | ||
| 231 | + cond_graph->SetParentGraph(root_graph); | ||
| 232 | + cond_graph->SetParentNode(while_node); | ||
| 233 | + root_graph->AddSubGraph(cond_graph); | ||
| 234 | + | ||
| 235 | + auto body_graph = std::make_shared<ComputeGraph>("body"); | ||
| 236 | + auto body_data1_op_desc = CreateOpDesc("body_data1", DATA, 1, 1); | ||
| 237 | + auto body_data1_node = body_graph->AddNode(body_data1_op_desc); | ||
| 238 | + AttrUtils::SetInt(body_data1_op_desc, ATTR_NAME_PARENT_NODE_INDEX, 0); | ||
| 239 | + | ||
| 240 | + auto body_data2_op_desc = CreateOpDesc("body_data2", DATA, 1, 1); | ||
| 241 | + auto body_data2_node = body_graph->AddNode(body_data2_op_desc); | ||
| 242 | + AttrUtils::SetInt(body_data2_op_desc, ATTR_NAME_PARENT_NODE_INDEX, 1); | ||
| 243 | + | ||
| 244 | + auto body_netoutput_op_desc = CreateOpDesc("body_netoutput", NETOUTPUT, 2, 0); | ||
| 245 | + auto body_netoutput_node = body_graph->AddNode(body_netoutput_op_desc); | ||
| 246 | + AttrUtils::SetInt(body_netoutput_op_desc->MutableInputDesc(0), ATTR_NAME_PARENT_NODE_INDEX, 0); | ||
| 247 | + AttrUtils::SetInt(body_netoutput_op_desc->MutableInputDesc(1), ATTR_NAME_PARENT_NODE_INDEX, 1); | ||
| 248 | + | ||
| 249 | + GraphUtils::AddEdge(body_data1_node->GetOutDataAnchor(0), body_netoutput_node->GetInDataAnchor(0)); | ||
| 250 | + | ||
| 251 | + body_graph->SetParentGraph(root_graph); | ||
| 252 | + body_graph->SetParentNode(while_node); | ||
| 253 | + root_graph->AddSubGraph(body_graph); | ||
| 254 | + | ||
| 255 | + RefRelations ref; | ||
| 256 | + EXPECT_EQ(ref.BuildRefRelations(*root_graph.get()), ge::SUCCESS); | ||
| 257 | +} | ||
| 258 | + | ||
| 259 | +TEST_F(UtestRefRelation, IncCov_BuildRefRelations_NetOutputNoInputDesc) { | ||
| 260 | + ComputeGraphPtr root_graph = std::make_shared<ComputeGraph>("root_graph"); | ||
| 261 | + auto if_op_desc = CreateOpDesc("if", "If", 1, 1); | ||
| 262 | + auto if_node = root_graph->AddNode(if_op_desc); | ||
| 263 | + if_op_desc->AddSubgraphName("sub1"); | ||
| 264 | + if_op_desc->SetSubgraphInstanceName(0, "sub1"); | ||
| 265 | + | ||
| 266 | + auto sub_graph = std::make_shared<ComputeGraph>("sub1"); | ||
| 267 | + auto data1_op_desc = CreateOpDesc("sub1_data1", DATA, 1, 1); | ||
| 268 | + auto data1_node = sub_graph->AddNode(data1_op_desc); | ||
| 269 | + AttrUtils::SetInt(data1_op_desc, ATTR_NAME_PARENT_NODE_INDEX, 0); | ||
| 270 | + | ||
| 271 | + auto netoutput_op_desc = CreateOpDesc("sub1_netoutput", NETOUTPUT, 1, 1); | ||
| 272 | + auto netoutput_node = sub_graph->AddNode(netoutput_op_desc); | ||
| 273 | + | ||
| 274 | + GraphUtils::AddEdge(data1_node->GetOutDataAnchor(0), netoutput_node->GetInDataAnchor(0)); | ||
| 275 | + sub_graph->SetParentGraph(root_graph); | ||
| 276 | + sub_graph->SetParentNode(if_node); | ||
| 277 | + root_graph->AddSubGraph(sub_graph); | ||
| 278 | + | ||
| 279 | + RefRelations ref; | ||
| 280 | + EXPECT_NE(ref.BuildRefRelations(*root_graph.get()), ge::SUCCESS); | ||
| 281 | +} | ||
| 282 | + | ||
| 283 | +TEST_F(UtestRefRelation, IncCov_BuildRefRelations_WhileSizeMismatch) { | ||
| 284 | + ComputeGraphPtr root_graph = std::make_shared<ComputeGraph>("root_graph"); | ||
| 285 | + auto while_op_desc = CreateOpDesc("while", WHILE, 2, 1); | ||
| 286 | + auto while_node = root_graph->AddNode(while_op_desc); | ||
| 287 | + while_op_desc->AddSubgraphName("cond"); | ||
| 288 | + while_op_desc->SetSubgraphInstanceName(0, "cond"); | ||
| 289 | + while_op_desc->AddSubgraphName("body"); | ||
| 290 | + while_op_desc->SetSubgraphInstanceName(1, "body"); | ||
| 291 | + | ||
| 292 | + auto cond_graph = std::make_shared<ComputeGraph>("cond"); | ||
| 293 | + cond_graph->SetParentGraph(root_graph); | ||
| 294 | + cond_graph->SetParentNode(while_node); | ||
| 295 | + root_graph->AddSubGraph(cond_graph); | ||
| 296 | + | ||
| 297 | + auto body_graph = std::make_shared<ComputeGraph>("body"); | ||
| 298 | + auto body_data_op_desc = CreateOpDesc("body_data", DATA, 1, 1); | ||
| 299 | + auto body_data_node = body_graph->AddNode(body_data_op_desc); | ||
| 300 | + AttrUtils::SetInt(body_data_op_desc, ATTR_NAME_PARENT_NODE_INDEX, 0); | ||
| 301 | + | ||
| 302 | + auto body_netoutput_op_desc = CreateOpDesc("body_netoutput", NETOUTPUT, 1, 0); | ||
| 303 | + auto body_netoutput_node = body_graph->AddNode(body_netoutput_op_desc); | ||
| 304 | + AttrUtils::SetInt(body_netoutput_op_desc->MutableInputDesc(0), ATTR_NAME_PARENT_NODE_INDEX, 0); | ||
| 305 | + | ||
| 306 | + GraphUtils::AddEdge(body_data_node->GetOutDataAnchor(0), body_netoutput_node->GetInDataAnchor(0)); | ||
| 307 | + body_graph->SetParentGraph(root_graph); | ||
| 308 | + body_graph->SetParentNode(while_node); | ||
| 309 | + root_graph->AddSubGraph(body_graph); | ||
| 310 | + | ||
| 311 | + RefRelations ref; | ||
| 312 | + EXPECT_NE(ref.BuildRefRelations(*root_graph.get()), ge::SUCCESS); | ||
| 313 | +} | ||
| 194 | } // namespace ge | 314 | } // namespace ge |
| @@ -952,4 +952,442 @@ TEST_F(UtestShapeRefinerIncCov, IncCov2_UpdateInputOutputDesc_WithShapeRange) { | |||
| 952 | auto ret = ShapeRefiner::UpdateInputOutputDesc(node); | 952 | auto ret = ShapeRefiner::UpdateInputOutputDesc(node); |
| 953 | EXPECT_EQ(ret, GRAPH_SUCCESS); | 953 | EXPECT_EQ(ret, GRAPH_SUCCESS); |
| 954 | } | 954 | } |
| 955 | + | ||
| 956 | +TEST_F(UtestShapeRefinerIncCov, IncCov2_InferShapeAndType_SubgraphNotFound_BeforeSubgraph) { | ||
| 957 | + auto root_graph = std::make_shared<ComputeGraph>("test_subgraph_notfound_bs"); | ||
| 958 | + NodePtr if_node = CreateNodeIncCov2(root_graph, "if_nf_bs", "If", 1, 1); | ||
| 959 | + auto op_desc = if_node->GetOpDesc(); | ||
| 960 | + op_desc->AddSubgraphName("sub1"); | ||
| 961 | + op_desc->SetSubgraphInstanceName(0, "nonexist_sub_bs"); | ||
| 962 | + | ||
| 963 | + GeTensorDesc if_input_desc(GeShape({1}), FORMAT_NCHW, DT_FLOAT); | ||
| 964 | + (void)if_node->GetOpDesc()->UpdateInputDesc(0, if_input_desc); | ||
| 965 | + GeTensorDesc if_output_desc(GeShape({1}), FORMAT_NCHW, DT_FLOAT); | ||
| 966 | + (void)if_node->GetOpDesc()->UpdateOutputDesc(0, if_output_desc); | ||
| 967 | + | ||
| 968 | + auto ret = ShapeRefiner::InferShapeAndType(if_node, true); | ||
| 969 | + EXPECT_NE(ret, GRAPH_SUCCESS); | ||
| 970 | +} | ||
| 971 | + | ||
| 972 | +TEST_F(UtestShapeRefinerIncCov, IncCov2_InferShapeAndType_SubgraphDataNoParentIndex_BeforeSubgraph) { | ||
| 973 | + auto root_graph = std::make_shared<ComputeGraph>("test_no_parent_idx_bs"); | ||
| 974 | + NodePtr if_node = CreateNodeIncCov2(root_graph, "if_no_pi_bs", "If", 1, 1); | ||
| 975 | + auto op_desc = if_node->GetOpDesc(); | ||
| 976 | + op_desc->AddSubgraphName("sub1"); | ||
| 977 | + op_desc->SetSubgraphInstanceName(0, "sub1"); | ||
| 978 | + | ||
| 979 | + auto sub1 = std::make_shared<ComputeGraph>("sub1_no_pi_bs"); | ||
| 980 | + NodePtr data1 = CreateNodeIncCov2(sub1, "data1_no_pi_bs", "Data", 1, 1); | ||
| 981 | + NodePtr netoutput1 = CreateNodeIncCov2(sub1, "netoutput1_no_pi_bs", "NetOutput", 1, 0); | ||
| 982 | + GraphUtils::AddEdge(data1->GetOutDataAnchor(0), netoutput1->GetInDataAnchor(0)); | ||
| 983 | + sub1->SetParentNode(if_node); | ||
| 984 | + sub1->SetParentGraph(root_graph); | ||
| 985 | + root_graph->AddSubgraph("sub1", sub1); | ||
| 986 | + | ||
| 987 | + GeTensorDesc if_input_desc(GeShape({1}), FORMAT_NCHW, DT_FLOAT); | ||
| 988 | + (void)if_node->GetOpDesc()->UpdateInputDesc(0, if_input_desc); | ||
| 989 | + GeTensorDesc if_output_desc(GeShape({1}), FORMAT_NCHW, DT_FLOAT); | ||
| 990 | + (void)if_node->GetOpDesc()->UpdateOutputDesc(0, if_output_desc); | ||
| 991 | + | ||
| 992 | + auto ret = ShapeRefiner::InferShapeAndType(if_node, true); | ||
| 993 | + EXPECT_NE(ret, GRAPH_SUCCESS); | ||
| 994 | +} | ||
| 995 | + | ||
| 996 | +TEST_F(UtestShapeRefinerIncCov, IncCov2_InferShapeAndType_SubgraphDataRefOutOfRange_BeforeSubgraph) { | ||
| 997 | + auto root_graph = std::make_shared<ComputeGraph>("test_data_ref_oor_bs"); | ||
| 998 | + NodePtr if_node = CreateNodeIncCov2(root_graph, "if_oor_bs", "If", 1, 1); | ||
| 999 | + auto op_desc = if_node->GetOpDesc(); | ||
| 1000 | + op_desc->AddSubgraphName("sub1"); | ||
| 1001 | + op_desc->SetSubgraphInstanceName(0, "sub1"); | ||
| 1002 | + | ||
| 1003 | + auto sub1 = std::make_shared<ComputeGraph>("sub1_oor_bs"); | ||
| 1004 | + NodePtr data1 = CreateNodeIncCov2(sub1, "data1_oor_bs", "Data", 1, 1); | ||
| 1005 | + AttrUtils::SetInt(data1->GetOpDesc(), ATTR_NAME_PARENT_NODE_INDEX, 5); | ||
| 1006 | + NodePtr netoutput1 = CreateNodeIncCov2(sub1, "netoutput1_oor_bs", "NetOutput", 1, 0); | ||
| 1007 | + | ||
| 1008 | + GeTensorDesc out_desc1(GeShape({2, 3}), FORMAT_NCHW, DT_FLOAT); | ||
| 1009 | + (void)data1->GetOpDesc()->UpdateOutputDesc(0, out_desc1); | ||
| 1010 | + AttrUtils::SetInt(netoutput1->GetOpDesc()->MutableInputDesc(0), ATTR_NAME_PARENT_NODE_INDEX, 0); | ||
| 1011 | + (void)netoutput1->GetOpDesc()->UpdateInputDesc(0, out_desc1); | ||
| 1012 | + GraphUtils::AddEdge(data1->GetOutDataAnchor(0), netoutput1->GetInDataAnchor(0)); | ||
| 1013 | + | ||
| 1014 | + sub1->SetParentNode(if_node); | ||
| 1015 | + sub1->SetParentGraph(root_graph); | ||
| 1016 | + root_graph->AddSubgraph("sub1", sub1); | ||
| 1017 | + | ||
| 1018 | + GeTensorDesc if_input_desc(GeShape({1}), FORMAT_NCHW, DT_FLOAT); | ||
| 1019 | + (void)if_node->GetOpDesc()->UpdateInputDesc(0, if_input_desc); | ||
| 1020 | + GeTensorDesc if_output_desc(GeShape({1}), FORMAT_NCHW, DT_FLOAT); | ||
| 1021 | + (void)if_node->GetOpDesc()->UpdateOutputDesc(0, if_output_desc); | ||
| 1022 | + | ||
| 1023 | + auto ret = ShapeRefiner::InferShapeAndType(if_node, true); | ||
| 1024 | + EXPECT_NE(ret, GRAPH_SUCCESS); | ||
| 1025 | +} | ||
| 1026 | + | ||
| 1027 | +TEST_F(UtestShapeRefinerIncCov, IncCov2_InferShapeAndType_SubgraphDataWithMBatchOrigin) { | ||
| 1028 | + auto root_graph = std::make_shared<ComputeGraph>("test_mbatch_origin"); | ||
| 1029 | + NodePtr if_node = CreateNodeIncCov2(root_graph, "if_mbatch", "If", 1, 1); | ||
| 1030 | + auto op_desc = if_node->GetOpDesc(); | ||
| 1031 | + op_desc->AddSubgraphName("sub1"); | ||
| 1032 | + op_desc->SetSubgraphInstanceName(0, "sub1"); | ||
| 1033 | + | ||
| 1034 | + auto sub1 = std::make_shared<ComputeGraph>("sub1_mbatch"); | ||
| 1035 | + NodePtr data1 = CreateNodeIncCov2(sub1, "data1_mbatch", "Data", 1, 1); | ||
| 1036 | + AttrUtils::SetInt(data1->GetOpDesc(), ATTR_NAME_PARENT_NODE_INDEX, 0); | ||
| 1037 | + AttrUtils::SetStr(data1->GetOpDesc(), ATTR_MBATCH_ORIGIN_INPUT_DIMS, "1,3,224,224"); | ||
| 1038 | + NodePtr netoutput1 = CreateNodeIncCov2(sub1, "netoutput1_mbatch", "NetOutput", 1, 0); | ||
| 1039 | + | ||
| 1040 | + GeTensorDesc out_desc1(GeShape({2, 3}), FORMAT_NCHW, DT_FLOAT); | ||
| 1041 | + (void)data1->GetOpDesc()->UpdateOutputDesc(0, out_desc1); | ||
| 1042 | + AttrUtils::SetInt(netoutput1->GetOpDesc()->MutableInputDesc(0), ATTR_NAME_PARENT_NODE_INDEX, 0); | ||
| 1043 | + (void)netoutput1->GetOpDesc()->UpdateInputDesc(0, out_desc1); | ||
| 1044 | + GraphUtils::AddEdge(data1->GetOutDataAnchor(0), netoutput1->GetInDataAnchor(0)); | ||
| 1045 | + | ||
| 1046 | + sub1->SetParentNode(if_node); | ||
| 1047 | + sub1->SetParentGraph(root_graph); | ||
| 1048 | + root_graph->AddSubgraph("sub1", sub1); | ||
| 1049 | + | ||
| 1050 | + GeTensorDesc if_input_desc(GeShape({1}), FORMAT_NCHW, DT_FLOAT); | ||
| 1051 | + (void)if_node->GetOpDesc()->UpdateInputDesc(0, if_input_desc); | ||
| 1052 | + GeTensorDesc if_output_desc(GeShape({2, 3}), FORMAT_NCHW, DT_FLOAT); | ||
| 1053 | + (void)if_node->GetOpDesc()->UpdateOutputDesc(0, if_output_desc); | ||
| 1054 | + | ||
| 1055 | + Operator op = OpDescUtils::CreateOperatorFromNode(if_node); | ||
| 1056 | + auto ret = ShapeRefiner::InferShapeAndType(if_node, op, true); | ||
| 1057 | + SUCCEED(); | ||
| 1058 | +} | ||
| 1059 | + | ||
| 1060 | +TEST_F(UtestShapeRefinerIncCov, IncCov2_InferShapeAndType_NetOutputRefOutOfRange) { | ||
| 1061 | + auto root_graph = std::make_shared<ComputeGraph>("test_netoutput_ref_oor"); | ||
| 1062 | + NodePtr if_node = CreateNodeIncCov2(root_graph, "if_net_oor", "If", 1, 1); | ||
| 1063 | + auto op_desc = if_node->GetOpDesc(); | ||
| 1064 | + op_desc->AddSubgraphName("sub1"); | ||
| 1065 | + op_desc->SetSubgraphInstanceName(0, "sub1"); | ||
| 1066 | + | ||
| 1067 | + auto sub1 = std::make_shared<ComputeGraph>("sub1_net_oor"); | ||
| 1068 | + NodePtr data1 = CreateNodeIncCov2(sub1, "data1_net_oor", "Data", 1, 1); | ||
| 1069 | + AttrUtils::SetInt(data1->GetOpDesc(), ATTR_NAME_PARENT_NODE_INDEX, 0); | ||
| 1070 | + NodePtr netoutput1 = CreateNodeIncCov2(sub1, "netoutput1_net_oor", "NetOutput", 1, 0); | ||
| 1071 | + | ||
| 1072 | + GeTensorDesc out_desc1(GeShape({2, 3}), FORMAT_NCHW, DT_FLOAT); | ||
| 1073 | + (void)data1->GetOpDesc()->UpdateOutputDesc(0, out_desc1); | ||
| 1074 | + AttrUtils::SetInt(netoutput1->GetOpDesc()->MutableInputDesc(0), ATTR_NAME_PARENT_NODE_INDEX, 5); | ||
| 1075 | + (void)netoutput1->GetOpDesc()->UpdateInputDesc(0, out_desc1); | ||
| 1076 | + GraphUtils::AddEdge(data1->GetOutDataAnchor(0), netoutput1->GetInDataAnchor(0)); | ||
| 1077 | + | ||
| 1078 | + sub1->SetParentNode(if_node); | ||
| 1079 | + sub1->SetParentGraph(root_graph); | ||
| 1080 | + root_graph->AddSubgraph("sub1", sub1); | ||
| 1081 | + | ||
| 1082 | + GeTensorDesc if_input_desc(GeShape({1}), FORMAT_NCHW, DT_FLOAT); | ||
| 1083 | + (void)if_node->GetOpDesc()->UpdateInputDesc(0, if_input_desc); | ||
| 1084 | + GeTensorDesc if_output_desc(GeShape({1}), FORMAT_NCHW, DT_FLOAT); | ||
| 1085 | + (void)if_node->GetOpDesc()->UpdateOutputDesc(0, if_output_desc); | ||
| 1086 | + | ||
| 1087 | + Operator op = OpDescUtils::CreateOperatorFromNode(if_node); | ||
| 1088 | + auto ret = ShapeRefiner::InferShapeAndType(if_node, op, false); | ||
| 1089 | + EXPECT_EQ(ret, GRAPH_SUCCESS); | ||
| 1090 | +} | ||
| 1091 | + | ||
| 1092 | +TEST_F(UtestShapeRefinerIncCov, IncCov2_InferShapeAndType_FindSubgraphDataNoParentIndex) { | ||
| 1093 | + auto root_graph = std::make_shared<ComputeGraph>("test_find_data_no_pi"); | ||
| 1094 | + NodePtr if_node = CreateNodeIncCov2(root_graph, "if_fdpi", "If", 1, 1); | ||
| 1095 | + auto op_desc = if_node->GetOpDesc(); | ||
| 1096 | + op_desc->AddSubgraphName("sub1"); | ||
| 1097 | + op_desc->SetSubgraphInstanceName(0, "sub1"); | ||
| 1098 | + | ||
| 1099 | + auto sub1 = std::make_shared<ComputeGraph>("sub1_fdpi"); | ||
| 1100 | + NodePtr data1 = CreateNodeIncCov2(sub1, "data1_fdpi", "Data", 1, 1); | ||
| 1101 | + NodePtr netoutput1 = CreateNodeIncCov2(sub1, "netoutput1_fdpi", "NetOutput", 1, 0); | ||
| 1102 | + GraphUtils::AddEdge(data1->GetOutDataAnchor(0), netoutput1->GetInDataAnchor(0)); | ||
| 1103 | + sub1->SetParentNode(if_node); | ||
| 1104 | + sub1->SetParentGraph(root_graph); | ||
| 1105 | + root_graph->AddSubgraph("sub1", sub1); | ||
| 1106 | + | ||
| 1107 | + GeTensorDesc if_input_desc(GeShape({1}), FORMAT_NCHW, DT_FLOAT); | ||
| 1108 | + (void)if_node->GetOpDesc()->UpdateInputDesc(0, if_input_desc); | ||
| 1109 | + GeTensorDesc if_output_desc(GeShape({1}), FORMAT_NCHW, DT_FLOAT); | ||
| 1110 | + (void)if_node->GetOpDesc()->UpdateOutputDesc(0, if_output_desc); | ||
| 1111 | + | ||
| 1112 | + Operator op = OpDescUtils::CreateOperatorFromNode(if_node); | ||
| 1113 | + auto ret = ShapeRefiner::InferShapeAndType(if_node, op, false); | ||
| 1114 | + EXPECT_EQ(ret, GRAPH_FAILED); | ||
| 1115 | +} | ||
| 1116 | + | ||
| 1117 | +TEST_F(UtestShapeRefinerIncCov, IncCov2_InferShapeAndType_MultiBatchDiffDtypeBranch) { | ||
| 1118 | + auto root_graph = std::make_shared<ComputeGraph>("test_mb_diff_dt_branch"); | ||
| 1119 | + NodePtr if_node = CreateNodeIncCov2(root_graph, "if_mb_dt_br", "If", 1, 1); | ||
| 1120 | + auto op_desc = if_node->GetOpDesc(); | ||
| 1121 | + op_desc->AddSubgraphName("sub1"); | ||
| 1122 | + op_desc->SetSubgraphInstanceName(0, "sub1"); | ||
| 1123 | + | ||
| 1124 | + auto sub1 = std::make_shared<ComputeGraph>("sub1_mb_dt_br"); | ||
| 1125 | + NodePtr data1 = CreateNodeIncCov2(sub1, "data1_mb_dt_br", "Data", 1, 1); | ||
| 1126 | + AttrUtils::SetInt(data1->GetOpDesc(), ATTR_NAME_PARENT_NODE_INDEX, 0); | ||
| 1127 | + NodePtr netoutput1 = CreateNodeIncCov2(sub1, "netoutput1_mb_dt_br", "NetOutput", 1, 0); | ||
| 1128 | + | ||
| 1129 | + GeTensorDesc out_desc1(GeShape({2, 3}), FORMAT_NCHW, DT_FLOAT); | ||
| 1130 | + (void)data1->GetOpDesc()->UpdateOutputDesc(0, out_desc1); | ||
| 1131 | + | ||
| 1132 | + GeTensorDesc netinput_desc1(GeShape({2, 3}), FORMAT_NCHW, DT_INT32); | ||
| 1133 | + AttrUtils::SetInt(netoutput1->GetOpDesc()->MutableInputDesc(0), ATTR_NAME_PARENT_NODE_INDEX, 0); | ||
| 1134 | + (void)netoutput1->GetOpDesc()->UpdateInputDesc(0, netinput_desc1); | ||
| 1135 | + | ||
| 1136 | + GraphUtils::AddEdge(data1->GetOutDataAnchor(0), netoutput1->GetInDataAnchor(0)); | ||
| 1137 | + | ||
| 1138 | + sub1->SetParentNode(if_node); | ||
| 1139 | + sub1->SetParentGraph(root_graph); | ||
| 1140 | + root_graph->AddSubgraph("sub1", sub1); | ||
| 1141 | + | ||
| 1142 | + GeTensorDesc if_input_desc(GeShape({1}), FORMAT_NCHW, DT_FLOAT); | ||
| 1143 | + (void)if_node->GetOpDesc()->UpdateInputDesc(0, if_input_desc); | ||
| 1144 | + GeTensorDesc if_output_desc(GeShape({2, 3}), FORMAT_NCHW, DT_FLOAT); | ||
| 1145 | + (void)if_node->GetOpDesc()->UpdateOutputDesc(0, if_output_desc); | ||
| 1146 | + | ||
| 1147 | + Operator op = OpDescUtils::CreateOperatorFromNode(if_node); | ||
| 1148 | + auto ret = ShapeRefiner::InferShapeAndType(if_node, op, false); | ||
| 1149 | + EXPECT_EQ(ret, GRAPH_SUCCESS); | ||
| 1150 | +} | ||
| 1151 | + | ||
| 1152 | +TEST_F(UtestShapeRefinerIncCov, IncCov2_InferShapeAndType_WhileInferAgain) { | ||
| 1153 | + auto root_graph = std::make_shared<ComputeGraph>("test_while_infer_again"); | ||
| 1154 | + NodePtr while_node = CreateNodeIncCov2(root_graph, "while_ia", "While", 1, 1); | ||
| 1155 | + auto op_desc = while_node->GetOpDesc(); | ||
| 1156 | + op_desc->AddSubgraphName("sub1"); | ||
| 1157 | + op_desc->SetSubgraphInstanceName(0, "sub1"); | ||
| 1158 | + op_desc->AddSubgraphName("sub2"); | ||
| 1159 | + op_desc->SetSubgraphInstanceName(1, "sub2"); | ||
| 1160 | + | ||
| 1161 | + auto sub1 = std::make_shared<ComputeGraph>("sub1_ia"); | ||
| 1162 | + NodePtr data1 = CreateNodeIncCov2(sub1, "data1_ia", "Data", 1, 1); | ||
| 1163 | + AttrUtils::SetInt(data1->GetOpDesc(), ATTR_NAME_PARENT_NODE_INDEX, 0); | ||
| 1164 | + NodePtr netoutput1 = CreateNodeIncCov2(sub1, "netoutput1_ia", "NetOutput", 1, 0); | ||
| 1165 | + | ||
| 1166 | + GeTensorDesc out_desc1(GeShape({2, 3}), FORMAT_NCHW, DT_FLOAT); | ||
| 1167 | + (void)data1->GetOpDesc()->UpdateOutputDesc(0, out_desc1); | ||
| 1168 | + GeTensorDesc netinput_desc1(GeShape({2, 4}), FORMAT_NCHW, DT_FLOAT); | ||
| 1169 | + AttrUtils::SetInt(netoutput1->GetOpDesc()->MutableInputDesc(0), ATTR_NAME_PARENT_NODE_INDEX, 0); | ||
| 1170 | + (void)netoutput1->GetOpDesc()->UpdateInputDesc(0, netinput_desc1); | ||
| 1171 | + GraphUtils::AddEdge(data1->GetOutDataAnchor(0), netoutput1->GetInDataAnchor(0)); | ||
| 1172 | + sub1->SetParentNode(while_node); | ||
| 1173 | + sub1->SetParentGraph(root_graph); | ||
| 1174 | + root_graph->AddSubgraph("sub1", sub1); | ||
| 1175 | + | ||
| 1176 | + auto sub2 = std::make_shared<ComputeGraph>("sub2_ia"); | ||
| 1177 | + NodePtr data2 = CreateNodeIncCov2(sub2, "data2_ia", "Data", 1, 1); | ||
| 1178 | + AttrUtils::SetInt(data2->GetOpDesc(), ATTR_NAME_PARENT_NODE_INDEX, 0); | ||
| 1179 | + NodePtr netoutput2 = CreateNodeIncCov2(sub2, "netoutput2_ia", "NetOutput", 1, 0); | ||
| 1180 | + | ||
| 1181 | + GeTensorDesc out_desc2(GeShape({2, 3}), FORMAT_NCHW, DT_FLOAT); | ||
| 1182 | + (void)data2->GetOpDesc()->UpdateOutputDesc(0, out_desc2); | ||
| 1183 | + GeTensorDesc netinput_desc2(GeShape({2, 4}), FORMAT_NCHW, DT_FLOAT); | ||
| 1184 | + AttrUtils::SetInt(netoutput2->GetOpDesc()->MutableInputDesc(0), ATTR_NAME_PARENT_NODE_INDEX, 0); | ||
| 1185 | + (void)netoutput2->GetOpDesc()->UpdateInputDesc(0, netinput_desc2); | ||
| 1186 | + GraphUtils::AddEdge(data2->GetOutDataAnchor(0), netoutput2->GetInDataAnchor(0)); | ||
| 1187 | + sub2->SetParentNode(while_node); | ||
| 1188 | + sub2->SetParentGraph(root_graph); | ||
| 1189 | + root_graph->AddSubgraph("sub2", sub2); | ||
| 1190 | + | ||
| 1191 | + GeTensorDesc while_input_desc(GeShape({2, 3}), FORMAT_NCHW, DT_FLOAT); | ||
| 1192 | + (void)while_node->GetOpDesc()->UpdateInputDesc(0, while_input_desc); | ||
| 1193 | + GeTensorDesc while_output_desc(GeShape({2, 4}), FORMAT_NCHW, DT_FLOAT); | ||
| 1194 | + (void)while_node->GetOpDesc()->UpdateOutputDesc(0, while_output_desc); | ||
| 1195 | + | ||
| 1196 | + Operator op = OpDescUtils::CreateOperatorFromNode(while_node); | ||
| 1197 | + auto ret = ShapeRefiner::InferShapeAndType(while_node, op, false); | ||
| 1198 | + SUCCEED(); | ||
| 1199 | +} | ||
| 1200 | + | ||
| 1201 | +TEST_F(UtestShapeRefinerIncCov, IncCov2_InferShapeAndType_WhileDiffDimNumInferAgain) { | ||
| 1202 | + auto root_graph = std::make_shared<ComputeGraph>("test_while_diff_dn_ia"); | ||
| 1203 | + NodePtr while_node = CreateNodeIncCov2(root_graph, "while_dn_ia", "While", 1, 1); | ||
| 1204 | + auto op_desc = while_node->GetOpDesc(); | ||
| 1205 | + op_desc->AddSubgraphName("sub1"); | ||
| 1206 | + op_desc->SetSubgraphInstanceName(0, "sub1"); | ||
| 1207 | + op_desc->AddSubgraphName("sub2"); | ||
| 1208 | + op_desc->SetSubgraphInstanceName(1, "sub2"); | ||
| 1209 | + | ||
| 1210 | + auto sub1 = std::make_shared<ComputeGraph>("sub1_dn_ia"); | ||
| 1211 | + NodePtr data1 = CreateNodeIncCov2(sub1, "data1_dn_ia", "Data", 1, 1); | ||
| 1212 | + AttrUtils::SetInt(data1->GetOpDesc(), ATTR_NAME_PARENT_NODE_INDEX, 0); | ||
| 1213 | + NodePtr netoutput1 = CreateNodeIncCov2(sub1, "netoutput1_dn_ia", "NetOutput", 1, 0); | ||
| 1214 | + | ||
| 1215 | + GeTensorDesc out_desc1(GeShape({2, 3}), FORMAT_NCHW, DT_FLOAT); | ||
| 1216 | + (void)data1->GetOpDesc()->UpdateOutputDesc(0, out_desc1); | ||
| 1217 | + GeTensorDesc netinput_desc1(GeShape({2, 3, 4}), FORMAT_NCHW, DT_FLOAT); | ||
| 1218 | + AttrUtils::SetInt(netoutput1->GetOpDesc()->MutableInputDesc(0), ATTR_NAME_PARENT_NODE_INDEX, 0); | ||
| 1219 | + (void)netoutput1->GetOpDesc()->UpdateInputDesc(0, netinput_desc1); | ||
| 1220 | + GraphUtils::AddEdge(data1->GetOutDataAnchor(0), netoutput1->GetInDataAnchor(0)); | ||
| 1221 | + sub1->SetParentNode(while_node); | ||
| 1222 | + sub1->SetParentGraph(root_graph); | ||
| 1223 | + root_graph->AddSubgraph("sub1", sub1); | ||
| 1224 | + | ||
| 1225 | + auto sub2 = std::make_shared<ComputeGraph>("sub2_dn_ia"); | ||
| 1226 | + NodePtr data2 = CreateNodeIncCov2(sub2, "data2_dn_ia", "Data", 1, 1); | ||
| 1227 | + AttrUtils::SetInt(data2->GetOpDesc(), ATTR_NAME_PARENT_NODE_INDEX, 0); | ||
| 1228 | + NodePtr netoutput2 = CreateNodeIncCov2(sub2, "netoutput2_dn_ia", "NetOutput", 1, 0); | ||
| 1229 | + | ||
| 1230 | + GeTensorDesc out_desc2(GeShape({2, 3}), FORMAT_NCHW, DT_FLOAT); | ||
| 1231 | + (void)data2->GetOpDesc()->UpdateOutputDesc(0, out_desc2); | ||
| 1232 | + GeTensorDesc netinput_desc2(GeShape({2, 3, 4}), FORMAT_NCHW, DT_FLOAT); | ||
| 1233 | + AttrUtils::SetInt(netoutput2->GetOpDesc()->MutableInputDesc(0), ATTR_NAME_PARENT_NODE_INDEX, 0); | ||
| 1234 | + (void)netoutput2->GetOpDesc()->UpdateInputDesc(0, netinput_desc2); | ||
| 1235 | + GraphUtils::AddEdge(data2->GetOutDataAnchor(0), netoutput2->GetInDataAnchor(0)); | ||
| 1236 | + sub2->SetParentNode(while_node); | ||
| 1237 | + sub2->SetParentGraph(root_graph); | ||
| 1238 | + root_graph->AddSubgraph("sub2", sub2); | ||
| 1239 | + | ||
| 1240 | + GeTensorDesc while_input_desc(GeShape({2, 3}), FORMAT_NCHW, DT_FLOAT); | ||
| 1241 | + (void)while_node->GetOpDesc()->UpdateInputDesc(0, while_input_desc); | ||
| 1242 | + GeTensorDesc while_output_desc(GeShape({2, 3, 4}), FORMAT_NCHW, DT_FLOAT); | ||
| 1243 | + (void)while_node->GetOpDesc()->UpdateOutputDesc(0, while_output_desc); | ||
| 1244 | + | ||
| 1245 | + Operator op = OpDescUtils::CreateOperatorFromNode(while_node); | ||
| 1246 | + auto ret = ShapeRefiner::InferShapeAndType(while_node, op, false); | ||
| 1247 | + SUCCEED(); | ||
| 1248 | +} | ||
| 1249 | + | ||
| 1250 | +TEST_F(UtestShapeRefinerIncCov, IncCov2_PostProcessAfterInfershape_WithInferenceContext) { | ||
| 1251 | + auto graph = std::make_shared<ComputeGraph>("test_post_ctx"); | ||
| 1252 | + auto node = CreateNodeIncCov2(graph, "post_ctx_node", "Relu", 1, 1); | ||
| 1253 | + GeTensorDesc input_desc(GeShape({1, 3, 224, 224}), FORMAT_NCHW, DT_FLOAT); | ||
| 1254 | + input_desc.SetOriginFormat(FORMAT_NCHW); | ||
| 1255 | + input_desc.SetOriginDataType(DT_FLOAT); | ||
| 1256 | + (void)node->GetOpDesc()->UpdateInputDesc(0, input_desc); | ||
| 1257 | + (void)node->GetOpDesc()->UpdateOutputDesc(0, input_desc); | ||
| 1258 | + Operator op = OpDescUtils::CreateOperatorFromNode(node); | ||
| 1259 | + auto ctx = std::shared_ptr<InferenceContext>(InferenceContext::Create()); | ||
| 1260 | + op.SetInferenceContext(ctx); | ||
| 1261 | + auto ret = ShapeRefiner::PostProcessAfterInfershape(node, op, false); | ||
| 1262 | + EXPECT_EQ(ret, GRAPH_SUCCESS); | ||
| 1263 | + ShapeRefiner::ClearContextMap(); | ||
| 1264 | +} | ||
| 1265 | + | ||
| 1266 | +TEST_F(UtestShapeRefinerIncCov, IncCov2_InferShapeAndTypeForRunning_GeLocalMemcpyAsync) { | ||
| 1267 | + auto graph = std::make_shared<ComputeGraph>("test_memcpy"); | ||
| 1268 | + auto node = CreateNodeIncCov2(graph, "memcpy_node", "MemcpyAsync", 1, 1); | ||
| 1269 | + | ||
| 1270 | + GeTensorDesc input_desc(GeShape({1, 3, 224, 224}), FORMAT_NCHW, DT_FLOAT); | ||
| 1271 | + input_desc.SetOriginFormat(FORMAT_NCHW); | ||
| 1272 | + input_desc.SetOriginDataType(DT_FLOAT); | ||
| 1273 | + (void)node->GetOpDesc()->UpdateInputDesc(0, input_desc); | ||
| 1274 | + (void)node->GetOpDesc()->UpdateOutputDesc(0, input_desc); | ||
| 1275 | + | ||
| 1276 | + Operator op = OpDescUtils::CreateOperatorFromNode(node); | ||
| 1277 | + auto ret = ShapeRefiner::InferShapeAndTypeForRunning(node, op, true); | ||
| 1278 | + EXPECT_EQ(ret, GRAPH_SUCCESS); | ||
| 1279 | +} | ||
| 1280 | + | ||
| 1281 | +TEST_F(UtestShapeRefinerIncCov, IncCov2_InferShapeAndTypeForRunning_FailedStatus) { | ||
| 1282 | + auto graph = std::make_shared<ComputeGraph>("test_running_failed_status"); | ||
| 1283 | + auto node = CreateNodeIncCov2(graph, "fail_status_node", "Relu", 1, 1); | ||
| 1284 | + | ||
| 1285 | + GeTensorDesc input_desc(GeShape({1, 3, 224, 224}), FORMAT_NCHW, DT_FLOAT); | ||
| 1286 | + input_desc.SetOriginFormat(FORMAT_NCHW); | ||
| 1287 | + input_desc.SetOriginDataType(DT_FLOAT); | ||
| 1288 | + (void)node->GetOpDesc()->UpdateInputDesc(0, input_desc); | ||
| 1289 | + (void)node->GetOpDesc()->UpdateOutputDesc(0, input_desc); | ||
| 1290 | + | ||
| 1291 | + auto op_desc = node->GetOpDesc(); | ||
| 1292 | + op_desc->AddInferFunc([](Operator &op) { return static_cast<graphStatus>(GRAPH_PARAM_INVALID + 1); }); | ||
| 1293 | + | ||
| 1294 | + Operator op = OpDescUtils::CreateOperatorFromNode(node); | ||
| 1295 | + auto ret = ShapeRefiner::InferShapeAndTypeForRunning(node, op, true); | ||
| 1296 | + EXPECT_EQ(ret, GRAPH_FAILED); | ||
| 1297 | +} | ||
| 1298 | + | ||
| 1299 | +TEST_F(UtestShapeRefinerIncCov, IncCov2_InferShapeAndType_BranchEmptyRefOut) { | ||
| 1300 | + auto root_graph = std::make_shared<ComputeGraph>("test_branch_empty_ref"); | ||
| 1301 | + NodePtr if_node = CreateNodeIncCov2(root_graph, "if_empty_ref", "If", 1, 2); | ||
| 1302 | + auto op_desc = if_node->GetOpDesc(); | ||
| 1303 | + op_desc->AddSubgraphName("sub1"); | ||
| 1304 | + op_desc->SetSubgraphInstanceName(0, "sub1"); | ||
| 1305 | + | ||
| 1306 | + auto sub1 = std::make_shared<ComputeGraph>("sub1_empty_ref"); | ||
| 1307 | + NodePtr data1 = CreateNodeIncCov2(sub1, "data1_er", "Data", 1, 1); | ||
| 1308 | + AttrUtils::SetInt(data1->GetOpDesc(), ATTR_NAME_PARENT_NODE_INDEX, 0); | ||
| 1309 | + NodePtr netoutput1 = CreateNodeIncCov2(sub1, "netoutput1_er", "NetOutput", 1, 0); | ||
| 1310 | + | ||
| 1311 | + GeTensorDesc out_desc1(GeShape({2, 3}), FORMAT_NCHW, DT_FLOAT); | ||
| 1312 | + (void)data1->GetOpDesc()->UpdateOutputDesc(0, out_desc1); | ||
| 1313 | + AttrUtils::SetInt(netoutput1->GetOpDesc()->MutableInputDesc(0), ATTR_NAME_PARENT_NODE_INDEX, 0); | ||
| 1314 | + (void)netoutput1->GetOpDesc()->UpdateInputDesc(0, out_desc1); | ||
| 1315 | + GraphUtils::AddEdge(data1->GetOutDataAnchor(0), netoutput1->GetInDataAnchor(0)); | ||
| 1316 | + sub1->SetParentNode(if_node); | ||
| 1317 | + sub1->SetParentGraph(root_graph); | ||
| 1318 | + root_graph->AddSubgraph("sub1", sub1); | ||
| 1319 | + | ||
| 1320 | + GeTensorDesc if_input_desc(GeShape({1}), FORMAT_NCHW, DT_FLOAT); | ||
| 1321 | + (void)if_node->GetOpDesc()->UpdateInputDesc(0, if_input_desc); | ||
| 1322 | + GeTensorDesc if_output_desc(GeShape({2, 3}), FORMAT_NCHW, DT_FLOAT); | ||
| 1323 | + (void)if_node->GetOpDesc()->UpdateOutputDesc(0, if_output_desc); | ||
| 1324 | + (void)if_node->GetOpDesc()->UpdateOutputDesc(1, if_output_desc); | ||
| 1325 | + | ||
| 1326 | + Operator op = OpDescUtils::CreateOperatorFromNode(if_node); | ||
| 1327 | + auto ret = ShapeRefiner::InferShapeAndType(if_node, op, false); | ||
| 1328 | + SUCCEED(); | ||
| 1329 | +} | ||
| 1330 | + | ||
| 1331 | +TEST_F(UtestShapeRefinerIncCov, IncCov2_GetRealInNodesAndIndex_WithDataParent) { | ||
| 1332 | + auto root_graph = std::make_shared<ComputeGraph>("test_get_real_nodes"); | ||
| 1333 | + NodePtr if_node = CreateNodeIncCov2(root_graph, "if_grn", "If", 1, 1); | ||
| 1334 | + auto op_desc = if_node->GetOpDesc(); | ||
| 1335 | + op_desc->AddSubgraphName("sub1"); | ||
| 1336 | + op_desc->SetSubgraphInstanceName(0, "sub1"); | ||
| 1337 | + | ||
| 1338 | + auto sub1 = std::make_shared<ComputeGraph>("sub1_grn"); | ||
| 1339 | + NodePtr data1 = CreateNodeIncCov2(sub1, "data1_grn", "Data", 1, 1); | ||
| 1340 | + AttrUtils::SetInt(data1->GetOpDesc(), ATTR_NAME_PARENT_NODE_INDEX, 0); | ||
| 1341 | + NodePtr netoutput1 = CreateNodeIncCov2(sub1, "netoutput1_grn", "NetOutput", 1, 0); | ||
| 1342 | + | ||
| 1343 | + GeTensorDesc out_desc1(GeShape({2, 3}), FORMAT_NCHW, DT_FLOAT); | ||
| 1344 | + (void)data1->GetOpDesc()->UpdateOutputDesc(0, out_desc1); | ||
| 1345 | + AttrUtils::SetInt(netoutput1->GetOpDesc()->MutableInputDesc(0), ATTR_NAME_PARENT_NODE_INDEX, 0); | ||
| 1346 | + (void)netoutput1->GetOpDesc()->UpdateInputDesc(0, out_desc1); | ||
| 1347 | + GraphUtils::AddEdge(data1->GetOutDataAnchor(0), netoutput1->GetInDataAnchor(0)); | ||
| 1348 | + sub1->SetParentNode(if_node); | ||
| 1349 | + sub1->SetParentGraph(root_graph); | ||
| 1350 | + root_graph->AddSubgraph("sub1", sub1); | ||
| 1351 | + | ||
| 1352 | + GeTensorDesc if_input_desc(GeShape({1}), FORMAT_NCHW, DT_FLOAT); | ||
| 1353 | + (void)if_node->GetOpDesc()->UpdateInputDesc(0, if_input_desc); | ||
| 1354 | + GeTensorDesc if_output_desc(GeShape({2, 3}), FORMAT_NCHW, DT_FLOAT); | ||
| 1355 | + (void)if_node->GetOpDesc()->UpdateOutputDesc(0, if_output_desc); | ||
| 1356 | + | ||
| 1357 | + auto ret = ShapeRefiner::InferShapeAndType(if_node, true); | ||
| 1358 | + SUCCEED(); | ||
| 1359 | +} | ||
| 1360 | + | ||
| 1361 | +TEST_F(UtestShapeRefinerIncCov, IncCov2_InferShapeAndType_CallInferFuncSecond) { | ||
| 1362 | + auto graph = std::make_shared<ComputeGraph>("test_call_infer_second"); | ||
| 1363 | + auto node = CreateNodeIncCov2(graph, "infer_second_node", "Relu", 1, 1); | ||
| 1364 | + auto op_desc = node->GetOpDesc(); | ||
| 1365 | + op_desc->AddInferFunc(nullptr); | ||
| 1366 | + | ||
| 1367 | + GeTensorDesc input_desc(GeShape({1, 3, 224, 224}), FORMAT_NCHW, DT_FLOAT); | ||
| 1368 | + input_desc.SetOriginFormat(FORMAT_NCHW); | ||
| 1369 | + input_desc.SetOriginDataType(DT_FLOAT); | ||
| 1370 | + (void)node->GetOpDesc()->UpdateInputDesc(0, input_desc); | ||
| 1371 | + (void)node->GetOpDesc()->UpdateOutputDesc(0, input_desc); | ||
| 1372 | + | ||
| 1373 | + auto ret = ShapeRefiner::InferShapeAndType(node, true); | ||
| 1374 | + SUCCEED(); | ||
| 1375 | +} | ||
| 1376 | + | ||
| 1377 | +TEST_F(UtestShapeRefinerIncCov, IncCov2_InferShapeAndTypeForRunning_CallInferFuncSecond) { | ||
| 1378 | + auto graph = std::make_shared<ComputeGraph>("test_running_call_second"); | ||
| 1379 | + auto node = CreateNodeIncCov2(graph, "running_second_node", "Relu", 1, 1); | ||
| 1380 | + auto op_desc = node->GetOpDesc(); | ||
| 1381 | + op_desc->AddInferFunc(nullptr); | ||
| 1382 | + | ||
| 1383 | + GeTensorDesc input_desc(GeShape({1, 3, 224, 224}), FORMAT_NCHW, DT_FLOAT); | ||
| 1384 | + input_desc.SetOriginFormat(FORMAT_NCHW); | ||
| 1385 | + input_desc.SetOriginDataType(DT_FLOAT); | ||
| 1386 | + (void)node->GetOpDesc()->UpdateInputDesc(0, input_desc); | ||
| 1387 | + (void)node->GetOpDesc()->UpdateOutputDesc(0, input_desc); | ||
| 1388 | + | ||
| 1389 | + Operator op = OpDescUtils::CreateOperatorFromNode(node); | ||
| 1390 | + auto ret = ShapeRefiner::InferShapeAndTypeForRunning(node, op, true); | ||
| 1391 | + EXPECT_EQ(ret, GRAPH_FAILED); | ||
| 1392 | +} | ||
| 955 | } // namespace ge | 1393 | } // namespace ge |
| @@ -525,4 +525,60 @@ TEST_F(TensorUtilsUT, IncCov_TensorAdapterAllMethods) { | |||
| 525 | auto from_null = TensorAdapter::GeTensor2Tensor(nullptr); | 525 | auto from_null = TensorAdapter::GeTensor2Tensor(nullptr); |
| 526 | EXPECT_EQ(from_null.GetSize(), 0U); | 526 | EXPECT_EQ(from_null.GetSize(), 0U); |
| 527 | } | 527 | } |
| 528 | + | ||
| 529 | +TEST_F(TensorUtilsUT, IncCov_TensorDescSetName) { | ||
| 530 | + TensorDesc desc; | ||
| 531 | + desc.SetName("test_tensor_name"); | ||
| 532 | + EXPECT_EQ(desc.GetName(), "test_tensor_name"); | ||
| 533 | +} | ||
| 534 | + | ||
| 535 | +TEST_F(TensorUtilsUT, IncCov_TensorDescGetNameAscendString) { | ||
| 536 | + TensorDesc desc; | ||
| 537 | + desc.SetName("test_ascend_name"); | ||
| 538 | + AscendString name; | ||
| 539 | + EXPECT_EQ(desc.GetName(name), GRAPH_SUCCESS); | ||
| 540 | + EXPECT_STREQ(name.GetString(), "test_ascend_name"); | ||
| 541 | +} | ||
| 542 | + | ||
| 543 | +TEST_F(TensorUtilsUT, IncCov_TensorSetDataNullCharPtr) { | ||
| 544 | + Tensor tensor; | ||
| 545 | + EXPECT_EQ(tensor.SetData(static_cast<const char_t *>(nullptr)), GRAPH_FAILED); | ||
| 546 | +} | ||
| 547 | + | ||
| 548 | +TEST_F(TensorUtilsUT, IncCov_TensorSetDataNullAscendString) { | ||
| 549 | + Tensor tensor; | ||
| 550 | + AscendString null_str(nullptr); | ||
| 551 | + std::vector<AscendString> datas = {null_str}; | ||
| 552 | + EXPECT_EQ(tensor.SetData(datas), GRAPH_SUCCESS); | ||
| 553 | +} | ||
| 554 | + | ||
| 555 | +TEST_F(TensorUtilsUT, IncCov_TensorSetDataCharPtr) { | ||
| 556 | + Tensor tensor; | ||
| 557 | + EXPECT_EQ(tensor.SetData("hello"), GRAPH_SUCCESS); | ||
| 558 | + EXPECT_EQ(tensor.GetSize(), 22U); | ||
| 559 | +} | ||
| 560 | + | ||
| 561 | +TEST_F(TensorUtilsUT, IncCov_TensorGetData) { | ||
| 562 | + Tensor tensor; | ||
| 563 | + const uint8_t *data = tensor.GetData(); | ||
| 564 | + EXPECT_NE(data, nullptr); | ||
| 565 | +} | ||
| 566 | + | ||
| 567 | +TEST_F(TensorUtilsUT, IncCov_TensorDescSetNameCharPtr) { | ||
| 568 | + TensorDesc desc; | ||
| 569 | + desc.SetName(static_cast<const char_t *>("char_name")); | ||
| 570 | + EXPECT_EQ(desc.GetName(), "char_name"); | ||
| 571 | +} | ||
| 572 | + | ||
| 573 | +TEST_F(TensorUtilsUT, IncCov_TensorDescSetNameNullCharPtr) { | ||
| 574 | + TensorDesc desc; | ||
| 575 | + desc.SetName(static_cast<const char_t *>(nullptr)); | ||
| 576 | + EXPECT_EQ(desc.GetName(), ""); | ||
| 577 | +} | ||
| 578 | + | ||
| 579 | +TEST_F(TensorUtilsUT, IncCov_TensorResetData) { | ||
| 580 | + Tensor tensor; | ||
| 581 | + auto data = tensor.ResetData(); | ||
| 582 | + EXPECT_EQ(data, nullptr); | ||
| 583 | +} | ||
| 528 | } // namespace ge | 584 | } // namespace ge |
| @@ -850,4 +850,42 @@ TEST_F(UtestTuningUtils, CovPrintCheckLogWithNetoutput) { | |||
| 850 | auto result = TuningUtils::PrintCheckLog(); | 850 | auto result = TuningUtils::PrintCheckLog(); |
| 851 | EXPECT_FALSE(result.empty()); | 851 | EXPECT_FALSE(result.empty()); |
| 852 | } | 852 | } |
| 853 | + | ||
| 854 | +TEST_F(UtestTuningUtils, CovGetNodeNameByAnchorNullAnchor) { | ||
| 855 | + auto result = TuningUtils::GetNodeNameByAnchor(nullptr); | ||
| 856 | + EXPECT_EQ(result, "Null"); | ||
| 857 | +} | ||
| 858 | + | ||
| 859 | +TEST_F(UtestTuningUtils, CovGetNodeNameByAnchorValidAnchor) { | ||
| 860 | + ut::GraphBuilder builder = ut::GraphBuilder("graph_anchor"); | ||
| 861 | + auto node = builder.AddNode("test_node", "Relu", 1, 1); | ||
| 862 | + auto anchor = node->GetOutDataAnchor(0); | ||
| 863 | + auto result = TuningUtils::GetNodeNameByAnchor(anchor.get()); | ||
| 864 | + EXPECT_EQ(result, "test_node"); | ||
| 865 | +} | ||
| 866 | + | ||
| 867 | +TEST_F(UtestTuningUtils, CovConvertGraphToFileEmptyVectors) { | ||
| 868 | + std::vector<ComputeGraphPtr> tuning_subgraphs; | ||
| 869 | + std::vector<ComputeGraphPtr> non_tuning_subgraphs; | ||
| 870 | + auto ret = TuningUtils::ConvertGraphToFile(tuning_subgraphs, non_tuning_subgraphs, false); | ||
| 871 | + EXPECT_EQ(ret, GRAPH_SUCCESS); | ||
| 872 | +} | ||
| 873 | + | ||
| 874 | +TEST_F(UtestTuningUtils, CovCreateNetOutputWithGraph) { | ||
| 875 | + ut::GraphBuilder builder = ut::GraphBuilder("graph_create_output"); | ||
| 876 | + auto node0 = builder.AddNode("Data0", "Data", 1, 1); | ||
| 877 | + NodePtr node1; | ||
| 878 | + auto graph = builder.GetGraph(); | ||
| 879 | + TuningUtils::create_output_[graph] = nullptr; | ||
| 880 | + auto ret = TuningUtils::CreateNetOutput(node0, node1); | ||
| 881 | + EXPECT_EQ(ret, SUCCESS); | ||
| 882 | + TuningUtils::create_output_.clear(); | ||
| 883 | +} | ||
| 884 | + | ||
| 885 | +TEST_F(UtestTuningUtils, CovPrintCheckLogEmpty) { | ||
| 886 | + TuningUtils::netoutput_nodes_.clear(); | ||
| 887 | + TuningUtils::data_2_end_.clear(); | ||
| 888 | + auto result = TuningUtils::PrintCheckLog(); | ||
| 889 | + EXPECT_FALSE(result.empty()); | ||
| 890 | +} | ||
| 853 | } // namespace ge | 891 | } // namespace ge |
| @@ -915,4 +915,39 @@ TEST_F(FusionQuantUtilImplCovUT, IncCov_BiasOptimizeByEdge_WithFFN_ND_2DWeight) | |||
| 915 | auto ret = QuantUtil::BiasOptimizeByEdge(mm_node, param, fusion_nodes); | 915 | auto ret = QuantUtil::BiasOptimizeByEdge(mm_node, param, fusion_nodes); |
| 916 | EXPECT_EQ(ret, SUCCESS); | 916 | EXPECT_EQ(ret, SUCCESS); |
| 917 | } | 917 | } |
| 918 | + | ||
| 919 | +TEST_F(FusionQuantUtilImplCovUT, IncCov_BiasOptimizeByEdge_NullParams) { | ||
| 920 | + ComputeGraphPtr graph = CreateSimpleGraphWithAnchors(); | ||
| 921 | + NodePtr mm_node = graph->FindNode("mm"); | ||
| 922 | + BiasOptimizeEdges param; | ||
| 923 | + param.quant_scale = nullptr; | ||
| 924 | + param.quant_offset = nullptr; | ||
| 925 | + param.cube_weight = nullptr; | ||
| 926 | + param.cube_bias = nullptr; | ||
| 927 | + param.deq_scale = nullptr; | ||
| 928 | + vector<NodePtr> fusion_nodes; | ||
| 929 | + auto ret = QuantUtil::BiasOptimizeByEdge(mm_node, param, fusion_nodes); | ||
| 930 | + EXPECT_NE(ret, SUCCESS); | ||
| 931 | +} | ||
| 932 | + | ||
| 933 | +TEST_F(FusionQuantUtilImplCovUT, IncCov_InsertRequantScaleConvert_NullParams) { | ||
| 934 | + InDataAnchorPtr null_anchor; | ||
| 935 | + vector<NodePtr> fusion_nodes; | ||
| 936 | + auto ret = QuantUtil::InsertRequantScaleConvert(null_anchor, null_anchor, null_anchor, fusion_nodes); | ||
| 937 | + EXPECT_NE(ret, SUCCESS); | ||
| 938 | +} | ||
| 939 | + | ||
| 940 | +TEST_F(FusionQuantUtilImplCovUT, IncCov_BiasOptimizeByEdge_WithDeqScaleAndNullCubeBias) { | ||
| 941 | + ComputeGraphPtr graph = CreateSimpleGraphWithAnchors(); | ||
| 942 | + NodePtr mm_node = graph->FindNode("mm"); | ||
| 943 | + BiasOptimizeEdges param; | ||
| 944 | + param.quant_scale = mm_node->GetInDataAnchor(3); | ||
| 945 | + param.quant_offset = mm_node->GetInDataAnchor(4); | ||
| 946 | + param.cube_weight = mm_node->GetInDataAnchor(1); | ||
| 947 | + param.cube_bias = nullptr; | ||
| 948 | + param.deq_scale = mm_node->GetInDataAnchor(3); | ||
| 949 | + vector<NodePtr> fusion_nodes; | ||
| 950 | + auto ret = QuantUtil::BiasOptimizeByEdge(mm_node, param, fusion_nodes); | ||
| 951 | + EXPECT_NE(ret, SUCCESS); | ||
| 952 | +} | ||
| 918 | } // namespace fe | 953 | } // namespace fe |
| @@ -540,4 +540,105 @@ TEST_F(FusionTurboUtilsCovUT, IncCov_FusionTurbo_AddWeights_WithZeroDataSize) { | |||
| 540 | auto nodes = ft.AddWeights(node, {w}); | 540 | auto nodes = ft.AddWeights(node, {w}); |
| 541 | EXPECT_TRUE(nodes.empty()); | 541 | EXPECT_TRUE(nodes.empty()); |
| 542 | } | 542 | } |
| 543 | + | ||
| 544 | +TEST_F(FusionTurboUtilsCovUT, IncCov_FusionTurbo_AddWeights_WithNullData) { | ||
| 545 | + auto graph = std::make_shared<ge::ComputeGraph>("test_addweights_null_data"); | ||
| 546 | + auto op_desc = std::make_shared<ge::OpDesc>("node1_null", "Relu"); | ||
| 547 | + ge::GeTensorDesc tensor_desc(ge::GeShape({1, 4}), ge::FORMAT_NCHW, ge::DT_FLOAT); | ||
| 548 | + op_desc->AddInputDesc(tensor_desc); | ||
| 549 | + op_desc->AddOutputDesc(tensor_desc); | ||
| 550 | + auto node = graph->AddNode(op_desc); | ||
| 551 | + FusionTurbo ft(graph); | ||
| 552 | + WeightInfo w(tensor_desc, nullptr); | ||
| 553 | + auto nodes = ft.AddWeights(node, {w}); | ||
| 554 | + EXPECT_FALSE(nodes.empty()); | ||
| 555 | +} | ||
| 556 | + | ||
| 557 | +TEST_F(FusionTurboUtilsCovUT, IncCov_FusionTurbo_InstNodeBefore_Success) { | ||
| 558 | + auto graph = BuildGraph(); | ||
| 559 | + FusionTurbo ft(graph); | ||
| 560 | + auto add_node = graph->FindNode("add1"); | ||
| 561 | + ASSERT_NE(add_node, nullptr); | ||
| 562 | + auto ret = ft.InsertNodeBefore("inst_before_node", "Relu", add_node, 1, 1); | ||
| 563 | + EXPECT_EQ(ret, nullptr); | ||
| 564 | +} | ||
| 565 | + | ||
| 566 | +TEST_F(FusionTurboUtilsCovUT, IncCov_FusionTurbo_InstNodeAfter_Success) { | ||
| 567 | + auto graph = BuildGraph(); | ||
| 568 | + FusionTurbo ft(graph); | ||
| 569 | + auto add_node = graph->FindNode("add1"); | ||
| 570 | + ASSERT_NE(add_node, nullptr); | ||
| 571 | + auto ret = ft.InsertNodeAfter("inst_after_node", "Relu", add_node, 1, 1); | ||
| 572 | + EXPECT_EQ(ret, nullptr); | ||
| 573 | +} | ||
| 574 | + | ||
| 575 | +TEST_F(FusionTurboUtilsCovUT, IncCov_FusionTurbo_LinkInput_Success) { | ||
| 576 | + auto graph = BuildGraph(); | ||
| 577 | + FusionTurbo ft(graph); | ||
| 578 | + auto add_node = graph->FindNode("add1"); | ||
| 579 | + ASSERT_NE(add_node, nullptr); | ||
| 580 | + auto data_node = graph->FindNode("data1"); | ||
| 581 | + ASSERT_NE(data_node, nullptr); | ||
| 582 | + Relations input_rel(0, NodeIndices{NodeIndex(data_node, 0)}); | ||
| 583 | + auto ret = ft.LinkInput(input_rel, add_node, UPDATE_NONE); | ||
| 584 | + EXPECT_NE(ret, SUCCESS); | ||
| 585 | +} | ||
| 586 | + | ||
| 587 | +TEST_F(FusionTurboUtilsCovUT, IncCov_FusionTurbo_LinkOutput_Success) { | ||
| 588 | + auto graph = BuildGraph(); | ||
| 589 | + FusionTurbo ft(graph); | ||
| 590 | + auto add_node = graph->FindNode("add1"); | ||
| 591 | + ASSERT_NE(add_node, nullptr); | ||
| 592 | + auto output_node = graph->FindNode("output1"); | ||
| 593 | + ASSERT_NE(output_node, nullptr); | ||
| 594 | + Relations output_rel(0, NodeIndices{NodeIndex(output_node, 0)}); | ||
| 595 | + auto ret = ft.LinkOutput(output_rel, add_node, UPDATE_NONE); | ||
| 596 | + EXPECT_EQ(ret, SUCCESS); | ||
| 597 | +} | ||
| 598 | + | ||
| 599 | +TEST_F(FusionTurboUtilsCovUT, IncCov_FusionTurbo_RemoveNode_Success) { | ||
| 600 | + auto graph = BuildGraph(); | ||
| 601 | + FusionTurbo ft(graph); | ||
| 602 | + auto relu_node = graph->FindNode("relu1"); | ||
| 603 | + ASSERT_NE(relu_node, nullptr); | ||
| 604 | + auto ret = ft.RemoveNodeOnly(relu_node); | ||
| 605 | + EXPECT_EQ(ret, SUCCESS); | ||
| 606 | +} | ||
| 607 | + | ||
| 608 | +TEST_F(FusionTurboUtilsCovUT, IncCov_FusionTurbo_RemoveNode_NullNode) { | ||
| 609 | + auto graph = BuildGraph(); | ||
| 610 | + FusionTurbo ft(graph); | ||
| 611 | + auto ret = ft.RemoveNodeOnly(nullptr); | ||
| 612 | + EXPECT_NE(ret, SUCCESS); | ||
| 613 | +} | ||
| 614 | + | ||
| 615 | +TEST_F(FusionTurboUtilsCovUT, IncCov_FusionTurbo_GetConstInput_Success) { | ||
| 616 | + auto graph = BuildGraph(); | ||
| 617 | + auto add_node = graph->FindNode("add1"); | ||
| 618 | + ASSERT_NE(add_node, nullptr); | ||
| 619 | + auto result = FusionTurboUtils::GetConstInput(add_node, 0); | ||
| 620 | + EXPECT_EQ(result, nullptr); | ||
| 621 | +} | ||
| 622 | + | ||
| 623 | +TEST_F(FusionTurboUtilsCovUT, IncCov_GetConstInput_OutOfRange) { | ||
| 624 | + auto graph = BuildGraph(); | ||
| 625 | + auto add_node = graph->FindNode("add1"); | ||
| 626 | + ASSERT_NE(add_node, nullptr); | ||
| 627 | + auto result = FusionTurboUtils::GetConstInput(add_node, 100); | ||
| 628 | + EXPECT_EQ(result, nullptr); | ||
| 629 | +} | ||
| 630 | + | ||
| 631 | +TEST_F(FusionTurboUtilsCovUT, IncCov_FusionTurbo_AddWeights_WithValidData) { | ||
| 632 | + auto graph = std::make_shared<ge::ComputeGraph>("test_addweights_valid"); | ||
| 633 | + auto op_desc = std::make_shared<ge::OpDesc>("node_valid", "Relu"); | ||
| 634 | + ge::GeTensorDesc tensor_desc(ge::GeShape({1, 4}), ge::FORMAT_NCHW, ge::DT_FLOAT); | ||
| 635 | + op_desc->AddInputDesc(tensor_desc); | ||
| 636 | + op_desc->AddOutputDesc(tensor_desc); | ||
| 637 | + auto node = graph->AddNode(op_desc); | ||
| 638 | + FusionTurbo ft(graph); | ||
| 639 | + auto data_ptr = std::make_unique<int32_t[]>(16); | ||
| 640 | + WeightInfo w(tensor_desc, data_ptr.get()); | ||
| 641 | + auto nodes = ft.AddWeights(node, {w}); | ||
| 642 | + EXPECT_FALSE(nodes.empty()); | ||
| 643 | +} | ||
| 543 | } // namespace fe | 644 | } // namespace fe |
| @@ -1321,4 +1321,17 @@ TEST_F(PatternFusionBasePassCovUT, Impl_GetOutDataAnchors_Test) { | |||
| 1321 | PatternFusionBasePassImpl::GetOutDataAnchors(node1, anchors); | 1321 | PatternFusionBasePassImpl::GetOutDataAnchors(node1, anchors); |
| 1322 | EXPECT_EQ(anchors.size(), 1U); | 1322 | EXPECT_EQ(anchors.size(), 1U); |
| 1323 | } | 1323 | } |
| 1324 | + | ||
| 1325 | +TEST_F(PatternFusionBasePassCovUT, Impl_MatchAllEdges_ZeroSize) { | ||
| 1326 | + EXPECT_TRUE(PatternFusionBasePassImpl::MatchAllEdges(0, nullptr)); | ||
| 1327 | +} | ||
| 1328 | + | ||
| 1329 | +TEST_F(PatternFusionBasePassCovUT, Impl_BuildPatterns_Success) { | ||
| 1330 | + TestPatternFusionPassCov pass; | ||
| 1331 | + auto patterns = pass.DefinePatterns(); | ||
| 1332 | + EXPECT_FALSE(patterns.empty()); | ||
| 1333 | + for (auto p : patterns) { | ||
| 1334 | + delete p; | ||
| 1335 | + } | ||
| 1336 | +} | ||
| 1324 | } // namespace fe | 1337 | } // namespace fe |
| @@ -1606,4 +1606,53 @@ TEST_F(RegisterOpTilingPyCovUT, IncCov_TbeOpTilingPyInterface_EmptyFuncInfo) { | |||
| 1606 | EXPECT_EQ(ret, 0); | 1606 | EXPECT_EQ(ret, 0); |
| 1607 | func_map.erase("ReluPyEmpty"); | 1607 | func_map.erase("ReluPyEmpty"); |
| 1608 | } | 1608 | } |
| 1609 | + | ||
| 1610 | +TEST_F(RegisterOpTilingPyCovUT, IncCov_TbeOpTilingPyInterface_NotRegistered) { | ||
| 1611 | + char run_info_json[4096] = {0}; | ||
| 1612 | + uint64_t elapse[2] = {0}; | ||
| 1613 | + const char *inputs = R"([{"shape":[1,4],"ori_shape":[1,4],"format":"NCHW","ori_format":"NCHW","dtype":"float32"}])"; | ||
| 1614 | + const char *outputs = R"([{"shape":[1,4],"ori_shape":[1,4],"format":"NCHW","ori_format":"NCHW","dtype":"float32"}])"; | ||
| 1615 | + int ret = TbeOpTilingPyInterface("NonExistentOp", "compile_info", "hash", inputs, outputs, nullptr, run_info_json, | ||
| 1616 | + sizeof(run_info_json), elapse); | ||
| 1617 | + EXPECT_EQ(ret, 0); | ||
| 1618 | +} | ||
| 1619 | + | ||
| 1620 | +TEST_F(RegisterOpTilingPyCovUT, IncCov_TbeOpTilingPyInterface_NullInputs) { | ||
| 1621 | + char run_info_json[4096] = {0}; | ||
| 1622 | + uint64_t elapse[2] = {0}; | ||
| 1623 | + int ret = TbeOpTilingPyInterface("NonExistentOp", "compile_info", "hash", nullptr, nullptr, nullptr, run_info_json, | ||
| 1624 | + sizeof(run_info_json), elapse); | ||
| 1625 | + EXPECT_EQ(ret, 0); | ||
| 1626 | +} | ||
| 1627 | + | ||
| 1628 | +TEST_F(RegisterOpTilingPyCovUT, IncCov_TbeOpTilingPyInterface_SmallBuffer) { | ||
| 1629 | + char run_info_json[10] = {0}; | ||
| 1630 | + uint64_t elapse[2] = {0}; | ||
| 1631 | + const char *inputs = R"([{"shape":[1,4],"ori_shape":[1,4],"format":"NCHW","ori_format":"NCHW","dtype":"float32"}])"; | ||
| 1632 | + const char *outputs = R"([{"shape":[1,4],"ori_shape":[1,4],"format":"NCHW","ori_format":"NCHW","dtype":"float32"}])"; | ||
| 1633 | + int ret = TbeOpTilingPyInterface("NonExistentOp", "compile_info", "hash", inputs, outputs, nullptr, run_info_json, | ||
| 1634 | + sizeof(run_info_json), elapse); | ||
| 1635 | + EXPECT_EQ(ret, 0); | ||
| 1636 | +} | ||
| 1637 | + | ||
| 1638 | +TEST_F(RegisterOpTilingPyCovUT, IncCov_TbeOpTilingPyInterface_WithAttrs) { | ||
| 1639 | + char run_info_json[4096] = {0}; | ||
| 1640 | + uint64_t elapse[2] = {0}; | ||
| 1641 | + const char *inputs = R"([{"shape":[1,4],"ori_shape":[1,4],"format":"NCHW","ori_format":"NCHW","dtype":"float32"}])"; | ||
| 1642 | + const char *outputs = R"([{"shape":[1,4],"ori_shape":[1,4],"format":"NCHW","ori_format":"NCHW","dtype":"float32"}])"; | ||
| 1643 | + const char *attrs = R"([{"name":"attr1","dtype":"int64","value":1}])"; | ||
| 1644 | + int ret = TbeOpTilingPyInterface("NonExistentOp", "compile_info", "hash", inputs, outputs, attrs, run_info_json, | ||
| 1645 | + sizeof(run_info_json), elapse); | ||
| 1646 | + EXPECT_EQ(ret, 0); | ||
| 1647 | +} | ||
| 1648 | + | ||
| 1649 | +TEST_F(RegisterOpTilingPyCovUT, IncCov_TbeOpTilingPyInterface_InvalidOutputs) { | ||
| 1650 | + char run_info_json[4096] = {0}; | ||
| 1651 | + uint64_t elapse[2] = {0}; | ||
| 1652 | + const char *inputs = R"([{"shape":[1,4],"ori_shape":[1,4],"format":"NCHW","ori_format":"NCHW","dtype":"float32"}])"; | ||
| 1653 | + const char *outputs = "invalid_json"; | ||
| 1654 | + int ret = TbeOpTilingPyInterface("NonExistentOp", "compile_info", "hash", inputs, outputs, nullptr, run_info_json, | ||
| 1655 | + sizeof(run_info_json), elapse); | ||
| 1656 | + EXPECT_EQ(ret, 0); | ||
| 1657 | +} | ||
| 1609 | } // namespace optiling | 1658 | } // namespace optiling |
| @@ -4092,3 +4092,80 @@ TEST_F(UtestRegister, IncCov_AscendC_GeneralizedDumpFail) { | |||
| 4092 | 0); | 4092 | 0); |
| 4093 | unsetenv("ENABLE_RUNTIME_V2"); | 4093 | unsetenv("ENABLE_RUNTIME_V2"); |
| 4094 | } | 4094 | } |
| 4095 | + | ||
| 4096 | +TEST_F(UtestRegister, IncCov_AscendCPyInterfaceCheckOp_NotRegistered) { | ||
| 4097 | + setenv("ENABLE_RUNTIME_V2", "1", 0); | ||
| 4098 | + std::string input_str = "[]"; | ||
| 4099 | + std::string output_str = "[]"; | ||
| 4100 | + std::string attrs_str = "[]"; | ||
| 4101 | + std::string op_type = "NonExistentCheckOp"; | ||
| 4102 | + std::string res_info(1024, 'a'); | ||
| 4103 | + size_t size = 1024; | ||
| 4104 | + EXPECT_EQ(AscendCPyInterfaceCheckOp(FUNC_CHECK_SUPPORTED, op_type.c_str(), input_str.c_str(), output_str.c_str(), | ||
| 4105 | + attrs_str.c_str(), const_cast<char *>(res_info.c_str()), size), | ||
| 4106 | + 0); | ||
| 4107 | + unsetenv("ENABLE_RUNTIME_V2"); | ||
| 4108 | +} | ||
| 4109 | + | ||
| 4110 | +TEST_F(UtestRegister, IncCov_AscendCPyInterfaceGeneralized_NotRegistered) { | ||
| 4111 | + setenv("ENABLE_RUNTIME_V2", "1", 0); | ||
| 4112 | + std::string input_str = "[]"; | ||
| 4113 | + std::string output_str = "[]"; | ||
| 4114 | + std::string attrs_str = "[]"; | ||
| 4115 | + std::string op_type = "NonExistentGenOp"; | ||
| 4116 | + std::string res_info(1024, 'a'); | ||
| 4117 | + size_t size = 1024; | ||
| 4118 | + EXPECT_EQ(AscendCPyInterfaceGeneralized(op_type.c_str(), input_str.c_str(), output_str.c_str(), attrs_str.c_str(), | ||
| 4119 | + "keep_rank", const_cast<char *>(res_info.c_str()), size), | ||
| 4120 | + 0); | ||
| 4121 | + unsetenv("ENABLE_RUNTIME_V2"); | ||
| 4122 | +} | ||
| 4123 | + | ||
| 4124 | +TEST_F(UtestRegister, IncCov_AscendCPyInterfaceGetTilingDefInfo_NotRegistered) { | ||
| 4125 | + setenv("ENABLE_RUNTIME_V2", "1", 0); | ||
| 4126 | + std::string res_info(1024, 'a'); | ||
| 4127 | + size_t size = 1024; | ||
| 4128 | + EXPECT_EQ(AscendCPyInterfaceGetTilingDefInfo("NonExistentTilingOp", const_cast<char *>(res_info.c_str()), size), 0); | ||
| 4129 | + unsetenv("ENABLE_RUNTIME_V2"); | ||
| 4130 | +} | ||
| 4131 | + | ||
| 4132 | +TEST_F(UtestRegister, IncCov_RegisterOpTilingFuncV1) { | ||
| 4133 | + auto &func_map = OpTilingFuncRegistry::RegisteredOpFuncInfo(); | ||
| 4134 | + func_map.erase("TestRegisterV1"); | ||
| 4135 | + OpTilingFuncInfo info("TestRegisterV1"); | ||
| 4136 | + OpTilingFunc v1_func = [](const TeOpParas &op_paras, const OpCompileInfo &compile_info, OpRunInfo &run_info) -> bool { | ||
| 4137 | + return true; | ||
| 4138 | + }; | ||
| 4139 | + info.SetOpTilingFunc(v1_func); | ||
| 4140 | + func_map.emplace("TestRegisterV1", info); | ||
| 4141 | + EXPECT_NE(func_map.find("TestRegisterV1"), func_map.end()); | ||
| 4142 | + func_map.erase("TestRegisterV1"); | ||
| 4143 | +} | ||
| 4144 | + | ||
| 4145 | +TEST_F(UtestRegister, IncCov_AscendCPyInterfaceCheckOp_NullParams) { | ||
| 4146 | + setenv("ENABLE_RUNTIME_V2", "1", 0); | ||
| 4147 | + std::string res_info(1024, 'a'); | ||
| 4148 | + size_t size = 1024; | ||
| 4149 | + EXPECT_EQ(AscendCPyInterfaceCheckOp(FUNC_CHECK_SUPPORTED, nullptr, nullptr, nullptr, nullptr, | ||
| 4150 | + const_cast<char *>(res_info.c_str()), size), | ||
| 4151 | + 0); | ||
| 4152 | + unsetenv("ENABLE_RUNTIME_V2"); | ||
| 4153 | +} | ||
| 4154 | + | ||
| 4155 | +TEST_F(UtestRegister, IncCov_AscendCPyInterfaceGeneralized_NullParams) { | ||
| 4156 | + setenv("ENABLE_RUNTIME_V2", "1", 0); | ||
| 4157 | + std::string res_info(1024, 'a'); | ||
| 4158 | + size_t size = 1024; | ||
| 4159 | + EXPECT_EQ(AscendCPyInterfaceGeneralized(nullptr, nullptr, nullptr, nullptr, "keep_rank", | ||
| 4160 | + const_cast<char *>(res_info.c_str()), size), | ||
| 4161 | + 0); | ||
| 4162 | + unsetenv("ENABLE_RUNTIME_V2"); | ||
| 4163 | +} | ||
| 4164 | + | ||
| 4165 | +TEST_F(UtestRegister, IncCov_AscendCPyInterfaceGetTilingDefInfo_NullParams) { | ||
| 4166 | + setenv("ENABLE_RUNTIME_V2", "1", 0); | ||
| 4167 | + std::string res_info(1024, 'a'); | ||
| 4168 | + size_t size = 1024; | ||
| 4169 | + EXPECT_EQ(AscendCPyInterfaceGetTilingDefInfo(nullptr, const_cast<char *>(res_info.c_str()), size), 0); | ||
| 4170 | + unsetenv("ENABLE_RUNTIME_V2"); | ||
| 4171 | +} | ||
| @@ -1801,4 +1801,241 @@ TEST_F(UtestCaffeParser, CaffeModelParser_ToJson_null_json) { | |||
| 1801 | EXPECT_EQ(ret, FAILED); | 1801 | EXPECT_EQ(ret, FAILED); |
| 1802 | } | 1802 | } |
| 1803 | 1803 | ||
| 1804 | +TEST_F(UtestCaffeParser, CaffeModelParser_ParseNetModelByCustomProto_test) { | ||
| 1805 | + CaffeModelParser modelParser; | ||
| 1806 | + std::string case_dir = __FILE__; | ||
| 1807 | + case_dir = case_dir.substr(0, case_dir.find_last_of("/")); | ||
| 1808 | + std::string model_file = case_dir + "/caffe_model/caffe_add.pbtxt"; | ||
| 1809 | + std::string custom_proto_path = case_dir + "/caffe_model"; | ||
| 1810 | + std::string custom_proto_name = "project_root/caffe_add.pbtxt"; | ||
| 1811 | + | ||
| 1812 | + vector<ge::Operator> operators; | ||
| 1813 | + Status ret = | ||
| 1814 | + modelParser.ParseNetModelByCustomProto(model_file.c_str(), custom_proto_path, custom_proto_name, operators); | ||
| 1815 | + EXPECT_NE(ret, SUCCESS); | ||
| 1816 | +} | ||
| 1817 | + | ||
| 1818 | +TEST_F(UtestCaffeParser, CaffeModelParser_CustomProtoParse_no_slash_test) { | ||
| 1819 | + CaffeModelParser modelParser; | ||
| 1820 | + std::string case_dir = __FILE__; | ||
| 1821 | + case_dir = case_dir.substr(0, case_dir.find_last_of("/")); | ||
| 1822 | + std::string model_file = case_dir + "/caffe_model/caffe_add.pbtxt"; | ||
| 1823 | + | ||
| 1824 | + std::string custom_proto = case_dir + "/../../../../../graph_metadef/proto/caffe/caffe.proto"; | ||
| 1825 | + std::string caffe_proto = case_dir + "/../../../../../graph_metadef/proto/caffe/caffe.proto"; | ||
| 1826 | + vector<ge::Operator> operators; | ||
| 1827 | + ge::OpDescPtr op_desc_src = std::make_shared<ge::OpDesc>("Data", "Input"); | ||
| 1828 | + ge::Operator op_src = ge::OpDescUtils::CreateOperatorFromOpDesc(op_desc_src); | ||
| 1829 | + operators.emplace_back(op_src); | ||
| 1830 | + | ||
| 1831 | + Status ret = modelParser.CustomProtoParse(model_file.c_str(), custom_proto, caffe_proto, operators); | ||
| 1832 | + EXPECT_EQ(ret, SUCCESS); | ||
| 1833 | +} | ||
| 1834 | + | ||
| 1835 | +TEST_F(UtestCaffeParser, aclgrphParseCaffe_4param_parse_before_fail) { | ||
| 1836 | + ParerUTestsUtils::ClearParserInnerCtx(); | ||
| 1837 | + std::string case_dir = __FILE__; | ||
| 1838 | + case_dir = case_dir.substr(0, case_dir.find_last_of("/")); | ||
| 1839 | + std::string model_file = case_dir + "/caffe_model/caffe_add.pbtxt"; | ||
| 1840 | + std::string weight_file = case_dir + "/caffe_model/caffe_add.caffemodel"; | ||
| 1841 | + | ||
| 1842 | + std::map<ge::AscendString, ge::AscendString> parser_params; | ||
| 1843 | + parser_params[ge::AscendString(ge::ir_option::OUT_NODES)] = ge::AscendString("InvalidNode:0;InvalidNode2:1"); | ||
| 1844 | + ge::Graph graph; | ||
| 1845 | + auto ret = ge::aclgrphParseCaffe(model_file.c_str(), weight_file.c_str(), parser_params, graph); | ||
| 1846 | + EXPECT_NE(ret, ge::SUCCESS); | ||
| 1847 | +} | ||
| 1848 | + | ||
| 1849 | +TEST_F(UtestCaffeParser, CaffeModelParser_AddEdges_success) { | ||
| 1850 | + ParerUTestsUtils::ClearParserInnerCtx(); | ||
| 1851 | + CaffeModelParser modelParser; | ||
| 1852 | + ge::ComputeGraphPtr graph = std::make_shared<ge::ComputeGraph>("test_edges"); | ||
| 1853 | + | ||
| 1854 | + ge::OpDescPtr op1 = std::make_shared<ge::OpDesc>("node1", "Relu"); | ||
| 1855 | + op1->AddInputDesc(ge::GeTensorDesc()); | ||
| 1856 | + op1->AddOutputDesc(ge::GeTensorDesc()); | ||
| 1857 | + ge::NodePtr node1 = graph->AddNode(op1); | ||
| 1858 | + | ||
| 1859 | + ge::OpDescPtr op2 = std::make_shared<ge::OpDesc>("node2", "Relu"); | ||
| 1860 | + op2->AddInputDesc(ge::GeTensorDesc()); | ||
| 1861 | + op2->AddOutputDesc(ge::GeTensorDesc()); | ||
| 1862 | + ge::NodePtr node2 = graph->AddNode(op2); | ||
| 1863 | + | ||
| 1864 | + modelParser.top_blobs_map_["blob1"].emplace_back(std::make_pair("node1", 0)); | ||
| 1865 | + modelParser.bottom_blobs_map_["blob1"].emplace_back(std::make_pair("node2", 0)); | ||
| 1866 | + modelParser.node_map["node1"] = node1; | ||
| 1867 | + modelParser.node_map["node2"] = node2; | ||
| 1868 | + | ||
| 1869 | + Status ret = modelParser.AddEdges(graph); | ||
| 1870 | + EXPECT_EQ(ret, SUCCESS); | ||
| 1871 | +} | ||
| 1872 | + | ||
| 1873 | +TEST_F(UtestCaffeParser, CaffeModelParser_AddEdges_top_node_not_found) { | ||
| 1874 | + ParerUTestsUtils::ClearParserInnerCtx(); | ||
| 1875 | + CaffeModelParser modelParser; | ||
| 1876 | + ge::ComputeGraphPtr graph = std::make_shared<ge::ComputeGraph>("test_edges2"); | ||
| 1877 | + | ||
| 1878 | + ge::OpDescPtr op1 = std::make_shared<ge::OpDesc>("node1", "Relu"); | ||
| 1879 | + op1->AddInputDesc(ge::GeTensorDesc()); | ||
| 1880 | + op1->AddOutputDesc(ge::GeTensorDesc()); | ||
| 1881 | + ge::NodePtr node1 = graph->AddNode(op1); | ||
| 1882 | + | ||
| 1883 | + modelParser.top_blobs_map_["blob1"].emplace_back(std::make_pair("nonexistent_top", 0)); | ||
| 1884 | + modelParser.bottom_blobs_map_["blob1"].emplace_back(std::make_pair("node1", 0)); | ||
| 1885 | + modelParser.node_map["node1"] = node1; | ||
| 1886 | + | ||
| 1887 | + Status ret = modelParser.AddEdges(graph); | ||
| 1888 | + EXPECT_EQ(ret, ge::FAILED); | ||
| 1889 | +} | ||
| 1890 | + | ||
| 1891 | +TEST_F(UtestCaffeParser, CaffeModelParser_AddEdges_bottom_node_not_found) { | ||
| 1892 | + ParerUTestsUtils::ClearParserInnerCtx(); | ||
| 1893 | + CaffeModelParser modelParser; | ||
| 1894 | + ge::ComputeGraphPtr graph = std::make_shared<ge::ComputeGraph>("test_edges3"); | ||
| 1895 | + | ||
| 1896 | + ge::OpDescPtr op1 = std::make_shared<ge::OpDesc>("node1", "Relu"); | ||
| 1897 | + op1->AddInputDesc(ge::GeTensorDesc()); | ||
| 1898 | + op1->AddOutputDesc(ge::GeTensorDesc()); | ||
| 1899 | + ge::NodePtr node1 = graph->AddNode(op1); | ||
| 1900 | + | ||
| 1901 | + modelParser.top_blobs_map_["blob1"].emplace_back(std::make_pair("node1", 0)); | ||
| 1902 | + modelParser.bottom_blobs_map_["blob1"].emplace_back(std::make_pair("nonexistent_bottom", 0)); | ||
| 1903 | + modelParser.node_map["node1"] = node1; | ||
| 1904 | + | ||
| 1905 | + Status ret = modelParser.AddEdges(graph); | ||
| 1906 | + EXPECT_EQ(ret, ge::FAILED); | ||
| 1907 | +} | ||
| 1908 | + | ||
| 1909 | +TEST_F(UtestCaffeParser, CaffeModelParser_IsOutputTop_not_found) { | ||
| 1910 | + ParerUTestsUtils::ClearParserInnerCtx(); | ||
| 1911 | + CaffeModelParser modelParser; | ||
| 1912 | + bool ret = modelParser.IsOutputTop("nonexistent_node", 0); | ||
| 1913 | + EXPECT_FALSE(ret); | ||
| 1914 | +} | ||
| 1915 | + | ||
| 1916 | +TEST_F(UtestCaffeParser, CaffeModelParser_IsOutputTop_index_not_match) { | ||
| 1917 | + ParerUTestsUtils::ClearParserInnerCtx(); | ||
| 1918 | + CaffeModelParser modelParser; | ||
| 1919 | + ge::GetParserContext().out_nodes_map["test_node"] = {1, 2, 3}; | ||
| 1920 | + bool ret = modelParser.IsOutputTop("test_node", 0); | ||
| 1921 | + EXPECT_FALSE(ret); | ||
| 1922 | +} | ||
| 1923 | + | ||
| 1924 | +TEST_F(UtestCaffeParser, CaffeModelParser_ParseInput_input_dim_and_shape_both_exist) { | ||
| 1925 | + CaffeModelParser modelParser; | ||
| 1926 | + domi::caffe::NetParameter net; | ||
| 1927 | + net.add_input("data"); | ||
| 1928 | + net.add_input_dim(1); | ||
| 1929 | + net.add_input_dim(2); | ||
| 1930 | + net.add_input_dim(3); | ||
| 1931 | + net.add_input_dim(4); | ||
| 1932 | + net.add_input_shape(); | ||
| 1933 | + bool input_data_flag = false; | ||
| 1934 | + Status ret = modelParser.ParseInput(net, input_data_flag); | ||
| 1935 | + EXPECT_EQ(ret, FAILED); | ||
| 1936 | +} | ||
| 1937 | + | ||
| 1938 | +TEST_F(UtestCaffeParser, CaffeModelParser_ParseInput_input_dim_invalid_size) { | ||
| 1939 | + CaffeModelParser modelParser; | ||
| 1940 | + domi::caffe::NetParameter net; | ||
| 1941 | + net.add_input("data"); | ||
| 1942 | + net.add_input_dim(1); | ||
| 1943 | + net.add_input_dim(2); | ||
| 1944 | + bool input_data_flag = false; | ||
| 1945 | + Status ret = modelParser.ParseInput(net, input_data_flag); | ||
| 1946 | + EXPECT_EQ(ret, FAILED); | ||
| 1947 | +} | ||
| 1948 | + | ||
| 1949 | +TEST_F(UtestCaffeParser, CaffeModelParser_ParseInput_no_input_dim_no_shape) { | ||
| 1950 | + ParerUTestsUtils::ClearParserInnerCtx(); | ||
| 1951 | + CaffeModelParser modelParser; | ||
| 1952 | + domi::caffe::NetParameter net; | ||
| 1953 | + net.add_input("data"); | ||
| 1954 | + bool input_data_flag = false; | ||
| 1955 | + Status ret = modelParser.ParseInput(net, input_data_flag); | ||
| 1956 | + EXPECT_EQ(ret, FAILED); | ||
| 1957 | +} | ||
| 1958 | + | ||
| 1959 | +TEST_F(UtestCaffeParser, CaffeModelParser_ParseInput_no_input_dim_no_shape_with_ctx) { | ||
| 1960 | + ParerUTestsUtils::ClearParserInnerCtx(); | ||
| 1961 | + CaffeModelParser modelParser; | ||
| 1962 | + domi::caffe::NetParameter net; | ||
| 1963 | + net.add_input("data"); | ||
| 1964 | + ge::GetParserContext().input_dims["data"] = {1, 3, 224, 224}; | ||
| 1965 | + bool input_data_flag = false; | ||
| 1966 | + Status ret = modelParser.ParseInput(net, input_data_flag); | ||
| 1967 | + EXPECT_EQ(ret, SUCCESS); | ||
| 1968 | + EXPECT_TRUE(input_data_flag); | ||
| 1969 | +} | ||
| 1970 | + | ||
| 1971 | +TEST_F(UtestCaffeParser, CaffeModelParser_AddTensorDescToOpDescByIr_netoutput) { | ||
| 1972 | + CaffeModelParser modelParser; | ||
| 1973 | + ge::OpDescPtr op_desc; | ||
| 1974 | + domi::caffe::LayerParameter layer; | ||
| 1975 | + layer.set_name("netoutput"); | ||
| 1976 | + layer.set_type("NetOutput"); | ||
| 1977 | + layer.add_bottom("input"); | ||
| 1978 | + layer.add_top("output"); | ||
| 1979 | + Status ret = modelParser.AddTensorDescToOpDescByIr(op_desc, layer, "NetOutput"); | ||
| 1980 | + EXPECT_EQ(ret, SUCCESS); | ||
| 1981 | + EXPECT_NE(op_desc, nullptr); | ||
| 1982 | +} | ||
| 1983 | + | ||
| 1984 | +TEST_F(UtestCaffeParser, CaffeModelParser_AddTensorDescToOpDescByIr_yolo) { | ||
| 1985 | + CaffeModelParser modelParser; | ||
| 1986 | + ge::OpDescPtr op_desc; | ||
| 1987 | + domi::caffe::LayerParameter layer; | ||
| 1988 | + layer.set_name("yolo"); | ||
| 1989 | + layer.set_type("YoloDetectionOutput"); | ||
| 1990 | + layer.add_bottom("input"); | ||
| 1991 | + layer.add_top("output"); | ||
| 1992 | + Status ret = modelParser.AddTensorDescToOpDescByIr(op_desc, layer, "YoloDetectionOutput"); | ||
| 1993 | + EXPECT_EQ(ret, SUCCESS); | ||
| 1994 | + EXPECT_NE(op_desc, nullptr); | ||
| 1995 | +} | ||
| 1996 | + | ||
| 1997 | +TEST_F(UtestCaffeParser, CaffeModelParser_PreCheck_success) { | ||
| 1998 | + CaffeModelParser modelParser; | ||
| 1999 | + domi::caffe::NetParameter net; | ||
| 2000 | + net.set_name("test_net"); | ||
| 2001 | + auto *layer = net.add_layer(); | ||
| 2002 | + layer->set_name("conv1"); | ||
| 2003 | + layer->set_type("Convolution"); | ||
| 2004 | + layer->add_bottom("data"); | ||
| 2005 | + layer->add_top("conv1_out"); | ||
| 2006 | + Status ret = modelParser.PreCheck(net); | ||
| 2007 | + EXPECT_NE(ret, FAILED); | ||
| 2008 | +} | ||
| 2009 | + | ||
| 2010 | +TEST_F(UtestCaffeParser, CaffeModelParser_PreCheck_empty_name) { | ||
| 2011 | + CaffeModelParser modelParser; | ||
| 2012 | + domi::caffe::NetParameter net; | ||
| 2013 | + net.set_name("test_net"); | ||
| 2014 | + auto *layer = net.add_layer(); | ||
| 2015 | + layer->set_name(""); | ||
| 2016 | + layer->set_type("Convolution"); | ||
| 2017 | + Status ret = modelParser.PreCheck(net); | ||
| 2018 | + EXPECT_EQ(ret, FAILED); | ||
| 2019 | +} | ||
| 2020 | + | ||
| 2021 | +TEST_F(UtestCaffeParser, CaffeModelParser_AddNode_unsupported_type) { | ||
| 2022 | + CaffeModelParser modelParser; | ||
| 2023 | + domi::caffe::NetParameter net; | ||
| 2024 | + domi::caffe::LayerParameter *layer = net.add_layer(); | ||
| 2025 | + layer->set_name("unknown"); | ||
| 2026 | + layer->set_type("UnknownOpType"); | ||
| 2027 | + ge::ComputeGraphPtr graph = std::make_shared<ge::ComputeGraph>("test"); | ||
| 2028 | + Status ret = modelParser.AddNode(*layer, graph); | ||
| 2029 | + EXPECT_EQ(ret, FAILED); | ||
| 2030 | +} | ||
| 2031 | + | ||
| 2032 | +TEST_F(UtestCaffeParser, CaffeWeightsParser_ParseWeightByFusionProto_null) { | ||
| 2033 | + CaffeWeightsParser weightParser; | ||
| 2034 | + const char *weight_path = nullptr; | ||
| 2035 | + std::string fusion_proto_path = "test"; | ||
| 2036 | + std::string fusion_proto_name = "test"; | ||
| 2037 | + ge::ComputeGraphPtr graph = std::make_shared<ge::ComputeGraph>("test"); | ||
| 2038 | + Status ret = weightParser.ParseWeightByFusionProto(weight_path, fusion_proto_path, fusion_proto_name, graph); | ||
| 2039 | + EXPECT_EQ(ret, FAILED); | ||
| 2040 | +} | ||
| 1804 | } // namespace ge | 2041 | } // namespace ge |
| @@ -365,4 +365,486 @@ TEST_F(UtestAclGraphParser, test_ParseAclInputShape) { | |||
| 365 | ret = acl_graph_parse_util.ParseParamsBeforeGraph(param4, graph_name); | 365 | ret = acl_graph_parse_util.ParseParamsBeforeGraph(param4, graph_name); |
| 366 | ASSERT_EQ(ret, SUCCESS); | 366 | ASSERT_EQ(ret, SUCCESS); |
| 367 | } | 367 | } |
| 368 | + | ||
| 369 | +TEST_F(UtestAclGraphParser, test_fp16_t_conversions) { | ||
| 370 | + parser::fp16_t fp16; | ||
| 371 | + fp16.val = 0x0001; | ||
| 372 | + float f = fp16; | ||
| 373 | + EXPECT_NE(f, 0.0f); | ||
| 374 | + | ||
| 375 | + fp16.val = 0x8001; | ||
| 376 | + f = fp16; | ||
| 377 | + EXPECT_NE(f, 0.0f); | ||
| 378 | + | ||
| 379 | + fp16.val = 0x3C00; | ||
| 380 | + f = fp16; | ||
| 381 | + EXPECT_FLOAT_EQ(f, 1.0f); | ||
| 382 | + | ||
| 383 | + fp16.val = 0xBC00; | ||
| 384 | + f = fp16; | ||
| 385 | + EXPECT_FLOAT_EQ(f, -1.0f); | ||
| 386 | + | ||
| 387 | + fp16.val = 0x4000; | ||
| 388 | + f = fp16; | ||
| 389 | + EXPECT_FLOAT_EQ(f, 2.0f); | ||
| 390 | + | ||
| 391 | + fp16.val = 0x0000; | ||
| 392 | + f = fp16; | ||
| 393 | + EXPECT_FLOAT_EQ(f, 0.0f); | ||
| 394 | + | ||
| 395 | + double d = fp16; | ||
| 396 | + EXPECT_FLOAT_EQ(d, 0.0); | ||
| 397 | + | ||
| 398 | + fp16.val = 0x3C00; | ||
| 399 | + d = fp16; | ||
| 400 | + EXPECT_FLOAT_EQ(d, 1.0); | ||
| 401 | +} | ||
| 402 | + | ||
| 403 | +TEST_F(UtestAclGraphParser, test_fp16_t_int_conversions) { | ||
| 404 | + parser::fp16_t fp16; | ||
| 405 | + fp16.val = 0x3C00; | ||
| 406 | + int8_t i8 = fp16; | ||
| 407 | + EXPECT_EQ(i8, 1); | ||
| 408 | + uint8_t ui8 = fp16; | ||
| 409 | + EXPECT_EQ(ui8, 1); | ||
| 410 | + int16_t i16 = fp16; | ||
| 411 | + EXPECT_EQ(i16, 1); | ||
| 412 | + uint16_t ui16 = fp16; | ||
| 413 | + EXPECT_EQ(ui16, 1); | ||
| 414 | + int32_t i32 = fp16; | ||
| 415 | + EXPECT_EQ(i32, 1); | ||
| 416 | + uint32_t ui32 = fp16; | ||
| 417 | + EXPECT_EQ(ui32, 1); | ||
| 418 | + | ||
| 419 | + fp16.val = 0x4900; | ||
| 420 | + i8 = fp16; | ||
| 421 | + EXPECT_NE(i8, 0); | ||
| 422 | + ui8 = fp16; | ||
| 423 | + EXPECT_NE(ui8, 0); | ||
| 424 | + i16 = fp16; | ||
| 425 | + EXPECT_NE(i16, 0); | ||
| 426 | + ui16 = fp16; | ||
| 427 | + EXPECT_NE(ui16, 0); | ||
| 428 | + i32 = fp16; | ||
| 429 | + EXPECT_NE(i32, 0); | ||
| 430 | + ui32 = fp16; | ||
| 431 | + EXPECT_NE(ui32, 0); | ||
| 432 | + | ||
| 433 | + fp16.val = 0x8900; | ||
| 434 | + i8 = fp16; | ||
| 435 | + ui8 = fp16; | ||
| 436 | + EXPECT_EQ(ui8, 0); | ||
| 437 | + i16 = fp16; | ||
| 438 | + ui16 = fp16; | ||
| 439 | + i32 = fp16; | ||
| 440 | + ui32 = fp16; | ||
| 441 | + EXPECT_EQ(ui32, 0); | ||
| 442 | + | ||
| 443 | + fp16.val = 0x7C00; | ||
| 444 | + i8 = fp16; | ||
| 445 | + ui8 = fp16; | ||
| 446 | + i16 = fp16; | ||
| 447 | + ui16 = fp16; | ||
| 448 | + i32 = fp16; | ||
| 449 | + ui32 = fp16; | ||
| 450 | + EXPECT_NE(ui32, 0); | ||
| 451 | + | ||
| 452 | + fp16.val = 0xFC00; | ||
| 453 | + i8 = fp16; | ||
| 454 | + ui8 = fp16; | ||
| 455 | + i16 = fp16; | ||
| 456 | + ui16 = fp16; | ||
| 457 | + i32 = fp16; | ||
| 458 | + ui32 = fp16; | ||
| 459 | + | ||
| 460 | + fp16.val = 0x0001; | ||
| 461 | + i8 = fp16; | ||
| 462 | + ui8 = fp16; | ||
| 463 | + i16 = fp16; | ||
| 464 | + ui16 = fp16; | ||
| 465 | + i32 = fp16; | ||
| 466 | + ui32 = fp16; | ||
| 467 | + | ||
| 468 | + fp16.val = 0x0000; | ||
| 469 | + i8 = fp16; | ||
| 470 | + ui8 = fp16; | ||
| 471 | + i16 = fp16; | ||
| 472 | + ui16 = fp16; | ||
| 473 | + i32 = fp16; | ||
| 474 | + ui32 = fp16; | ||
| 475 | + EXPECT_EQ(ui8, 0); | ||
| 476 | + EXPECT_EQ(ui16, 0); | ||
| 477 | + EXPECT_EQ(ui32, 0); | ||
| 478 | +} | ||
| 479 | + | ||
| 480 | +TEST_F(UtestAclGraphParser, test_fp16_t_assignment) { | ||
| 481 | + parser::fp16_t fp16; | ||
| 482 | + | ||
| 483 | + fp16 = 1.0f; | ||
| 484 | + EXPECT_EQ(fp16.val, 0x3C00); | ||
| 485 | + fp16 = -1.0f; | ||
| 486 | + EXPECT_EQ(fp16.val, 0xBC00); | ||
| 487 | + fp16 = 0.0f; | ||
| 488 | + EXPECT_EQ(fp16.val, 0x0000); | ||
| 489 | + fp16 = 2.0f; | ||
| 490 | + EXPECT_NE(fp16.val, 0); | ||
| 491 | + fp16 = 65504.0f; | ||
| 492 | + EXPECT_NE(fp16.val, 0); | ||
| 493 | + fp16 = -65504.0f; | ||
| 494 | + EXPECT_NE(fp16.val, 0); | ||
| 495 | + fp16 = 5.960464477539063e-08f; | ||
| 496 | + EXPECT_NE(fp16.val, 0); | ||
| 497 | + fp16 = 1.0e-40f; | ||
| 498 | + EXPECT_EQ(fp16.val, 0); | ||
| 499 | + | ||
| 500 | + fp16 = (int8_t)1; | ||
| 501 | + EXPECT_NE(fp16.val, 0); | ||
| 502 | + fp16 = (int8_t)-1; | ||
| 503 | + EXPECT_NE(fp16.val, 0); | ||
| 504 | + fp16 = (int8_t)0; | ||
| 505 | + EXPECT_EQ(fp16.val, 0); | ||
| 506 | + fp16 = (int8_t)127; | ||
| 507 | + EXPECT_NE(fp16.val, 0); | ||
| 508 | + | ||
| 509 | + fp16 = (uint8_t)1; | ||
| 510 | + EXPECT_NE(fp16.val, 0); | ||
| 511 | + fp16 = (uint8_t)0; | ||
| 512 | + EXPECT_EQ(fp16.val, 0); | ||
| 513 | + fp16 = (uint8_t)255; | ||
| 514 | + EXPECT_NE(fp16.val, 0); | ||
| 515 | + | ||
| 516 | + fp16 = (int16_t)1; | ||
| 517 | + EXPECT_NE(fp16.val, 0); | ||
| 518 | + fp16 = (int16_t)-1; | ||
| 519 | + EXPECT_NE(fp16.val, 0); | ||
| 520 | + fp16 = (int16_t)0; | ||
| 521 | + EXPECT_EQ(fp16.val, 0); | ||
| 522 | + fp16 = (int16_t)256; | ||
| 523 | + EXPECT_NE(fp16.val, 0); | ||
| 524 | + fp16 = (int16_t)32767; | ||
| 525 | + EXPECT_NE(fp16.val, 0); | ||
| 526 | + | ||
| 527 | + fp16 = (uint16_t)1; | ||
| 528 | + EXPECT_NE(fp16.val, 0); | ||
| 529 | + fp16 = (uint16_t)0; | ||
| 530 | + EXPECT_EQ(fp16.val, 0); | ||
| 531 | + fp16 = (uint16_t)65535; | ||
| 532 | + EXPECT_NE(fp16.val, 0); | ||
| 533 | + | ||
| 534 | + fp16 = (int32_t)1; | ||
| 535 | + EXPECT_NE(fp16.val, 0); | ||
| 536 | + fp16 = (int32_t)-1; | ||
| 537 | + EXPECT_NE(fp16.val, 0); | ||
| 538 | + fp16 = (int32_t)0; | ||
| 539 | + EXPECT_EQ(fp16.val, 0); | ||
| 540 | + fp16 = (int32_t)65536; | ||
| 541 | + EXPECT_NE(fp16.val, 0); | ||
| 542 | + fp16 = (int32_t)2147483647; | ||
| 543 | + EXPECT_NE(fp16.val, 0); | ||
| 544 | + | ||
| 545 | + fp16 = (uint32_t)1; | ||
| 546 | + EXPECT_NE(fp16.val, 0); | ||
| 547 | + fp16 = (uint32_t)0; | ||
| 548 | + EXPECT_EQ(fp16.val, 0); | ||
| 549 | + fp16 = (uint32_t)4294967295U; | ||
| 550 | + EXPECT_NE(fp16.val, 0); | ||
| 551 | + | ||
| 552 | + fp16 = 1.0; | ||
| 553 | + EXPECT_NE(fp16.val, 0); | ||
| 554 | + fp16 = -1.0; | ||
| 555 | + EXPECT_NE(fp16.val, 0); | ||
| 556 | + fp16 = 0.0; | ||
| 557 | + EXPECT_EQ(fp16.val, 0); | ||
| 558 | + fp16 = 2.0; | ||
| 559 | + EXPECT_NE(fp16.val, 0); | ||
| 560 | + fp16 = 65504.0; | ||
| 561 | + EXPECT_NE(fp16.val, 0); | ||
| 562 | + fp16 = -65504.0; | ||
| 563 | + EXPECT_NE(fp16.val, 0); | ||
| 564 | + fp16 = 5.960464477539063e-08; | ||
| 565 | + EXPECT_NE(fp16.val, 0); | ||
| 566 | +} | ||
| 567 | + | ||
| 568 | +TEST_F(UtestAclGraphParser, test_fp16_t_comparison) { | ||
| 569 | + parser::fp16_t a, b; | ||
| 570 | + a.val = 0x3C00; | ||
| 571 | + b.val = 0x4000; | ||
| 572 | + EXPECT_TRUE(a < b); | ||
| 573 | + EXPECT_FALSE(a > b); | ||
| 574 | + EXPECT_TRUE(b > a); | ||
| 575 | + EXPECT_TRUE(b >= a); | ||
| 576 | + EXPECT_TRUE(a <= b); | ||
| 577 | + EXPECT_TRUE(a != b); | ||
| 578 | + EXPECT_FALSE(a == b); | ||
| 579 | + | ||
| 580 | + a.val = 0x3C00; | ||
| 581 | + b.val = 0x3C00; | ||
| 582 | + EXPECT_TRUE(a == b); | ||
| 583 | + EXPECT_FALSE(a != b); | ||
| 584 | + EXPECT_TRUE(a >= b); | ||
| 585 | + EXPECT_TRUE(a <= b); | ||
| 586 | + EXPECT_FALSE(a > b); | ||
| 587 | + EXPECT_FALSE(a < b); | ||
| 588 | + | ||
| 589 | + a.val = 0x0000; | ||
| 590 | + b.val = 0x8000; | ||
| 591 | + EXPECT_TRUE(a == b); | ||
| 592 | + | ||
| 593 | + a.val = 0x3C00; | ||
| 594 | + b.val = 0xBC00; | ||
| 595 | + EXPECT_TRUE(a > b); | ||
| 596 | + EXPECT_FALSE(a < b); | ||
| 597 | + | ||
| 598 | + a.val = 0xBC00; | ||
| 599 | + b.val = 0x4000; | ||
| 600 | + EXPECT_TRUE(a < b); | ||
| 601 | +} | ||
| 602 | + | ||
| 603 | +TEST_F(UtestAclGraphParser, test_fp16_t_isinf) { | ||
| 604 | + parser::fp16_t fp16; | ||
| 605 | + fp16.val = 0x7C00; | ||
| 606 | + EXPECT_EQ(fp16.IsInf(), 1); | ||
| 607 | + fp16.val = 0xFC00; | ||
| 608 | + EXPECT_EQ(fp16.IsInf(), -1); | ||
| 609 | + fp16.val = 0x3C00; | ||
| 610 | + EXPECT_EQ(fp16.IsInf(), 0); | ||
| 611 | + fp16.val = 0x0000; | ||
| 612 | + EXPECT_EQ(fp16.IsInf(), 0); | ||
| 613 | +} | ||
| 614 | + | ||
| 615 | +TEST_F(UtestAclGraphParser, test_fp16_t_to_methods) { | ||
| 616 | + parser::fp16_t fp16; | ||
| 617 | + fp16.val = 0x3C00; | ||
| 618 | + EXPECT_FLOAT_EQ(fp16.ToFloat(), 1.0f); | ||
| 619 | + EXPECT_FLOAT_EQ(fp16.ToDouble(), 1.0); | ||
| 620 | + EXPECT_EQ(fp16.ToInt8(), 1); | ||
| 621 | + EXPECT_EQ(fp16.ToUInt8(), 1); | ||
| 622 | + EXPECT_EQ(fp16.ToInt16(), 1); | ||
| 623 | + EXPECT_EQ(fp16.ToUInt16(), 1); | ||
| 624 | + EXPECT_EQ(fp16.ToInt32(), 1); | ||
| 625 | + EXPECT_EQ(fp16.ToUInt32(), 1); | ||
| 626 | +} | ||
| 627 | + | ||
| 628 | +TEST_F(UtestAclGraphParser, test_fp16_t_self_assignment) { | ||
| 629 | + parser::fp16_t fp16; | ||
| 630 | + fp16.val = 0x3C00; | ||
| 631 | + fp16 = fp16; | ||
| 632 | + EXPECT_EQ(fp16.val, 0x3C00); | ||
| 633 | +} | ||
| 634 | + | ||
| 635 | +TEST_F(UtestAclGraphParser, test_fp16_t_int64_conversion) { | ||
| 636 | + parser::fp16_t fp16; | ||
| 637 | + fp16.val = 0x3C00; | ||
| 638 | + int64_t i64 = fp16; | ||
| 639 | + EXPECT_EQ(i64, 0); | ||
| 640 | + uint64_t ui64 = fp16; | ||
| 641 | + EXPECT_EQ(ui64, 0); | ||
| 642 | +} | ||
| 643 | + | ||
| 644 | +TEST_F(UtestAclGraphParser, test_fp16_t_inequality_both_zero) { | ||
| 645 | + parser::fp16_t a, b; | ||
| 646 | + a.val = 0x0000; | ||
| 647 | + b.val = 0x8000; | ||
| 648 | + EXPECT_FALSE(a != b); | ||
| 649 | +} | ||
| 650 | + | ||
| 651 | +TEST_F(UtestAclGraphParser, test_acl_graph_parser_util_set_output_node_info) { | ||
| 652 | + AclGraphParserUtil acl_graph_parse_util; | ||
| 653 | + ge::ComputeGraphPtr compute_graph = std::make_shared<ge::ComputeGraph>("test_graph"); | ||
| 654 | + ge::Graph graph = ge::GraphUtilsEx::CreateGraphFromComputeGraph(compute_graph); | ||
| 655 | + std::map<AscendString, AscendString> parser_params; | ||
| 656 | + auto ret = acl_graph_parse_util.SetOutputNodeInfo(graph, parser_params); | ||
| 657 | + EXPECT_NE(ret, FAILED); | ||
| 658 | +} | ||
| 659 | + | ||
| 660 | +TEST_F(UtestAclGraphParser, test_acl_graph_parser_util_set_output_node_info_with_nodes) { | ||
| 661 | + ParerUTestsUtils::ClearParserInnerCtx(); | ||
| 662 | + AclGraphParserUtil acl_graph_parse_util; | ||
| 663 | + ge::ComputeGraphPtr compute_graph = std::make_shared<ge::ComputeGraph>("test_graph2"); | ||
| 664 | + ge::OpDescPtr op = std::make_shared<ge::OpDesc>("output_node", "Relu"); | ||
| 665 | + op->AddInputDesc(ge::GeTensorDesc()); | ||
| 666 | + op->AddOutputDesc(ge::GeTensorDesc()); | ||
| 667 | + ge::NodePtr node = compute_graph->AddNode(op); | ||
| 668 | + ge::Graph graph = ge::GraphUtilsEx::CreateGraphFromComputeGraph(compute_graph); | ||
| 669 | + | ||
| 670 | + ge::GetParserContext().user_out_nodes.push_back({"output_node", 0}); | ||
| 671 | + std::map<AscendString, AscendString> parser_params; | ||
| 672 | + auto ret = acl_graph_parse_util.SetOutputNodeInfo(graph, parser_params); | ||
| 673 | + EXPECT_EQ(ret, SUCCESS); | ||
| 674 | +} | ||
| 675 | + | ||
| 676 | +TEST_F(UtestAclGraphParser, test_acl_graph_parser_util_parse_params_after_graph) { | ||
| 677 | + AclGraphParserUtil acl_graph_parse_util; | ||
| 678 | + ge::ComputeGraphPtr compute_graph = std::make_shared<ge::ComputeGraph>("test_graph3"); | ||
| 679 | + ge::Graph graph = ge::GraphUtilsEx::CreateGraphFromComputeGraph(compute_graph); | ||
| 680 | + std::map<AscendString, AscendString> parser_params; | ||
| 681 | + auto ret = acl_graph_parse_util.ParseParamsAfterGraph(graph, parser_params); | ||
| 682 | + EXPECT_NE(ret, FAILED); | ||
| 683 | +} | ||
| 684 | + | ||
| 685 | +TEST_F(UtestAclGraphParser, test_acl_graph_parser_util_parse_params_after_graph_with_options) { | ||
| 686 | + ParerUTestsUtils::ClearParserInnerCtx(); | ||
| 687 | + AclGraphParserUtil acl_graph_parse_util; | ||
| 688 | + ge::ComputeGraphPtr compute_graph = std::make_shared<ge::ComputeGraph>("test_graph4"); | ||
| 689 | + ge::OpDescPtr op = std::make_shared<ge::OpDesc>("data1", "Data"); | ||
| 690 | + op->AddInputDesc(ge::GeTensorDesc()); | ||
| 691 | + op->AddOutputDesc(ge::GeTensorDesc()); | ||
| 692 | + compute_graph->AddNode(op); | ||
| 693 | + ge::Graph graph = ge::GraphUtilsEx::CreateGraphFromComputeGraph(compute_graph); | ||
| 694 | + | ||
| 695 | + std::map<AscendString, AscendString> parser_params; | ||
| 696 | + parser_params[AscendString(ge::ir_option::INPUT_FP16_NODES)] = AscendString("data1"); | ||
| 697 | + parser_params[AscendString(ge::ir_option::IS_INPUT_ADJUST_HW_LAYOUT)] = AscendString("false"); | ||
| 698 | + parser_params[AscendString(ge::ir_option::IS_OUTPUT_ADJUST_HW_LAYOUT)] = AscendString("false"); | ||
| 699 | + parser_params[AscendString(ge::ir_option::ENABLE_SCOPE_FUSION_PASSES)] = AscendString("pass1;pass2"); | ||
| 700 | + auto ret = acl_graph_parse_util.ParseParamsAfterGraph(graph, parser_params); | ||
| 701 | + EXPECT_EQ(ret, SUCCESS); | ||
| 702 | +} | ||
| 703 | + | ||
| 704 | +TEST_F(UtestAclGraphParser, test_acl_graph_parser_util_parse_params_before_graph_with_out_nodes) { | ||
| 705 | + ParerUTestsUtils::ClearParserInnerCtx(); | ||
| 706 | + GetParserContext().type = domi::TENSORFLOW; | ||
| 707 | + AclGraphParserUtil acl_graph_parse_util; | ||
| 708 | + std::map<AscendString, AscendString> params = { | ||
| 709 | + {AscendString(ge::ir_option::OUT_NODES), AscendString("node1:0;node2:1")}, | ||
| 710 | + {AscendString(ge::ir_option::OUTPUT), AscendString("node1:0")}, | ||
| 711 | + {AscendString(ge::ir_option::INPUT_FP16_NODES), AscendString("data1")}, | ||
| 712 | + {AscendString(ge::ir_option::IS_INPUT_ADJUST_HW_LAYOUT), AscendString("true")}, | ||
| 713 | + {AscendString(ge::ir_option::IS_OUTPUT_ADJUST_HW_LAYOUT), AscendString("true")}, | ||
| 714 | + {AscendString(ge::ir_option::ENABLE_SCOPE_FUSION_PASSES), AscendString("pass1")}, | ||
| 715 | + {AscendString(ge::ir_option::INPUT_SHAPE), AscendString("data1:1,3,224,224")}, | ||
| 716 | + {AscendString("invalid_key"), AscendString("value")}}; | ||
| 717 | + string graph_name; | ||
| 718 | + auto ret = acl_graph_parse_util.ParseParamsBeforeGraph(params, graph_name); | ||
| 719 | + EXPECT_NE(ret, SUCCESS); | ||
| 720 | +} | ||
| 721 | + | ||
| 722 | +TEST_F(UtestAclGraphParser, test_acl_graph_parser_util_parse_params_before_graph_invalid_out_nodes) { | ||
| 723 | + ParerUTestsUtils::ClearParserInnerCtx(); | ||
| 724 | + GetParserContext().type = domi::TENSORFLOW; | ||
| 725 | + AclGraphParserUtil acl_graph_parse_util; | ||
| 726 | + std::map<AscendString, AscendString> params = {{AscendString(ge::ir_option::OUT_NODES), AscendString("node1:abc")}}; | ||
| 727 | + string graph_name; | ||
| 728 | + auto ret = acl_graph_parse_util.ParseParamsBeforeGraph(params, graph_name); | ||
| 729 | + EXPECT_EQ(ret, PARAM_INVALID); | ||
| 730 | +} | ||
| 731 | + | ||
| 732 | +TEST_F(UtestAclGraphParser, test_acl_graph_parser_util_parse_params_before_graph_out_nodes_overflow) { | ||
| 733 | + ParerUTestsUtils::ClearParserInnerCtx(); | ||
| 734 | + GetParserContext().type = domi::TENSORFLOW; | ||
| 735 | + AclGraphParserUtil acl_graph_parse_util; | ||
| 736 | + std::map<AscendString, AscendString> params = { | ||
| 737 | + {AscendString(ge::ir_option::OUT_NODES), AscendString("node1:99999999999999999999")}}; | ||
| 738 | + string graph_name; | ||
| 739 | + auto ret = acl_graph_parse_util.ParseParamsBeforeGraph(params, graph_name); | ||
| 740 | + EXPECT_EQ(ret, PARAM_INVALID); | ||
| 741 | +} | ||
| 742 | + | ||
| 743 | +TEST_F(UtestAclGraphParser, test_acl_graph_parser_util_acl_parser_initialize) { | ||
| 744 | + AclGraphParserUtil acl_graph_parse_util; | ||
| 745 | + std::map<string, string> options; | ||
| 746 | + options.insert(std::pair<string, string>(string(ge::FRAMEWORK_TYPE), to_string(domi::TENSORFLOW))); | ||
| 747 | + auto ret = acl_graph_parse_util.AclParserInitialize(options); | ||
| 748 | + EXPECT_EQ(ret, SUCCESS); | ||
| 749 | +} | ||
| 750 | + | ||
| 751 | +TEST_F(UtestAclGraphParser, test_proto_file_parser_parse_nonexistent) { | ||
| 752 | + ProtoFileParser op; | ||
| 753 | + std::map<int, std::pair<string, string>> identifier_op_map; | ||
| 754 | + std::map<std::string, std::pair<int, string>> op_identifier_map; | ||
| 755 | + auto ret = op.ParseProtoFile("nonexistent_file.proto", identifier_op_map, op_identifier_map); | ||
| 756 | + EXPECT_EQ(ret, FAILED); | ||
| 757 | +} | ||
| 758 | + | ||
| 759 | +TEST_F(UtestAclGraphParser, test_proto_file_parser_find_conflict_line_nonexistent) { | ||
| 760 | + ProtoFileParser op; | ||
| 761 | + std::string dest_line; | ||
| 762 | + auto ret = op.FindConflictLine("nonexistent_file.proto", 1, dest_line); | ||
| 763 | + EXPECT_EQ(ret, FAILED); | ||
| 764 | +} | ||
| 765 | + | ||
| 766 | +TEST_F(UtestAclGraphParser, test_proto_file_parser_record_proto_message_nonexistent) { | ||
| 767 | + ProtoFileParser op; | ||
| 768 | + auto ret = op.RecordProtoMessage("nonexistent_file.proto"); | ||
| 769 | + EXPECT_EQ(ret, FAILED); | ||
| 770 | +} | ||
| 771 | + | ||
| 772 | +TEST_F(UtestAclGraphParser, test_proto_file_parser_combine_proto_nonexistent) { | ||
| 773 | + ProtoFileParser op; | ||
| 774 | + std::string dest_proto_file; | ||
| 775 | + auto ret = op.CombineProtoFile("nonexistent_caffe.proto", "nonexistent_custom.proto", dest_proto_file); | ||
| 776 | + EXPECT_EQ(ret, FAILED); | ||
| 777 | +} | ||
| 778 | + | ||
| 779 | +TEST_F(UtestAclGraphParser, test_proto_file_parser_combine_multi_custom_nonexistent) { | ||
| 780 | + ProtoFileParser op("fusion_test.proto"); | ||
| 781 | + std::string dest_proto_file; | ||
| 782 | + auto ret = | ||
| 783 | + op.CombineProtoFileMultiCustomProto("nonexistent_caffe.proto", "nonexistent_custom.proto", dest_proto_file); | ||
| 784 | + EXPECT_EQ(ret, FAILED); | ||
| 785 | +} | ||
| 786 | + | ||
| 787 | +TEST_F(UtestAclGraphParser, test_proto_file_parser_add_custom_and_conflict_layer_nonexistent) { | ||
| 788 | + ProtoFileParser op; | ||
| 789 | + std::ofstream write_tmp; | ||
| 790 | + write_tmp.open("test_write_tmp.proto", std::ios::out); | ||
| 791 | + auto ret = op.AddCustomAndConflictLayer("nonexistent_custom.proto", write_tmp); | ||
| 792 | + EXPECT_EQ(ret, FAILED); | ||
| 793 | + write_tmp.close(); | ||
| 794 | + remove("test_write_tmp.proto"); | ||
| 795 | +} | ||
| 796 | + | ||
| 797 | +TEST_F(UtestAclGraphParser, test_proto_file_parser_add_custom_and_conflict_message_nonexistent) { | ||
| 798 | + ProtoFileParser op; | ||
| 799 | + std::ofstream write_tmp; | ||
| 800 | + write_tmp.open("test_write_tmp2.proto", std::ios::out); | ||
| 801 | + auto ret = op.AddCustomAndConflictMessage("nonexistent_custom.proto", write_tmp); | ||
| 802 | + EXPECT_EQ(ret, FAILED); | ||
| 803 | + write_tmp.close(); | ||
| 804 | + remove("test_write_tmp2.proto"); | ||
| 805 | +} | ||
| 806 | + | ||
| 807 | +TEST_F(UtestAclGraphParser, test_proto_file_parser_reset_and_set) { | ||
| 808 | + ProtoFileParser op("test_fusion.proto"); | ||
| 809 | + op.ResetParserStatus(true); | ||
| 810 | + op.SetFusionProtoPath("test_path"); | ||
| 811 | + EXPECT_EQ(op.GetFusionProtoFile(), "test_path"); | ||
| 812 | + auto path = op.ResetFusionProtoPath(); | ||
| 813 | + EXPECT_EQ(path, "test_path"); | ||
| 814 | + EXPECT_EQ(op.GetFusionProtoFile(), ""); | ||
| 815 | +} | ||
| 816 | + | ||
| 817 | +TEST_F(UtestAclGraphParser, test_acl_graph_parser_util_input_fp16_nodes_with_data) { | ||
| 818 | + ParerUTestsUtils::ClearParserInnerCtx(); | ||
| 819 | + AclGraphParserUtil acl_graph_parse_util; | ||
| 820 | + ge::ComputeGraphPtr compute_graph = std::make_shared<ge::ComputeGraph>("test_fp16"); | ||
| 821 | + ge::OpDescPtr data_op = std::make_shared<ge::OpDesc>("data_fp16", "Data"); | ||
| 822 | + data_op->AddInputDesc(ge::GeTensorDesc()); | ||
| 823 | + data_op->AddOutputDesc(ge::GeTensorDesc()); | ||
| 824 | + compute_graph->AddNode(data_op); | ||
| 825 | + ge::Graph graph = ge::GraphUtilsEx::CreateGraphFromComputeGraph(compute_graph); | ||
| 826 | + | ||
| 827 | + std::map<AscendString, AscendString> parser_params; | ||
| 828 | + parser_params[AscendString(ge::ir_option::INPUT_FP16_NODES)] = AscendString("data_fp16"); | ||
| 829 | + parser_params[AscendString(ge::ir_option::IS_INPUT_ADJUST_HW_LAYOUT)] = AscendString("true"); | ||
| 830 | + auto ret = acl_graph_parse_util.ParseParamsAfterGraph(graph, parser_params); | ||
| 831 | + EXPECT_EQ(ret, SUCCESS); | ||
| 832 | +} | ||
| 833 | + | ||
| 834 | +TEST_F(UtestAclGraphParser, test_acl_graph_parser_util_input_fp16_nodes_not_data) { | ||
| 835 | + ParerUTestsUtils::ClearParserInnerCtx(); | ||
| 836 | + AclGraphParserUtil acl_graph_parse_util; | ||
| 837 | + ge::ComputeGraphPtr compute_graph = std::make_shared<ge::ComputeGraph>("test_fp16_not_data"); | ||
| 838 | + ge::OpDescPtr op = std::make_shared<ge::OpDesc>("not_data", "Relu"); | ||
| 839 | + op->AddInputDesc(ge::GeTensorDesc()); | ||
| 840 | + op->AddOutputDesc(ge::GeTensorDesc()); | ||
| 841 | + compute_graph->AddNode(op); | ||
| 842 | + ge::Graph graph = ge::GraphUtilsEx::CreateGraphFromComputeGraph(compute_graph); | ||
| 843 | + | ||
| 844 | + std::map<AscendString, AscendString> parser_params; | ||
| 845 | + parser_params[AscendString(ge::ir_option::INPUT_FP16_NODES)] = AscendString("not_data"); | ||
| 846 | + parser_params[AscendString(ge::ir_option::IS_INPUT_ADJUST_HW_LAYOUT)] = AscendString("true"); | ||
| 847 | + auto ret = acl_graph_parse_util.ParseParamsAfterGraph(graph, parser_params); | ||
| 848 | + EXPECT_EQ(ret, PARAM_INVALID); | ||
| 849 | +} | ||
| 368 | } // namespace ge | 850 | } // namespace ge |
| @@ -17,6 +17,8 @@ | |||
| 17 | 17 | ||
| 18 | 18 | ||
| 19 | 19 | ||
| 20 | + | ||
| 21 | + | ||
| 20 | 22 | ||
| 21 | namespace ge { | 23 | namespace ge { |
| 22 | class UtestGraphOptimizer : public testing::Test { | 24 | class UtestGraphOptimizer : public testing::Test { |
| @@ -66,4 +68,92 @@ TEST_F(UtestGraphOptimizer, graph_optimizer_output) { | |||
| 66 | EXPECT_NE(parserGraphOptimizer.RebuildInputAnchors(input_anchors, fusion_op_desc), ge::SUCCESS); | 68 | EXPECT_NE(parserGraphOptimizer.RebuildInputAnchors(input_anchors, fusion_op_desc), ge::SUCCESS); |
| 67 | EXPECT_NE(parserGraphOptimizer.RebuildOutputAnchors(output_anchors, fusion_op_desc), ge::SUCCESS); | 69 | EXPECT_NE(parserGraphOptimizer.RebuildOutputAnchors(output_anchors, fusion_op_desc), ge::SUCCESS); |
| 68 | } | 70 | } |
| 71 | + | ||
| 72 | +TEST_F(UtestGraphOptimizer, graph_optimizer_rebuild_anchors_with_data) { | ||
| 73 | + ge::ComputeGraphPtr graph = std::make_shared<ge::ComputeGraph>("test_graph"); | ||
| 74 | + ge::OpDescPtr op1 = std::make_shared<ge::OpDesc>("node1", "Relu"); | ||
| 75 | + op1->AddInputDesc("x", ge::GeTensorDesc()); | ||
| 76 | + op1->AddOutputDesc("y", ge::GeTensorDesc()); | ||
| 77 | + ge::NodePtr node1 = graph->AddNode(op1); | ||
| 78 | + | ||
| 79 | + ge::OpDescPtr op2 = std::make_shared<ge::OpDesc>("node2", "Relu"); | ||
| 80 | + op2->AddInputDesc("x", ge::GeTensorDesc()); | ||
| 81 | + op2->AddOutputDesc("y", ge::GeTensorDesc()); | ||
| 82 | + ge::NodePtr node2 = graph->AddNode(op2); | ||
| 83 | + | ||
| 84 | + ge::GraphUtils::AddEdge(node1->GetOutDataAnchor(0), node2->GetInDataAnchor(0)); | ||
| 85 | + | ||
| 86 | + domi::FrameworkType type = domi::TENSORFLOW; | ||
| 87 | + ge::ParserGraphOptimizer parserGraphOptimizer(graph, type); | ||
| 88 | + | ||
| 89 | + vector<ge::OutDataAnchorPtr> output_anchors = {node1->GetOutDataAnchor(0)}; | ||
| 90 | + ge::OpDescPtr fusion_op_desc = std::make_shared<ge::OpDesc>("fusion", "Relu"); | ||
| 91 | + auto ret = parserGraphOptimizer.RebuildOutputAnchors(output_anchors, fusion_op_desc); | ||
| 92 | + EXPECT_EQ(ret, ge::SUCCESS); | ||
| 93 | + | ||
| 94 | + vector<ge::InDataAnchorPtr> input_anchors = {node2->GetInDataAnchor(0)}; | ||
| 95 | + fusion_op_desc = std::make_shared<ge::OpDesc>("fusion", "Relu"); | ||
| 96 | + ret = parserGraphOptimizer.RebuildInputAnchors(input_anchors, fusion_op_desc); | ||
| 97 | + EXPECT_EQ(ret, ge::SUCCESS); | ||
| 98 | +} | ||
| 99 | + | ||
| 100 | +TEST_F(UtestGraphOptimizer, graph_optimizer_fusion_fmkop_empty) { | ||
| 101 | + ge::ComputeGraphPtr graph = std::make_shared<ge::ComputeGraph>("empty_graph"); | ||
| 102 | + domi::FrameworkType type = domi::TENSORFLOW; | ||
| 103 | + ge::ParserGraphOptimizer parserGraphOptimizer(graph, type); | ||
| 104 | + auto ret = parserGraphOptimizer.FusionFmkop(); | ||
| 105 | + EXPECT_EQ(ret, ge::SUCCESS); | ||
| 106 | +} | ||
| 107 | + | ||
| 108 | +TEST_F(UtestGraphOptimizer, graph_optimizer_mark_for_fusion) { | ||
| 109 | + ge::ComputeGraphPtr graph = std::make_shared<ge::ComputeGraph>("fusion_graph"); | ||
| 110 | + ge::OpDescPtr iter_op = std::make_shared<ge::OpDesc>("iter", ge::parser::FRAMEWORKOP); | ||
| 111 | + iter_op->AddInputDesc(ge::GeTensorDesc()); | ||
| 112 | + iter_op->AddOutputDesc(ge::GeTensorDesc()); | ||
| 113 | + ge::AttrUtils::SetStr(iter_op, ge::ATTR_NAME_FRAMEWORK_ORIGINAL_TYPE, "IteratorV2"); | ||
| 114 | + ge::NodePtr iter_node = graph->AddNode(iter_op); | ||
| 115 | + | ||
| 116 | + domi::FrameworkType type = domi::TENSORFLOW; | ||
| 117 | + ge::ParserGraphOptimizer parserGraphOptimizer(graph, type); | ||
| 118 | + std::unordered_map<std::string, std::vector<ge::NodePtr>> node_cluster_map; | ||
| 119 | + auto ret = parserGraphOptimizer.MarkForFusion(node_cluster_map); | ||
| 120 | + EXPECT_EQ(ret, ge::SUCCESS); | ||
| 121 | +} | ||
| 122 | + | ||
| 123 | +TEST_F(UtestGraphOptimizer, graph_optimizer_find_fmk_node_cluster) { | ||
| 124 | + ge::ComputeGraphPtr graph = std::make_shared<ge::ComputeGraph>("cluster_graph"); | ||
| 125 | + ge::OpDescPtr op1 = std::make_shared<ge::OpDesc>("fmk1", ge::parser::FRAMEWORKOP); | ||
| 126 | + op1->AddInputDesc(ge::GeTensorDesc()); | ||
| 127 | + op1->AddOutputDesc(ge::GeTensorDesc()); | ||
| 128 | + ge::NodePtr node1 = graph->AddNode(op1); | ||
| 129 | + | ||
| 130 | + ge::OpDescPtr op2 = std::make_shared<ge::OpDesc>("fmk2", ge::parser::FRAMEWORKOP); | ||
| 131 | + op2->AddInputDesc(ge::GeTensorDesc()); | ||
| 132 | + op2->AddOutputDesc(ge::GeTensorDesc()); | ||
| 133 | + ge::NodePtr node2 = graph->AddNode(op2); | ||
| 134 | + | ||
| 135 | + ge::OpDescPtr op3 = std::make_shared<ge::OpDesc>("data1", ge::parser::DATA_TYPE); | ||
| 136 | + op3->AddInputDesc(ge::GeTensorDesc()); | ||
| 137 | + op3->AddOutputDesc(ge::GeTensorDesc()); | ||
| 138 | + ge::NodePtr node3 = graph->AddNode(op3); | ||
| 139 | + | ||
| 140 | + domi::FrameworkType type = domi::TENSORFLOW; | ||
| 141 | + ge::ParserGraphOptimizer parserGraphOptimizer(graph, type); | ||
| 142 | + std::unordered_map<std::string, std::vector<ge::NodePtr>> node_cluster_map; | ||
| 143 | + auto ret = parserGraphOptimizer.FindFmkNodeCluser(node_cluster_map); | ||
| 144 | + EXPECT_EQ(ret, ge::SUCCESS); | ||
| 145 | +} | ||
| 146 | + | ||
| 147 | +TEST_F(UtestGraphOptimizer, graph_optimizer_dyn_get_next) { | ||
| 148 | + ge::ComputeGraphPtr graph = std::make_shared<ge::ComputeGraph>("dyn_graph"); | ||
| 149 | + ge::OpDescPtr dyn_op = std::make_shared<ge::OpDesc>("dyn_getnext", "DynamicGetNext"); | ||
| 150 | + dyn_op->AddInputDesc(ge::GeTensorDesc()); | ||
| 151 | + dyn_op->AddOutputDesc(ge::GeTensorDesc()); | ||
| 152 | + ge::NodePtr dyn_node = graph->AddNode(dyn_op); | ||
| 153 | + | ||
| 154 | + domi::FrameworkType type = domi::TENSORFLOW; | ||
| 155 | + ge::ParserGraphOptimizer parserGraphOptimizer(graph, type); | ||
| 156 | + auto ret = parserGraphOptimizer.FusionFmkop(); | ||
| 157 | + EXPECT_EQ(ret, ge::SUCCESS); | ||
| 158 | +} | ||
| 69 | } // namespace ge | 159 | } // namespace ge |
| @@ -15,6 +15,7 @@ | |||
| 15 | 15 | ||
| 16 | 16 | ||
| 17 | 17 | ||
| 18 | + | ||
| 18 | 19 | ||
| 19 | namespace ge { | 20 | namespace ge { |
| 20 | class UtestMessage2Operator : public testing::Test { | 21 | class UtestMessage2Operator : public testing::Test { |
| @@ -99,4 +100,100 @@ TEST_F(UtestMessage2Operator, enum_to_json_success) { | |||
| 99 | ge::Pb2Json::EnumJson2Json(json); | 100 | ge::Pb2Json::EnumJson2Json(json); |
| 100 | EXPECT_NE(json.size(), 0U); | 101 | EXPECT_NE(json.size(), 0U); |
| 101 | } | 102 | } |
| 103 | + | ||
| 104 | +TEST_F(UtestMessage2Operator, message_to_operator_int64_field) { | ||
| 105 | + ge::onnx::NodeProto input_node; | ||
| 106 | + ge::onnx::AttributeProto *attribute = input_node.add_attribute(); | ||
| 107 | + attribute->set_name("int_attr"); | ||
| 108 | + attribute->set_type(onnx::AttributeProto::AttributeType(2)); | ||
| 109 | + attribute->set_i(42); | ||
| 110 | + ge::Operator op_src("add", "Add"); | ||
| 111 | + auto ret = Message2Operator::ParseOperatorAttrs(attribute, 1, op_src); | ||
| 112 | + EXPECT_EQ(ret, SUCCESS); | ||
| 113 | +} | ||
| 114 | + | ||
| 115 | +TEST_F(UtestMessage2Operator, message_to_operator_string_field) { | ||
| 116 | + ge::onnx::NodeProto input_node; | ||
| 117 | + ge::onnx::AttributeProto *attribute = input_node.add_attribute(); | ||
| 118 | + attribute->set_name("str_attr"); | ||
| 119 | + attribute->set_type(onnx::AttributeProto::AttributeType(3)); | ||
| 120 | + attribute->set_s("hello"); | ||
| 121 | + ge::Operator op_src("add", "Add"); | ||
| 122 | + auto ret = Message2Operator::ParseOperatorAttrs(attribute, 1, op_src); | ||
| 123 | + EXPECT_EQ(ret, SUCCESS); | ||
| 124 | +} | ||
| 125 | + | ||
| 126 | +TEST_F(UtestMessage2Operator, message_to_operator_repeated_float_field) { | ||
| 127 | + ge::onnx::NodeProto input_node; | ||
| 128 | + ge::onnx::AttributeProto *attribute = input_node.add_attribute(); | ||
| 129 | + attribute->set_name("floats_attr"); | ||
| 130 | + attribute->add_floats(1.0f); | ||
| 131 | + attribute->add_floats(2.0f); | ||
| 132 | + ge::Operator op_src("add", "Add"); | ||
| 133 | + auto ret = Message2Operator::ParseOperatorAttrs(attribute, 1, op_src); | ||
| 134 | + EXPECT_EQ(ret, SUCCESS); | ||
| 135 | +} | ||
| 136 | + | ||
| 137 | +TEST_F(UtestMessage2Operator, message_to_operator_repeated_int32_field) { | ||
| 138 | + ge::onnx::TensorProto tensor; | ||
| 139 | + tensor.add_int32_data(10); | ||
| 140 | + tensor.add_int32_data(20); | ||
| 141 | + ge::Operator op_src("add", "Add"); | ||
| 142 | + auto ret = Message2Operator::ParseOperatorAttrs(&tensor, 1, op_src); | ||
| 143 | + EXPECT_EQ(ret, SUCCESS); | ||
| 144 | +} | ||
| 145 | + | ||
| 146 | +TEST_F(UtestMessage2Operator, message_to_operator_repeated_float_via_tensor) { | ||
| 147 | + ge::onnx::TensorProto tensor; | ||
| 148 | + tensor.add_float_data(1.0f); | ||
| 149 | + tensor.add_float_data(2.0f); | ||
| 150 | + ge::Operator op_src("add", "Add"); | ||
| 151 | + auto ret = Message2Operator::ParseOperatorAttrs(&tensor, 1, op_src); | ||
| 152 | + EXPECT_EQ(ret, SUCCESS); | ||
| 153 | +} | ||
| 154 | + | ||
| 155 | +TEST_F(UtestMessage2Operator, message_to_operator_uint32_field) { | ||
| 156 | + domi::caffe::ConvolutionParameter conv_param; | ||
| 157 | + conv_param.set_num_output(64U); | ||
| 158 | + ge::Operator op_src("conv", "Convolution"); | ||
| 159 | + auto ret = Message2Operator::ParseOperatorAttrs(&conv_param, 1, op_src); | ||
| 160 | + EXPECT_EQ(ret, SUCCESS); | ||
| 161 | +} | ||
| 162 | + | ||
| 163 | +TEST_F(UtestMessage2Operator, message_to_operator_bool_field) { | ||
| 164 | + domi::caffe::ConvolutionParameter conv_param; | ||
| 165 | + conv_param.set_bias_term(true); | ||
| 166 | + conv_param.set_num_output(32U); | ||
| 167 | + ge::Operator op_src("conv", "Convolution"); | ||
| 168 | + auto ret = Message2Operator::ParseOperatorAttrs(&conv_param, 1, op_src); | ||
| 169 | + EXPECT_EQ(ret, SUCCESS); | ||
| 170 | +} | ||
| 171 | + | ||
| 172 | +TEST_F(UtestMessage2Operator, message_to_operator_repeated_float_via_caffe_blob) { | ||
| 173 | + domi::caffe::BlobProto blob; | ||
| 174 | + blob.add_data(1.0f); | ||
| 175 | + blob.add_data(2.0f); | ||
| 176 | + ge::Operator op_src("blob", "Blob"); | ||
| 177 | + auto ret = Message2Operator::ParseOperatorAttrs(&blob, 1, op_src); | ||
| 178 | + EXPECT_EQ(ret, SUCCESS); | ||
| 179 | +} | ||
| 180 | + | ||
| 181 | +TEST_F(UtestMessage2Operator, message_to_operator_repeated_int32_via_caffe_blob) { | ||
| 182 | + domi::caffe::BlobProto blob; | ||
| 183 | + blob.add_int32_data(10); | ||
| 184 | + blob.add_int32_data(20); | ||
| 185 | + ge::Operator op_src("blob", "Blob"); | ||
| 186 | + auto ret = Message2Operator::ParseOperatorAttrs(&blob, 1, op_src); | ||
| 187 | + EXPECT_EQ(ret, SUCCESS); | ||
| 188 | +} | ||
| 189 | + | ||
| 190 | +TEST_F(UtestMessage2Operator, message_to_operator_repeated_message_field) { | ||
| 191 | + ge::onnx::NodeProto input_node; | ||
| 192 | + ge::onnx::AttributeProto *attribute = input_node.add_attribute(); | ||
| 193 | + attribute->set_name("tensors_attr"); | ||
| 194 | + attribute->mutable_tensors()->Add(); | ||
| 195 | + ge::Operator op_src("add", "Add"); | ||
| 196 | + auto ret = Message2Operator::ParseOperatorAttrs(attribute, 1, op_src); | ||
| 197 | + EXPECT_EQ(ret, SUCCESS); | ||
| 198 | +} | ||
| 102 | } // namespace ge | 199 | } // namespace ge |
| @@ -27,6 +27,9 @@ | |||
| 27 | 27 | ||
| 28 | 28 | ||
| 29 | 29 | ||
| 30 | + | ||
| 31 | + | ||
| 32 | + | ||
| 30 | 33 | ||
| 31 | namespace ge { | 34 | namespace ge { |
| 32 | class UtestOnnxParser : public testing::Test { | 35 | class UtestOnnxParser : public testing::Test { |
| @@ -1426,4 +1429,285 @@ TEST_F(UtestOnnxParser, onnx_test_no_input_op_in_root_graph) { | |||
| 1426 | auto node_found = compute_graph->FindNode("RandomNormal_0"); | 1429 | auto node_found = compute_graph->FindNode("RandomNormal_0"); |
| 1427 | EXPECT_NE(node_found, nullptr); | 1430 | EXPECT_NE(node_found, nullptr); |
| 1428 | } | 1431 | } |
| 1432 | + | ||
| 1433 | +TEST_F(UtestOnnxParser, auto_mapping_subgraph_with_output_nodes) { | ||
| 1434 | + auto compute_graph = std::make_shared<ge::ComputeGraph>("test_auto_map_out"); | ||
| 1435 | + auto data_op = std::make_shared<ge::OpDesc>("data_out_1", "Data"); | ||
| 1436 | + data_op->AddInputDesc(ge::GeTensorDesc()); | ||
| 1437 | + data_op->AddOutputDesc(ge::GeTensorDesc()); | ||
| 1438 | + ge::AttrUtils::SetInt(data_op, ge::ATTR_NAME_INDEX, 0); | ||
| 1439 | + auto data_node = compute_graph->AddNode(data_op); | ||
| 1440 | + | ||
| 1441 | + auto netoutput_op = std::make_shared<ge::OpDesc>("netoutput_out_1", "NetOutput"); | ||
| 1442 | + netoutput_op->AddInputDesc(ge::GeTensorDesc()); | ||
| 1443 | + netoutput_op->AddOutputDesc(ge::GeTensorDesc()); | ||
| 1444 | + auto netoutput_node = compute_graph->AddNode(netoutput_op); | ||
| 1445 | + | ||
| 1446 | + ge::GraphUtils::AddEdge(data_node->GetOutDataAnchor(0), netoutput_node->GetInDataAnchor(0)); | ||
| 1447 | + compute_graph->AddOutputNodeByIndex(netoutput_node, 0); | ||
| 1448 | + | ||
| 1449 | + ge::Graph graph = ge::GraphUtilsEx::CreateGraphFromComputeGraph(compute_graph); | ||
| 1450 | + auto func = domi::FrameworkRegistry::Instance().GetAutoMappingSubgraphIOIndexFunc(domi::ONNX); | ||
| 1451 | + ASSERT_NE(func, nullptr); | ||
| 1452 | + auto ret = func( | ||
| 1453 | + graph, | ||
| 1454 | + [&](int data_index, int &parent_index) -> Status { | ||
| 1455 | + parent_index = data_index; | ||
| 1456 | + return SUCCESS; | ||
| 1457 | + }, | ||
| 1458 | + [&](int output_index, int &parent_index) -> Status { | ||
| 1459 | + parent_index = output_index; | ||
| 1460 | + return SUCCESS; | ||
| 1461 | + }); | ||
| 1462 | + EXPECT_EQ(ret, SUCCESS); | ||
| 1463 | +} | ||
| 1464 | + | ||
| 1465 | +TEST_F(UtestOnnxParser, auto_mapping_subgraph_data_without_index_attr) { | ||
| 1466 | + auto compute_graph = std::make_shared<ge::ComputeGraph>("test_auto_map_no_idx"); | ||
| 1467 | + auto data_op = std::make_shared<ge::OpDesc>("data_no_idx", "Data"); | ||
| 1468 | + data_op->AddInputDesc(ge::GeTensorDesc()); | ||
| 1469 | + data_op->AddOutputDesc(ge::GeTensorDesc()); | ||
| 1470 | + compute_graph->AddNode(data_op); | ||
| 1471 | + | ||
| 1472 | + ge::Graph graph = ge::GraphUtilsEx::CreateGraphFromComputeGraph(compute_graph); | ||
| 1473 | + auto func = domi::FrameworkRegistry::Instance().GetAutoMappingSubgraphIOIndexFunc(domi::ONNX); | ||
| 1474 | + ASSERT_NE(func, nullptr); | ||
| 1475 | + auto ret = func( | ||
| 1476 | + graph, | ||
| 1477 | + [&](int data_index, int &parent_index) -> Status { | ||
| 1478 | + parent_index = data_index; | ||
| 1479 | + return SUCCESS; | ||
| 1480 | + }, | ||
| 1481 | + [&](int output_index, int &parent_index) -> Status { | ||
| 1482 | + parent_index = output_index; | ||
| 1483 | + return SUCCESS; | ||
| 1484 | + }); | ||
| 1485 | + EXPECT_EQ(ret, FAILED); | ||
| 1486 | +} | ||
| 1487 | + | ||
| 1488 | +TEST_F(UtestOnnxParser, auto_mapping_subgraph_input_callback_failure) { | ||
| 1489 | + auto compute_graph = std::make_shared<ge::ComputeGraph>("test_auto_map_cb_fail"); | ||
| 1490 | + auto data_op = std::make_shared<ge::OpDesc>("data_cb_fail", "Data"); | ||
| 1491 | + data_op->AddInputDesc(ge::GeTensorDesc()); | ||
| 1492 | + data_op->AddOutputDesc(ge::GeTensorDesc()); | ||
| 1493 | + ge::AttrUtils::SetInt(data_op, ge::ATTR_NAME_INDEX, 0); | ||
| 1494 | + compute_graph->AddNode(data_op); | ||
| 1495 | + | ||
| 1496 | + ge::Graph graph = ge::GraphUtilsEx::CreateGraphFromComputeGraph(compute_graph); | ||
| 1497 | + auto func = domi::FrameworkRegistry::Instance().GetAutoMappingSubgraphIOIndexFunc(domi::ONNX); | ||
| 1498 | + ASSERT_NE(func, nullptr); | ||
| 1499 | + auto ret = func( | ||
| 1500 | + graph, [&](int data_index, int &parent_index) -> Status { return FAILED; }, | ||
| 1501 | + [&](int output_index, int &parent_index) -> Status { | ||
| 1502 | + parent_index = output_index; | ||
| 1503 | + return SUCCESS; | ||
| 1504 | + }); | ||
| 1505 | + EXPECT_EQ(ret, FAILED); | ||
| 1506 | +} | ||
| 1507 | + | ||
| 1508 | +TEST_F(UtestOnnxParser, auto_mapping_subgraph_output_callback_failure) { | ||
| 1509 | + auto compute_graph = std::make_shared<ge::ComputeGraph>("test_auto_map_out_cb_fail"); | ||
| 1510 | + auto data_op = std::make_shared<ge::OpDesc>("data_out_cb", "Data"); | ||
| 1511 | + data_op->AddInputDesc(ge::GeTensorDesc()); | ||
| 1512 | + data_op->AddOutputDesc(ge::GeTensorDesc()); | ||
| 1513 | + ge::AttrUtils::SetInt(data_op, ge::ATTR_NAME_INDEX, 0); | ||
| 1514 | + auto data_node = compute_graph->AddNode(data_op); | ||
| 1515 | + | ||
| 1516 | + auto netoutput_op = std::make_shared<ge::OpDesc>("netoutput_cb", "NetOutput"); | ||
| 1517 | + netoutput_op->AddInputDesc(ge::GeTensorDesc()); | ||
| 1518 | + netoutput_op->AddOutputDesc(ge::GeTensorDesc()); | ||
| 1519 | + auto netoutput_node = compute_graph->AddNode(netoutput_op); | ||
| 1520 | + | ||
| 1521 | + ge::GraphUtils::AddEdge(data_node->GetOutDataAnchor(0), netoutput_node->GetInDataAnchor(0)); | ||
| 1522 | + compute_graph->AddOutputNodeByIndex(netoutput_node, 0); | ||
| 1523 | + | ||
| 1524 | + ge::Graph graph = ge::GraphUtilsEx::CreateGraphFromComputeGraph(compute_graph); | ||
| 1525 | + auto func = domi::FrameworkRegistry::Instance().GetAutoMappingSubgraphIOIndexFunc(domi::ONNX); | ||
| 1526 | + ASSERT_NE(func, nullptr); | ||
| 1527 | + auto ret = func( | ||
| 1528 | + graph, | ||
| 1529 | + [&](int data_index, int &parent_index) -> Status { | ||
| 1530 | + parent_index = data_index; | ||
| 1531 | + return SUCCESS; | ||
| 1532 | + }, | ||
| 1533 | + [&](int output_index, int &parent_index) -> Status { return FAILED; }); | ||
| 1534 | + EXPECT_EQ(ret, FAILED); | ||
| 1535 | +} | ||
| 1536 | + | ||
| 1537 | +TEST_F(UtestOnnxParser, auto_mapping_subgraph_null_input_output) { | ||
| 1538 | + ge::Graph graph; | ||
| 1539 | + auto func = domi::FrameworkRegistry::Instance().GetAutoMappingSubgraphIOIndexFunc(domi::ONNX); | ||
| 1540 | + ASSERT_NE(func, nullptr); | ||
| 1541 | + std::function<Status(int, int &)> null_input = nullptr; | ||
| 1542 | + std::function<Status(int, int &)> null_output = nullptr; | ||
| 1543 | + auto ret = func(graph, null_input, null_output); | ||
| 1544 | + EXPECT_NE(ret, SUCCESS); | ||
| 1545 | +} | ||
| 1546 | + | ||
| 1547 | +TEST_F(UtestOnnxParser, aclgrphParseONNX_null_file) { | ||
| 1548 | + std::map<AscendString, AscendString> parser_params; | ||
| 1549 | + ge::Graph graph; | ||
| 1550 | + auto ret = aclgrphParseONNX(nullptr, parser_params, graph); | ||
| 1551 | + EXPECT_NE(ret, SUCCESS); | ||
| 1552 | +} | ||
| 1553 | + | ||
| 1554 | +TEST_F(UtestOnnxParser, aclgrphParseONNX_invalid_file) { | ||
| 1555 | + std::map<AscendString, AscendString> parser_params; | ||
| 1556 | + ge::Graph graph; | ||
| 1557 | + auto ret = aclgrphParseONNX("nonexistent_model.onnx", parser_params, graph); | ||
| 1558 | + EXPECT_NE(ret, SUCCESS); | ||
| 1559 | +} | ||
| 1560 | + | ||
| 1561 | +TEST_F(UtestOnnxParser, aclgrphParseONNX_with_params_null_file) { | ||
| 1562 | + std::map<AscendString, AscendString> parser_params; | ||
| 1563 | + ge::Graph graph; | ||
| 1564 | + auto ret = aclgrphParseONNX(nullptr, parser_params, graph); | ||
| 1565 | + EXPECT_NE(ret, SUCCESS); | ||
| 1566 | +} | ||
| 1567 | + | ||
| 1568 | +TEST_F(UtestOnnxParser, aclgrphParseONNX_with_params_invalid_file) { | ||
| 1569 | + std::map<AscendString, AscendString> parser_params; | ||
| 1570 | + ge::Graph graph; | ||
| 1571 | + auto ret = aclgrphParseONNX("nonexistent_model2.onnx", parser_params, graph); | ||
| 1572 | + EXPECT_NE(ret, SUCCESS); | ||
| 1573 | +} | ||
| 1574 | + | ||
| 1575 | +TEST_F(UtestOnnxParser, onnx_parser_to_json_invalid) { | ||
| 1576 | + OnnxModelParser parser; | ||
| 1577 | + auto ret = parser.ToJson("nonexistent_model.onnx", "output.json"); | ||
| 1578 | + EXPECT_NE(ret, SUCCESS); | ||
| 1579 | +} | ||
| 1580 | + | ||
| 1581 | +TEST_F(UtestOnnxParser, onnx_parser_to_json_null) { | ||
| 1582 | + OnnxModelParser parser; | ||
| 1583 | + auto ret = parser.ToJson(nullptr, "output.json"); | ||
| 1584 | + EXPECT_NE(ret, SUCCESS); | ||
| 1585 | + ret = parser.ToJson("model.onnx", nullptr); | ||
| 1586 | + EXPECT_NE(ret, SUCCESS); | ||
| 1587 | +} | ||
| 1588 | + | ||
| 1589 | +TEST_F(UtestOnnxParser, onnx_parser_parse_from_memory_null) { | ||
| 1590 | + OnnxModelParser parser; | ||
| 1591 | + ge::ComputeGraphPtr graph = std::make_shared<ge::ComputeGraph>("test"); | ||
| 1592 | + auto ret = parser.ParseFromMemory(nullptr, 0, graph); | ||
| 1593 | + EXPECT_EQ(ret, SUCCESS); | ||
| 1594 | +} | ||
| 1595 | + | ||
| 1596 | +TEST_F(UtestOnnxParser, onnx_model_parse_empty_graph) { | ||
| 1597 | + ge::onnx::ModelProto model_proto; | ||
| 1598 | + ge::onnx::OperatorSetIdProto *op_st = model_proto.add_opset_import(); | ||
| 1599 | + op_st->set_domain("ai.onnx"); | ||
| 1600 | + op_st->set_version(11); | ||
| 1601 | + model_proto.mutable_graph(); | ||
| 1602 | + OnnxModelParser model_parser; | ||
| 1603 | + ge::Graph root_graph("test_empty"); | ||
| 1604 | + auto ret = model_parser.ModelParseToGraph(model_proto, root_graph); | ||
| 1605 | + EXPECT_NE(ret, SUCCESS); | ||
| 1606 | +} | ||
| 1607 | + | ||
| 1608 | +TEST_F(UtestOnnxParser, onnx_model_parse_with_const_node) { | ||
| 1609 | + ge::onnx::ModelProto model_proto; | ||
| 1610 | + ge::onnx::OperatorSetIdProto *op_st = model_proto.add_opset_import(); | ||
| 1611 | + op_st->set_domain("ai.onnx"); | ||
| 1612 | + op_st->set_version(11); | ||
| 1613 | + auto *graph = model_proto.mutable_graph(); | ||
| 1614 | + auto *node = graph->add_node(); | ||
| 1615 | + node->set_name("const_0"); | ||
| 1616 | + node->set_op_type("Constant"); | ||
| 1617 | + auto *attr = node->add_attribute(); | ||
| 1618 | + attr->set_name("value"); | ||
| 1619 | + attr->set_type(ge::onnx::AttributeProto::TENSOR); | ||
| 1620 | + auto *tensor = attr->mutable_t(); | ||
| 1621 | + tensor->set_data_type(1); | ||
| 1622 | + tensor->add_dims(1); | ||
| 1623 | + node->add_output("const_output"); | ||
| 1624 | + | ||
| 1625 | + OnnxModelParser model_parser; | ||
| 1626 | + ge::Graph root_graph("test_const"); | ||
| 1627 | + auto ret = model_parser.ModelParseToGraph(model_proto, root_graph); | ||
| 1628 | + EXPECT_NE(ret, SUCCESS); | ||
| 1629 | +} | ||
| 1630 | + | ||
| 1631 | +TEST_F(UtestOnnxParser, onnx_model_parse_with_unsupported_op) { | ||
| 1632 | + ge::onnx::ModelProto model_proto; | ||
| 1633 | + ge::onnx::OperatorSetIdProto *op_st = model_proto.add_opset_import(); | ||
| 1634 | + op_st->set_domain("ai.onnx"); | ||
| 1635 | + op_st->set_version(11); | ||
| 1636 | + auto *graph = model_proto.mutable_graph(); | ||
| 1637 | + auto *node = graph->add_node(); | ||
| 1638 | + node->set_name("unsupported_0"); | ||
| 1639 | + node->set_op_type("UnsupportedOpType"); | ||
| 1640 | + node->add_input("input"); | ||
| 1641 | + node->add_output("output"); | ||
| 1642 | + | ||
| 1643 | + ge::onnx::ValueInfoProto *input = graph->add_input(); | ||
| 1644 | + input->set_name("input"); | ||
| 1645 | + auto tensor_type = input->mutable_type()->mutable_tensor_type(); | ||
| 1646 | + tensor_type->set_elem_type(1); | ||
| 1647 | + | ||
| 1648 | + OnnxModelParser model_parser; | ||
| 1649 | + ge::Graph root_graph("test_unsupported"); | ||
| 1650 | + auto ret = model_parser.ModelParseToGraph(model_proto, root_graph); | ||
| 1651 | + EXPECT_NE(ret, SUCCESS); | ||
| 1652 | +} | ||
| 1653 | + | ||
| 1654 | +TEST_F(UtestOnnxParser, onnx_parser_clear_and_error) { | ||
| 1655 | + OnnxModelParser parser; | ||
| 1656 | + parser.Clear(); | ||
| 1657 | + EXPECT_FALSE(parser.HasError()); | ||
| 1658 | +} | ||
| 1659 | + | ||
| 1660 | +TEST_F(UtestOnnxParser, onnx_model_parse_with_initializer) { | ||
| 1661 | + ge::onnx::ModelProto model_proto; | ||
| 1662 | + ge::onnx::OperatorSetIdProto *op_st = model_proto.add_opset_import(); | ||
| 1663 | + op_st->set_domain("ai.onnx"); | ||
| 1664 | + op_st->set_version(11); | ||
| 1665 | + auto *graph = model_proto.mutable_graph(); | ||
| 1666 | + auto *initializer = graph->add_initializer(); | ||
| 1667 | + initializer->set_name("init_0"); | ||
| 1668 | + initializer->set_data_type(1); | ||
| 1669 | + initializer->add_dims(2); | ||
| 1670 | + initializer->add_dims(3); | ||
| 1671 | + initializer->set_raw_data("\001\002\003\004\005\006"); | ||
| 1672 | + | ||
| 1673 | + OnnxModelParser model_parser; | ||
| 1674 | + ge::Graph root_graph("test_init"); | ||
| 1675 | + auto ret = model_parser.ModelParseToGraph(model_proto, root_graph); | ||
| 1676 | + EXPECT_NE(ret, SUCCESS); | ||
| 1677 | +} | ||
| 1678 | + | ||
| 1679 | +TEST_F(UtestOnnxParser, onnx_model_parse_with_multiple_inputs) { | ||
| 1680 | + ge::onnx::ModelProto model_proto; | ||
| 1681 | + ge::onnx::OperatorSetIdProto *op_st = model_proto.add_opset_import(); | ||
| 1682 | + op_st->set_domain("ai.onnx"); | ||
| 1683 | + op_st->set_version(11); | ||
| 1684 | + auto *graph = model_proto.mutable_graph(); | ||
| 1685 | + | ||
| 1686 | + ge::onnx::ValueInfoProto *input1 = graph->add_input(); | ||
| 1687 | + input1->set_name("X1"); | ||
| 1688 | + auto tensor_type1 = input1->mutable_type()->mutable_tensor_type(); | ||
| 1689 | + tensor_type1->set_elem_type(1); | ||
| 1690 | + | ||
| 1691 | + ge::onnx::ValueInfoProto *input2 = graph->add_input(); | ||
| 1692 | + input2->set_name("X2"); | ||
| 1693 | + auto tensor_type2 = input2->mutable_type()->mutable_tensor_type(); | ||
| 1694 | + tensor_type2->set_elem_type(1); | ||
| 1695 | + | ||
| 1696 | + ge::onnx::ValueInfoProto *output = graph->add_output(); | ||
| 1697 | + output->set_name("Y"); | ||
| 1698 | + auto tensor_type_y = output->mutable_type()->mutable_tensor_type(); | ||
| 1699 | + tensor_type_y->set_elem_type(1); | ||
| 1700 | + | ||
| 1701 | + auto *node = graph->add_node(); | ||
| 1702 | + node->set_name("add_0"); | ||
| 1703 | + node->set_op_type("Add"); | ||
| 1704 | + node->add_input("X1"); | ||
| 1705 | + node->add_input("X2"); | ||
| 1706 | + node->add_output("Y"); | ||
| 1707 | + | ||
| 1708 | + OnnxModelParser model_parser; | ||
| 1709 | + ge::Graph root_graph("test_multi_input"); | ||
| 1710 | + auto ret = model_parser.ModelParseToGraph(model_proto, root_graph); | ||
| 1711 | + EXPECT_EQ(ret, SUCCESS); | ||
| 1712 | +} | ||
| 1429 | } // namespace ge | 1713 | } // namespace ge |
| @@ -10,6 +10,9 @@ | |||
| 10 | 10 | ||
| 11 | 11 | ||
| 12 | 12 | ||
| 13 | + | ||
| 14 | + | ||
| 15 | + | ||
| 13 | 16 | ||
| 14 | 17 | ||
| 15 | 18 | ||
| @@ -119,4 +122,64 @@ TEST_F(UtestFuncToGraph, GraphDefLibGetGraphDef_success) { | |||
| 119 | 122 | ||
| 120 | GraphDefLibDestroy(&graphDefLib); | 123 | GraphDefLibDestroy(&graphDefLib); |
| 121 | } | 124 | } |
| 125 | + | ||
| 126 | +TEST_F(UtestFuncToGraph, GraphToFunctionDef_FindAttrValue_null_node) { | ||
| 127 | + domi::tensorflow::AttrValue attr_value; | ||
| 128 | + bool ret = GraphToFunctionDef::FindAttrValue(nullptr, "test_attr", attr_value); | ||
| 129 | + EXPECT_FALSE(ret); | ||
| 130 | +} | ||
| 131 | + | ||
| 132 | +TEST_F(UtestFuncToGraph, GraphToFunctionDef_FindAttrValue_success) { | ||
| 133 | + domi::tensorflow::NodeDef node_def; | ||
| 134 | + node_def.set_name("test_node"); | ||
| 135 | + domi::tensorflow::AttrValue attr_value; | ||
| 136 | + attr_value.set_i(42); | ||
| 137 | + (*node_def.mutable_attr())["test_attr"] = attr_value; | ||
| 138 | + | ||
| 139 | + domi::tensorflow::AttrValue result; | ||
| 140 | + bool ret = GraphToFunctionDef::FindAttrValue(&node_def, "test_attr", result); | ||
| 141 | + EXPECT_TRUE(ret); | ||
| 142 | + EXPECT_EQ(result.i(), 42); | ||
| 143 | + | ||
| 144 | + ret = GraphToFunctionDef::FindAttrValue(&node_def, "nonexistent", result); | ||
| 145 | + EXPECT_FALSE(ret); | ||
| 146 | +} | ||
| 147 | + | ||
| 148 | +TEST_F(UtestFuncToGraph, GraphToFunctionDef_AddNodeAttr_null_node) { | ||
| 149 | + domi::tensorflow::AttrValue value; | ||
| 150 | + value.set_i(10); | ||
| 151 | + GraphToFunctionDef::AddNodeAttr("test_attr", value, nullptr); | ||
| 152 | +} | ||
| 153 | + | ||
| 154 | +TEST_F(UtestFuncToGraph, GraphToFunctionDef_AddNodeAttr_success) { | ||
| 155 | + domi::tensorflow::NodeDef node_def; | ||
| 156 | + node_def.set_name("test_node"); | ||
| 157 | + domi::tensorflow::AttrValue value; | ||
| 158 | + value.set_i(10); | ||
| 159 | + GraphToFunctionDef::AddNodeAttr("test_attr", value, &node_def); | ||
| 160 | + EXPECT_TRUE(node_def.attr().find("test_attr") != node_def.attr().end()); | ||
| 161 | +} | ||
| 162 | + | ||
| 163 | +TEST_F(UtestFuncToGraph, NameMapHelper_GetUniqueName) { | ||
| 164 | + NameMapHelper helper; | ||
| 165 | + EXPECT_EQ(helper.GetUniqueName("name1"), "name1"); | ||
| 166 | + EXPECT_EQ(helper.GetUniqueName("name1"), "name1_0"); | ||
| 167 | + EXPECT_EQ(helper.GetUniqueName("name1"), "name1_1"); | ||
| 168 | +} | ||
| 169 | + | ||
| 170 | +TEST_F(UtestFuncToGraph, NameMapHelper_UniqueInputOrOutputName) { | ||
| 171 | + NameMapHelper helper; | ||
| 172 | + EXPECT_EQ(helper.UniqueInputOrOutputName("TestName"), "TestName"); | ||
| 173 | + EXPECT_EQ(helper.UniqueInputOrOutputName(""), "unknown"); | ||
| 174 | + EXPECT_EQ(helper.UniqueInputOrOutputName("test@name#"), "test@name#"); | ||
| 175 | +} | ||
| 176 | + | ||
| 177 | +TEST_F(UtestFuncToGraph, NameMapHelper_UniqueNodeName) { | ||
| 178 | + NameMapHelper helper; | ||
| 179 | + EXPECT_EQ(helper.UniqueNodeName("node1"), "node1"); | ||
| 180 | + std::string result = helper.Renormalize("node1"); | ||
| 181 | + EXPECT_EQ(result, "node1"); | ||
| 182 | + result = helper.Renormalize("nonexistent"); | ||
| 183 | + EXPECT_EQ(result, ""); | ||
| 184 | +} | ||
| 122 | } // namespace ge | 185 | } // namespace ge |
Mtests/parser/ut/parser/testcase/tensorflow_parser_testcase/tensorflow_auto_mapping_parser_adapter_unittest.cc+115-0
| @@ -17,6 +17,8 @@ | |||
| 17 | 17 | ||
| 18 | 18 | ||
| 19 | 19 | ||
| 20 | + | ||
| 21 | + | ||
| 20 | 22 | ||
| 21 | namespace ge { | 23 | namespace ge { |
| 22 | class UtestTensorflowAutoMappingParserAdapter : public testing::Test { | 24 | class UtestTensorflowAutoMappingParserAdapter : public testing::Test { |
| @@ -49,4 +51,117 @@ TEST_F(UtestTensorflowAutoMappingParserAdapter, success) { | |||
| 49 | EXPECT_EQ(ret, ge::FAILED); | 51 | EXPECT_EQ(ret, ge::FAILED); |
| 50 | } | 52 | } |
| 51 | 53 | ||
| 54 | +TEST_F(UtestTensorflowAutoMappingParserAdapter, null_op_src) { | ||
| 55 | + auto parser = TensorFlowAutoMappingParserAdapter(); | ||
| 56 | + auto op_desc = ge::parser::MakeShared<ge::OpDesc>("test", "Size"); | ||
| 57 | + auto ret = parser.ParseParams(nullptr, op_desc); | ||
| 58 | + EXPECT_EQ(ret, ge::PARAM_INVALID); | ||
| 59 | +} | ||
| 60 | + | ||
| 61 | +TEST_F(UtestTensorflowAutoMappingParserAdapter, null_op_dest) { | ||
| 62 | + auto parser = TensorFlowAutoMappingParserAdapter(); | ||
| 63 | + domi::tensorflow::NodeDef node; | ||
| 64 | + node.set_name("test"); | ||
| 65 | + node.set_op("Size"); | ||
| 66 | + ge::OpDescPtr op_desc = nullptr; | ||
| 67 | + auto ret = parser.ParseParams(reinterpret_cast<Message *>(&node), op_desc); | ||
| 68 | + EXPECT_EQ(ret, ge::PARAM_INVALID); | ||
| 69 | +} | ||
| 70 | + | ||
| 71 | +TEST_F(UtestTensorflowAutoMappingParserAdapter, empty_op_type) { | ||
| 72 | + auto parser = TensorFlowAutoMappingParserAdapter(); | ||
| 73 | + domi::tensorflow::NodeDef node; | ||
| 74 | + node.set_name("empty_node"); | ||
| 75 | + node.set_op("Empty"); | ||
| 76 | + auto attr = node.mutable_attr(); | ||
| 77 | + domi::tensorflow::AttrValue value; | ||
| 78 | + value.set_type(domi::tensorflow::DataType::DT_FLOAT); | ||
| 79 | + (*attr)["dtype"] = value; | ||
| 80 | + | ||
| 81 | + auto op_desc = ge::parser::MakeShared<ge::OpDesc>("empty_node", "Empty"); | ||
| 82 | + auto ret = parser.ParseParams(reinterpret_cast<Message *>(&node), op_desc); | ||
| 83 | + EXPECT_EQ(ret, ge::SUCCESS); | ||
| 84 | +} | ||
| 85 | + | ||
| 86 | +TEST_F(UtestTensorflowAutoMappingParserAdapter, empty_op_no_dtype) { | ||
| 87 | + auto parser = TensorFlowAutoMappingParserAdapter(); | ||
| 88 | + domi::tensorflow::NodeDef node; | ||
| 89 | + node.set_name("empty_node2"); | ||
| 90 | + node.set_op("Empty"); | ||
| 91 | + | ||
| 92 | + auto op_desc = ge::parser::MakeShared<ge::OpDesc>("empty_node2", "Empty"); | ||
| 93 | + auto ret = parser.ParseParams(reinterpret_cast<Message *>(&node), op_desc); | ||
| 94 | + EXPECT_EQ(ret, ge::SUCCESS); | ||
| 95 | +} | ||
| 96 | + | ||
| 97 | +TEST_F(UtestTensorflowAutoMappingParserAdapter, identityn_op_type) { | ||
| 98 | + auto parser = TensorFlowAutoMappingParserAdapter(); | ||
| 99 | + domi::tensorflow::NodeDef node; | ||
| 100 | + node.set_name("identityn_node"); | ||
| 101 | + node.set_op("IdentityN"); | ||
| 102 | + auto attr = node.mutable_attr(); | ||
| 103 | + domi::tensorflow::AttrValue value; | ||
| 104 | + value.mutable_list()->add_type(domi::tensorflow::DataType::DT_FLOAT); | ||
| 105 | + value.mutable_list()->add_type(domi::tensorflow::DataType::DT_INT32); | ||
| 106 | + (*attr)["T"] = value; | ||
| 107 | + | ||
| 108 | + auto op_desc = ge::parser::MakeShared<ge::OpDesc>("identityn_node", "IdentityN"); | ||
| 109 | + auto ret = parser.ParseParams(reinterpret_cast<Message *>(&node), op_desc); | ||
| 110 | + EXPECT_EQ(ret, ge::SUCCESS); | ||
| 111 | +} | ||
| 112 | + | ||
| 113 | +TEST_F(UtestTensorflowAutoMappingParserAdapter, identityn_no_T_attr) { | ||
| 114 | + auto parser = TensorFlowAutoMappingParserAdapter(); | ||
| 115 | + domi::tensorflow::NodeDef node; | ||
| 116 | + node.set_name("identityn_no_t"); | ||
| 117 | + node.set_op("IdentityN"); | ||
| 118 | + | ||
| 119 | + auto op_desc = ge::parser::MakeShared<ge::OpDesc>("identityn_no_t", "IdentityN"); | ||
| 120 | + auto ret = parser.ParseParams(reinterpret_cast<Message *>(&node), op_desc); | ||
| 121 | + EXPECT_EQ(ret, ge::SUCCESS); | ||
| 122 | +} | ||
| 123 | + | ||
| 124 | +TEST_F(UtestTensorflowAutoMappingParserAdapter, shape_op_type) { | ||
| 125 | + auto parser = TensorFlowAutoMappingParserAdapter(); | ||
| 126 | + domi::tensorflow::NodeDef node; | ||
| 127 | + node.set_name("shape_node"); | ||
| 128 | + node.set_op("Shape"); | ||
| 129 | + auto attr = node.mutable_attr(); | ||
| 130 | + domi::tensorflow::AttrValue value; | ||
| 131 | + value.set_type(domi::tensorflow::DataType::DT_INT64); | ||
| 132 | + (*attr)["out_type"] = value; | ||
| 133 | + | ||
| 134 | + auto op_desc = ge::parser::MakeShared<ge::OpDesc>("shape_node", "Shape"); | ||
| 135 | + op_desc->AddOutputDesc("y", ge::GeTensorDesc()); | ||
| 136 | + auto ret = parser.ParseParams(reinterpret_cast<Message *>(&node), op_desc); | ||
| 137 | + EXPECT_EQ(ret, ge::SUCCESS); | ||
| 138 | +} | ||
| 139 | + | ||
| 140 | +TEST_F(UtestTensorflowAutoMappingParserAdapter, shape_op_no_out_type) { | ||
| 141 | + auto parser = TensorFlowAutoMappingParserAdapter(); | ||
| 142 | + domi::tensorflow::NodeDef node; | ||
| 143 | + node.set_name("shape_no_out"); | ||
| 144 | + node.set_op("Shape"); | ||
| 145 | + | ||
| 146 | + auto op_desc = ge::parser::MakeShared<ge::OpDesc>("shape_no_out", "Shape"); | ||
| 147 | + op_desc->AddOutputDesc("y", ge::GeTensorDesc()); | ||
| 148 | + auto ret = parser.ParseParams(reinterpret_cast<Message *>(&node), op_desc); | ||
| 149 | + EXPECT_EQ(ret, ge::SUCCESS); | ||
| 150 | +} | ||
| 151 | + | ||
| 152 | +TEST_F(UtestTensorflowAutoMappingParserAdapter, size_op_with_out_type) { | ||
| 153 | + auto parser = TensorFlowAutoMappingParserAdapter(); | ||
| 154 | + domi::tensorflow::NodeDef node; | ||
| 155 | + node.set_name("size_out"); | ||
| 156 | + node.set_op("Size"); | ||
| 157 | + auto attr = node.mutable_attr(); | ||
| 158 | + domi::tensorflow::AttrValue value; | ||
| 159 | + value.set_type(domi::tensorflow::DataType::DT_INT64); | ||
| 160 | + (*attr)["out_type"] = value; | ||
| 161 | + | ||
| 162 | + auto op_desc = ge::parser::MakeShared<ge::OpDesc>("size_out", "Size"); | ||
| 163 | + ge::AttrUtils::SetDataType(op_desc, "out_type", ge::DT_INT64); | ||
| 164 | + auto ret = parser.ParseParams(reinterpret_cast<Message *>(&node), op_desc); | ||
| 165 | + EXPECT_EQ(ret, ge::SUCCESS); | ||
| 166 | +} | ||
| 52 | } // namespace ge | 167 | } // namespace ge |
| @@ -6741,4 +6741,412 @@ TEST_F(UtestTensorflowParser, TrimGraph_with_out_nodes) { | |||
| 6741 | EXPECT_EQ(ret, SUCCESS); | 6741 | EXPECT_EQ(ret, SUCCESS); |
| 6742 | } | 6742 | } |
| 6743 | 6743 | ||
| 6744 | +TEST_F(UtestTensorflowParser, ModelSaver_SaveJsonToFile_success) { | ||
| 6745 | + const Json model = {{"key", "value"}}; | ||
| 6746 | + const char *file_path = "test_model_saver.json"; | ||
| 6747 | + Status ret = ge::parser::ModelSaver::SaveJsonToFile(file_path, model); | ||
| 6748 | + EXPECT_EQ(ret, SUCCESS); | ||
| 6749 | + remove(file_path); | ||
| 6750 | +} | ||
| 6751 | + | ||
| 6752 | +TEST_F(UtestTensorflowParser, ModelSaver_CheckPath_simple_filename) { | ||
| 6753 | + std::string path = "simple_file.txt"; | ||
| 6754 | + Status ret = ge::parser::ModelSaver::CheckPath(path); | ||
| 6755 | + EXPECT_EQ(ret, SUCCESS); | ||
| 6756 | +} | ||
| 6757 | + | ||
| 6758 | +TEST_F(UtestTensorflowParser, ModelSaver_CheckPath_with_directory) { | ||
| 6759 | + std::string path = "test_dir/subdir/file.txt"; | ||
| 6760 | + Status ret = ge::parser::ModelSaver::CheckPath(path); | ||
| 6761 | + EXPECT_EQ(ret, SUCCESS); | ||
| 6762 | +} | ||
| 6763 | + | ||
| 6764 | +TEST_F(UtestTensorflowParser, ModelSaver_CheckPath_too_long) { | ||
| 6765 | + std::string path(4097, 'a'); | ||
| 6766 | + Status ret = ge::parser::ModelSaver::CheckPath(path); | ||
| 6767 | + EXPECT_EQ(ret, FAILED); | ||
| 6768 | +} | ||
| 6769 | + | ||
| 6770 | +TEST_F(UtestTensorflowParser, ModelSaver_CreateDirectory_empty) { | ||
| 6771 | + std::string path = ""; | ||
| 6772 | + int ret = ge::parser::ModelSaver::CreateDirectory(path); | ||
| 6773 | + EXPECT_EQ(ret, -1); | ||
| 6774 | +} | ||
| 6775 | + | ||
| 6776 | +TEST_F(UtestTensorflowParser, ModelSaver_CreateDirectory_too_long) { | ||
| 6777 | + std::string path(4097, 'a'); | ||
| 6778 | + int ret = ge::parser::ModelSaver::CreateDirectory(path); | ||
| 6779 | + EXPECT_EQ(ret, -1); | ||
| 6780 | +} | ||
| 6781 | + | ||
| 6782 | +TEST_F(UtestTensorflowParser, ModelSaver_CreateDirectory_valid) { | ||
| 6783 | + std::string path = "test_create_dir_sub"; | ||
| 6784 | + int ret = ge::parser::ModelSaver::CreateDirectory(path); | ||
| 6785 | + EXPECT_EQ(ret, 0); | ||
| 6786 | + remove(path.c_str()); | ||
| 6787 | +} | ||
| 6788 | + | ||
| 6789 | +TEST_F(UtestTensorflowParser, DataOpParser_ParseShape_float_type) { | ||
| 6790 | + std::vector<int64_t> shape = {1, 3, 224, 224}; | ||
| 6791 | + ge::OpDescPtr op = std::make_shared<ge::OpDesc>("data1", "Data"); | ||
| 6792 | + ge::AttrUtils::SetInt(op, ge::DATA_ATTR_NAME_DATA_TYPE, static_cast<int32_t>(ge::DT_FLOAT)); | ||
| 6793 | + DataOpParser opParser; | ||
| 6794 | + Status ret = opParser.ParseShape(shape, op); | ||
| 6795 | + EXPECT_EQ(ret, SUCCESS); | ||
| 6796 | +} | ||
| 6797 | + | ||
| 6798 | +TEST_F(UtestTensorflowParser, DataOpParser_ParseShape_int32_type) { | ||
| 6799 | + std::vector<int64_t> shape = {1, 3, 224, 224}; | ||
| 6800 | + ge::OpDescPtr op = std::make_shared<ge::OpDesc>("data2", "Data"); | ||
| 6801 | + ge::AttrUtils::SetInt(op, ge::DATA_ATTR_NAME_DATA_TYPE, static_cast<int32_t>(ge::DT_INT32)); | ||
| 6802 | + DataOpParser opParser; | ||
| 6803 | + Status ret = opParser.ParseShape(shape, op); | ||
| 6804 | + EXPECT_EQ(ret, SUCCESS); | ||
| 6805 | +} | ||
| 6806 | + | ||
| 6807 | +TEST_F(UtestTensorflowParser, DataOpParser_ParseShape_default_type) { | ||
| 6808 | + std::vector<int64_t> shape = {1, 3, 224, 224}; | ||
| 6809 | + ge::OpDescPtr op = std::make_shared<ge::OpDesc>("data3", "Data"); | ||
| 6810 | + DataOpParser opParser; | ||
| 6811 | + Status ret = opParser.ParseShape(shape, op); | ||
| 6812 | + EXPECT_EQ(ret, SUCCESS); | ||
| 6813 | +} | ||
| 6814 | + | ||
| 6815 | +TEST_F(UtestTensorflowParser, DataOpParser_ParseShape_5d_format) { | ||
| 6816 | + std::vector<int64_t> shape = {1, 3, 224, 224}; | ||
| 6817 | + ge::OpDescPtr op = std::make_shared<ge::OpDesc>("data4", "Data"); | ||
| 6818 | + ge::GetParserContext().input_nodes_format_map["data4"] = domi::DOMI_TENSOR_NC1HWC0; | ||
| 6819 | + DataOpParser opParser; | ||
| 6820 | + Status ret = opParser.ParseShape(shape, op); | ||
| 6821 | + EXPECT_EQ(ret, SUCCESS); | ||
| 6822 | + ge::GetParserContext().input_nodes_format_map.clear(); | ||
| 6823 | +} | ||
| 6824 | + | ||
| 6825 | +TEST_F(UtestTensorflowParser, DataOpParser_ParseShape_null_op) { | ||
| 6826 | + std::vector<int64_t> shape = {1, 3, 224, 224}; | ||
| 6827 | + ge::OpDescPtr op = nullptr; | ||
| 6828 | + DataOpParser opParser; | ||
| 6829 | + Status ret = opParser.ParseShape(shape, op); | ||
| 6830 | + EXPECT_EQ(ret, FAILED); | ||
| 6831 | +} | ||
| 6832 | + | ||
| 6833 | +TEST_F(UtestTensorflowParser, DataOpParser_InitNDTensor) { | ||
| 6834 | + std::vector<int64_t> shape = {1, 3, 224, 224}; | ||
| 6835 | + ge::GeTensorDesc tensor_desc; | ||
| 6836 | + DataOpParser opParser; | ||
| 6837 | + Status ret = opParser.InitNDTensor(shape, ge::DT_INT32, tensor_desc); | ||
| 6838 | + EXPECT_EQ(ret, SUCCESS); | ||
| 6839 | +} | ||
| 6840 | + | ||
| 6841 | +TEST_F(UtestTensorflowParser, DataOpParser_InitInputTensor) { | ||
| 6842 | + std::vector<int64_t> shape = {1, 3, 224, 224}; | ||
| 6843 | + ge::GeTensorDesc tensor_desc; | ||
| 6844 | + DataOpParser opParser; | ||
| 6845 | + Status ret = opParser.InitInputTensor(shape, tensor_desc); | ||
| 6846 | + EXPECT_EQ(ret, SUCCESS); | ||
| 6847 | +} | ||
| 6848 | + | ||
| 6849 | +TEST_F(UtestTensorflowParser, DataOpParser_InitInputTensor_dynamic_batch) { | ||
| 6850 | + std::vector<int64_t> shape = {-1, 3, 224, 224}; | ||
| 6851 | + ge::GeTensorDesc tensor_desc; | ||
| 6852 | + DataOpParser opParser; | ||
| 6853 | + Status ret = opParser.InitInputTensor(shape, tensor_desc); | ||
| 6854 | + EXPECT_EQ(ret, SUCCESS); | ||
| 6855 | +} | ||
| 6856 | + | ||
| 6857 | +TEST_F(UtestTensorflowParser, DataOpParser_InitOutputTensor) { | ||
| 6858 | + std::vector<int64_t> shape = {1, 3, 224, 224}; | ||
| 6859 | + ge::GeTensorDesc tensor_desc; | ||
| 6860 | + DataOpParser opParser; | ||
| 6861 | + Status ret = opParser.InitOutputTensor(shape, tensor_desc); | ||
| 6862 | + EXPECT_EQ(ret, SUCCESS); | ||
| 6863 | +} | ||
| 6864 | + | ||
| 6865 | +TEST_F(UtestTensorflowParser, DataOpParser_InitOutputTensor_empty_shape) { | ||
| 6866 | + std::vector<int64_t> shape = {}; | ||
| 6867 | + ge::GeTensorDesc tensor_desc; | ||
| 6868 | + DataOpParser opParser; | ||
| 6869 | + Status ret = opParser.InitOutputTensor(shape, tensor_desc); | ||
| 6870 | + EXPECT_EQ(ret, SUCCESS); | ||
| 6871 | +} | ||
| 6872 | + | ||
| 6873 | +TEST_F(UtestTensorflowParser, TBEPluginLoader_GetOppPath) { | ||
| 6874 | + TBEPluginLoader tbe_plugin; | ||
| 6875 | + std::string opp_path; | ||
| 6876 | + Status ret = tbe_plugin.GetOppPath(opp_path); | ||
| 6877 | + EXPECT_EQ(ret, SUCCESS); | ||
| 6878 | +} | ||
| 6879 | + | ||
| 6880 | +TEST_F(UtestTensorflowParser, TBEPluginLoader_GetOpsProtoPath) { | ||
| 6881 | + TBEPluginLoader tbe_plugin; | ||
| 6882 | + std::string opsproto_path; | ||
| 6883 | + Status ret = tbe_plugin.GetOpsProtoPath(opsproto_path); | ||
| 6884 | + EXPECT_EQ(ret, SUCCESS); | ||
| 6885 | +} | ||
| 6886 | + | ||
| 6887 | +TEST_F(UtestTensorflowParser, TBEPluginLoader_GetCustomCaffeProtoPath) { | ||
| 6888 | + TBEPluginLoader tbe_plugin; | ||
| 6889 | + std::string customcaffe_path; | ||
| 6890 | + Status ret = tbe_plugin.GetCustomCaffeProtoPath(customcaffe_path); | ||
| 6891 | + EXPECT_EQ(ret, SUCCESS); | ||
| 6892 | +} | ||
| 6893 | + | ||
| 6894 | +TEST_F(UtestTensorflowParser, TBEPluginLoader_Finalize) { | ||
| 6895 | + TBEPluginLoader &tbe_plugin = TBEPluginLoader::Instance(); | ||
| 6896 | + Status ret = tbe_plugin.Finalize(); | ||
| 6897 | + EXPECT_EQ(ret, SUCCESS); | ||
| 6898 | +} | ||
| 6899 | + | ||
| 6900 | +TEST_F(UtestTensorflowParser, TBEPluginLoader_LoadPluginSo_empty) { | ||
| 6901 | + TBEPluginLoader &tbe_plugin = TBEPluginLoader::Instance(); | ||
| 6902 | + std::map<string, string> options; | ||
| 6903 | + tbe_plugin.LoadPluginSo(options); | ||
| 6904 | +} | ||
| 6905 | + | ||
| 6906 | +TEST_F(UtestTensorflowParser, TBEPluginLoader_GetOppPluginVendors_failed) { | ||
| 6907 | + TBEPluginLoader tbe_plugin; | ||
| 6908 | + std::vector<std::string> vendors; | ||
| 6909 | + Status ret = tbe_plugin.GetOppPluginVendors("nonexistent_config.ini", vendors); | ||
| 6910 | + EXPECT_EQ(ret, FAILED); | ||
| 6911 | +} | ||
| 6912 | + | ||
| 6913 | +TEST_F(UtestTensorflowParser, TensorFlowCustomOpParser_ConstructRegOpString) { | ||
| 6914 | + domi::tensorflow::OpDef opdef; | ||
| 6915 | + opdef.set_name("TestCustomOp"); | ||
| 6916 | + auto *input_arg = opdef.add_input_arg(); | ||
| 6917 | + input_arg->set_name("x"); | ||
| 6918 | + input_arg->set_type(domi::tensorflow::DataType::DT_FLOAT); | ||
| 6919 | + auto *output_arg = opdef.add_output_arg(); | ||
| 6920 | + output_arg->set_name("y"); | ||
| 6921 | + output_arg->set_type(domi::tensorflow::DataType::DT_FLOAT); | ||
| 6922 | + auto *attr = opdef.add_attr(); | ||
| 6923 | + attr->set_name("epsilon"); | ||
| 6924 | + attr->set_type("float"); | ||
| 6925 | + attr->mutable_default_value()->set_f(0.001f); | ||
| 6926 | + | ||
| 6927 | + std::string reg_op; | ||
| 6928 | + TensorFlowCustomOpParser parser; | ||
| 6929 | + Status ret = parser.ConstructRegOpString(opdef, reg_op); | ||
| 6930 | + EXPECT_EQ(ret, SUCCESS); | ||
| 6931 | + EXPECT_FALSE(reg_op.empty()); | ||
| 6932 | +} | ||
| 6933 | + | ||
| 6934 | +TEST_F(UtestTensorflowParser, TensorFlowCustomOpParser_ConstructRegCustomOpString) { | ||
| 6935 | + domi::tensorflow::OpDef opdef; | ||
| 6936 | + opdef.set_name("TestCustomOp2"); | ||
| 6937 | + auto *input_arg = opdef.add_input_arg(); | ||
| 6938 | + input_arg->set_name("x"); | ||
| 6939 | + input_arg->set_type(domi::tensorflow::DataType::DT_FLOAT); | ||
| 6940 | + auto *output_arg = opdef.add_output_arg(); | ||
| 6941 | + output_arg->set_name("y"); | ||
| 6942 | + output_arg->set_type(domi::tensorflow::DataType::DT_FLOAT); | ||
| 6943 | + | ||
| 6944 | + domi::tensorflow::NodeDef node_def; | ||
| 6945 | + node_def.set_name("test_node"); | ||
| 6946 | + node_def.set_op("TestCustomOp2"); | ||
| 6947 | + | ||
| 6948 | + std::string reg_op_custom; | ||
| 6949 | + TensorFlowCustomOpParser parser; | ||
| 6950 | + Status ret = parser.ConstructRegCustomOpString(opdef, node_def, reg_op_custom); | ||
| 6951 | + EXPECT_EQ(ret, SUCCESS); | ||
| 6952 | + EXPECT_FALSE(reg_op_custom.empty()); | ||
| 6953 | +} | ||
| 6954 | + | ||
| 6955 | +TEST_F(UtestTensorflowParser, TensorFlowCustomOpParser_ConstructRegOpString_with_dynamic) { | ||
| 6956 | + domi::tensorflow::OpDef opdef; | ||
| 6957 | + opdef.set_name("DynamicOp"); | ||
| 6958 | + auto *input_arg = opdef.add_input_arg(); | ||
| 6959 | + input_arg->set_name("inputs"); | ||
| 6960 | + input_arg->set_number_attr("N"); | ||
| 6961 | + auto *output_arg = opdef.add_output_arg(); | ||
| 6962 | + output_arg->set_name("outputs"); | ||
| 6963 | + output_arg->set_number_attr("N"); | ||
| 6964 | + auto *attr = opdef.add_attr(); | ||
| 6965 | + attr->set_name("N"); | ||
| 6966 | + attr->set_type("int"); | ||
| 6967 | + attr->mutable_default_value()->set_i(1); | ||
| 6968 | + | ||
| 6969 | + std::string reg_op; | ||
| 6970 | + TensorFlowCustomOpParser parser; | ||
| 6971 | + Status ret = parser.ConstructRegOpString(opdef, reg_op); | ||
| 6972 | + EXPECT_EQ(ret, SUCCESS); | ||
| 6973 | +} | ||
| 6974 | + | ||
| 6975 | +TEST_F(UtestTensorflowParser, TensorFlowCustomOpParser_WriteTextFile) { | ||
| 6976 | + TensorFlowCustomOpParser parser; | ||
| 6977 | + std::string content = "test content"; | ||
| 6978 | + Status ret = parser.WriteTextFile("test_write_text_file.txt", content); | ||
| 6979 | + EXPECT_EQ(ret, SUCCESS); | ||
| 6980 | + remove("test_write_text_file.txt"); | ||
| 6981 | +} | ||
| 6982 | + | ||
| 6983 | +TEST_F(UtestTensorflowParser, TensorFlowCustomOpParser_WriteWrapperCc) { | ||
| 6984 | + TensorFlowCustomOpParser parser; | ||
| 6985 | + Status ret = parser.WriteWrapperCc("test_wrapper.cc"); | ||
| 6986 | + EXPECT_EQ(ret, SUCCESS); | ||
| 6987 | + remove("test_wrapper.cc"); | ||
| 6988 | +} | ||
| 6989 | + | ||
| 6990 | +TEST_F(UtestTensorflowParser, TensorFlowCustomOpParser_DeleteTmpDirectoryContents) { | ||
| 6991 | + TensorFlowCustomOpParser parser; | ||
| 6992 | + Status ret = parser.DeleteTmpDirectoryContents("nonexistent_dir_12345"); | ||
| 6993 | + EXPECT_EQ(ret, SUCCESS); | ||
| 6994 | +} | ||
| 6995 | + | ||
| 6996 | +TEST_F(UtestTensorflowParser, TensorFlowCustomOpParser_ParseCustomOp_empty) { | ||
| 6997 | + TensorFlowCustomOpParser parser; | ||
| 6998 | + std::unordered_map<std::string, const domi::tensorflow::NodeDef *> empty_map; | ||
| 6999 | + Status ret = parser.ParseCustomOp(empty_map); | ||
| 7000 | + EXPECT_EQ(ret, SUCCESS); | ||
| 7001 | +} | ||
| 7002 | + | ||
| 7003 | +TEST_F(UtestTensorflowParser, TensorFlowCustomOpParser_RegisteredTfaOps) { | ||
| 7004 | + TensorFlowCustomOpParser parser; | ||
| 7005 | + Status ret = parser.RegisteredTfaOps(); | ||
| 7006 | + EXPECT_EQ(ret, SUCCESS); | ||
| 7007 | +} | ||
| 7008 | + | ||
| 7009 | +TEST_F(UtestTensorflowParser, aclgrphParseTensorFlow_null_file) { | ||
| 7010 | + ge::Graph graph; | ||
| 7011 | + auto ret = aclgrphParseTensorFlow(nullptr, graph); | ||
| 7012 | + EXPECT_NE(ret, SUCCESS); | ||
| 7013 | +} | ||
| 7014 | + | ||
| 7015 | +TEST_F(UtestTensorflowParser, aclgrphParseTensorFlow_invalid_file) { | ||
| 7016 | + ge::Graph graph; | ||
| 7017 | + auto ret = aclgrphParseTensorFlow("nonexistent_tf_model.pb", graph); | ||
| 7018 | + EXPECT_NE(ret, SUCCESS); | ||
| 7019 | +} | ||
| 7020 | + | ||
| 7021 | +TEST_F(UtestTensorflowParser, aclgrphParseTensorFlow_with_params_null) { | ||
| 7022 | + std::map<AscendString, AscendString> parser_params; | ||
| 7023 | + ge::Graph graph; | ||
| 7024 | + auto ret = aclgrphParseTensorFlow(nullptr, parser_params, graph); | ||
| 7025 | + EXPECT_NE(ret, SUCCESS); | ||
| 7026 | +} | ||
| 7027 | + | ||
| 7028 | +TEST_F(UtestTensorflowParser, aclgrphParseTensorFlow_with_params_invalid) { | ||
| 7029 | + std::map<AscendString, AscendString> parser_params; | ||
| 7030 | + ge::Graph graph; | ||
| 7031 | + auto ret = aclgrphParseTensorFlow("nonexistent_tf_model2.pb", parser_params, graph); | ||
| 7032 | + EXPECT_NE(ret, SUCCESS); | ||
| 7033 | +} | ||
| 7034 | + | ||
| 7035 | +TEST_F(UtestTensorflowParser, TensorFlowModelParser_ToJson_null) { | ||
| 7036 | + TensorFlowModelParser parser; | ||
| 7037 | + auto ret = parser.ToJson(nullptr, "output.json"); | ||
| 7038 | + EXPECT_NE(ret, SUCCESS); | ||
| 7039 | + ret = parser.ToJson("model.pb", nullptr); | ||
| 7040 | + EXPECT_NE(ret, SUCCESS); | ||
| 7041 | +} | ||
| 7042 | + | ||
| 7043 | +TEST_F(UtestTensorflowParser, TensorFlowModelParser_ToJson_invalid) { | ||
| 7044 | + TensorFlowModelParser parser; | ||
| 7045 | + auto ret = parser.ToJson("nonexistent_tf_model.json", "output.json"); | ||
| 7046 | + EXPECT_NE(ret, SUCCESS); | ||
| 7047 | +} | ||
| 7048 | + | ||
| 7049 | +TEST_F(UtestTensorflowParser, TensorFlowModelParser_ParseFromMemory_null) { | ||
| 7050 | + TensorFlowModelParser parser; | ||
| 7051 | + ge::ComputeGraphPtr graph = std::make_shared<ge::ComputeGraph>("test"); | ||
| 7052 | + auto ret = parser.ParseFromMemory(nullptr, 0, graph); | ||
| 7053 | + EXPECT_NE(ret, SUCCESS); | ||
| 7054 | +} | ||
| 7055 | + | ||
| 7056 | +TEST_F(UtestTensorflowParser, TensorFlowModelParser_ParseFromMemory_invalid_data) { | ||
| 7057 | + TensorFlowModelParser parser; | ||
| 7058 | + ge::ComputeGraphPtr graph = std::make_shared<ge::ComputeGraph>("test"); | ||
| 7059 | + const char *data = "invalid data"; | ||
| 7060 | + auto ret = parser.ParseFromMemory(data, 11, graph); | ||
| 7061 | + EXPECT_NE(ret, SUCCESS); | ||
| 7062 | +} | ||
| 7063 | + | ||
| 7064 | +TEST_F(UtestTensorflowParser, AclGraphParserUtil_SetOutputNodeInfo_with_out_nodes) { | ||
| 7065 | + ParerUTestsUtils::ClearParserInnerCtx(); | ||
| 7066 | + AclGraphParserUtil acl_graph_parse_util; | ||
| 7067 | + ge::ComputeGraphPtr compute_graph = std::make_shared<ge::ComputeGraph>("test_tf_out"); | ||
| 7068 | + ge::OpDescPtr op = std::make_shared<ge::OpDesc>("tf_output", "Identity"); | ||
| 7069 | + op->AddInputDesc(ge::GeTensorDesc()); | ||
| 7070 | + op->AddOutputDesc(ge::GeTensorDesc()); | ||
| 7071 | + ge::NodePtr node = compute_graph->AddNode(op); | ||
| 7072 | + ge::Graph graph = ge::GraphUtilsEx::CreateGraphFromComputeGraph(compute_graph); | ||
| 7073 | + | ||
| 7074 | + ge::GetParserContext().user_out_nodes.push_back({"tf_output", 0}); | ||
| 7075 | + ge::GetParserContext().type = domi::TENSORFLOW; | ||
| 7076 | + std::map<AscendString, AscendString> parser_params; | ||
| 7077 | + auto ret = acl_graph_parse_util.SetOutputNodeInfo(graph, parser_params); | ||
| 7078 | + EXPECT_EQ(ret, SUCCESS); | ||
| 7079 | +} | ||
| 7080 | + | ||
| 7081 | +TEST_F(UtestTensorflowParser, AclGraphParserUtil_SetOutputNodeInfo_default) { | ||
| 7082 | + ParerUTestsUtils::ClearParserInnerCtx(); | ||
| 7083 | + AclGraphParserUtil acl_graph_parse_util; | ||
| 7084 | + ge::ComputeGraphPtr compute_graph = std::make_shared<ge::ComputeGraph>("test_tf_default_out"); | ||
| 7085 | + ge::OpDescPtr op = std::make_shared<ge::OpDesc>("default_out", "Identity"); | ||
| 7086 | + op->AddInputDesc(ge::GeTensorDesc()); | ||
| 7087 | + op->AddOutputDesc(ge::GeTensorDesc()); | ||
| 7088 | + ge::NodePtr node = compute_graph->AddNode(op); | ||
| 7089 | + compute_graph->AddOutputNodeByIndex(node, 0); | ||
| 7090 | + ge::Graph graph = ge::GraphUtilsEx::CreateGraphFromComputeGraph(compute_graph); | ||
| 7091 | + | ||
| 7092 | + ge::GetParserContext().type = domi::TENSORFLOW; | ||
| 7093 | + std::map<AscendString, AscendString> parser_params; | ||
| 7094 | + auto ret = acl_graph_parse_util.SetOutputNodeInfo(graph, parser_params); | ||
| 7095 | + EXPECT_EQ(ret, SUCCESS); | ||
| 7096 | +} | ||
| 7097 | + | ||
| 7098 | +TEST_F(UtestTensorflowParser, AclGraphParserUtil_SetOutputNodeInfo_with_output_format) { | ||
| 7099 | + ParerUTestsUtils::ClearParserInnerCtx(); | ||
| 7100 | + AclGraphParserUtil acl_graph_parse_util; | ||
| 7101 | + ge::ComputeGraphPtr compute_graph = std::make_shared<ge::ComputeGraph>("test_tf_format"); | ||
| 7102 | + ge::OpDescPtr op = std::make_shared<ge::OpDesc>("format_out", "Identity"); | ||
| 7103 | + op->AddInputDesc(ge::GeTensorDesc()); | ||
| 7104 | + op->AddOutputDesc(ge::GeTensorDesc()); | ||
| 7105 | + ge::NodePtr node = compute_graph->AddNode(op); | ||
| 7106 | + ge::Graph graph = ge::GraphUtilsEx::CreateGraphFromComputeGraph(compute_graph); | ||
| 7107 | + | ||
| 7108 | + ge::GetParserContext().user_out_nodes.push_back({"format_out", 0}); | ||
| 7109 | + ge::GetParserContext().output_formats.push_back(domi::DOMI_TENSOR_NC1HWC0); | ||
| 7110 | + ge::GetParserContext().type = domi::TENSORFLOW; | ||
| 7111 | + std::map<AscendString, AscendString> parser_params; | ||
| 7112 | + auto ret = acl_graph_parse_util.SetOutputNodeInfo(graph, parser_params); | ||
| 7113 | + EXPECT_EQ(ret, SUCCESS); | ||
| 7114 | +} | ||
| 7115 | + | ||
| 7116 | +TEST_F(UtestTensorflowParser, TensorFlowModelParser_TrimGraph_empty) { | ||
| 7117 | + ParerUTestsUtils::ClearParserInnerCtx(); | ||
| 7118 | + TensorFlowModelParser parser; | ||
| 7119 | + domi::tensorflow::GraphDef input_graph; | ||
| 7120 | + domi::tensorflow::GraphDef output_graph; | ||
| 7121 | + auto ret = parser.TrimGraph(input_graph, &output_graph); | ||
| 7122 | + EXPECT_EQ(ret, SUCCESS); | ||
| 7123 | +} | ||
| 7124 | + | ||
| 7125 | +TEST_F(UtestTensorflowParser, TensorFlowModelParser_ParseFromMemory_valid_graph) { | ||
| 7126 | + ParerUTestsUtils::ClearParserInnerCtx(); | ||
| 7127 | + TensorFlowModelParser parser; | ||
| 7128 | + domi::tensorflow::GraphDef graph_def; | ||
| 7129 | + auto *node = graph_def.add_node(); | ||
| 7130 | + node->set_name("test_input"); | ||
| 7131 | + node->set_op("Placeholder"); | ||
| 7132 | + auto *attr = node->mutable_attr(); | ||
| 7133 | + domi::tensorflow::AttrValue dtype_val; | ||
| 7134 | + dtype_val.set_type(domi::tensorflow::DT_FLOAT); | ||
| 7135 | + (*attr)["dtype"] = dtype_val; | ||
| 7136 | + domi::tensorflow::AttrValue shape_val; | ||
| 7137 | + auto *shape = shape_val.mutable_shape(); | ||
| 7138 | + shape->add_dim()->set_size(-1); | ||
| 7139 | + shape->add_dim()->set_size(3); | ||
| 7140 | + shape->add_dim()->set_size(224); | ||
| 7141 | + shape->add_dim()->set_size(224); | ||
| 7142 | + (*attr)["shape"] = shape_val; | ||
| 7143 | + | ||
| 7144 | + std::string buffer; | ||
| 7145 | + graph_def.SerializeToString(&buffer); | ||
| 7146 | + ge::ComputeGraphPtr graph = std::make_shared<ge::ComputeGraph>("test_mem"); | ||
| 7147 | + ge::GetParserContext().type = domi::TENSORFLOW; | ||
| 7148 | + ge::GetParserContext().input_dims["test_input"] = {1, 3, 224, 224}; | ||
| 7149 | + auto ret = parser.ParseFromMemory(buffer.data(), static_cast<int>(buffer.size()), graph); | ||
| 7150 | + EXPECT_NE(ret, FAILED); | ||
| 7151 | +} | ||
| 6744 | } // namespace ge | 7152 | } // namespace ge |