blob: 2951b8890d717a4b77095edd5abf522858ae22d6 [file] [log] [blame]
Bruno Goncalves451d95b2019-02-12 22:59:22 -02001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
Bruno Goncalves451d95b2019-02-12 22:59:22 -02006#include "ParserFlatbuffersFixture.hpp"
7#include "../TfLiteParser.hpp"
8
9#include <string>
Bruno Goncalves451d95b2019-02-12 22:59:22 -020010
Sadik Armagan1625efc2021-06-10 18:24:34 +010011TEST_SUITE("TensorflowLiteParser_StridedSlice")
12{
Bruno Goncalves451d95b2019-02-12 22:59:22 -020013struct StridedSliceFixture : public ParserFlatbuffersFixture
14{
15 explicit StridedSliceFixture(const std::string & inputShape,
16 const std::string & outputShape,
17 const std::string & beginData,
18 const std::string & endData,
19 const std::string & stridesData,
20 int beginMask = 0,
21 int endMask = 0)
22 {
23 m_JsonString = R"(
24 {
25 "version": 3,
26 "operator_codes": [ { "builtin_code": "STRIDED_SLICE" } ],
27 "subgraphs": [ {
28 "tensors": [
29 {
30 "shape": )" + inputShape + R"(,
31 "type": "FLOAT32",
32 "buffer": 0,
33 "name": "inputTensor",
34 "quantization": {
35 "min": [ 0.0 ],
36 "max": [ 255.0 ],
37 "scale": [ 1.0 ],
38 "zero_point": [ 0 ],
39 }
40 },
41 {
42 "shape": [ 4 ],
43 "type": "INT32",
44 "buffer": 1,
45 "name": "beginTensor",
46 "quantization": {
47 }
48 },
49 {
50 "shape": [ 4 ],
51 "type": "INT32",
52 "buffer": 2,
53 "name": "endTensor",
54 "quantization": {
55 }
56 },
57 {
58 "shape": [ 4 ],
59 "type": "INT32",
60 "buffer": 3,
61 "name": "stridesTensor",
62 "quantization": {
63 }
64 },
65 {
66 "shape": )" + outputShape + R"( ,
67 "type": "FLOAT32",
68 "buffer": 4,
69 "name": "outputTensor",
70 "quantization": {
71 "min": [ 0.0 ],
72 "max": [ 255.0 ],
73 "scale": [ 1.0 ],
74 "zero_point": [ 0 ],
75 }
76 }
77 ],
78 "inputs": [ 0, 1, 2, 3 ],
79 "outputs": [ 4 ],
80 "operators": [
81 {
82 "opcode_index": 0,
83 "inputs": [ 0, 1, 2, 3 ],
84 "outputs": [ 4 ],
85 "builtin_options_type": "StridedSliceOptions",
86 "builtin_options": {
87 "begin_mask": )" + std::to_string(beginMask) + R"(,
88 "end_mask": )" + std::to_string(endMask) + R"(
89 },
90 "custom_options_format": "FLEXBUFFERS"
91 }
92 ],
93 } ],
94 "buffers" : [
95 { },
96 { "data": )" + beginData + R"(, },
97 { "data": )" + endData + R"(, },
98 { "data": )" + stridesData + R"(, },
99 { }
100 ]
101 }
102 )";
103 Setup();
104 }
105};
106
107struct StridedSlice4DFixture : StridedSliceFixture
108{
109 StridedSlice4DFixture() : StridedSliceFixture("[ 3, 2, 3, 1 ]", // inputShape
110 "[ 1, 2, 3, 1 ]", // outputShape
111 "[ 1,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0 ]", // beginData
112 "[ 2,0,0,0, 2,0,0,0, 3,0,0,0, 1,0,0,0 ]", // endData
113 "[ 1,0,0,0, 1,0,0,0, 1,0,0,0, 1,0,0,0 ]" // stridesData
114 ) {}
115};
116
Sadik Armagan1625efc2021-06-10 18:24:34 +0100117TEST_CASE_FIXTURE(StridedSlice4DFixture, "StridedSlice4D")
Bruno Goncalves451d95b2019-02-12 22:59:22 -0200118{
119 RunTest<4, armnn::DataType::Float32>(
120 0,
121 {{"inputTensor", { 1.0f, 1.0f, 1.0f, 2.0f, 2.0f, 2.0f,
122
123 3.0f, 3.0f, 3.0f, 4.0f, 4.0f, 4.0f,
124
125 5.0f, 5.0f, 5.0f, 6.0f, 6.0f, 6.0f }}},
126
127 {{"outputTensor", { 3.0f, 3.0f, 3.0f, 4.0f, 4.0f, 4.0f }}});
128}
129
130struct StridedSlice4DReverseFixture : StridedSliceFixture
131{
132 StridedSlice4DReverseFixture() : StridedSliceFixture("[ 3, 2, 3, 1 ]", // inputShape
133 "[ 1, 2, 3, 1 ]", // outputShape
134 "[ 1,0,0,0, "
135 "255,255,255,255, "
136 "0,0,0,0, "
137 "0,0,0,0 ]", // beginData [ 1 -1 0 0 ]
138 "[ 2,0,0,0, "
139 "253,255,255,255, "
140 "3,0,0,0, "
141 "1,0,0,0 ]", // endData [ 2 -3 3 1 ]
142 "[ 1,0,0,0, "
143 "255,255,255,255, "
144 "1,0,0,0, "
145 "1,0,0,0 ]" // stridesData [ 1 -1 1 1 ]
146 ) {}
147};
148
Sadik Armagan1625efc2021-06-10 18:24:34 +0100149TEST_CASE_FIXTURE(StridedSlice4DReverseFixture, "StridedSlice4DReverse")
Bruno Goncalves451d95b2019-02-12 22:59:22 -0200150{
151 RunTest<4, armnn::DataType::Float32>(
152 0,
153 {{"inputTensor", { 1.0f, 1.0f, 1.0f, 2.0f, 2.0f, 2.0f,
154
155 3.0f, 3.0f, 3.0f, 4.0f, 4.0f, 4.0f,
156
157 5.0f, 5.0f, 5.0f, 6.0f, 6.0f, 6.0f }}},
158
159 {{"outputTensor", { 4.0f, 4.0f, 4.0f, 3.0f, 3.0f, 3.0f }}});
160}
161
162struct StridedSliceSimpleStrideFixture : StridedSliceFixture
163{
164 StridedSliceSimpleStrideFixture() : StridedSliceFixture("[ 3, 2, 3, 1 ]", // inputShape
165 "[ 2, 1, 2, 1 ]", // outputShape
166 "[ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0 ]", // beginData
167 "[ 3,0,0,0, 2,0,0,0, 3,0,0,0, 1,0,0,0 ]", // endData
168 "[ 2,0,0,0, 2,0,0,0, 2,0,0,0, 1,0,0,0 ]" // stridesData
169 ) {}
170};
171
Sadik Armagan1625efc2021-06-10 18:24:34 +0100172TEST_CASE_FIXTURE(StridedSliceSimpleStrideFixture, "StridedSliceSimpleStride")
Bruno Goncalves451d95b2019-02-12 22:59:22 -0200173{
174 RunTest<4, armnn::DataType::Float32>(
175 0,
176 {{"inputTensor", { 1.0f, 1.0f, 1.0f, 2.0f, 2.0f, 2.0f,
177
178 3.0f, 3.0f, 3.0f, 4.0f, 4.0f, 4.0f,
179
180 5.0f, 5.0f, 5.0f, 6.0f, 6.0f, 6.0f }}},
181
182 {{"outputTensor", { 1.0f, 1.0f,
183
184 5.0f, 5.0f }}});
185}
186
187struct StridedSliceSimpleRangeMaskFixture : StridedSliceFixture
188{
189 StridedSliceSimpleRangeMaskFixture() : StridedSliceFixture("[ 3, 2, 3, 1 ]", // inputShape
190 "[ 3, 2, 3, 1 ]", // outputShape
191 "[ 1,0,0,0, 1,0,0,0, 1,0,0,0, 1,0,0,0 ]", // beginData
192 "[ 1,0,0,0, 1,0,0,0, 1,0,0,0, 1,0,0,0 ]", // endData
193 "[ 1,0,0,0, 1,0,0,0, 1,0,0,0, 1,0,0,0 ]", // stridesData
194 (1 << 4) - 1, // beginMask
195 (1 << 4) - 1 // endMask
196 ) {}
197};
198
Sadik Armagan1625efc2021-06-10 18:24:34 +0100199TEST_CASE_FIXTURE(StridedSliceSimpleRangeMaskFixture, "StridedSliceSimpleRangeMask")
Bruno Goncalves451d95b2019-02-12 22:59:22 -0200200{
201 RunTest<4, armnn::DataType::Float32>(
202 0,
203 {{"inputTensor", { 1.0f, 1.0f, 1.0f, 2.0f, 2.0f, 2.0f,
204
205 3.0f, 3.0f, 3.0f, 4.0f, 4.0f, 4.0f,
206
207 5.0f, 5.0f, 5.0f, 6.0f, 6.0f, 6.0f }}},
208
209 {{"outputTensor", { 1.0f, 1.0f, 1.0f, 2.0f, 2.0f, 2.0f,
210
211 3.0f, 3.0f, 3.0f, 4.0f, 4.0f, 4.0f,
212
213 5.0f, 5.0f, 5.0f, 6.0f, 6.0f, 6.0f }}});
214}
215
Sadik Armagan1625efc2021-06-10 18:24:34 +0100216}