blob: 1adc54e9902ad3782d419493e6829330185b92e6 [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>
8#include <test/TensorHelpers.hpp>
arovir0143095f32018-10-09 18:04:24 +01009
James Conroy1f58f032021-04-27 17:13:27 +010010#include <backendsCommon/TensorHandle.hpp>
Aron Virginas-Tarc9cc8042018-11-01 16:15:57 +000011#include <reference/RefWorkloadFactory.hpp>
Derek Lamberti50db4e82019-03-13 14:16:15 +000012#include <reference/RefLayerSupport.hpp>
Aron Virginas-Tarc9cc8042018-11-01 16:15:57 +000013#include <backendsCommon/test/LayerTests.hpp>
14#include <backendsCommon/test/IsLayerSupportedTestImpl.hpp>
arovir0143095f32018-10-09 18:04:24 +010015
Sadik Armagan1625efc2021-06-10 18:24:34 +010016#include <doctest/doctest.h>
arovir0143095f32018-10-09 18:04:24 +010017
18#include <string>
19
20namespace
21{
22
23bool LayerTypeMatchesTest()
24{
25 return LayerTypeMatchesTestImpl<armnn::LayerType::FirstLayer>(Tag<armnn::LayerType::FirstLayer>());
26};
27
28} // anonymous namespace
29
Sadik Armagan1625efc2021-06-10 18:24:34 +010030TEST_SUITE("RefLayerSupported")
31{
32TEST_CASE("IsLayerSupportedLayerTypeMatches")
arovir0143095f32018-10-09 18:04:24 +010033{
34 LayerTypeMatchesTest();
35}
Sadik Armagan1625efc2021-06-10 18:24:34 +010036
37TEST_CASE("IsLayerSupportedReferenceAddition")
Derek Lamberti50db4e82019-03-13 14:16:15 +000038{
39 armnn::TensorShape shape0 = {1,1,3,4};
40 armnn::TensorShape shape1 = {4};
41 armnn::TensorShape outShape = {1,1,3,4};
42 armnn::TensorInfo in0(shape0, armnn::DataType::Float32);
43 armnn::TensorInfo in1(shape1, armnn::DataType::Float32);
44 armnn::TensorInfo out(outShape, armnn::DataType::Float32);
45
46 armnn::RefLayerSupport supportChecker;
47 std::string reasonNotSupported;
Sadik Armagan1625efc2021-06-10 18:24:34 +010048 CHECK(supportChecker.IsAdditionSupported(in0, in1, out, reasonNotSupported));
Derek Lamberti50db4e82019-03-13 14:16:15 +000049}
50
Sadik Armagan1625efc2021-06-10 18:24:34 +010051TEST_CASE("IsLayerSupportedBFloat16Reference")
Narumol Prangnawarat44179c32020-03-11 14:51:27 +000052{
53 armnn::RefWorkloadFactory factory;
54 IsLayerSupportedTests<armnn::RefWorkloadFactory, armnn::DataType::BFloat16>(&factory);
55}
56
Sadik Armagan1625efc2021-06-10 18:24:34 +010057TEST_CASE("IsLayerSupportedFloat16Reference")
arovir0143095f32018-10-09 18:04:24 +010058{
59 armnn::RefWorkloadFactory factory;
60 IsLayerSupportedTests<armnn::RefWorkloadFactory, armnn::DataType::Float16>(&factory);
61}
62
Sadik Armagan1625efc2021-06-10 18:24:34 +010063TEST_CASE("IsLayerSupportedFloat32Reference")
arovir0143095f32018-10-09 18:04:24 +010064{
65 armnn::RefWorkloadFactory factory;
66 IsLayerSupportedTests<armnn::RefWorkloadFactory, armnn::DataType::Float32>(&factory);
67}
68
Sadik Armagan1625efc2021-06-10 18:24:34 +010069TEST_CASE("IsLayerSupportedUint8Reference")
arovir0143095f32018-10-09 18:04:24 +010070{
71 armnn::RefWorkloadFactory factory;
Derek Lambertif90c56d2020-01-10 17:14:08 +000072 IsLayerSupportedTests<armnn::RefWorkloadFactory, armnn::DataType::QAsymmU8>(&factory);
arovir0143095f32018-10-09 18:04:24 +010073}
74
Sadik Armagan1625efc2021-06-10 18:24:34 +010075TEST_CASE("IsLayerSupportedInt8Reference")
Keith Davis9d0ff742020-02-03 14:47:54 +000076{
77 armnn::RefWorkloadFactory factory;
78 IsLayerSupportedTests<armnn::RefWorkloadFactory, armnn::DataType::QSymmS8>(&factory);
79}
80
Sadik Armagan1625efc2021-06-10 18:24:34 +010081TEST_CASE("IsLayerSupportedInt16Reference")
Narumol Prangnawaratf9ac3fd2019-07-03 14:55:57 +010082{
83 armnn::RefWorkloadFactory factory;
Derek Lambertif90c56d2020-01-10 17:14:08 +000084 IsLayerSupportedTests<armnn::RefWorkloadFactory, armnn::DataType::QSymmS16>(&factory);
Narumol Prangnawaratf9ac3fd2019-07-03 14:55:57 +010085}
86
Sadik Armagan1625efc2021-06-10 18:24:34 +010087TEST_CASE("IsConvertFp16ToFp32SupportedReference")
arovir0143095f32018-10-09 18:04:24 +010088{
89 std::string reasonIfUnsupported;
90
91 bool result = IsConvertLayerSupportedTests<armnn::RefWorkloadFactory, armnn::ConvertFp16ToFp32Layer,
92 armnn::DataType::Float16, armnn::DataType::Float32>(reasonIfUnsupported);
93
Sadik Armagan1625efc2021-06-10 18:24:34 +010094 CHECK(result);
arovir0143095f32018-10-09 18:04:24 +010095}
96
Sadik Armagan1625efc2021-06-10 18:24:34 +010097TEST_CASE("IsConvertFp16ToFp32SupportedFp32InputReference")
arovir0143095f32018-10-09 18:04:24 +010098{
99 std::string reasonIfUnsupported;
100
101 bool result = IsConvertLayerSupportedTests<armnn::RefWorkloadFactory, armnn::ConvertFp16ToFp32Layer,
102 armnn::DataType::Float32, armnn::DataType::Float32>(reasonIfUnsupported);
103
Sadik Armagan1625efc2021-06-10 18:24:34 +0100104 CHECK(!result);
105 CHECK_EQ(reasonIfUnsupported, "Layer is not supported with float32 data type input");
arovir0143095f32018-10-09 18:04:24 +0100106}
107
Sadik Armagan1625efc2021-06-10 18:24:34 +0100108TEST_CASE("IsConvertFp16ToFp32SupportedFp16OutputReference")
arovir0143095f32018-10-09 18:04:24 +0100109{
110 std::string reasonIfUnsupported;
111
112 bool result = IsConvertLayerSupportedTests<armnn::RefWorkloadFactory, armnn::ConvertFp16ToFp32Layer,
113 armnn::DataType::Float16, armnn::DataType::Float16>(reasonIfUnsupported);
114
Sadik Armagan1625efc2021-06-10 18:24:34 +0100115 CHECK(!result);
116 CHECK_EQ(reasonIfUnsupported, "Layer is not supported with float16 data type output");
arovir0143095f32018-10-09 18:04:24 +0100117}
118
Sadik Armagan1625efc2021-06-10 18:24:34 +0100119TEST_CASE("IsConvertBf16ToFp32SupportedReference")
Narumol Prangnawarat7ddbbae2020-03-13 10:26:05 +0000120{
121 std::string reasonIfUnsupported;
122
123 bool result = IsConvertLayerSupportedTests<armnn::RefWorkloadFactory, armnn::ConvertBf16ToFp32Layer,
124 armnn::DataType::BFloat16, armnn::DataType::Float32>(reasonIfUnsupported);
125
Sadik Armagan1625efc2021-06-10 18:24:34 +0100126 CHECK(result);
Narumol Prangnawarat7ddbbae2020-03-13 10:26:05 +0000127}
128
Sadik Armagan1625efc2021-06-10 18:24:34 +0100129TEST_CASE("IsConvertBf16ToFp32SupportedFp32InputReference")
Narumol Prangnawarat7ddbbae2020-03-13 10:26:05 +0000130{
131 std::string reasonIfUnsupported;
132
133 bool result = IsConvertLayerSupportedTests<armnn::RefWorkloadFactory, armnn::ConvertBf16ToFp32Layer,
134 armnn::DataType::Float32, armnn::DataType::Float32>(reasonIfUnsupported);
135
Sadik Armagan1625efc2021-06-10 18:24:34 +0100136 CHECK(!result);
137 CHECK_EQ(reasonIfUnsupported, "Reference for ConvertBf16ToFp32 layer: input type not supported\n");
Narumol Prangnawarat7ddbbae2020-03-13 10:26:05 +0000138}
139
Sadik Armagan1625efc2021-06-10 18:24:34 +0100140TEST_CASE("IsConvertBf16ToFp32SupportedBf16OutputReference")
Narumol Prangnawarat7ddbbae2020-03-13 10:26:05 +0000141{
142 std::string reasonIfUnsupported;
143
144 bool result = IsConvertLayerSupportedTests<armnn::RefWorkloadFactory, armnn::ConvertBf16ToFp32Layer,
145 armnn::DataType::BFloat16, armnn::DataType::BFloat16>(reasonIfUnsupported);
146
Sadik Armagan1625efc2021-06-10 18:24:34 +0100147 CHECK(!result);
148 CHECK_EQ(reasonIfUnsupported, "Reference for ConvertBf16ToFp32 layer: output type not supported\n");
Narumol Prangnawarat7ddbbae2020-03-13 10:26:05 +0000149}
150
Sadik Armagan1625efc2021-06-10 18:24:34 +0100151TEST_CASE("IsConvertFp32ToBf16SupportedReference")
Narumol Prangnawaratea54a012020-03-16 16:36:10 +0000152{
153 std::string reasonIfUnsupported;
154
155 bool result = IsConvertLayerSupportedTests<armnn::RefWorkloadFactory, armnn::ConvertFp32ToBf16Layer,
156 armnn::DataType::Float32, armnn::DataType::BFloat16>(reasonIfUnsupported);
157
Sadik Armagan1625efc2021-06-10 18:24:34 +0100158 CHECK(result);
Narumol Prangnawaratea54a012020-03-16 16:36:10 +0000159}
160
Sadik Armagan1625efc2021-06-10 18:24:34 +0100161TEST_CASE("IsConvertFp32ToBf16SupportedBf16InputReference")
Narumol Prangnawaratea54a012020-03-16 16:36:10 +0000162{
163 std::string reasonIfUnsupported;
164
165 bool result = IsConvertLayerSupportedTests<armnn::RefWorkloadFactory, armnn::ConvertFp32ToBf16Layer,
166 armnn::DataType::BFloat16, armnn::DataType::BFloat16>(reasonIfUnsupported);
167
Sadik Armagan1625efc2021-06-10 18:24:34 +0100168 CHECK(!result);
169 CHECK_EQ(reasonIfUnsupported, "Reference for ConvertFp32ToBf16 layer: input type not supported\n");
Narumol Prangnawaratea54a012020-03-16 16:36:10 +0000170}
171
Sadik Armagan1625efc2021-06-10 18:24:34 +0100172TEST_CASE("IsConvertFp32ToBf16SupportedFp32OutputReference")
Narumol Prangnawaratea54a012020-03-16 16:36:10 +0000173{
174 std::string reasonIfUnsupported;
175
176 bool result = IsConvertLayerSupportedTests<armnn::RefWorkloadFactory, armnn::ConvertFp32ToBf16Layer,
177 armnn::DataType::Float32, armnn::DataType::Float32>(reasonIfUnsupported);
178
Sadik Armagan1625efc2021-06-10 18:24:34 +0100179 CHECK(!result);
180 CHECK_EQ(reasonIfUnsupported, "Reference for ConvertFp32ToBf16 layer: output type not supported\n");
Narumol Prangnawaratea54a012020-03-16 16:36:10 +0000181}
182
Sadik Armagan1625efc2021-06-10 18:24:34 +0100183TEST_CASE("IsConvertFp32ToFp16SupportedReference")
arovir0143095f32018-10-09 18:04:24 +0100184{
185 std::string reasonIfUnsupported;
186
187 bool result = IsConvertLayerSupportedTests<armnn::RefWorkloadFactory, armnn::ConvertFp32ToFp16Layer,
188 armnn::DataType::Float32, armnn::DataType::Float16>(reasonIfUnsupported);
189
Sadik Armagan1625efc2021-06-10 18:24:34 +0100190 CHECK(result);
arovir0143095f32018-10-09 18:04:24 +0100191}
192
Sadik Armagan1625efc2021-06-10 18:24:34 +0100193TEST_CASE("IsConvertFp32ToFp16SupportedFp16InputReference")
arovir0143095f32018-10-09 18:04:24 +0100194{
195 std::string reasonIfUnsupported;
196
197 bool result = IsConvertLayerSupportedTests<armnn::RefWorkloadFactory, armnn::ConvertFp32ToFp16Layer,
198 armnn::DataType::Float16, armnn::DataType::Float16>(reasonIfUnsupported);
199
Sadik Armagan1625efc2021-06-10 18:24:34 +0100200 CHECK(!result);
201 CHECK_EQ(reasonIfUnsupported, "Layer is not supported with float16 data type input");
arovir0143095f32018-10-09 18:04:24 +0100202}
203
Sadik Armagan1625efc2021-06-10 18:24:34 +0100204TEST_CASE("IsConvertFp32ToFp16SupportedFp32OutputReference")
arovir0143095f32018-10-09 18:04:24 +0100205{
206 std::string reasonIfUnsupported;
207
208 bool result = IsConvertLayerSupportedTests<armnn::RefWorkloadFactory, armnn::ConvertFp32ToFp16Layer,
209 armnn::DataType::Float32, armnn::DataType::Float32>(reasonIfUnsupported);
210
Sadik Armagan1625efc2021-06-10 18:24:34 +0100211 CHECK(!result);
212 CHECK_EQ(reasonIfUnsupported, "Layer is not supported with float32 data type output");
arovir0143095f32018-10-09 18:04:24 +0100213}
214
Sadik Armagan1625efc2021-06-10 18:24:34 +0100215TEST_CASE("IsLayerSupportedMeanDimensionsReference")
James Conroy4d1ff582019-06-10 17:06:39 +0100216{
217 std::string reasonIfUnsupported;
218
219 bool result = IsMeanLayerSupportedTests<armnn::RefWorkloadFactory,
220 armnn::DataType::Float32, armnn::DataType::Float32>(reasonIfUnsupported);
221
Sadik Armagan1625efc2021-06-10 18:24:34 +0100222 CHECK(result);
James Conroy4d1ff582019-06-10 17:06:39 +0100223}
224
Sadik Armagan1625efc2021-06-10 18:24:34 +0100225TEST_CASE("IsLayerNotSupportedMeanDimensionsReference")
James Conroy4d1ff582019-06-10 17:06:39 +0100226{
227 std::string reasonIfUnsupported;
228
229 bool result = IsMeanLayerNotSupportedTests<armnn::RefWorkloadFactory,
230 armnn::DataType::Float32, armnn::DataType::Float32>(reasonIfUnsupported);
231
Sadik Armagan1625efc2021-06-10 18:24:34 +0100232 CHECK(!result);
James Conroy4d1ff582019-06-10 17:06:39 +0100233
Sadik Armagan1625efc2021-06-10 18:24:34 +0100234 CHECK(reasonIfUnsupported.find(
David Monahana8837bf2020-04-16 10:01:56 +0100235 "Reference Mean: Expected 4 dimensions but got 2 dimensions instead, for the 'output' tensor.")
236 != std::string::npos);
James Conroy4d1ff582019-06-10 17:06:39 +0100237}
238
Sadik Armagan1625efc2021-06-10 18:24:34 +0100239TEST_CASE("IsConstantSupportedRef")
Mike Kelly0886ac42020-04-27 09:55:40 +0100240{
241 std::string reasonIfUnsupported;
242
243 bool result = IsConstantLayerSupportedTests<armnn::RefWorkloadFactory,
244 armnn::DataType::Float16>(reasonIfUnsupported);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100245 CHECK(result);
Mike Kelly0886ac42020-04-27 09:55:40 +0100246
247 result = IsConstantLayerSupportedTests<armnn::RefWorkloadFactory,
248 armnn::DataType::Float32>(reasonIfUnsupported);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100249 CHECK(result);
Mike Kelly0886ac42020-04-27 09:55:40 +0100250
251 result = IsConstantLayerSupportedTests<armnn::RefWorkloadFactory,
252 armnn::DataType::QAsymmU8>(reasonIfUnsupported);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100253 CHECK(result);
Mike Kelly0886ac42020-04-27 09:55:40 +0100254
255 result = IsConstantLayerSupportedTests<armnn::RefWorkloadFactory,
256 armnn::DataType::Boolean>(reasonIfUnsupported);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100257 CHECK(!result);
Mike Kelly0886ac42020-04-27 09:55:40 +0100258
259 result = IsConstantLayerSupportedTests<armnn::RefWorkloadFactory,
260 armnn::DataType::QSymmS16>(reasonIfUnsupported);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100261 CHECK(result);
Mike Kelly0886ac42020-04-27 09:55:40 +0100262
263 result = IsConstantLayerSupportedTests<armnn::RefWorkloadFactory,
264 armnn::DataType::QSymmS8>(reasonIfUnsupported);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100265 CHECK(result);
Mike Kelly0886ac42020-04-27 09:55:40 +0100266
267 result = IsConstantLayerSupportedTests<armnn::RefWorkloadFactory,
268 armnn::DataType::QAsymmS8>(reasonIfUnsupported);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100269 CHECK(result);
Mike Kelly0886ac42020-04-27 09:55:40 +0100270
271 result = IsConstantLayerSupportedTests<armnn::RefWorkloadFactory,
272 armnn::DataType::BFloat16>(reasonIfUnsupported);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100273 CHECK(result);
Mike Kelly0886ac42020-04-27 09:55:40 +0100274}
275
Sadik Armagan1625efc2021-06-10 18:24:34 +0100276}