blob: f0c49aceb0f4c8d1829242f67650a75f63115966 [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
arovir0143095f32018-10-09 18:04:24 +010051BOOST_AUTO_TEST_CASE(IsLayerSupportedFloat16Reference)
52{
53 armnn::RefWorkloadFactory factory;
54 IsLayerSupportedTests<armnn::RefWorkloadFactory, armnn::DataType::Float16>(&factory);
55}
56
57BOOST_AUTO_TEST_CASE(IsLayerSupportedFloat32Reference)
58{
59 armnn::RefWorkloadFactory factory;
60 IsLayerSupportedTests<armnn::RefWorkloadFactory, armnn::DataType::Float32>(&factory);
61}
62
63BOOST_AUTO_TEST_CASE(IsLayerSupportedUint8Reference)
64{
65 armnn::RefWorkloadFactory factory;
Derek Lambertif90c56d2020-01-10 17:14:08 +000066 IsLayerSupportedTests<armnn::RefWorkloadFactory, armnn::DataType::QAsymmU8>(&factory);
arovir0143095f32018-10-09 18:04:24 +010067}
68
Keith Davis9d0ff742020-02-03 14:47:54 +000069BOOST_AUTO_TEST_CASE(IsLayerSupportedInt8Reference)
70{
71 armnn::RefWorkloadFactory factory;
72 IsLayerSupportedTests<armnn::RefWorkloadFactory, armnn::DataType::QSymmS8>(&factory);
73}
74
Narumol Prangnawaratf9ac3fd2019-07-03 14:55:57 +010075BOOST_AUTO_TEST_CASE(IsLayerSupportedInt16Reference)
76{
77 armnn::RefWorkloadFactory factory;
Derek Lambertif90c56d2020-01-10 17:14:08 +000078 IsLayerSupportedTests<armnn::RefWorkloadFactory, armnn::DataType::QSymmS16>(&factory);
Narumol Prangnawaratf9ac3fd2019-07-03 14:55:57 +010079}
80
arovir0143095f32018-10-09 18:04:24 +010081BOOST_AUTO_TEST_CASE(IsConvertFp16ToFp32SupportedReference)
82{
83 std::string reasonIfUnsupported;
84
85 bool result = IsConvertLayerSupportedTests<armnn::RefWorkloadFactory, armnn::ConvertFp16ToFp32Layer,
86 armnn::DataType::Float16, armnn::DataType::Float32>(reasonIfUnsupported);
87
88 BOOST_CHECK(result);
89}
90
91BOOST_AUTO_TEST_CASE(IsConvertFp16ToFp32SupportedFp32InputReference)
92{
93 std::string reasonIfUnsupported;
94
95 bool result = IsConvertLayerSupportedTests<armnn::RefWorkloadFactory, armnn::ConvertFp16ToFp32Layer,
96 armnn::DataType::Float32, armnn::DataType::Float32>(reasonIfUnsupported);
97
98 BOOST_CHECK(!result);
99 BOOST_CHECK_EQUAL(reasonIfUnsupported, "Layer is not supported with float32 data type input");
100}
101
102BOOST_AUTO_TEST_CASE(IsConvertFp16ToFp32SupportedFp16OutputReference)
103{
104 std::string reasonIfUnsupported;
105
106 bool result = IsConvertLayerSupportedTests<armnn::RefWorkloadFactory, armnn::ConvertFp16ToFp32Layer,
107 armnn::DataType::Float16, armnn::DataType::Float16>(reasonIfUnsupported);
108
109 BOOST_CHECK(!result);
110 BOOST_CHECK_EQUAL(reasonIfUnsupported, "Layer is not supported with float16 data type output");
111}
112
113BOOST_AUTO_TEST_CASE(IsConvertFp32ToFp16SupportedReference)
114{
115 std::string reasonIfUnsupported;
116
117 bool result = IsConvertLayerSupportedTests<armnn::RefWorkloadFactory, armnn::ConvertFp32ToFp16Layer,
118 armnn::DataType::Float32, armnn::DataType::Float16>(reasonIfUnsupported);
119
120 BOOST_CHECK(result);
121}
122
123BOOST_AUTO_TEST_CASE(IsConvertFp32ToFp16SupportedFp16InputReference)
124{
125 std::string reasonIfUnsupported;
126
127 bool result = IsConvertLayerSupportedTests<armnn::RefWorkloadFactory, armnn::ConvertFp32ToFp16Layer,
128 armnn::DataType::Float16, armnn::DataType::Float16>(reasonIfUnsupported);
129
130 BOOST_CHECK(!result);
131 BOOST_CHECK_EQUAL(reasonIfUnsupported, "Layer is not supported with float16 data type input");
132}
133
134BOOST_AUTO_TEST_CASE(IsConvertFp32ToFp16SupportedFp32OutputReference)
135{
136 std::string reasonIfUnsupported;
137
138 bool result = IsConvertLayerSupportedTests<armnn::RefWorkloadFactory, armnn::ConvertFp32ToFp16Layer,
139 armnn::DataType::Float32, armnn::DataType::Float32>(reasonIfUnsupported);
140
141 BOOST_CHECK(!result);
142 BOOST_CHECK_EQUAL(reasonIfUnsupported, "Layer is not supported with float32 data type output");
143}
144
James Conroy4d1ff582019-06-10 17:06:39 +0100145BOOST_AUTO_TEST_CASE(IsLayerSupportedMeanDimensionsReference)
146{
147 std::string reasonIfUnsupported;
148
149 bool result = IsMeanLayerSupportedTests<armnn::RefWorkloadFactory,
150 armnn::DataType::Float32, armnn::DataType::Float32>(reasonIfUnsupported);
151
152 BOOST_CHECK(result);
153}
154
155BOOST_AUTO_TEST_CASE(IsLayerNotSupportedMeanDimensionsReference)
156{
157 std::string reasonIfUnsupported;
158
159 bool result = IsMeanLayerNotSupportedTests<armnn::RefWorkloadFactory,
160 armnn::DataType::Float32, armnn::DataType::Float32>(reasonIfUnsupported);
161
162 BOOST_CHECK(!result);
163
164 boost::algorithm::trim(reasonIfUnsupported);
165 BOOST_CHECK_EQUAL(reasonIfUnsupported,
166 "Reference Mean: Expected 4 dimensions but got 2 dimensions instead, for the 'output' tensor.");
167}
168
arovir0143095f32018-10-09 18:04:24 +0100169BOOST_AUTO_TEST_SUITE_END()