blob: f090d39f0b0e52a340bce44e984dc520e767d479 [file] [log] [blame]
telsoa01c577f2c2018-08-31 09:22:23 +01001//
Finn Williamsb49ed182021-06-29 15:50:08 +01002// Copyright © 2017 Arm Ltd and Contributors. All rights reserved.
David Beckecb56cd2018-09-05 12:52:57 +01003// SPDX-License-Identifier: MIT
telsoa01c577f2c2018-08-31 09:22:23 +01004//
5
telsoa01c577f2c2018-08-31 09:22:23 +01006#include "ParserFlatbuffersFixture.hpp"
7#include "../TfLiteParser.hpp"
8
Sadik Armagan1625efc2021-06-10 18:24:34 +01009TEST_SUITE("TensorflowLiteParser_InputOutputTensorNames")
10{
telsoa01c577f2c2018-08-31 09:22:23 +010011struct EmptyNetworkFixture : public ParserFlatbuffersFixture
12{
13 explicit EmptyNetworkFixture() {
14 m_JsonString = R"(
15 {
16 "version": 3,
17 "operator_codes": [],
18 "subgraphs": [ {} ]
19 })";
20 }
21};
22
Sadik Armagan1625efc2021-06-10 18:24:34 +010023TEST_CASE_FIXTURE(EmptyNetworkFixture, "EmptyNetworkHasNoInputsAndOutputs")
telsoa01c577f2c2018-08-31 09:22:23 +010024{
Finn Williamsb49ed182021-06-29 15:50:08 +010025 Setup(false);
Sadik Armagan1625efc2021-06-10 18:24:34 +010026 CHECK(m_Parser->GetSubgraphCount() == 1);
27 CHECK(m_Parser->GetSubgraphInputTensorNames(0).size() == 0);
28 CHECK(m_Parser->GetSubgraphOutputTensorNames(0).size() == 0);
telsoa01c577f2c2018-08-31 09:22:23 +010029}
30
31struct MissingTensorsFixture : public ParserFlatbuffersFixture
32{
33 explicit MissingTensorsFixture()
34 {
35 m_JsonString = R"(
36 {
37 "version": 3,
38 "operator_codes": [],
39 "subgraphs": [{
40 "inputs" : [ 0, 1 ],
41 "outputs" : [ 2, 3 ],
42 }]
43 })";
44 }
45};
46
Sadik Armagan1625efc2021-06-10 18:24:34 +010047TEST_CASE_FIXTURE(MissingTensorsFixture, "MissingTensorsThrowException")
telsoa01c577f2c2018-08-31 09:22:23 +010048{
49 // this throws because it cannot do the input output tensor connections
Sadik Armagan1625efc2021-06-10 18:24:34 +010050 CHECK_THROWS_AS(Setup(), armnn::ParseException);
telsoa01c577f2c2018-08-31 09:22:23 +010051}
52
53struct InvalidTensorsFixture : public ParserFlatbuffersFixture
54{
55 explicit InvalidTensorsFixture()
56 {
57 m_JsonString = R"(
58 {
59 "version": 3,
60 "operator_codes": [ ],
61 "subgraphs": [{
Narumol Prangnawarat4818d462019-04-17 11:22:38 +010062 "tensors": [ {
Matthew Jacksondba634f2019-08-15 15:14:18 +010063 "shape": [ 1, 1, 1, 1, 1, 1 ],
Narumol Prangnawarat4818d462019-04-17 11:22:38 +010064 "type": "FLOAT32",
65 "name": "In",
66 "buffer": 0
67 }, {
Matthew Jacksondba634f2019-08-15 15:14:18 +010068 "shape": [ 1, 1, 1, 1, 1, 1 ],
Narumol Prangnawarat4818d462019-04-17 11:22:38 +010069 "type": "FLOAT32",
70 "name": "Out",
71 "buffer": 1
72 }],
73 "inputs" : [ 0 ],
74 "outputs" : [ 1 ],
telsoa01c577f2c2018-08-31 09:22:23 +010075 }]
76 })";
77 }
78};
79
Sadik Armagan1625efc2021-06-10 18:24:34 +010080TEST_CASE_FIXTURE(InvalidTensorsFixture, "InvalidTensorsThrowException")
telsoa01c577f2c2018-08-31 09:22:23 +010081{
Narumol Prangnawarat4818d462019-04-17 11:22:38 +010082 // Tensor numDimensions must be less than or equal to MaxNumOfTensorDimensions
Matthew Jacksondba634f2019-08-15 15:14:18 +010083 static_assert(armnn::MaxNumOfTensorDimensions == 5, "Please update InvalidTensorsFixture");
Sadik Armagan1625efc2021-06-10 18:24:34 +010084 CHECK_THROWS_AS(Setup(), armnn::InvalidArgumentException);
telsoa01c577f2c2018-08-31 09:22:23 +010085}
86
87struct ValidTensorsFixture : public ParserFlatbuffersFixture
88{
89 explicit ValidTensorsFixture()
90 {
91 m_JsonString = R"(
92 {
93 "version": 3,
94 "operator_codes": [ { "builtin_code": "AVERAGE_POOL_2D" } ],
95 "subgraphs": [{
96 "tensors": [ {
97 "shape": [ 1, 1, 1, 1 ],
98 "type": "FLOAT32",
99 "name": "In",
100 "buffer": 0,
101 }, {
102 "shape": [ 1, 1, 1, 1 ],
103 "type": "FLOAT32",
104 "name": "Out",
105 "buffer": 1,
106 }],
107 "inputs" : [ 0 ],
108 "outputs" : [ 1 ],
109 "operators": [{
110 "opcode_index": 0,
111 "inputs": [ 0 ],
112 "outputs": [ 1 ],
113 "builtin_options_type": "Pool2DOptions",
114 "builtin_options":
115 {
116 "padding": "VALID",
117 "stride_w": 1,
118 "stride_h": 1,
119 "filter_width": 1,
120 "filter_height": 1,
121 "fused_activation_function": "NONE"
122 },
123 "custom_options_format": "FLEXBUFFERS"
124 }]
125 }]
126 })";
127 }
128};
129
Sadik Armagan1625efc2021-06-10 18:24:34 +0100130TEST_CASE_FIXTURE(ValidTensorsFixture, "GetValidInputOutputTensorNames")
telsoa01c577f2c2018-08-31 09:22:23 +0100131{
132 Setup();
Sadik Armagan1625efc2021-06-10 18:24:34 +0100133 CHECK_EQ(m_Parser->GetSubgraphInputTensorNames(0).size(), 1u);
134 CHECK_EQ(m_Parser->GetSubgraphOutputTensorNames(0).size(), 1u);
135 CHECK_EQ(m_Parser->GetSubgraphInputTensorNames(0)[0], "In");
136 CHECK_EQ(m_Parser->GetSubgraphOutputTensorNames(0)[0], "Out");
telsoa01c577f2c2018-08-31 09:22:23 +0100137}
138
Sadik Armagan1625efc2021-06-10 18:24:34 +0100139TEST_CASE_FIXTURE(ValidTensorsFixture, "ThrowIfSubgraphIdInvalidForInOutNames")
telsoa01c577f2c2018-08-31 09:22:23 +0100140{
141 Setup();
142
143 // these throw because of the invalid subgraph id
Sadik Armagan1625efc2021-06-10 18:24:34 +0100144 CHECK_THROWS_AS(m_Parser->GetSubgraphInputTensorNames(1), armnn::ParseException);
145 CHECK_THROWS_AS(m_Parser->GetSubgraphOutputTensorNames(1), armnn::ParseException);
telsoa01c577f2c2018-08-31 09:22:23 +0100146}
147
Narumol Prangnawarat4818d462019-04-17 11:22:38 +0100148struct Rank0TensorFixture : public ParserFlatbuffersFixture
149{
150 explicit Rank0TensorFixture()
151 {
152 m_JsonString = R"(
153 {
154 "version": 3,
155 "operator_codes": [ { "builtin_code": "MINIMUM" } ],
156 "subgraphs": [{
157 "tensors": [ {
158 "shape": [ ],
159 "type": "FLOAT32",
160 "name": "In0",
161 "buffer": 0,
162 }, {
163 "shape": [ ],
164 "type": "FLOAT32",
165 "name": "In1",
166 "buffer": 1,
167 }, {
168 "shape": [ ],
169 "type": "FLOAT32",
170 "name": "Out",
171 "buffer": 2,
172 }],
173 "inputs" : [ 0, 1 ],
174 "outputs" : [ 2 ],
175 "operators": [{
176 "opcode_index": 0,
177 "inputs": [ 0, 1 ],
178 "outputs": [ 2 ],
179 "custom_options_format": "FLEXBUFFERS"
180 }]
181 }]
182 }
183 )";
184 }
185};
186
Sadik Armagan1625efc2021-06-10 18:24:34 +0100187TEST_CASE_FIXTURE(Rank0TensorFixture, "Rank0Tensor")
Narumol Prangnawarat4818d462019-04-17 11:22:38 +0100188{
189 Setup();
Sadik Armagan1625efc2021-06-10 18:24:34 +0100190 CHECK_EQ(m_Parser->GetSubgraphInputTensorNames(0).size(), 2u);
191 CHECK_EQ(m_Parser->GetSubgraphOutputTensorNames(0).size(), 1u);
192 CHECK_EQ(m_Parser->GetSubgraphInputTensorNames(0)[0], "In0");
193 CHECK_EQ(m_Parser->GetSubgraphInputTensorNames(0)[1], "In1");
194 CHECK_EQ(m_Parser->GetSubgraphOutputTensorNames(0)[0], "Out");
Narumol Prangnawarat4818d462019-04-17 11:22:38 +0100195}
196
Sadik Armagan1625efc2021-06-10 18:24:34 +0100197}