xref: /aosp_15_r20/external/armnn/src/armnnTfLiteParser/test/MaxPool2D.cpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1*89c4ff92SAndroid Build Coastguard Worker //
2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2017 Arm Ltd and Contributors. All rights reserved.
3*89c4ff92SAndroid Build Coastguard Worker // SPDX-License-Identifier: MIT
4*89c4ff92SAndroid Build Coastguard Worker //
5*89c4ff92SAndroid Build Coastguard Worker 
6*89c4ff92SAndroid Build Coastguard Worker #include "ParserFlatbuffersFixture.hpp"
7*89c4ff92SAndroid Build Coastguard Worker 
8*89c4ff92SAndroid Build Coastguard Worker TEST_SUITE("TensorflowLiteParser_MaxPool2D")
9*89c4ff92SAndroid Build Coastguard Worker {
10*89c4ff92SAndroid Build Coastguard Worker struct MaxPool2DFixture : public ParserFlatbuffersFixture
11*89c4ff92SAndroid Build Coastguard Worker {
MaxPool2DFixtureMaxPool2DFixture12*89c4ff92SAndroid Build Coastguard Worker     explicit MaxPool2DFixture(std::string inputdim, std::string outputdim, std::string dataType)
13*89c4ff92SAndroid Build Coastguard Worker     {
14*89c4ff92SAndroid Build Coastguard Worker         m_JsonString = R"(
15*89c4ff92SAndroid Build Coastguard Worker         {
16*89c4ff92SAndroid Build Coastguard Worker             "version": 3,
17*89c4ff92SAndroid Build Coastguard Worker             "operator_codes": [ { "builtin_code": "MAX_POOL_2D" } ],
18*89c4ff92SAndroid Build Coastguard Worker             "subgraphs": [
19*89c4ff92SAndroid Build Coastguard Worker             {
20*89c4ff92SAndroid Build Coastguard Worker                 "tensors": [
21*89c4ff92SAndroid Build Coastguard Worker                 {
22*89c4ff92SAndroid Build Coastguard Worker                     "shape": )"
23*89c4ff92SAndroid Build Coastguard Worker                     + outputdim
24*89c4ff92SAndroid Build Coastguard Worker                     + R"(,
25*89c4ff92SAndroid Build Coastguard Worker                     "type": )"
26*89c4ff92SAndroid Build Coastguard Worker                       + dataType
27*89c4ff92SAndroid Build Coastguard Worker                       + R"(,
28*89c4ff92SAndroid Build Coastguard Worker                             "buffer": 0,
29*89c4ff92SAndroid Build Coastguard Worker                             "name": "OutputTensor",
30*89c4ff92SAndroid Build Coastguard Worker                             "quantization": {
31*89c4ff92SAndroid Build Coastguard Worker                                 "min": [ 0.0 ],
32*89c4ff92SAndroid Build Coastguard Worker                                 "max": [ 255.0 ],
33*89c4ff92SAndroid Build Coastguard Worker                                 "scale": [ 1.0 ],
34*89c4ff92SAndroid Build Coastguard Worker                                 "zero_point": [ 0 ]
35*89c4ff92SAndroid Build Coastguard Worker                             }
36*89c4ff92SAndroid Build Coastguard Worker                 },
37*89c4ff92SAndroid Build Coastguard Worker                 {
38*89c4ff92SAndroid Build Coastguard Worker                     "shape": )"
39*89c4ff92SAndroid Build Coastguard Worker                     + inputdim
40*89c4ff92SAndroid Build Coastguard Worker                     + R"(,
41*89c4ff92SAndroid Build Coastguard Worker                     "type": )"
42*89c4ff92SAndroid Build Coastguard Worker                       + dataType
43*89c4ff92SAndroid Build Coastguard Worker                       + R"(,
44*89c4ff92SAndroid Build Coastguard Worker                             "buffer": 1,
45*89c4ff92SAndroid Build Coastguard Worker                             "name": "InputTensor",
46*89c4ff92SAndroid Build Coastguard Worker                             "quantization": {
47*89c4ff92SAndroid Build Coastguard Worker                                 "min": [ 0.0 ],
48*89c4ff92SAndroid Build Coastguard Worker                                 "max": [ 255.0 ],
49*89c4ff92SAndroid Build Coastguard Worker                                 "scale": [ 1.0 ],
50*89c4ff92SAndroid Build Coastguard Worker                                 "zero_point": [ 0 ]
51*89c4ff92SAndroid Build Coastguard Worker                             }
52*89c4ff92SAndroid Build Coastguard Worker                 }
53*89c4ff92SAndroid Build Coastguard Worker                 ],
54*89c4ff92SAndroid Build Coastguard Worker                 "inputs": [ 1 ],
55*89c4ff92SAndroid Build Coastguard Worker                 "outputs": [ 0 ],
56*89c4ff92SAndroid Build Coastguard Worker                 "operators": [ {
57*89c4ff92SAndroid Build Coastguard Worker                         "opcode_index": 0,
58*89c4ff92SAndroid Build Coastguard Worker                         "inputs": [ 1 ],
59*89c4ff92SAndroid Build Coastguard Worker                         "outputs": [ 0 ],
60*89c4ff92SAndroid Build Coastguard Worker                         "builtin_options_type": "Pool2DOptions",
61*89c4ff92SAndroid Build Coastguard Worker                         "builtin_options":
62*89c4ff92SAndroid Build Coastguard Worker                         {
63*89c4ff92SAndroid Build Coastguard Worker                             "padding": "VALID",
64*89c4ff92SAndroid Build Coastguard Worker                             "stride_w": 2,
65*89c4ff92SAndroid Build Coastguard Worker                             "stride_h": 2,
66*89c4ff92SAndroid Build Coastguard Worker                             "filter_width": 2,
67*89c4ff92SAndroid Build Coastguard Worker                             "filter_height": 2,
68*89c4ff92SAndroid Build Coastguard Worker                             "fused_activation_function": "NONE"
69*89c4ff92SAndroid Build Coastguard Worker                         },
70*89c4ff92SAndroid Build Coastguard Worker                         "custom_options_format": "FLEXBUFFERS"
71*89c4ff92SAndroid Build Coastguard Worker                     } ]
72*89c4ff92SAndroid Build Coastguard Worker                 }
73*89c4ff92SAndroid Build Coastguard Worker             ],
74*89c4ff92SAndroid Build Coastguard Worker             "description": "MaxPool2D test.",
75*89c4ff92SAndroid Build Coastguard Worker             "buffers" : [ {}, {} ]
76*89c4ff92SAndroid Build Coastguard Worker         })";
77*89c4ff92SAndroid Build Coastguard Worker 
78*89c4ff92SAndroid Build Coastguard Worker         SetupSingleInputSingleOutput("InputTensor", "OutputTensor");
79*89c4ff92SAndroid Build Coastguard Worker     }
80*89c4ff92SAndroid Build Coastguard Worker };
81*89c4ff92SAndroid Build Coastguard Worker 
82*89c4ff92SAndroid Build Coastguard Worker 
83*89c4ff92SAndroid Build Coastguard Worker struct MaxPoolLiteFixtureUint1DOutput : MaxPool2DFixture
84*89c4ff92SAndroid Build Coastguard Worker {
MaxPoolLiteFixtureUint1DOutputMaxPoolLiteFixtureUint1DOutput85*89c4ff92SAndroid Build Coastguard Worker     MaxPoolLiteFixtureUint1DOutput() : MaxPool2DFixture("[ 1, 2, 2, 1 ]", "[ 1, 1, 1, 1 ]", "UINT8") {}
86*89c4ff92SAndroid Build Coastguard Worker };
87*89c4ff92SAndroid Build Coastguard Worker 
88*89c4ff92SAndroid Build Coastguard Worker struct MaxPoolLiteFixtureFloat1DOutput : MaxPool2DFixture
89*89c4ff92SAndroid Build Coastguard Worker {
MaxPoolLiteFixtureFloat1DOutputMaxPoolLiteFixtureFloat1DOutput90*89c4ff92SAndroid Build Coastguard Worker     MaxPoolLiteFixtureFloat1DOutput() : MaxPool2DFixture("[ 1, 2, 2, 1 ]", "[ 1, 1, 1, 1 ]", "FLOAT32") {}
91*89c4ff92SAndroid Build Coastguard Worker };
92*89c4ff92SAndroid Build Coastguard Worker 
93*89c4ff92SAndroid Build Coastguard Worker struct MaxPoolLiteFixtureUint2DOutput : MaxPool2DFixture
94*89c4ff92SAndroid Build Coastguard Worker {
MaxPoolLiteFixtureUint2DOutputMaxPoolLiteFixtureUint2DOutput95*89c4ff92SAndroid Build Coastguard Worker     MaxPoolLiteFixtureUint2DOutput() : MaxPool2DFixture("[ 1, 4, 4, 1 ]", "[ 1, 2, 2, 1 ]", "UINT8") {}
96*89c4ff92SAndroid Build Coastguard Worker };
97*89c4ff92SAndroid Build Coastguard Worker 
98*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(MaxPoolLiteFixtureUint1DOutput, "MaxPoolLiteUint1DOutput")
99*89c4ff92SAndroid Build Coastguard Worker {
100*89c4ff92SAndroid Build Coastguard Worker     RunTest<4, armnn::DataType::QAsymmU8>(0, { 2, 3, 5, 2 }, { 5 });
101*89c4ff92SAndroid Build Coastguard Worker }
102*89c4ff92SAndroid Build Coastguard Worker 
103*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(MaxPoolLiteFixtureFloat1DOutput, "MaxPoolLiteFloat1DOutput")
104*89c4ff92SAndroid Build Coastguard Worker {
105*89c4ff92SAndroid Build Coastguard Worker     RunTest<4, armnn::DataType::Float32>(0, { 2.0f, 3.0f, 5.0f, 2.0f },  { 5.0f });
106*89c4ff92SAndroid Build Coastguard Worker }
107*89c4ff92SAndroid Build Coastguard Worker 
108*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(MaxPoolLiteFixtureUint2DOutput, "MaxPoolLiteUint2DOutput")
109*89c4ff92SAndroid Build Coastguard Worker {
110*89c4ff92SAndroid Build Coastguard Worker     RunTest<4, armnn::DataType::QAsymmU8>(
111*89c4ff92SAndroid Build Coastguard Worker         0, { 1, 2, 2, 3, 5, 6, 7, 8, 3, 2, 1, 0, 1, 2, 3, 4 }, { 6, 8, 3, 4 });
112*89c4ff92SAndroid Build Coastguard Worker }
113*89c4ff92SAndroid Build Coastguard Worker 
114*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(MaxPoolLiteFixtureFloat1DOutput, "MaxPoolIncorrectDataTypeError")
115*89c4ff92SAndroid Build Coastguard Worker {
116*89c4ff92SAndroid Build Coastguard Worker     CHECK_THROWS_AS((RunTest<4, armnn::DataType::QAsymmU8>(0, { 2, 3, 5, 2 }, { 5 })), armnn::Exception);
117*89c4ff92SAndroid Build Coastguard Worker }
118*89c4ff92SAndroid Build Coastguard Worker 
119*89c4ff92SAndroid Build Coastguard Worker }
120