blob: cfdaaf529b73425f1b35600d8cec2ccf9413f9b0 [file] [log] [blame]
//
// Copyright © 2017 Arm Ltd and Contributors. All rights reserved.
// SPDX-License-Identifier: MIT
//
#include "TestNameAndDescriptorLayerVisitor.hpp"
#include "Network.hpp"
#include <armnn/Exceptions.hpp>
#include <doctest/doctest.h>
namespace
{
#define TEST_CASE_CHECK_LAYER_VISITOR_NAME_AND_DESCRIPTOR(name, testName) \
TEST_CASE(#testName) \
{ \
const char* layerName = "name##Layer"; \
armnn::name##Descriptor descriptor = GetDescriptor<armnn::name##Descriptor>(); \
Test##name##LayerVisitor visitor(descriptor, layerName); \
armnn::NetworkImpl net; \
armnn::IConnectableLayer *const layer = net.Add##name##Layer(descriptor, layerName); \
layer->ExecuteStrategy(visitor); \
}
#define TEST_CASE_CHECK_LAYER_VISITOR_NAME_NULLPTR_AND_DESCRIPTOR(name, testName) \
TEST_CASE(#testName) \
{ \
armnn::name##Descriptor descriptor = GetDescriptor<armnn::name##Descriptor>(); \
Test##name##LayerVisitor visitor(descriptor); \
armnn::NetworkImpl net; \
armnn::IConnectableLayer *const layer = net.Add##name##Layer(descriptor); \
layer->ExecuteStrategy(visitor); \
}
template<typename Descriptor> Descriptor GetDescriptor();
template<>
armnn::ActivationDescriptor GetDescriptor<armnn::ActivationDescriptor>()
{
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>()
{
armnn::ArgMinMaxDescriptor descriptor;
descriptor.m_Function = armnn::ArgMinMaxFunction::Max;
descriptor.m_Axis = 1;
return descriptor;
}
template<>
armnn::BatchToSpaceNdDescriptor GetDescriptor<armnn::BatchToSpaceNdDescriptor>()
{
return armnn::BatchToSpaceNdDescriptor({ 1, 1 }, {{ 0, 0 }, { 0, 0 }});
}
template<>
armnn::ComparisonDescriptor GetDescriptor<armnn::ComparisonDescriptor>()
{
return armnn::ComparisonDescriptor(armnn::ComparisonOperation::GreaterOrEqual);
}
template<>
armnn::ConcatDescriptor GetDescriptor<armnn::ConcatDescriptor>()
{
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<armnn::ElementwiseUnaryDescriptor>()
{
return armnn::ElementwiseUnaryDescriptor(armnn::UnaryOperation::Abs);
}
template<>
armnn::FillDescriptor GetDescriptor<armnn::FillDescriptor>()
{
return armnn::FillDescriptor(1);
}
template<>
armnn::GatherDescriptor GetDescriptor<armnn::GatherDescriptor>()
{
return armnn::GatherDescriptor();
}
template<>
armnn::InstanceNormalizationDescriptor GetDescriptor<armnn::InstanceNormalizationDescriptor>()
{
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>()
{
armnn::L2NormalizationDescriptor descriptor;
descriptor.m_Eps = 0.0001f;
descriptor.m_DataLayout = armnn::DataLayout::NHWC;
return descriptor;
}
template<>
armnn::LogicalBinaryDescriptor GetDescriptor<armnn::LogicalBinaryDescriptor>()
{
return armnn::LogicalBinaryDescriptor(armnn::LogicalBinaryOperation::LogicalOr);
}
template<>
armnn::MeanDescriptor GetDescriptor<armnn::MeanDescriptor>()
{
return armnn::MeanDescriptor({ 1, 2, }, true);
}
template<>
armnn::NormalizationDescriptor GetDescriptor<armnn::NormalizationDescriptor>()
{
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<armnn::PadDescriptor>()
{
return armnn::PadDescriptor({{ 1, 2 }, { 3, 4 }});
}
template<>
armnn::PermuteDescriptor GetDescriptor<armnn::PermuteDescriptor>()
{
return armnn::PermuteDescriptor({ 0, 1, 2, 3 });
}
template<>
armnn::Pooling2dDescriptor GetDescriptor<armnn::Pooling2dDescriptor>()
{
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<armnn::ReshapeDescriptor>()
{
return armnn::ReshapeDescriptor({ 1, 2, 3, 4 });
}
template<>
armnn::ResizeDescriptor GetDescriptor<armnn::ResizeDescriptor>()
{
armnn::ResizeDescriptor descriptor;
descriptor.m_TargetHeight = 1u;
descriptor.m_TargetWidth = 1u;
descriptor.m_DataLayout = armnn::DataLayout::NHWC;
return descriptor;
}
template<>
armnn::SliceDescriptor GetDescriptor<armnn::SliceDescriptor>()
{
return armnn::SliceDescriptor({ 1, 1 }, { 2, 2 });
}
template<>
armnn::SoftmaxDescriptor GetDescriptor<armnn::SoftmaxDescriptor>()
{
armnn::SoftmaxDescriptor descriptor;
descriptor.m_Beta = 2.0f;
descriptor.m_Axis = -1;
return descriptor;
}
template<>
armnn::SpaceToBatchNdDescriptor GetDescriptor<armnn::SpaceToBatchNdDescriptor>()
{
return armnn::SpaceToBatchNdDescriptor({ 2, 2 }, {{ 1, 1 } , { 1, 1 }});
}
template<>
armnn::SpaceToDepthDescriptor GetDescriptor<armnn::SpaceToDepthDescriptor>()
{
return armnn::SpaceToDepthDescriptor(2, armnn::DataLayout::NHWC);
}
template<>
armnn::SplitterDescriptor GetDescriptor<armnn::SplitterDescriptor>()
{
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<armnn::StackDescriptor>()
{
return armnn::StackDescriptor(1, 2, { 2, 2 });
}
template<>
armnn::StridedSliceDescriptor GetDescriptor<armnn::StridedSliceDescriptor>()
{
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;
}
template<>
armnn::TransposeDescriptor GetDescriptor<armnn::TransposeDescriptor>()
{
return armnn::TransposeDescriptor({ 0, 1, 2, 3 });
}
} // anonymous namespace
TEST_SUITE("TestNameAndDescriptorLayerVisitor")
{
TEST_CASE_CHECK_LAYER_VISITOR_NAME_AND_DESCRIPTOR(Activation, CheckAdditionLayerVisitorNameAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_AND_DESCRIPTOR(ArgMinMax, CheckArgMinMaxLayerVisitorNameAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_AND_DESCRIPTOR(DepthToSpace, CheckDepthToSpaceLayerVisitorNameAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_AND_DESCRIPTOR(BatchToSpaceNd, CheckBatchToSpaceNdLayerVisitorNameAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_AND_DESCRIPTOR(Comparison, CheckComparisonLayerVisitorNameAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_AND_DESCRIPTOR(Concat, CheckConcatLayerVisitorNameAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_AND_DESCRIPTOR(ElementwiseUnary, CheckElementwiseUnaryLayerVisitorNameAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_AND_DESCRIPTOR(Fill, CheckFillLayerVisitorNameAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_AND_DESCRIPTOR(Gather, CheckGatherLayerVisitorNameAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_AND_DESCRIPTOR(InstanceNormalization,
CheckInstanceNormalizationLayerVisitorNameAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_AND_DESCRIPTOR(L2Normalization, CheckL2NormalizationLayerVisitorNameAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_AND_DESCRIPTOR(LogicalBinary, CheckLogicalBinaruLayerVisitorNameAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_AND_DESCRIPTOR(LogSoftmax, CheckLogSoftmaxLayerVisitorNameAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_AND_DESCRIPTOR(Mean, CheckMeanLayerVisitorNameAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_AND_DESCRIPTOR(Normalization, CheckNormalizationLayerVisitorNameAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_AND_DESCRIPTOR(Pad, CheckPadLayerVisitorNameAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_AND_DESCRIPTOR(Permute, CheckPermuteLayerVisitorNameAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_AND_DESCRIPTOR(Pooling2d, CheckPooling2dLayerVisitorNameAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_AND_DESCRIPTOR(Reshape, CheckReshapeLayerVisitorNameAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_AND_DESCRIPTOR(Resize, CheckResizeLayerVisitorNameAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_AND_DESCRIPTOR(Slice, CheckSliceLayerVisitorNameAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_AND_DESCRIPTOR(Softmax, CheckSoftmaxLayerVisitorNameAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_AND_DESCRIPTOR(SpaceToBatchNd, CheckSpaceToBatchNdLayerVisitorNameAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_AND_DESCRIPTOR(SpaceToDepth, CheckSpaceToDepthLayerVisitorNameAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_AND_DESCRIPTOR(Splitter, CheckSplitterLayerVisitorNameAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_AND_DESCRIPTOR(Stack, CheckStackLayerVisitorNameAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_AND_DESCRIPTOR(StridedSlice, CheckStridedSliceLayerVisitorNameAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_AND_DESCRIPTOR(Transpose, CheckTransposeLayerVisitorNameAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_NULLPTR_AND_DESCRIPTOR(Activation,
CheckAdditionLayerVisitorNameNullptrAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_NULLPTR_AND_DESCRIPTOR(ArgMinMax,
CheckArgMinMaxLayerVisitorNameNullptrAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_NULLPTR_AND_DESCRIPTOR(DepthToSpace,
CheckDepthToSpaceLayerVisitorNameNullptrAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_NULLPTR_AND_DESCRIPTOR(BatchToSpaceNd,
CheckBatchToSpaceNdLayerVisitorNameNullptrAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_NULLPTR_AND_DESCRIPTOR(Comparison,
CheckComparisonLayerVisitorNameNullptrAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_NULLPTR_AND_DESCRIPTOR(Concat,
CheckConcatLayerVisitorNameNullptrAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_NULLPTR_AND_DESCRIPTOR(ElementwiseUnary,
CheckElementwiseUnaryLayerVisitorNameNullptrAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_NULLPTR_AND_DESCRIPTOR(Fill,
CheckFillLayerVisitorNameNullptrAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_NULLPTR_AND_DESCRIPTOR(Gather,
CheckGatherLayerVisitorNameNullptrAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_NULLPTR_AND_DESCRIPTOR(InstanceNormalization,
CheckInstanceNormalizationLayerVisitorNameNullptrAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_NULLPTR_AND_DESCRIPTOR(L2Normalization,
CheckL2NormalizationLayerVisitorNameNullptrAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_NULLPTR_AND_DESCRIPTOR(LogicalBinary,
CheckLogicalBinaruLayerVisitorNameNullptrAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_NULLPTR_AND_DESCRIPTOR(LogSoftmax,
CheckLogSoftmaxLayerVisitorNameNullptrAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_NULLPTR_AND_DESCRIPTOR(Mean,
CheckMeanLayerVisitorNameNullptrAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_NULLPTR_AND_DESCRIPTOR(Normalization,
CheckNormalizationLayerVisitorNameNullptrAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_NULLPTR_AND_DESCRIPTOR(Pad,
CheckPadLayerVisitorNameNullptrAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_NULLPTR_AND_DESCRIPTOR(Permute,
CheckPermuteLayerVisitorNameNullptrAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_NULLPTR_AND_DESCRIPTOR(Pooling2d,
CheckPooling2dLayerVisitorNameNullptrAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_NULLPTR_AND_DESCRIPTOR(Reshape,
CheckReshapeLayerVisitorNameNullptrAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_NULLPTR_AND_DESCRIPTOR(Resize,
CheckResizeLayerVisitorNameNullptrAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_NULLPTR_AND_DESCRIPTOR(Slice,
CheckSliceLayerVisitorNameNullptrAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_NULLPTR_AND_DESCRIPTOR(Softmax,
CheckSoftmaxLayerVisitorNameNullptrAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_NULLPTR_AND_DESCRIPTOR(SpaceToBatchNd,
CheckSpaceToBatchNdLayerVisitorNameNullptrAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_NULLPTR_AND_DESCRIPTOR(SpaceToDepth,
CheckSpaceToDepthLayerVisitorNameNullptrAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_NULLPTR_AND_DESCRIPTOR(Splitter,
CheckSplitterLayerVisitorNameNullptrAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_NULLPTR_AND_DESCRIPTOR(Stack,
CheckStackLayerVisitorNameNullptrAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_NULLPTR_AND_DESCRIPTOR(StridedSlice,
CheckStridedSliceLayerVisitorNameNullptrAndDescriptor)
TEST_CASE_CHECK_LAYER_VISITOR_NAME_NULLPTR_AND_DESCRIPTOR(Transpose,
CheckTransposeLayerVisitorNameNullptrAndDescriptor)
}