//***************************************************************************** // Copyright 2017-2018 Intel Corporation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. //***************************************************************************** #include <memory> #include "gtest/gtest.h" #include "ngraph/ngraph.hpp" #include "ngraph/pass/manager.hpp" #include "ngraph/pass/nop_elimination.hpp" #include "util/test_tools.hpp" using namespace ngraph; using namespace std; TEST(nop_elimination, eliminate_pad) { Shape shape_a{2}; auto A = make_shared<op::Parameter>(element::f32, shape_a); Shape shape_b{}; auto B = make_shared<op::Parameter>(element::f32, shape_b); Shape padding_below{0}; Shape padding_above{0}; Shape padding_interior{0}; auto f = make_shared<Function>( make_shared<op::Pad>(A, B, padding_below, padding_above, padding_interior), op::ParameterVector{A, B}); pass::Manager pass_manager; pass_manager.register_pass<pass::NopElimination>(); pass_manager.run_passes(f); ASSERT_EQ(count_ops_of_type<op::Pad>(f), 0); } TEST(nop_elimination, eliminate_sum) { Shape shape{2, 2}; auto A = make_shared<op::Parameter>(element::f32, shape); auto f = make_shared<Function>(make_shared<op::Sum>(A, AxisSet{}), op::ParameterVector{A}); pass::Manager pass_manager; pass_manager.register_pass<pass::NopElimination>(); pass_manager.run_passes(f); ASSERT_EQ(count_ops_of_type<op::Sum>(f), 0); } TEST(nop_elimination, eliminate_convert) { Shape shape{}; auto type = element::f32; auto A = make_shared<op::Parameter>(type, shape); auto f = make_shared<Function>(make_shared<op::Convert>(A, element::f32), op::ParameterVector{A}); pass::Manager pass_manager; pass_manager.register_pass<pass::NopElimination>(); pass_manager.run_passes(f); ASSERT_EQ(count_ops_of_type<op::Convert>(f), 0); } TEST(nop_elimination, eliminate_slice) { Shape shape{2, 2}; auto A = make_shared<op::Parameter>(element::f32, shape); auto f = make_shared<Function>(make_shared<op::Slice>(A, Coordinate{0, 0}, Coordinate{2, 2}), op::ParameterVector{A}); pass::Manager pass_manager; pass_manager.register_pass<pass::NopElimination>(); pass_manager.run_passes(f); ASSERT_EQ(count_ops_of_type<op::Slice>(f), 0); } TEST(nop_elimination, eliminate_broadcast) { Shape shape{}; auto A = make_shared<op::Parameter>(element::f32, shape); auto f = make_shared<Function>(make_shared<op::Broadcast>(A, shape, AxisSet{}), op::ParameterVector{A}); pass::Manager pass_manager; pass_manager.register_pass<pass::NopElimination>(); pass_manager.run_passes(f); ASSERT_EQ(count_ops_of_type<op::Broadcast>(f), 0); } TEST(nop_elimination, eliminate_stop_gradient) { Shape shape{}; auto A = make_shared<op::Parameter>(element::f32, shape); auto f = make_shared<Function>(make_shared<op::StopGradient>(A), op::ParameterVector{A}); pass::Manager pass_manager; pass_manager.register_pass<pass::NopElimination>(); pass_manager.run_passes(f); ASSERT_EQ(count_ops_of_type<op::StopGradient>(f), 0); }