blob: 833e254406e4f7364a76127aec8dae9f9e52d101 [file] [log] [blame]
arovir0143095f32018-10-09 18:04:24 +01001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
Aron Virginas-Tarc9cc8042018-11-01 16:15:57 +00006#include <layers/ConvertFp16ToFp32Layer.hpp>
7#include <layers/ConvertFp32ToFp16Layer.hpp>
Sadik Armagana097d2a2021-11-24 15:47:28 +00008
9#include <TensorHelpers.hpp>
arovir0143095f32018-10-09 18:04:24 +010010
Colm Donelan0c479742021-12-10 12:43:54 +000011#include <armnn/backends/TensorHandle.hpp>
Aron Virginas-Tarc9cc8042018-11-01 16:15:57 +000012#include <reference/RefWorkloadFactory.hpp>
Derek Lamberti50db4e82019-03-13 14:16:15 +000013#include <reference/RefLayerSupport.hpp>
Aron Virginas-Tarc9cc8042018-11-01 16:15:57 +000014#include <backendsCommon/test/LayerTests.hpp>
15#include <backendsCommon/test/IsLayerSupportedTestImpl.hpp>
arovir0143095f32018-10-09 18:04:24 +010016
Sadik Armagan1625efc2021-06-10 18:24:34 +010017#include <doctest/doctest.h>
arovir0143095f32018-10-09 18:04:24 +010018
19#include <string>
20
21namespace
22{
23
24bool LayerTypeMatchesTest()
25{
26 return LayerTypeMatchesTestImpl<armnn::LayerType::FirstLayer>(Tag<armnn::LayerType::FirstLayer>());
27};
28
29} // anonymous namespace
30
Sadik Armagan1625efc2021-06-10 18:24:34 +010031TEST_SUITE("RefLayerSupported")
32{
33TEST_CASE("IsLayerSupportedLayerTypeMatches")
arovir0143095f32018-10-09 18:04:24 +010034{
35 LayerTypeMatchesTest();
36}
Sadik Armagan1625efc2021-06-10 18:24:34 +010037
38TEST_CASE("IsLayerSupportedReferenceAddition")
Derek Lamberti50db4e82019-03-13 14:16:15 +000039{
40 armnn::TensorShape shape0 = {1,1,3,4};
41 armnn::TensorShape shape1 = {4};
42 armnn::TensorShape outShape = {1,1,3,4};
43 armnn::TensorInfo in0(shape0, armnn::DataType::Float32);
44 armnn::TensorInfo in1(shape1, armnn::DataType::Float32);
45 armnn::TensorInfo out(outShape, armnn::DataType::Float32);
46
47 armnn::RefLayerSupport supportChecker;
48 std::string reasonNotSupported;
Sadik Armagan1625efc2021-06-10 18:24:34 +010049 CHECK(supportChecker.IsAdditionSupported(in0, in1, out, reasonNotSupported));
Derek Lamberti50db4e82019-03-13 14:16:15 +000050}
51
Sadik Armagan1625efc2021-06-10 18:24:34 +010052TEST_CASE("IsLayerSupportedBFloat16Reference")
Narumol Prangnawarat44179c32020-03-11 14:51:27 +000053{
54 armnn::RefWorkloadFactory factory;
55 IsLayerSupportedTests<armnn::RefWorkloadFactory, armnn::DataType::BFloat16>(&factory);
56}
57
Sadik Armagan1625efc2021-06-10 18:24:34 +010058TEST_CASE("IsLayerSupportedFloat16Reference")
arovir0143095f32018-10-09 18:04:24 +010059{
60 armnn::RefWorkloadFactory factory;
61 IsLayerSupportedTests<armnn::RefWorkloadFactory, armnn::DataType::Float16>(&factory);
62}
63
Sadik Armagan1625efc2021-06-10 18:24:34 +010064TEST_CASE("IsLayerSupportedFloat32Reference")
arovir0143095f32018-10-09 18:04:24 +010065{
66 armnn::RefWorkloadFactory factory;
67 IsLayerSupportedTests<armnn::RefWorkloadFactory, armnn::DataType::Float32>(&factory);
68}
69
Sadik Armagan1625efc2021-06-10 18:24:34 +010070TEST_CASE("IsLayerSupportedUint8Reference")
arovir0143095f32018-10-09 18:04:24 +010071{
72 armnn::RefWorkloadFactory factory;
Derek Lambertif90c56d2020-01-10 17:14:08 +000073 IsLayerSupportedTests<armnn::RefWorkloadFactory, armnn::DataType::QAsymmU8>(&factory);
arovir0143095f32018-10-09 18:04:24 +010074}
75
Sadik Armagan1625efc2021-06-10 18:24:34 +010076TEST_CASE("IsLayerSupportedInt8Reference")
Keith Davis9d0ff742020-02-03 14:47:54 +000077{
78 armnn::RefWorkloadFactory factory;
79 IsLayerSupportedTests<armnn::RefWorkloadFactory, armnn::DataType::QSymmS8>(&factory);
80}
81
Sadik Armagan1625efc2021-06-10 18:24:34 +010082TEST_CASE("IsLayerSupportedInt16Reference")
Narumol Prangnawaratf9ac3fd2019-07-03 14:55:57 +010083{
84 armnn::RefWorkloadFactory factory;
Derek Lambertif90c56d2020-01-10 17:14:08 +000085 IsLayerSupportedTests<armnn::RefWorkloadFactory, armnn::DataType::QSymmS16>(&factory);
Narumol Prangnawaratf9ac3fd2019-07-03 14:55:57 +010086}
87
Sadik Armagan1625efc2021-06-10 18:24:34 +010088TEST_CASE("IsConvertFp16ToFp32SupportedReference")
arovir0143095f32018-10-09 18:04:24 +010089{
90 std::string reasonIfUnsupported;
91
92 bool result = IsConvertLayerSupportedTests<armnn::RefWorkloadFactory, armnn::ConvertFp16ToFp32Layer,
93 armnn::DataType::Float16, armnn::DataType::Float32>(reasonIfUnsupported);
94
Sadik Armagan1625efc2021-06-10 18:24:34 +010095 CHECK(result);
arovir0143095f32018-10-09 18:04:24 +010096}
97
Sadik Armagan1625efc2021-06-10 18:24:34 +010098TEST_CASE("IsConvertFp16ToFp32SupportedFp32InputReference")
arovir0143095f32018-10-09 18:04:24 +010099{
100 std::string reasonIfUnsupported;
101
102 bool result = IsConvertLayerSupportedTests<armnn::RefWorkloadFactory, armnn::ConvertFp16ToFp32Layer,
103 armnn::DataType::Float32, armnn::DataType::Float32>(reasonIfUnsupported);
104
Sadik Armagan1625efc2021-06-10 18:24:34 +0100105 CHECK(!result);
106 CHECK_EQ(reasonIfUnsupported, "Layer is not supported with float32 data type input");
arovir0143095f32018-10-09 18:04:24 +0100107}
108
Sadik Armagan1625efc2021-06-10 18:24:34 +0100109TEST_CASE("IsConvertFp16ToFp32SupportedFp16OutputReference")
arovir0143095f32018-10-09 18:04:24 +0100110{
111 std::string reasonIfUnsupported;
112
113 bool result = IsConvertLayerSupportedTests<armnn::RefWorkloadFactory, armnn::ConvertFp16ToFp32Layer,
114 armnn::DataType::Float16, armnn::DataType::Float16>(reasonIfUnsupported);
115
Sadik Armagan1625efc2021-06-10 18:24:34 +0100116 CHECK(!result);
117 CHECK_EQ(reasonIfUnsupported, "Layer is not supported with float16 data type output");
arovir0143095f32018-10-09 18:04:24 +0100118}
119
Sadik Armagan1625efc2021-06-10 18:24:34 +0100120TEST_CASE("IsConvertBf16ToFp32SupportedReference")
Narumol Prangnawarat7ddbbae2020-03-13 10:26:05 +0000121{
122 std::string reasonIfUnsupported;
123
124 bool result = IsConvertLayerSupportedTests<armnn::RefWorkloadFactory, armnn::ConvertBf16ToFp32Layer,
125 armnn::DataType::BFloat16, armnn::DataType::Float32>(reasonIfUnsupported);
126
Sadik Armagan1625efc2021-06-10 18:24:34 +0100127 CHECK(result);
Narumol Prangnawarat7ddbbae2020-03-13 10:26:05 +0000128}
129
Sadik Armagan1625efc2021-06-10 18:24:34 +0100130TEST_CASE("IsConvertBf16ToFp32SupportedFp32InputReference")
Narumol Prangnawarat7ddbbae2020-03-13 10:26:05 +0000131{
132 std::string reasonIfUnsupported;
133
134 bool result = IsConvertLayerSupportedTests<armnn::RefWorkloadFactory, armnn::ConvertBf16ToFp32Layer,
135 armnn::DataType::Float32, armnn::DataType::Float32>(reasonIfUnsupported);
136
Sadik Armagan1625efc2021-06-10 18:24:34 +0100137 CHECK(!result);
138 CHECK_EQ(reasonIfUnsupported, "Reference for ConvertBf16ToFp32 layer: input type not supported\n");
Narumol Prangnawarat7ddbbae2020-03-13 10:26:05 +0000139}
140
Sadik Armagan1625efc2021-06-10 18:24:34 +0100141TEST_CASE("IsConvertBf16ToFp32SupportedBf16OutputReference")
Narumol Prangnawarat7ddbbae2020-03-13 10:26:05 +0000142{
143 std::string reasonIfUnsupported;
144
145 bool result = IsConvertLayerSupportedTests<armnn::RefWorkloadFactory, armnn::ConvertBf16ToFp32Layer,
146 armnn::DataType::BFloat16, armnn::DataType::BFloat16>(reasonIfUnsupported);
147
Sadik Armagan1625efc2021-06-10 18:24:34 +0100148 CHECK(!result);
149 CHECK_EQ(reasonIfUnsupported, "Reference for ConvertBf16ToFp32 layer: output type not supported\n");
Narumol Prangnawarat7ddbbae2020-03-13 10:26:05 +0000150}
151
Sadik Armagan1625efc2021-06-10 18:24:34 +0100152TEST_CASE("IsConvertFp32ToBf16SupportedReference")
Narumol Prangnawaratea54a012020-03-16 16:36:10 +0000153{
154 std::string reasonIfUnsupported;
155
156 bool result = IsConvertLayerSupportedTests<armnn::RefWorkloadFactory, armnn::ConvertFp32ToBf16Layer,
157 armnn::DataType::Float32, armnn::DataType::BFloat16>(reasonIfUnsupported);
158
Sadik Armagan1625efc2021-06-10 18:24:34 +0100159 CHECK(result);
Narumol Prangnawaratea54a012020-03-16 16:36:10 +0000160}
161
Sadik Armagan1625efc2021-06-10 18:24:34 +0100162TEST_CASE("IsConvertFp32ToBf16SupportedBf16InputReference")
Narumol Prangnawaratea54a012020-03-16 16:36:10 +0000163{
164 std::string reasonIfUnsupported;
165
166 bool result = IsConvertLayerSupportedTests<armnn::RefWorkloadFactory, armnn::ConvertFp32ToBf16Layer,
167 armnn::DataType::BFloat16, armnn::DataType::BFloat16>(reasonIfUnsupported);
168
Sadik Armagan1625efc2021-06-10 18:24:34 +0100169 CHECK(!result);
170 CHECK_EQ(reasonIfUnsupported, "Reference for ConvertFp32ToBf16 layer: input type not supported\n");
Narumol Prangnawaratea54a012020-03-16 16:36:10 +0000171}
172
Sadik Armagan1625efc2021-06-10 18:24:34 +0100173TEST_CASE("IsConvertFp32ToBf16SupportedFp32OutputReference")
Narumol Prangnawaratea54a012020-03-16 16:36:10 +0000174{
175 std::string reasonIfUnsupported;
176
177 bool result = IsConvertLayerSupportedTests<armnn::RefWorkloadFactory, armnn::ConvertFp32ToBf16Layer,
178 armnn::DataType::Float32, armnn::DataType::Float32>(reasonIfUnsupported);
179
Sadik Armagan1625efc2021-06-10 18:24:34 +0100180 CHECK(!result);
181 CHECK_EQ(reasonIfUnsupported, "Reference for ConvertFp32ToBf16 layer: output type not supported\n");
Narumol Prangnawaratea54a012020-03-16 16:36:10 +0000182}
183
Sadik Armagan1625efc2021-06-10 18:24:34 +0100184TEST_CASE("IsConvertFp32ToFp16SupportedReference")
arovir0143095f32018-10-09 18:04:24 +0100185{
186 std::string reasonIfUnsupported;
187
188 bool result = IsConvertLayerSupportedTests<armnn::RefWorkloadFactory, armnn::ConvertFp32ToFp16Layer,
189 armnn::DataType::Float32, armnn::DataType::Float16>(reasonIfUnsupported);
190
Sadik Armagan1625efc2021-06-10 18:24:34 +0100191 CHECK(result);
arovir0143095f32018-10-09 18:04:24 +0100192}
193
Sadik Armagan1625efc2021-06-10 18:24:34 +0100194TEST_CASE("IsConvertFp32ToFp16SupportedFp16InputReference")
arovir0143095f32018-10-09 18:04:24 +0100195{
196 std::string reasonIfUnsupported;
197
198 bool result = IsConvertLayerSupportedTests<armnn::RefWorkloadFactory, armnn::ConvertFp32ToFp16Layer,
199 armnn::DataType::Float16, armnn::DataType::Float16>(reasonIfUnsupported);
200
Sadik Armagan1625efc2021-06-10 18:24:34 +0100201 CHECK(!result);
202 CHECK_EQ(reasonIfUnsupported, "Layer is not supported with float16 data type input");
arovir0143095f32018-10-09 18:04:24 +0100203}
204
Sadik Armagan1625efc2021-06-10 18:24:34 +0100205TEST_CASE("IsConvertFp32ToFp16SupportedFp32OutputReference")
arovir0143095f32018-10-09 18:04:24 +0100206{
207 std::string reasonIfUnsupported;
208
209 bool result = IsConvertLayerSupportedTests<armnn::RefWorkloadFactory, armnn::ConvertFp32ToFp16Layer,
210 armnn::DataType::Float32, armnn::DataType::Float32>(reasonIfUnsupported);
211
Sadik Armagan1625efc2021-06-10 18:24:34 +0100212 CHECK(!result);
213 CHECK_EQ(reasonIfUnsupported, "Layer is not supported with float32 data type output");
arovir0143095f32018-10-09 18:04:24 +0100214}
215
Sadik Armagan1625efc2021-06-10 18:24:34 +0100216TEST_CASE("IsLayerSupportedMeanDimensionsReference")
James Conroy4d1ff582019-06-10 17:06:39 +0100217{
218 std::string reasonIfUnsupported;
219
220 bool result = IsMeanLayerSupportedTests<armnn::RefWorkloadFactory,
221 armnn::DataType::Float32, armnn::DataType::Float32>(reasonIfUnsupported);
222
Sadik Armagan1625efc2021-06-10 18:24:34 +0100223 CHECK(result);
James Conroy4d1ff582019-06-10 17:06:39 +0100224}
225
Sadik Armagan1625efc2021-06-10 18:24:34 +0100226TEST_CASE("IsLayerNotSupportedMeanDimensionsReference")
James Conroy4d1ff582019-06-10 17:06:39 +0100227{
228 std::string reasonIfUnsupported;
229
230 bool result = IsMeanLayerNotSupportedTests<armnn::RefWorkloadFactory,
231 armnn::DataType::Float32, armnn::DataType::Float32>(reasonIfUnsupported);
232
Sadik Armagan1625efc2021-06-10 18:24:34 +0100233 CHECK(!result);
James Conroy4d1ff582019-06-10 17:06:39 +0100234
Sadik Armagan1625efc2021-06-10 18:24:34 +0100235 CHECK(reasonIfUnsupported.find(
David Monahana8837bf2020-04-16 10:01:56 +0100236 "Reference Mean: Expected 4 dimensions but got 2 dimensions instead, for the 'output' tensor.")
237 != std::string::npos);
James Conroy4d1ff582019-06-10 17:06:39 +0100238}
239
Sadik Armagan1625efc2021-06-10 18:24:34 +0100240TEST_CASE("IsConstantSupportedRef")
Mike Kelly0886ac42020-04-27 09:55:40 +0100241{
242 std::string reasonIfUnsupported;
243
244 bool result = IsConstantLayerSupportedTests<armnn::RefWorkloadFactory,
245 armnn::DataType::Float16>(reasonIfUnsupported);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100246 CHECK(result);
Mike Kelly0886ac42020-04-27 09:55:40 +0100247
248 result = IsConstantLayerSupportedTests<armnn::RefWorkloadFactory,
249 armnn::DataType::Float32>(reasonIfUnsupported);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100250 CHECK(result);
Mike Kelly0886ac42020-04-27 09:55:40 +0100251
252 result = IsConstantLayerSupportedTests<armnn::RefWorkloadFactory,
253 armnn::DataType::QAsymmU8>(reasonIfUnsupported);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100254 CHECK(result);
Mike Kelly0886ac42020-04-27 09:55:40 +0100255
256 result = IsConstantLayerSupportedTests<armnn::RefWorkloadFactory,
257 armnn::DataType::Boolean>(reasonIfUnsupported);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100258 CHECK(!result);
Mike Kelly0886ac42020-04-27 09:55:40 +0100259
260 result = IsConstantLayerSupportedTests<armnn::RefWorkloadFactory,
261 armnn::DataType::QSymmS16>(reasonIfUnsupported);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100262 CHECK(result);
Mike Kelly0886ac42020-04-27 09:55:40 +0100263
264 result = IsConstantLayerSupportedTests<armnn::RefWorkloadFactory,
265 armnn::DataType::QSymmS8>(reasonIfUnsupported);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100266 CHECK(result);
Mike Kelly0886ac42020-04-27 09:55:40 +0100267
268 result = IsConstantLayerSupportedTests<armnn::RefWorkloadFactory,
269 armnn::DataType::QAsymmS8>(reasonIfUnsupported);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100270 CHECK(result);
Mike Kelly0886ac42020-04-27 09:55:40 +0100271
272 result = IsConstantLayerSupportedTests<armnn::RefWorkloadFactory,
273 armnn::DataType::BFloat16>(reasonIfUnsupported);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100274 CHECK(result);
Mike Kelly0886ac42020-04-27 09:55:40 +0100275}
276
Sadik Armagan1625efc2021-06-10 18:24:34 +0100277}