blob: e671496ce2ee0e12b2831921e7e14e9fec19e904 [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
Colm Donelanc42a9872022-02-02 16:35:09 +00009#include <armnnTestUtils/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("IsLayerSupportedFloat16Reference")
arovir0143095f32018-10-09 18:04:24 +010053{
54 armnn::RefWorkloadFactory factory;
55 IsLayerSupportedTests<armnn::RefWorkloadFactory, armnn::DataType::Float16>(&factory);
56}
57
Sadik Armagan1625efc2021-06-10 18:24:34 +010058TEST_CASE("IsLayerSupportedFloat32Reference")
arovir0143095f32018-10-09 18:04:24 +010059{
60 armnn::RefWorkloadFactory factory;
61 IsLayerSupportedTests<armnn::RefWorkloadFactory, armnn::DataType::Float32>(&factory);
62}
63
Sadik Armagan1625efc2021-06-10 18:24:34 +010064TEST_CASE("IsLayerSupportedUint8Reference")
arovir0143095f32018-10-09 18:04:24 +010065{
66 armnn::RefWorkloadFactory factory;
Derek Lambertif90c56d2020-01-10 17:14:08 +000067 IsLayerSupportedTests<armnn::RefWorkloadFactory, armnn::DataType::QAsymmU8>(&factory);
arovir0143095f32018-10-09 18:04:24 +010068}
69
Sadik Armagan1625efc2021-06-10 18:24:34 +010070TEST_CASE("IsLayerSupportedInt8Reference")
Keith Davis9d0ff742020-02-03 14:47:54 +000071{
72 armnn::RefWorkloadFactory factory;
73 IsLayerSupportedTests<armnn::RefWorkloadFactory, armnn::DataType::QSymmS8>(&factory);
74}
75
Sadik Armagan1625efc2021-06-10 18:24:34 +010076TEST_CASE("IsLayerSupportedInt16Reference")
Narumol Prangnawaratf9ac3fd2019-07-03 14:55:57 +010077{
78 armnn::RefWorkloadFactory factory;
Derek Lambertif90c56d2020-01-10 17:14:08 +000079 IsLayerSupportedTests<armnn::RefWorkloadFactory, armnn::DataType::QSymmS16>(&factory);
Narumol Prangnawaratf9ac3fd2019-07-03 14:55:57 +010080}
81
Sadik Armagan1625efc2021-06-10 18:24:34 +010082TEST_CASE("IsConvertFp16ToFp32SupportedReference")
arovir0143095f32018-10-09 18:04:24 +010083{
84 std::string reasonIfUnsupported;
85
86 bool result = IsConvertLayerSupportedTests<armnn::RefWorkloadFactory, armnn::ConvertFp16ToFp32Layer,
87 armnn::DataType::Float16, armnn::DataType::Float32>(reasonIfUnsupported);
88
Sadik Armagan1625efc2021-06-10 18:24:34 +010089 CHECK(result);
arovir0143095f32018-10-09 18:04:24 +010090}
91
Sadik Armagan1625efc2021-06-10 18:24:34 +010092TEST_CASE("IsConvertFp16ToFp32SupportedFp32InputReference")
arovir0143095f32018-10-09 18:04:24 +010093{
94 std::string reasonIfUnsupported;
95
96 bool result = IsConvertLayerSupportedTests<armnn::RefWorkloadFactory, armnn::ConvertFp16ToFp32Layer,
97 armnn::DataType::Float32, armnn::DataType::Float32>(reasonIfUnsupported);
98
Sadik Armagan1625efc2021-06-10 18:24:34 +010099 CHECK(!result);
100 CHECK_EQ(reasonIfUnsupported, "Layer is not supported with float32 data type input");
arovir0143095f32018-10-09 18:04:24 +0100101}
102
Sadik Armagan1625efc2021-06-10 18:24:34 +0100103TEST_CASE("IsConvertFp16ToFp32SupportedFp16OutputReference")
arovir0143095f32018-10-09 18:04:24 +0100104{
105 std::string reasonIfUnsupported;
106
107 bool result = IsConvertLayerSupportedTests<armnn::RefWorkloadFactory, armnn::ConvertFp16ToFp32Layer,
108 armnn::DataType::Float16, armnn::DataType::Float16>(reasonIfUnsupported);
109
Sadik Armagan1625efc2021-06-10 18:24:34 +0100110 CHECK(!result);
111 CHECK_EQ(reasonIfUnsupported, "Layer is not supported with float16 data type output");
arovir0143095f32018-10-09 18:04:24 +0100112}
113
Sadik Armagan1625efc2021-06-10 18:24:34 +0100114TEST_CASE("IsConvertFp32ToFp16SupportedReference")
arovir0143095f32018-10-09 18:04:24 +0100115{
116 std::string reasonIfUnsupported;
117
118 bool result = IsConvertLayerSupportedTests<armnn::RefWorkloadFactory, armnn::ConvertFp32ToFp16Layer,
119 armnn::DataType::Float32, armnn::DataType::Float16>(reasonIfUnsupported);
120
Sadik Armagan1625efc2021-06-10 18:24:34 +0100121 CHECK(result);
arovir0143095f32018-10-09 18:04:24 +0100122}
123
Sadik Armagan1625efc2021-06-10 18:24:34 +0100124TEST_CASE("IsConvertFp32ToFp16SupportedFp16InputReference")
arovir0143095f32018-10-09 18:04:24 +0100125{
126 std::string reasonIfUnsupported;
127
128 bool result = IsConvertLayerSupportedTests<armnn::RefWorkloadFactory, armnn::ConvertFp32ToFp16Layer,
129 armnn::DataType::Float16, armnn::DataType::Float16>(reasonIfUnsupported);
130
Sadik Armagan1625efc2021-06-10 18:24:34 +0100131 CHECK(!result);
132 CHECK_EQ(reasonIfUnsupported, "Layer is not supported with float16 data type input");
arovir0143095f32018-10-09 18:04:24 +0100133}
134
Sadik Armagan1625efc2021-06-10 18:24:34 +0100135TEST_CASE("IsConvertFp32ToFp16SupportedFp32OutputReference")
arovir0143095f32018-10-09 18:04:24 +0100136{
137 std::string reasonIfUnsupported;
138
139 bool result = IsConvertLayerSupportedTests<armnn::RefWorkloadFactory, armnn::ConvertFp32ToFp16Layer,
140 armnn::DataType::Float32, armnn::DataType::Float32>(reasonIfUnsupported);
141
Sadik Armagan1625efc2021-06-10 18:24:34 +0100142 CHECK(!result);
143 CHECK_EQ(reasonIfUnsupported, "Layer is not supported with float32 data type output");
arovir0143095f32018-10-09 18:04:24 +0100144}
145
Sadik Armagan1625efc2021-06-10 18:24:34 +0100146TEST_CASE("IsLayerSupportedMeanDimensionsReference")
James Conroy4d1ff582019-06-10 17:06:39 +0100147{
148 std::string reasonIfUnsupported;
149
150 bool result = IsMeanLayerSupportedTests<armnn::RefWorkloadFactory,
151 armnn::DataType::Float32, armnn::DataType::Float32>(reasonIfUnsupported);
152
Sadik Armagan1625efc2021-06-10 18:24:34 +0100153 CHECK(result);
James Conroy4d1ff582019-06-10 17:06:39 +0100154}
155
Sadik Armagan1625efc2021-06-10 18:24:34 +0100156TEST_CASE("IsLayerNotSupportedMeanDimensionsReference")
James Conroy4d1ff582019-06-10 17:06:39 +0100157{
158 std::string reasonIfUnsupported;
159
160 bool result = IsMeanLayerNotSupportedTests<armnn::RefWorkloadFactory,
161 armnn::DataType::Float32, armnn::DataType::Float32>(reasonIfUnsupported);
162
Sadik Armagan1625efc2021-06-10 18:24:34 +0100163 CHECK(!result);
James Conroy4d1ff582019-06-10 17:06:39 +0100164
Sadik Armagan1625efc2021-06-10 18:24:34 +0100165 CHECK(reasonIfUnsupported.find(
David Monahana8837bf2020-04-16 10:01:56 +0100166 "Reference Mean: Expected 4 dimensions but got 2 dimensions instead, for the 'output' tensor.")
167 != std::string::npos);
James Conroy4d1ff582019-06-10 17:06:39 +0100168}
169
Sadik Armagan1625efc2021-06-10 18:24:34 +0100170TEST_CASE("IsConstantSupportedRef")
Mike Kelly0886ac42020-04-27 09:55:40 +0100171{
172 std::string reasonIfUnsupported;
173
174 bool result = IsConstantLayerSupportedTests<armnn::RefWorkloadFactory,
175 armnn::DataType::Float16>(reasonIfUnsupported);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100176 CHECK(result);
Mike Kelly0886ac42020-04-27 09:55:40 +0100177
178 result = IsConstantLayerSupportedTests<armnn::RefWorkloadFactory,
179 armnn::DataType::Float32>(reasonIfUnsupported);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100180 CHECK(result);
Mike Kelly0886ac42020-04-27 09:55:40 +0100181
182 result = IsConstantLayerSupportedTests<armnn::RefWorkloadFactory,
183 armnn::DataType::QAsymmU8>(reasonIfUnsupported);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100184 CHECK(result);
Mike Kelly0886ac42020-04-27 09:55:40 +0100185
186 result = IsConstantLayerSupportedTests<armnn::RefWorkloadFactory,
187 armnn::DataType::Boolean>(reasonIfUnsupported);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100188 CHECK(!result);
Mike Kelly0886ac42020-04-27 09:55:40 +0100189
190 result = IsConstantLayerSupportedTests<armnn::RefWorkloadFactory,
191 armnn::DataType::QSymmS16>(reasonIfUnsupported);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100192 CHECK(result);
Mike Kelly0886ac42020-04-27 09:55:40 +0100193
194 result = IsConstantLayerSupportedTests<armnn::RefWorkloadFactory,
195 armnn::DataType::QSymmS8>(reasonIfUnsupported);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100196 CHECK(result);
Mike Kelly0886ac42020-04-27 09:55:40 +0100197
198 result = IsConstantLayerSupportedTests<armnn::RefWorkloadFactory,
199 armnn::DataType::QAsymmS8>(reasonIfUnsupported);
Sadik Armagan1625efc2021-06-10 18:24:34 +0100200 CHECK(result);
Mike Kelly0886ac42020-04-27 09:55:40 +0100201
202 result = IsConstantLayerSupportedTests<armnn::RefWorkloadFactory,
203 armnn::DataType::BFloat16>(reasonIfUnsupported);
Ryan OShea31441592022-11-07 16:20:48 +0000204 CHECK(!result);
205 CHECK(reasonIfUnsupported.find("Reference constant: output is not a supported type.") != std::string::npos);
206
Mike Kelly0886ac42020-04-27 09:55:40 +0100207}
208
Sadik Armagan1625efc2021-06-10 18:24:34 +0100209}