xref: /aosp_15_r20/external/armnn/src/backends/tosaCommon/test/OneToManyMappingTests.cpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1 //
2 // Copyright © 2022 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #include "AvgPool2DIgnoreValueChecker.hpp"
7 #include <armnn/IRuntime.hpp>
8 
9 using namespace armnn;
10 using namespace tosa;
11 
12 TEST_SUITE("TosaOperatorMappingOneToManyTests")
13 {
14 TEST_CASE("GetTosaMapping_AvgPool2DIgnoreValueLayer")
15 {
16     armnn::Pooling2dDescriptor descriptor;
17     descriptor.m_PoolType = armnn::PoolingAlgorithm::Average;
18     descriptor.m_PoolWidth = descriptor.m_PoolHeight = 2;
19     descriptor.m_StrideX = descriptor.m_StrideY = 2;
20     descriptor.m_PadLeft = 1;
21     descriptor.m_PadRight = 1;
22     descriptor.m_PadTop = 1;
23     descriptor.m_PadBottom = 1;
24     descriptor.m_PaddingMethod = armnn::PaddingMethod::IgnoreValue;
25 
26     armnn::TensorInfo inputTensorInfo({ 1, 1, 4, 4 }, DataType::Float32);
27     armnn::TensorInfo outputTensorInfo({ 1, 1, 3, 3 }, DataType::Float32);
28 
29     std::vector<std::vector<int32_t>> inputShape         = {{ 1, 1, 4, 4 }};
30     std::vector<std::vector<int32_t>> intermediateShape  = {{ 1, 1, 6, 6 }};
31     std::vector<std::vector<int32_t>> outputShape        = {{ 1, 1, 3, 3 }};
32 
33     TosaSerializationBasicBlock* basicBlock =
34         GetTosaMapping(nullptr, LayerType::Pooling2d, {&inputTensorInfo}, {&outputTensorInfo}, descriptor);
35     VerifyAvgPool2DIgnoreValue(basicBlock,
36                                inputShape,
37                                outputShape,
38                                intermediateShape,
39                                descriptor);
40 }
41 
42 TEST_CASE("GetTosaMappingFromLayer_AvgPool2DIgnoreValueLayer")
43 {
44     IRuntime::CreationOptions options;
45     IRuntimePtr runtime(IRuntime::Create(options));
46 
47     // Builds up the structure of the network.
48     INetworkPtr net(INetwork::Create());
49 
50     armnn::Pooling2dDescriptor descriptor;
51     descriptor.m_PoolType = armnn::PoolingAlgorithm::Average;
52     descriptor.m_PoolWidth = descriptor.m_PoolHeight = 2;
53     descriptor.m_StrideX = descriptor.m_StrideY = 2;
54     descriptor.m_PadLeft = 1;
55     descriptor.m_PadRight = 1;
56     descriptor.m_PadTop = 1;
57     descriptor.m_PadBottom = 1;
58     descriptor.m_PaddingMethod = armnn::PaddingMethod::IgnoreValue;
59 
60     IConnectableLayer* input0  = net->AddInputLayer(0, "input0");
61     IConnectableLayer* pool    = net->AddPooling2dLayer(descriptor, "pool");
62     IConnectableLayer* output  = net->AddOutputLayer(0, "output");
63 
64     input0->GetOutputSlot(0).Connect(pool->GetInputSlot(0));
65     pool->GetOutputSlot(0).Connect(output->GetInputSlot(0));
66 
67     armnn::TensorInfo inputTensorInfo({ 1, 1, 4, 4 }, DataType::Float32);
68     armnn::TensorInfo outputTensorInfo({ 1, 1, 3, 3 }, DataType::Float32);
69 
70     std::vector<std::vector<int32_t>> inputShape         = {{ 1, 1, 4, 4 }};
71     std::vector<std::vector<int32_t>> intermediateShape  = {{ 1, 1, 6, 6 }};
72     std::vector<std::vector<int32_t>> outputShape        = {{ 1, 1, 3, 3 }};
73 
74     input0->GetOutputSlot(0).SetTensorInfo(inputTensorInfo);
75     pool->GetOutputSlot(0).SetTensorInfo(outputTensorInfo);
76 
77     TosaSerializationBasicBlock* basicBlock =
78         GetTosaMappingFromLayer(PolymorphicDowncast<Layer*>(pool));
79     VerifyAvgPool2DIgnoreValue(basicBlock,
80                               inputShape,
81                               outputShape,
82                               intermediateShape,
83                               descriptor);
84 }
85 }