2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
7 #include <armnn/ArmNN.hpp>
8 #include <armnn/Tensor.hpp>
9 #include <armnn/TypesUtils.hpp>
11 #include <test/TensorHelpers.hpp>
12 #include "QuantizeHelper.hpp"
14 #include <backends/CpuTensorHandle.hpp>
15 #include <backends/WorkloadFactory.hpp>
18 LayerTestResult<T, 4> SimpleReshapeTestImpl(
19 armnn::IWorkloadFactory& workloadFactory,
20 armnn::TensorInfo inputTensorInfo,
21 armnn::TensorInfo outputTensorInfo,
22 const std::vector<T>& inputData,
23 const std::vector<T>& outputExpectedData)
25 auto input = MakeTensor<T, 4>(inputTensorInfo, inputData);
27 LayerTestResult<T, 4> ret(outputTensorInfo);
28 ret.outputExpected = MakeTensor<T, 4>(outputTensorInfo, outputExpectedData);
30 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
31 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
33 armnn::ReshapeQueueDescriptor data;
34 armnn::WorkloadInfo info;
35 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
36 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
38 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateReshape(data, info);
40 inputHandle->Allocate();
41 outputHandle->Allocate();
43 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
47 CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
52 LayerTestResult<float, 4> SimpleReshapeFloat32Test(armnn::IWorkloadFactory& workloadFactory)
54 armnn::TensorInfo inputTensorInfo;
55 armnn::TensorInfo outputTensorInfo;
57 unsigned int inputShape[] = { 2, 2, 3, 3 };
58 unsigned int outputShape[] = { 2, 2, 9, 1 };
60 inputTensorInfo = armnn::TensorInfo(4, inputShape, armnn::DataType::Float32);
61 outputTensorInfo = armnn::TensorInfo(4, outputShape, armnn::DataType::Float32);
63 std::vector<float> input = std::vector<float>(
82 std::vector<float> outputExpected = std::vector<float>(
84 0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f,
86 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f, 17.0f,
88 18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f, 25.0f, 26.0f,
90 27.0f, 28.0f, 29.0f, 30.0f, 31.0f, 32.0f, 33.0f, 34.0f, 35.0f,
93 return SimpleReshapeTestImpl<float>(workloadFactory, inputTensorInfo, outputTensorInfo, input, outputExpected);
96 LayerTestResult<float, 4> SimpleFloorTest(armnn::IWorkloadFactory& workloadFactory)
98 const armnn::TensorInfo inputTensorInfo({1, 3, 2, 3}, armnn::DataType::Float32);
99 const armnn::TensorInfo outputTensorInfo(inputTensorInfo);
101 auto input = MakeTensor<float, 4>(inputTensorInfo,
102 { -37.5f, -15.2f, -8.76f, -2.0f, -1.5f, -1.3f, -0.5f, -0.4f, 0.0f,
103 1.0f, 0.4f, 0.5f, 1.3f, 1.5f, 2.0f, 8.76f, 15.2f, 37.5f });
105 LayerTestResult<float, 4> ret(outputTensorInfo);
106 ret.outputExpected = MakeTensor<float, 4>(outputTensorInfo,
107 { -38.0f, -16.0f, -9.0f, -2.0f, -2.0f, -2.0f, -1.0f, -1.0f, 0.0f,
108 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 2.0f, 8.0f, 15.0f, 37.0f });
110 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
111 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
113 armnn::FloorQueueDescriptor data;
114 armnn::WorkloadInfo info;
115 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
116 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
118 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateFloor(data, info);
120 inputHandle->Allocate();
121 outputHandle->Allocate();
123 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
127 CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
132 LayerTestResult<uint8_t, 4> SimpleReshapeUint8Test(armnn::IWorkloadFactory& workloadFactory)
134 armnn::TensorInfo inputTensorInfo;
135 armnn::TensorInfo outputTensorInfo;
137 unsigned int inputShape[] = { 2, 2, 3, 3 };
138 unsigned int outputShape[] = { 2, 2, 9, 1 };
140 inputTensorInfo = armnn::TensorInfo(4, inputShape, armnn::DataType::QuantisedAsymm8);
141 inputTensorInfo.SetQuantizationScale(1.0f);
142 outputTensorInfo = armnn::TensorInfo(4, outputShape, armnn::DataType::QuantisedAsymm8);
143 outputTensorInfo.SetQuantizationScale(1.0f);
145 std::vector<uint8_t> input = std::vector<uint8_t>(
164 std::vector<uint8_t> outputExpected = std::vector<uint8_t>(
166 0, 1, 2, 3, 4, 5, 6, 7, 8,
168 9, 10, 11, 12, 13, 14, 15, 16, 17,
170 18, 19, 20, 21, 22, 23, 24, 25, 26,
172 27, 28, 29, 30, 31, 32, 33, 34, 35,
175 return SimpleReshapeTestImpl<uint8_t>(workloadFactory, inputTensorInfo, outputTensorInfo, input, outputExpected);