blob: ab749c1a5c6776de0c757a6cd4a94ff6ce4053c5 [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
Aron Virginas-Tarc9cc8042018-11-01 16:15:57 +000010#include <backendsCommon/CpuTensorHandle.hpp>
11#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
16#include <boost/test/unit_test.hpp>
James Conroy4d1ff582019-06-10 17:06:39 +010017#include <boost/algorithm/string/trim.hpp>
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
31BOOST_AUTO_TEST_SUITE(RefLayerSupported)
32
33BOOST_AUTO_TEST_CASE(IsLayerSupportedLayerTypeMatches)
34{
35 LayerTypeMatchesTest();
36}
Derek Lamberti50db4e82019-03-13 14:16:15 +000037BOOST_AUTO_TEST_CASE(IsLayerSupportedReferenceAddition)
38{
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;
48 BOOST_CHECK(supportChecker.IsAdditionSupported(in0, in1, out, reasonNotSupported));
49}
50
Narumol Prangnawarat44179c32020-03-11 14:51:27 +000051BOOST_AUTO_TEST_CASE(IsLayerSupportedBFloat16Reference)
52{
53 armnn::RefWorkloadFactory factory;
54 IsLayerSupportedTests<armnn::RefWorkloadFactory, armnn::DataType::BFloat16>(&factory);
55}
56
arovir0143095f32018-10-09 18:04:24 +010057BOOST_AUTO_TEST_CASE(IsLayerSupportedFloat16Reference)
58{
59 armnn::RefWorkloadFactory factory;
60 IsLayerSupportedTests<armnn::RefWorkloadFactory, armnn::DataType::Float16>(&factory);
61}
62
63BOOST_AUTO_TEST_CASE(IsLayerSupportedFloat32Reference)
64{
65 armnn::RefWorkloadFactory factory;
66 IsLayerSupportedTests<armnn::RefWorkloadFactory, armnn::DataType::Float32>(&factory);
67}
68
69BOOST_AUTO_TEST_CASE(IsLayerSupportedUint8Reference)
70{
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
Keith Davis9d0ff742020-02-03 14:47:54 +000075BOOST_AUTO_TEST_CASE(IsLayerSupportedInt8Reference)
76{
77 armnn::RefWorkloadFactory factory;
78 IsLayerSupportedTests<armnn::RefWorkloadFactory, armnn::DataType::QSymmS8>(&factory);
79}
80
Narumol Prangnawaratf9ac3fd2019-07-03 14:55:57 +010081BOOST_AUTO_TEST_CASE(IsLayerSupportedInt16Reference)
82{
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
arovir0143095f32018-10-09 18:04:24 +010087BOOST_AUTO_TEST_CASE(IsConvertFp16ToFp32SupportedReference)
88{
89 std::string reasonIfUnsupported;
90
91 bool result = IsConvertLayerSupportedTests<armnn::RefWorkloadFactory, armnn::ConvertFp16ToFp32Layer,
92 armnn::DataType::Float16, armnn::DataType::Float32>(reasonIfUnsupported);
93
94 BOOST_CHECK(result);
95}
96
97BOOST_AUTO_TEST_CASE(IsConvertFp16ToFp32SupportedFp32InputReference)
98{
99 std::string reasonIfUnsupported;
100
101 bool result = IsConvertLayerSupportedTests<armnn::RefWorkloadFactory, armnn::ConvertFp16ToFp32Layer,
102 armnn::DataType::Float32, armnn::DataType::Float32>(reasonIfUnsupported);
103
104 BOOST_CHECK(!result);
105 BOOST_CHECK_EQUAL(reasonIfUnsupported, "Layer is not supported with float32 data type input");
106}
107
108BOOST_AUTO_TEST_CASE(IsConvertFp16ToFp32SupportedFp16OutputReference)
109{
110 std::string reasonIfUnsupported;
111
112 bool result = IsConvertLayerSupportedTests<armnn::RefWorkloadFactory, armnn::ConvertFp16ToFp32Layer,
113 armnn::DataType::Float16, armnn::DataType::Float16>(reasonIfUnsupported);
114
115 BOOST_CHECK(!result);
116 BOOST_CHECK_EQUAL(reasonIfUnsupported, "Layer is not supported with float16 data type output");
117}
118
119BOOST_AUTO_TEST_CASE(IsConvertFp32ToFp16SupportedReference)
120{
121 std::string reasonIfUnsupported;
122
123 bool result = IsConvertLayerSupportedTests<armnn::RefWorkloadFactory, armnn::ConvertFp32ToFp16Layer,
124 armnn::DataType::Float32, armnn::DataType::Float16>(reasonIfUnsupported);
125
126 BOOST_CHECK(result);
127}
128
129BOOST_AUTO_TEST_CASE(IsConvertFp32ToFp16SupportedFp16InputReference)
130{
131 std::string reasonIfUnsupported;
132
133 bool result = IsConvertLayerSupportedTests<armnn::RefWorkloadFactory, armnn::ConvertFp32ToFp16Layer,
134 armnn::DataType::Float16, armnn::DataType::Float16>(reasonIfUnsupported);
135
136 BOOST_CHECK(!result);
137 BOOST_CHECK_EQUAL(reasonIfUnsupported, "Layer is not supported with float16 data type input");
138}
139
140BOOST_AUTO_TEST_CASE(IsConvertFp32ToFp16SupportedFp32OutputReference)
141{
142 std::string reasonIfUnsupported;
143
144 bool result = IsConvertLayerSupportedTests<armnn::RefWorkloadFactory, armnn::ConvertFp32ToFp16Layer,
145 armnn::DataType::Float32, armnn::DataType::Float32>(reasonIfUnsupported);
146
147 BOOST_CHECK(!result);
148 BOOST_CHECK_EQUAL(reasonIfUnsupported, "Layer is not supported with float32 data type output");
149}
150
James Conroy4d1ff582019-06-10 17:06:39 +0100151BOOST_AUTO_TEST_CASE(IsLayerSupportedMeanDimensionsReference)
152{
153 std::string reasonIfUnsupported;
154
155 bool result = IsMeanLayerSupportedTests<armnn::RefWorkloadFactory,
156 armnn::DataType::Float32, armnn::DataType::Float32>(reasonIfUnsupported);
157
158 BOOST_CHECK(result);
159}
160
161BOOST_AUTO_TEST_CASE(IsLayerNotSupportedMeanDimensionsReference)
162{
163 std::string reasonIfUnsupported;
164
165 bool result = IsMeanLayerNotSupportedTests<armnn::RefWorkloadFactory,
166 armnn::DataType::Float32, armnn::DataType::Float32>(reasonIfUnsupported);
167
168 BOOST_CHECK(!result);
169
170 boost::algorithm::trim(reasonIfUnsupported);
171 BOOST_CHECK_EQUAL(reasonIfUnsupported,
172 "Reference Mean: Expected 4 dimensions but got 2 dimensions instead, for the 'output' tensor.");
173}
174
arovir0143095f32018-10-09 18:04:24 +0100175BOOST_AUTO_TEST_SUITE_END()