[ONNX] Refactoring tests on API 2.0 (#21685)
* Refactored tests in onnx_editor_topological_sort.cpp * Moved importer tests to new API
This commit is contained in:
committed by
GitHub
parent
4799e021bf
commit
993d503a28
@@ -9,84 +9,84 @@
|
||||
#include "common_test_utils/test_control.hpp"
|
||||
#include "editor.hpp"
|
||||
#include "gtest/gtest.h"
|
||||
#include "ngraph/file_util.hpp"
|
||||
#include "onnx_test_util.hpp"
|
||||
#include "onnx_utils.hpp"
|
||||
|
||||
using namespace ov;
|
||||
using namespace ov::onnx_editor;
|
||||
using namespace ngraph::test;
|
||||
using namespace ov::frontend::onnx::tests;
|
||||
|
||||
static std::string s_manifest = ngraph::file_util::path_join(ov::test::utils::getExecutableDirectory(), "${MANIFEST}");
|
||||
static std::string s_manifest = onnx_backend_manifest("${MANIFEST}");
|
||||
|
||||
OPENVINO_TEST(onnx_editor, topological_sort_two_nodes_swap) {
|
||||
ONNXModelEditor editor{ov::util::path_join({ov::test::utils::getExecutableDirectory(),
|
||||
SERIALIZED_ZOO,
|
||||
"onnx/model_editor/topological_sort/two_nodes_swap.onnx"})};
|
||||
TEST_ONNX_MODELS_DIRNAME,
|
||||
"model_editor/topological_sort/two_nodes_swap.onnx"})};
|
||||
ASSERT_NO_THROW(editor.get_function());
|
||||
}
|
||||
|
||||
OPENVINO_TEST(onnx_editor, topological_sort_completely_unsorted) {
|
||||
ONNXModelEditor editor{ov::util::path_join({ov::test::utils::getExecutableDirectory(),
|
||||
SERIALIZED_ZOO,
|
||||
"onnx/model_editor/topological_sort/completely_unsorted.onnx"})};
|
||||
TEST_ONNX_MODELS_DIRNAME,
|
||||
"model_editor/topological_sort/completely_unsorted.onnx"})};
|
||||
ASSERT_NO_THROW(editor.get_function());
|
||||
}
|
||||
|
||||
OPENVINO_TEST(onnx_editor, topological_sort_completely_unsorted_2) {
|
||||
ONNXModelEditor editor{ov::util::path_join({ov::test::utils::getExecutableDirectory(),
|
||||
SERIALIZED_ZOO,
|
||||
"onnx/model_editor/topological_sort/completely_unsorted_2.onnx"})};
|
||||
TEST_ONNX_MODELS_DIRNAME,
|
||||
"model_editor/topological_sort/completely_unsorted_2.onnx"})};
|
||||
ASSERT_NO_THROW(editor.get_function());
|
||||
}
|
||||
|
||||
#if defined(OPENVINO_ENABLE_UNICODE_PATH_SUPPORT) && defined(_WIN32)
|
||||
OPENVINO_TEST(onnx_editor, topological_sort_completely_unsorted_2_wstring) {
|
||||
ONNXModelEditor editor{ov::util::string_to_wstring(
|
||||
ov::util::path_join({ov::test::utils::getExecutableDirectory(),
|
||||
SERIALIZED_ZOO,
|
||||
"onnx/model_editor/topological_sort/completely_unsorted_2.onnx"}))};
|
||||
ONNXModelEditor editor{
|
||||
ov::util::string_to_wstring(ov::util::path_join({ov::test::utils::getExecutableDirectory(),
|
||||
TEST_ONNX_MODELS_DIRNAME,
|
||||
"model_editor/topological_sort/completely_unsorted_2.onnx"}))};
|
||||
ASSERT_NO_THROW(editor.get_function());
|
||||
}
|
||||
#endif
|
||||
|
||||
OPENVINO_TEST(onnx_editor, topological_sort_constant_node_in_the_graph) {
|
||||
const std::string rel_path_to_model = "onnx/model_editor/topological_sort/add_abc_const_node_unsorted.onnx";
|
||||
const std::string rel_path_to_model = "model_editor/topological_sort/add_abc_const_node_unsorted.onnx";
|
||||
ONNXModelEditor editor{
|
||||
ov::util::path_join({ov::test::utils::getExecutableDirectory(), SERIALIZED_ZOO, rel_path_to_model})};
|
||||
ov::util::path_join({ov::test::utils::getExecutableDirectory(), TEST_ONNX_MODELS_DIRNAME, rel_path_to_model})};
|
||||
|
||||
ASSERT_NO_THROW(editor.get_function());
|
||||
}
|
||||
|
||||
OPENVINO_TEST(onnx_editor, topological_sort_multioutput_node) {
|
||||
const std::string rel_path_to_model = "onnx/model_editor/topological_sort/multioutput_split_unsorted.onnx";
|
||||
const std::string rel_path_to_model = "model_editor/topological_sort/multioutput_split_unsorted.onnx";
|
||||
ONNXModelEditor editor{
|
||||
ov::util::path_join({ov::test::utils::getExecutableDirectory(), SERIALIZED_ZOO, rel_path_to_model})};
|
||||
ov::util::path_join({ov::test::utils::getExecutableDirectory(), TEST_ONNX_MODELS_DIRNAME, rel_path_to_model})};
|
||||
|
||||
ASSERT_NO_THROW(editor.get_function());
|
||||
}
|
||||
|
||||
OPENVINO_TEST(onnx_editor, topological_sort_graph_not_changed_if_the_same_name_of_unsorted_node_and_initializer) {
|
||||
const std::string rel_path_to_model =
|
||||
"onnx/model_editor/topological_sort/same_name_of_unsorted_node_and_initializer.onnx";
|
||||
"model_editor/topological_sort/same_name_of_unsorted_node_and_initializer.onnx";
|
||||
ONNXModelEditor editor{
|
||||
ov::util::path_join({ov::test::utils::getExecutableDirectory(), SERIALIZED_ZOO, rel_path_to_model})};
|
||||
ov::util::path_join({ov::test::utils::getExecutableDirectory(), TEST_ONNX_MODELS_DIRNAME, rel_path_to_model})};
|
||||
|
||||
// topological sorting is called only via Editor importing
|
||||
const auto ref_model =
|
||||
ov::util::path_join({ov::test::utils::getExecutableDirectory(), SERIALIZED_ZOO, rel_path_to_model});
|
||||
ov::util::path_join({ov::test::utils::getExecutableDirectory(), TEST_ONNX_MODELS_DIRNAME, rel_path_to_model});
|
||||
|
||||
const auto result = compare_onnx_models(editor.model_string(), ref_model);
|
||||
EXPECT_TRUE(result.is_ok) << result.error_message;
|
||||
}
|
||||
|
||||
OPENVINO_TEST(onnx_editor, topological_sort_graph_not_changed_if_empty_input_name) {
|
||||
const std::string rel_path_to_model = "onnx/model_editor/topological_sort/empty_input_name.onnx";
|
||||
const std::string rel_path_to_model = "model_editor/topological_sort/empty_input_name.onnx";
|
||||
ONNXModelEditor editor{
|
||||
ov::util::path_join({ov::test::utils::getExecutableDirectory(), SERIALIZED_ZOO, rel_path_to_model})};
|
||||
ov::util::path_join({ov::test::utils::getExecutableDirectory(), TEST_ONNX_MODELS_DIRNAME, rel_path_to_model})};
|
||||
|
||||
// topological sorting is called only via Editor importing
|
||||
const auto ref_model =
|
||||
ov::util::path_join({ov::test::utils::getExecutableDirectory(), SERIALIZED_ZOO, rel_path_to_model});
|
||||
ov::util::path_join({ov::test::utils::getExecutableDirectory(), TEST_ONNX_MODELS_DIRNAME, rel_path_to_model});
|
||||
|
||||
const auto result = compare_onnx_models(editor.model_string(), ref_model);
|
||||
EXPECT_TRUE(result.is_ok) << result.error_message;
|
||||
|
||||
@@ -9,132 +9,120 @@
|
||||
#include <string>
|
||||
|
||||
#include "common_test_utils/file_utils.hpp"
|
||||
#include "onnx_import/onnx.hpp"
|
||||
#include "onnx_utils.hpp"
|
||||
#include "openvino/openvino.hpp"
|
||||
#include "openvino/util/file_util.hpp"
|
||||
|
||||
OPENVINO_SUPPRESS_DEPRECATED_START
|
||||
using namespace ov;
|
||||
using namespace ov::frontend::onnx::tests;
|
||||
|
||||
TEST(ONNX_Importer_Tests, ImportBasicModel) {
|
||||
auto model_file_path =
|
||||
ov::test::utils::getModelFromTestModelZoo(ov::util::path_join({ONNX_MODELS_DIR, "add_abc_initializers.onnx"}));
|
||||
auto function = ngraph::onnx_import::import_onnx_model(model_file_path);
|
||||
auto model = convert_model("add_abc_initializers.onnx");
|
||||
|
||||
int count_additions = 0;
|
||||
int count_constants = 0;
|
||||
int count_parameters = 0;
|
||||
|
||||
for (auto op : function->get_ops()) {
|
||||
for (auto op : model->get_ops()) {
|
||||
const auto op_type = std::string(op->get_type_name());
|
||||
count_additions += (op_type == "Add" ? 1 : 0);
|
||||
count_constants += (op_type == "Constant" ? 1 : 0);
|
||||
count_parameters += (op_type == "Parameter" ? 1 : 0);
|
||||
}
|
||||
|
||||
ASSERT_EQ(function->get_output_size(), 1);
|
||||
ASSERT_EQ(std::string(function->get_output_op(0)->get_type_name()), "Result");
|
||||
ASSERT_EQ(function->get_output_element_type(0), ngraph::element::f32);
|
||||
ASSERT_EQ(function->get_output_shape(0), ngraph::Shape({2, 2}));
|
||||
ASSERT_EQ(model->get_output_size(), 1);
|
||||
ASSERT_EQ(std::string(model->get_output_op(0)->get_type_name()), "Result");
|
||||
ASSERT_EQ(model->get_output_element_type(0), element::f32);
|
||||
ASSERT_EQ(model->get_output_shape(0), Shape({2, 2}));
|
||||
ASSERT_EQ(count_additions, 2);
|
||||
ASSERT_EQ(count_constants, 2);
|
||||
ASSERT_EQ(count_parameters, 1);
|
||||
}
|
||||
|
||||
TEST(ONNX_Importer_Tests, ImportModelWithFusedOp) {
|
||||
auto model_file_path =
|
||||
ov::test::utils::getModelFromTestModelZoo(ov::util::path_join({ONNX_MODELS_DIR, "selu.onnx"}));
|
||||
auto function = ngraph::onnx_import::import_onnx_model(model_file_path);
|
||||
auto model = convert_model("selu.onnx");
|
||||
|
||||
int count_selu = 0;
|
||||
int count_constants = 0;
|
||||
int count_parameters = 0;
|
||||
|
||||
for (auto op : function->get_ops()) {
|
||||
for (auto op : model->get_ops()) {
|
||||
const auto op_type = std::string(op->get_type_name());
|
||||
count_selu += (op_type == "Selu" ? 1 : 0);
|
||||
count_constants += (op_type == "Constant" ? 1 : 0);
|
||||
count_parameters += (op_type == "Parameter" ? 1 : 0);
|
||||
}
|
||||
|
||||
ASSERT_EQ(function->get_output_size(), 1);
|
||||
ASSERT_EQ(std::string(function->get_output_op(0)->get_type_name()), "Result");
|
||||
ASSERT_EQ(function->get_output_element_type(0), ngraph::element::f32);
|
||||
ASSERT_EQ(function->get_output_shape(0), ngraph::Shape({3, 4, 5}));
|
||||
ASSERT_EQ(model->get_output_size(), 1);
|
||||
ASSERT_EQ(std::string(model->get_output_op(0)->get_type_name()), "Result");
|
||||
ASSERT_EQ(model->get_output_element_type(0), element::f32);
|
||||
ASSERT_EQ(model->get_output_shape(0), Shape({3, 4, 5}));
|
||||
ASSERT_EQ(count_selu, 1);
|
||||
ASSERT_EQ(count_constants, 2);
|
||||
ASSERT_EQ(count_parameters, 1);
|
||||
}
|
||||
|
||||
TEST(ONNX_Importer_Tests, ImportModelWithMultiOutput) {
|
||||
auto model_file_path =
|
||||
ov::test::utils::getModelFromTestModelZoo(ov::util::path_join({ONNX_MODELS_DIR, "topk.onnx"}));
|
||||
auto function = ngraph::onnx_import::import_onnx_model(model_file_path);
|
||||
auto model = convert_model("topk.onnx");
|
||||
|
||||
int count_topk = 0;
|
||||
int count_constants = 0;
|
||||
int count_parameters = 0;
|
||||
|
||||
for (auto op : function->get_ops()) {
|
||||
for (auto op : model->get_ops()) {
|
||||
const auto op_type = std::string(op->get_type_name());
|
||||
count_topk += (op_type == "TopK" ? 1 : 0);
|
||||
count_constants += (op_type == "Constant" ? 1 : 0);
|
||||
count_parameters += (op_type == "Parameter" ? 1 : 0);
|
||||
}
|
||||
|
||||
ASSERT_EQ(function->get_output_size(), 2);
|
||||
ASSERT_EQ(std::string(function->get_output_op(0)->get_type_name()), "Result");
|
||||
ASSERT_EQ(std::string(function->get_output_op(1)->get_type_name()), "Result");
|
||||
ASSERT_EQ(function->get_output_element_type(0), ngraph::element::f32);
|
||||
ASSERT_EQ(function->get_output_element_type(1), ngraph::element::i64);
|
||||
ASSERT_EQ(function->get_output_shape(0), ngraph::Shape({3, 3}));
|
||||
ASSERT_EQ(function->get_output_shape(1), ngraph::Shape({3, 3}));
|
||||
ASSERT_EQ(model->get_output_size(), 2);
|
||||
ASSERT_EQ(std::string(model->get_output_op(0)->get_type_name()), "Result");
|
||||
ASSERT_EQ(std::string(model->get_output_op(1)->get_type_name()), "Result");
|
||||
ASSERT_EQ(model->get_output_element_type(0), element::f32);
|
||||
ASSERT_EQ(model->get_output_element_type(1), element::i64);
|
||||
ASSERT_EQ(model->get_output_shape(0), Shape({3, 3}));
|
||||
ASSERT_EQ(model->get_output_shape(1), Shape({3, 3}));
|
||||
ASSERT_EQ(count_topk, 1);
|
||||
ASSERT_EQ(count_constants, 1);
|
||||
ASSERT_EQ(count_parameters, 1);
|
||||
}
|
||||
|
||||
TEST(ONNX_Importer_Tests, ImportModelWithNotSupportedOp) {
|
||||
auto model_file_path =
|
||||
ov::test::utils::getModelFromTestModelZoo(ov::util::path_join({ONNX_MODELS_DIR, "not_supported.onnx"}));
|
||||
try {
|
||||
auto function = ngraph::onnx_import::import_onnx_model(model_file_path);
|
||||
auto model = convert_model("not_supported.onnx");
|
||||
FAIL() << "Any expection was thrown despite the ONNX model is not supported";
|
||||
} catch (const ngraph::ngraph_error& error) {
|
||||
} catch (const Exception& error) {
|
||||
EXPECT_PRED_FORMAT2(testing::IsSubstring,
|
||||
std::string("OpenVINO does not support the following ONNX operations: NotSupported"),
|
||||
error.what());
|
||||
} catch (...) {
|
||||
FAIL() << "Expected 'ngraph::ngraph_error' exception was not thrown despite the ONNX model is not supported";
|
||||
FAIL() << "Expected 'Exception' exception was not thrown despite the ONNX model is not supported";
|
||||
}
|
||||
}
|
||||
|
||||
TEST(ONNX_Importer_Tests, ImportModelWhenFileDoesNotExist) {
|
||||
auto model_file_path =
|
||||
ov::test::utils::getModelFromTestModelZoo(ov::util::path_join({ONNX_MODELS_DIR, "not_exist_file.onnx"}));
|
||||
try {
|
||||
auto function = ngraph::onnx_import::import_onnx_model(model_file_path);
|
||||
auto model = convert_model("not_exist_file.onnx");
|
||||
FAIL() << "Any expection was thrown despite the ONNX model file does not exist";
|
||||
} catch (const ngraph::ngraph_error& error) {
|
||||
EXPECT_PRED_FORMAT2(testing::IsSubstring,
|
||||
std::string("Error during import of ONNX model expected to be in file:"),
|
||||
error.what());
|
||||
} catch (const Exception& error) {
|
||||
EXPECT_PRED_FORMAT2(testing::IsSubstring, std::string("Could not open the file"), error.what());
|
||||
} catch (...) {
|
||||
FAIL() << "Expected 'ngraph::ngraph_error' exception was not thrown despite the ONNX model file does not exist";
|
||||
FAIL() << "Expected 'Exception' exception was not thrown despite the ONNX model file does not exist";
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: CVS-61224
|
||||
TEST(ONNX_Importer_Tests, DISABLED_ImportModelFromStream) {
|
||||
TEST(ONNX_Importer_Tests, ImportModelFromStream) {
|
||||
auto model_file_path =
|
||||
ov::test::utils::getModelFromTestModelZoo(ov::util::path_join({ONNX_MODELS_DIR, "addmul_abc.onnx"}));
|
||||
std::ifstream model_file_stream(model_file_path);
|
||||
test::utils::getModelFromTestModelZoo(util::path_join({TEST_ONNX_MODELS_DIRNAME, "addmul_abc.onnx"}));
|
||||
std::ifstream model_file_stream(model_file_path, std::ifstream::binary);
|
||||
ASSERT_TRUE(model_file_stream.is_open());
|
||||
int count_adds = 0;
|
||||
int count_multiplies = 0;
|
||||
int count_parameters = 0;
|
||||
|
||||
auto function = ngraph::onnx_import::import_onnx_model(model_file_stream);
|
||||
for (auto op : function->get_ops()) {
|
||||
auto model = convert_model(model_file_stream);
|
||||
for (auto op : model->get_ops()) {
|
||||
const auto op_type = std::string(op->get_type_name());
|
||||
count_adds += (op_type == "Add" ? 1 : 0);
|
||||
count_multiplies += (op_type == "Multiply" ? 1 : 0);
|
||||
@@ -145,39 +133,21 @@ TEST(ONNX_Importer_Tests, DISABLED_ImportModelFromStream) {
|
||||
ASSERT_EQ(count_parameters, 3);
|
||||
}
|
||||
|
||||
TEST(ONNX_Importer_Tests, GetSupportedOperators) {
|
||||
const std::int64_t version = 1;
|
||||
const std::string domain = "ai.onnx";
|
||||
const std::set<std::string> supported_ops = ngraph::onnx_import::get_supported_operators(version, domain);
|
||||
|
||||
ASSERT_GT(supported_ops.size(), 1);
|
||||
ASSERT_TRUE(supported_ops.find("Add") != supported_ops.end());
|
||||
}
|
||||
|
||||
TEST(ONNX_Importer_Tests, IsOperatorSupported) {
|
||||
const std::string op_name = "Abs";
|
||||
const std::int64_t version = 12;
|
||||
const std::string domain = "ai.onnx";
|
||||
const bool is_abs_op_supported = ngraph::onnx_import::is_operator_supported(op_name, version, domain);
|
||||
|
||||
ASSERT_TRUE(is_abs_op_supported);
|
||||
}
|
||||
|
||||
TEST(ONNX_Importer_Tests, ImportModelWithoutMetadata) {
|
||||
ov::Core core;
|
||||
Core core;
|
||||
auto model = core.read_model(
|
||||
ov::test::utils::getModelFromTestModelZoo(ov::util::path_join({ONNX_MODELS_DIR, "priorbox_clustered.onnx"})));
|
||||
test::utils::getModelFromTestModelZoo(util::path_join({TEST_ONNX_MODELS_DIRNAME, "priorbox_clustered.onnx"})));
|
||||
ASSERT_FALSE(model->has_rt_info("framework"));
|
||||
}
|
||||
|
||||
TEST(ONNX_Importer_Tests, ImportModelWithMetadata) {
|
||||
ov::Core core;
|
||||
Core core;
|
||||
auto model = core.read_model(
|
||||
ov::test::utils::getModelFromTestModelZoo(ov::util::path_join({ONNX_MODELS_DIR, "model_with_metadata.onnx"})));
|
||||
test::utils::getModelFromTestModelZoo(util::path_join({TEST_ONNX_MODELS_DIRNAME, "model_with_metadata.onnx"})));
|
||||
ASSERT_TRUE(model->has_rt_info("framework"));
|
||||
|
||||
const auto rtinfo = model->get_rt_info();
|
||||
auto metadata = rtinfo.at("framework").as<ov::AnyMap>();
|
||||
auto metadata = rtinfo.at("framework").as<AnyMap>();
|
||||
|
||||
ASSERT_EQ(metadata.size(), 2);
|
||||
ASSERT_EQ(metadata["meta_key1"].as<std::string>(), "meta_value1");
|
||||
|
||||
Reference in New Issue
Block a user