blob: e6a2fb3afab51dc2f9cadf33922e1c8a96993280 [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;
66 IsLayerSupportedTests<armnn::RefWorkloadFactory, armnn::DataType::QuantisedAsymm8>(&factory);
67}
68
69BOOST_AUTO_TEST_CASE(IsConvertFp16ToFp32SupportedReference)
70{
71 std::string reasonIfUnsupported;
72
73 bool result = IsConvertLayerSupportedTests<armnn::RefWorkloadFactory, armnn::ConvertFp16ToFp32Layer,
74 armnn::DataType::Float16, armnn::DataType::Float32>(reasonIfUnsupported);
75
76 BOOST_CHECK(result);
77}
78
79BOOST_AUTO_TEST_CASE(IsConvertFp16ToFp32SupportedFp32InputReference)
80{
81 std::string reasonIfUnsupported;
82
83 bool result = IsConvertLayerSupportedTests<armnn::RefWorkloadFactory, armnn::ConvertFp16ToFp32Layer,
84 armnn::DataType::Float32, armnn::DataType::Float32>(reasonIfUnsupported);
85
86 BOOST_CHECK(!result);
87 BOOST_CHECK_EQUAL(reasonIfUnsupported, "Layer is not supported with float32 data type input");
88}
89
90BOOST_AUTO_TEST_CASE(IsConvertFp16ToFp32SupportedFp16OutputReference)
91{
92 std::string reasonIfUnsupported;
93
94 bool result = IsConvertLayerSupportedTests<armnn::RefWorkloadFactory, armnn::ConvertFp16ToFp32Layer,
95 armnn::DataType::Float16, armnn::DataType::Float16>(reasonIfUnsupported);
96
97 BOOST_CHECK(!result);
98 BOOST_CHECK_EQUAL(reasonIfUnsupported, "Layer is not supported with float16 data type output");
99}
100
101BOOST_AUTO_TEST_CASE(IsConvertFp32ToFp16SupportedReference)
102{
103 std::string reasonIfUnsupported;
104
105 bool result = IsConvertLayerSupportedTests<armnn::RefWorkloadFactory, armnn::ConvertFp32ToFp16Layer,
106 armnn::DataType::Float32, armnn::DataType::Float16>(reasonIfUnsupported);
107
108 BOOST_CHECK(result);
109}
110
111BOOST_AUTO_TEST_CASE(IsConvertFp32ToFp16SupportedFp16InputReference)
112{
113 std::string reasonIfUnsupported;
114
115 bool result = IsConvertLayerSupportedTests<armnn::RefWorkloadFactory, armnn::ConvertFp32ToFp16Layer,
116 armnn::DataType::Float16, armnn::DataType::Float16>(reasonIfUnsupported);
117
118 BOOST_CHECK(!result);
119 BOOST_CHECK_EQUAL(reasonIfUnsupported, "Layer is not supported with float16 data type input");
120}
121
122BOOST_AUTO_TEST_CASE(IsConvertFp32ToFp16SupportedFp32OutputReference)
123{
124 std::string reasonIfUnsupported;
125
126 bool result = IsConvertLayerSupportedTests<armnn::RefWorkloadFactory, armnn::ConvertFp32ToFp16Layer,
127 armnn::DataType::Float32, armnn::DataType::Float32>(reasonIfUnsupported);
128
129 BOOST_CHECK(!result);
130 BOOST_CHECK_EQUAL(reasonIfUnsupported, "Layer is not supported with float32 data type output");
131}
132
James Conroy4d1ff582019-06-10 17:06:39 +0100133BOOST_AUTO_TEST_CASE(IsLayerSupportedMeanDimensionsReference)
134{
135 std::string reasonIfUnsupported;
136
137 bool result = IsMeanLayerSupportedTests<armnn::RefWorkloadFactory,
138 armnn::DataType::Float32, armnn::DataType::Float32>(reasonIfUnsupported);
139
140 BOOST_CHECK(result);
141}
142
143BOOST_AUTO_TEST_CASE(IsLayerNotSupportedMeanDimensionsReference)
144{
145 std::string reasonIfUnsupported;
146
147 bool result = IsMeanLayerNotSupportedTests<armnn::RefWorkloadFactory,
148 armnn::DataType::Float32, armnn::DataType::Float32>(reasonIfUnsupported);
149
150 BOOST_CHECK(!result);
151
152 boost::algorithm::trim(reasonIfUnsupported);
153 BOOST_CHECK_EQUAL(reasonIfUnsupported,
154 "Reference Mean: Expected 4 dimensions but got 2 dimensions instead, for the 'output' tensor.");
155}
156
arovir0143095f32018-10-09 18:04:24 +0100157BOOST_AUTO_TEST_SUITE_END()