// // Copyright © 2017 Arm Ltd. All rights reserved. // SPDX-License-Identifier: MIT // #include "TestNameAndDescriptorLayerVisitor.hpp" #include "Network.hpp" #include namespace { #define TEST_CASE_CHECK_LAYER_VISITOR_NAME_AND_DESCRIPTOR(name) \ BOOST_AUTO_TEST_CASE(Check##name##LayerVisitorNameAndDescriptor) \ { \ const char* layerName = "name##Layer"; \ armnn::name##Descriptor descriptor = GetDescriptor(); \ Test##name##LayerVisitor visitor(descriptor, layerName); \ armnn::Network net; \ armnn::IConnectableLayer *const layer = net.Add##name##Layer(descriptor, layerName); \ layer->Accept(visitor); \ } #define TEST_CASE_CHECK_LAYER_VISITOR_NAME_NULLPTR_AND_DESCRIPTOR(name) \ BOOST_AUTO_TEST_CASE(Check##name##LayerVisitorNameNullptrAndDescriptor) \ { \ armnn::name##Descriptor descriptor = GetDescriptor(); \ Test##name##LayerVisitor visitor(descriptor); \ armnn::Network net; \ armnn::IConnectableLayer *const layer = net.Add##name##Layer(descriptor); \ layer->Accept(visitor); \ } #define TEST_SUITE_NAME_AND_DESCRIPTOR_LAYER_VISITOR(name) \ TEST_CASE_CHECK_LAYER_VISITOR_NAME_AND_DESCRIPTOR(name) \ TEST_CASE_CHECK_LAYER_VISITOR_NAME_NULLPTR_AND_DESCRIPTOR(name) template Descriptor GetDescriptor(); template<> armnn::ActivationDescriptor GetDescriptor() { armnn::ActivationDescriptor descriptor; descriptor.m_Function = armnn::ActivationFunction::Linear; descriptor.m_A = 2.0f; descriptor.m_B = 2.0f; return descriptor; } template<> armnn::ArgMinMaxDescriptor GetDescriptor() { armnn::ArgMinMaxDescriptor descriptor; descriptor.m_Function = armnn::ArgMinMaxFunction::Max; descriptor.m_Axis = 1; return descriptor; } template<> armnn::BatchToSpaceNdDescriptor GetDescriptor() { return armnn::BatchToSpaceNdDescriptor({ 1, 1 }, {{ 0, 0 }, { 0, 0 }}); } template<> armnn::ComparisonDescriptor GetDescriptor() { return armnn::ComparisonDescriptor(armnn::ComparisonOperation::GreaterOrEqual); } template<> armnn::ConcatDescriptor GetDescriptor() { armnn::ConcatDescriptor descriptor(2, 2); for (unsigned int i = 0u; i < descriptor.GetNumViews(); ++i) { for (unsigned int j = 0u; j < descriptor.GetNumDimensions(); ++j) { descriptor.SetViewOriginCoord(i, j, i); } } return descriptor; } template<> armnn::ElementwiseUnaryDescriptor GetDescriptor() { return armnn::ElementwiseUnaryDescriptor(armnn::UnaryOperation::Abs); } template<> armnn::InstanceNormalizationDescriptor GetDescriptor() { armnn::InstanceNormalizationDescriptor descriptor; descriptor.m_Gamma = 1.0f; descriptor.m_Beta = 2.0f; descriptor.m_Eps = 0.0001f; descriptor.m_DataLayout = armnn::DataLayout::NHWC; return descriptor; } template<> armnn::L2NormalizationDescriptor GetDescriptor() { armnn::L2NormalizationDescriptor descriptor; descriptor.m_Eps = 0.0001f; descriptor.m_DataLayout = armnn::DataLayout::NHWC; return descriptor; } template<> armnn::MeanDescriptor GetDescriptor() { return armnn::MeanDescriptor({ 1, 2, }, true); } template<> armnn::NormalizationDescriptor GetDescriptor() { armnn::NormalizationDescriptor descriptor; descriptor.m_NormChannelType = armnn::NormalizationAlgorithmChannel::Within; descriptor.m_NormMethodType = armnn::NormalizationAlgorithmMethod::LocalContrast; descriptor.m_NormSize = 1u; descriptor.m_Alpha = 1.0f; descriptor.m_Beta = 1.0f; descriptor.m_K = 1.0f; descriptor.m_DataLayout = armnn::DataLayout::NHWC; return descriptor; } template<> armnn::PadDescriptor GetDescriptor() { return armnn::PadDescriptor({{ 1, 2 }, { 3, 4 }}); } template<> armnn::PermuteDescriptor GetDescriptor() { return armnn::PermuteDescriptor({ 0, 1, 2, 3 }); } template<> armnn::Pooling2dDescriptor GetDescriptor() { armnn::Pooling2dDescriptor descriptor; descriptor.m_PoolType = armnn::PoolingAlgorithm::Max; descriptor.m_PadLeft = 1u; descriptor.m_PadRight = 1u; descriptor.m_PadTop = 1u; descriptor.m_PadBottom = 1u; descriptor.m_PoolWidth = 1u; descriptor.m_PoolHeight = 1u; descriptor.m_StrideX = 1u; descriptor.m_StrideY = 1u; descriptor.m_OutputShapeRounding = armnn::OutputShapeRounding::Ceiling; descriptor.m_PaddingMethod = armnn::PaddingMethod::IgnoreValue; descriptor.m_DataLayout = armnn::DataLayout::NHWC; return descriptor; } template<> armnn::ReshapeDescriptor GetDescriptor() { return armnn::ReshapeDescriptor({ 1, 2, 3, 4 }); } template<> armnn::ResizeDescriptor GetDescriptor() { armnn::ResizeDescriptor descriptor; descriptor.m_TargetHeight = 1u; descriptor.m_TargetWidth = 1u; descriptor.m_DataLayout = armnn::DataLayout::NHWC; return descriptor; } template<> armnn::SliceDescriptor GetDescriptor() { return armnn::SliceDescriptor({ 1, 1 }, { 2, 2 }); } template<> armnn::SoftmaxDescriptor GetDescriptor() { armnn::SoftmaxDescriptor descriptor; descriptor.m_Beta = 2.0f; descriptor.m_Axis = -1; return descriptor; } template<> armnn::SpaceToBatchNdDescriptor GetDescriptor() { return armnn::SpaceToBatchNdDescriptor({ 2, 2 }, {{ 1, 1 } , { 1, 1 }}); } template<> armnn::SpaceToDepthDescriptor GetDescriptor() { return armnn::SpaceToDepthDescriptor(2, armnn::DataLayout::NHWC); } template<> armnn::SplitterDescriptor GetDescriptor() { armnn::SplitterDescriptor descriptor(2, 2); for (unsigned int i = 0u; i < descriptor.GetNumViews(); ++i) { for (unsigned int j = 0u; j < descriptor.GetNumDimensions(); ++j) { descriptor.SetViewOriginCoord(i, j, i); descriptor.SetViewSize(i, j, 1); } } return descriptor; } template<> armnn::StackDescriptor GetDescriptor() { return armnn::StackDescriptor(1, 2, { 2, 2 }); } template<> armnn::StridedSliceDescriptor GetDescriptor() { armnn::StridedSliceDescriptor descriptor({ 1, 2 }, { 3, 4 }, { 3, 4 }); descriptor.m_BeginMask = 1; descriptor.m_EndMask = 1; descriptor.m_ShrinkAxisMask = 1; descriptor.m_EllipsisMask = 1; descriptor.m_NewAxisMask = 1; descriptor.m_DataLayout = armnn::DataLayout::NHWC; return descriptor; } } // anonymous namespace BOOST_AUTO_TEST_SUITE(TestNameAndDescriptorLayerVisitor) TEST_SUITE_NAME_AND_DESCRIPTOR_LAYER_VISITOR(Activation) TEST_SUITE_NAME_AND_DESCRIPTOR_LAYER_VISITOR(ArgMinMax) TEST_SUITE_NAME_AND_DESCRIPTOR_LAYER_VISITOR(DepthToSpace) TEST_SUITE_NAME_AND_DESCRIPTOR_LAYER_VISITOR(BatchToSpaceNd) TEST_SUITE_NAME_AND_DESCRIPTOR_LAYER_VISITOR(Comparison) TEST_SUITE_NAME_AND_DESCRIPTOR_LAYER_VISITOR(Concat) TEST_SUITE_NAME_AND_DESCRIPTOR_LAYER_VISITOR(ElementwiseUnary) TEST_SUITE_NAME_AND_DESCRIPTOR_LAYER_VISITOR(InstanceNormalization) TEST_SUITE_NAME_AND_DESCRIPTOR_LAYER_VISITOR(L2Normalization) TEST_SUITE_NAME_AND_DESCRIPTOR_LAYER_VISITOR(LogSoftmax) TEST_SUITE_NAME_AND_DESCRIPTOR_LAYER_VISITOR(Mean) TEST_SUITE_NAME_AND_DESCRIPTOR_LAYER_VISITOR(Normalization) TEST_SUITE_NAME_AND_DESCRIPTOR_LAYER_VISITOR(Pad) TEST_SUITE_NAME_AND_DESCRIPTOR_LAYER_VISITOR(Permute) TEST_SUITE_NAME_AND_DESCRIPTOR_LAYER_VISITOR(Pooling2d) TEST_SUITE_NAME_AND_DESCRIPTOR_LAYER_VISITOR(Reshape) TEST_SUITE_NAME_AND_DESCRIPTOR_LAYER_VISITOR(Resize) TEST_SUITE_NAME_AND_DESCRIPTOR_LAYER_VISITOR(Slice) TEST_SUITE_NAME_AND_DESCRIPTOR_LAYER_VISITOR(Softmax) TEST_SUITE_NAME_AND_DESCRIPTOR_LAYER_VISITOR(SpaceToBatchNd) TEST_SUITE_NAME_AND_DESCRIPTOR_LAYER_VISITOR(SpaceToDepth) TEST_SUITE_NAME_AND_DESCRIPTOR_LAYER_VISITOR(Splitter) TEST_SUITE_NAME_AND_DESCRIPTOR_LAYER_VISITOR(Stack) TEST_SUITE_NAME_AND_DESCRIPTOR_LAYER_VISITOR(StridedSlice) BOOST_AUTO_TEST_SUITE_END()