xref: /aosp_15_r20/external/armnn/src/armnnTfLiteParser/test/FloorDiv.cpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1 //
2 // Copyright © 2022 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #include "ParserFlatbuffersFixture.hpp"
7 
8 
9 TEST_SUITE("TensorflowLiteParser_FloorDiv")
10 {
11 struct FloorDivFixture : public ParserFlatbuffersFixture
12 {
FloorDivFixtureFloorDivFixture13     explicit FloorDivFixture(const std::string& inputShape1,
14                              const std::string& inputShape2,
15                              const std::string& outputShape,
16                              const std::string& inputShapeSignature1,
17                              const std::string& inputShapeSignature2,
18                              const std::string& outputShapeSignature,
19                              const std::string& dataType = "FLOAT32")
20     {
21         m_JsonString = R"(
22             {
23               "version": 3,
24               "operator_codes": [
25                 {
26                   "deprecated_builtin_code": 90,
27                   "version": 2,
28                   "builtin_code": "FLOOR_DIV"
29                 }
30               ],
31               "subgraphs": [
32                 {
33                   "tensors": [
34                     {
35                       "shape": )" + inputShape1 + R"(,
36                       "type": )" + dataType + R"(,
37                       "buffer": 1,
38                       "name": "inputTensor1",
39                       "quantization": {
40                         "details_type": "NONE",
41                         "quantized_dimension": 0
42                       },
43                       "is_variable": false,
44                       "shape_signature": )" + inputShapeSignature1 + R"(,
45                     },
46                     {
47                       "shape": )" + inputShape2 + R"(,
48                       "type": )" + dataType + R"(,
49                       "buffer": 2,
50                       "name": "inputTensor2",
51                       "quantization": {
52                         "details_type": "NONE",
53                         "quantized_dimension": 0
54                       },
55                       "is_variable": false,
56                       "shape_signature": )" + inputShapeSignature2 + R"(,
57                     },
58                     {
59                       "shape": )" + outputShape + R"(,
60                       "type": )" + dataType + R"(,
61                       "buffer": 3,
62                       "name": "outputTensor",
63                       "quantization": {
64                         "details_type": "NONE",
65                         "quantized_dimension": 0
66                       },
67                       "is_variable": false,
68                       "shape_signature": )" + outputShapeSignature + R"(,
69                     }
70                   ],
71                   "inputs": [
72                     0,
73                     1
74                   ],
75                   "outputs": [
76                     2
77                   ],
78                   "operators": [
79                     {
80                       "opcode_index": 0,
81                       "inputs": [
82                         0,
83                         1
84                       ],
85                       "outputs": [
86                         2
87                       ],
88                       "builtin_options_type": "NONE",
89                       "custom_options_format": "FLEXBUFFERS"
90                     }
91                   ],
92                   "name": "main"
93                 }
94               ],
95               "description": "MLIR Converted.",
96               "buffers": [ {}, {}, {}, {},
97                 {
98                   "data": [
99                     49,
100                     46,
101                     49,
102                     52,
103                     46,
104                     48,
105                     0,
106                     0,
107                     0,
108                     0,
109                     0,
110                     0,
111                     0,
112                     0,
113                     0,
114                     0
115                   ]
116                 }
117               ],
118               "metadata": [
119                 {
120                   "name": "min_runtime_version",
121                   "buffer": 4
122                 }
123               ],
124               "signature_defs": [
125 
126               ]
127             }
128         )";
129         Setup();
130     }
131 };
132 
133 struct SimpleFloorDivFixture : public FloorDivFixture
134 {
SimpleFloorDivFixtureSimpleFloorDivFixture135     SimpleFloorDivFixture() : FloorDivFixture("[ 1, 3, 4 ]", "[ 1, 3, 4 ]", "[ 1, 3, 4 ]",
136                                               "[ -1, 3, 4 ]", "[ -1, 3, 4 ]", "[ -1, 3, 4 ]") {}
137 };
138 
139 TEST_CASE_FIXTURE(SimpleFloorDivFixture, "ParseFloorDiv")
140 {
141     using armnn::DataType;
142     float Inf = std::numeric_limits<float>::infinity();
143     float NaN = std::numeric_limits<float>::quiet_NaN();
144 
145     RunTest<3, DataType::Float32>(0, {{ "inputTensor1", { 0.0f,  1.0f,  2.0f,
146                                                           3.0f,  4.0f,  5.0f,
147                                                           6.0f,  -7.0f,  8.0f,
148                                                           9.0f, 10.0f, -11.0f } },
149                                       { "inputTensor2", { 0.0f,  0.0f,  4.0f,
150                                                           3.0f,  40.0f,  5.0f,
151                                                           6.0f,  2.0f,  8.0f,
152                                                           9.0f,  10.0f,  11.0f} } },
153                                      {{ "outputTensor", { NaN,   Inf,  0.0f,
154                                                           1.0f,  0.0f, 1.0f,
155                                                           1.0f,  -4.0f, 1.0f,
156                                                           1.0f,  1.0f, -1.0f } } });
157 }
158 
159 struct SimpleFloorDivInt32Fixture : public FloorDivFixture
160 {
SimpleFloorDivInt32FixtureSimpleFloorDivInt32Fixture161     SimpleFloorDivInt32Fixture() : FloorDivFixture("[ 1, 3, 4 ]", "[ 1, 3, 4 ]", "[ 1, 3, 4 ]",
162                                                    "[ -1, 3, 4 ]", "[ -1, 3, 4 ]", "[ -1, 3, 4 ]", "INT32") {}
163 };
164 TEST_CASE_FIXTURE(SimpleFloorDivInt32Fixture, "ParseFloorDivInt32")
165 {
166     using armnn::DataType;
167 
168     RunTest<3, DataType::Signed32>(0, {{ "inputTensor1", { 1,  1,  2,
169                                                                 3,  4,  5,
170                                                                 6,  -7,  8,
171                                                                 9, 10, -11 } },
172                                       { "inputTensor2", { 1,  1,  4,
173                                                                 3,  40,  5,
174                                                                 6,  2,  8,
175                                                                 9,  10,  11} } },
176                                    {{ "outputTensor", { 1,  1,  0,
177                                                        1,  0, 1,
178                                                        1,  -4, 1,
179                                                        1,  1, -1 } } });
180 }
181 
182 
183 struct DynamicFloorDivFixture : public FloorDivFixture
184 {
DynamicFloorDivFixtureDynamicFloorDivFixture185     DynamicFloorDivFixture() : FloorDivFixture("[ 1, 3, 4 ]", "[ 1, 3, 4 ]", "[ 1, 3, 4 ]",
186                                                "[ -1, 3, 4 ]", "[ -1, 3, 4 ]", "[ -1, 3, 4 ]") {}
187 };
188 
189 TEST_CASE_FIXTURE(DynamicFloorDivFixture, "ParseDynamicFloorDiv")
190 {
191     using armnn::DataType;
192     float Inf = std::numeric_limits<float>::infinity();
193     float NaN = std::numeric_limits<float>::quiet_NaN();
194 
195     RunTest<3, DataType::Float32, DataType::Float32>(0, {{ "inputTensor1", { 0.0f,  1.0f,  2.0f,
196                                                                              3.0f,  4.0f,  5.0f,
197                                                                              6.0f,  -7.0f,  8.0f,
198                                                                              9.0f, 10.0f, -11.0f } },
199                                                          { "inputTensor2", { 0.0f,  0.0f,  4.0f,
200                                                                              3.0f,  40.0f,  5.0f,
201                                                                              6.0f,  2.0f,  8.0f,
202                                                                              9.0f,  10.0f,  11.0f} } },
203                                                      {{ "outputTensor", { NaN,   Inf,  0.0f,
204                                                                           1.0f,  0.0f, 1.0f,
205                                                                           1.0f,  -4.0f, 1.0f,
206                                                                           1.0f,  1.0f, -1.0f } } }, true);
207 }
208 
209 }
210