blob: 9dcf705874fb5698e3b58920ecc4c2885857e229 [file] [log] [blame]
Teresa Charlin2e3f4d22020-07-29 14:29:20 +01001//
2// Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#pragma once
7
Sadik Armagana097d2a2021-11-24 15:47:28 +00008#include <CommonTestUtils.hpp>
Teresa Charlin2e3f4d22020-07-29 14:29:20 +01009
10#include <armnn/INetwork.hpp>
11#include <armnn/TypesUtils.hpp>
12
13#include <ResolveType.hpp>
14
Sadik Armagan1625efc2021-06-10 18:24:34 +010015#include <doctest/doctest.h>
16
Teresa Charlin2e3f4d22020-07-29 14:29:20 +010017namespace
18{
19
20armnn::INetworkPtr CreateRankNetwork(const armnn::TensorInfo& inputTensorInfo,
21 const armnn::TensorInfo& outputTensorInfo)
22{
23 armnn::INetworkPtr network(armnn::INetwork::Create());
24
25 armnn::IConnectableLayer* inputLayer = network->AddInputLayer(0, "Input");
26 armnn::IConnectableLayer* rankLayer = network->AddRankLayer("Rank");
27 armnn::IConnectableLayer* outputLayer = network->AddOutputLayer(0, "Output");
28
29 Connect(inputLayer, rankLayer, inputTensorInfo, 0, 0);
30 Connect(rankLayer, outputLayer, outputTensorInfo, 0, 0);
31
32 return network;
33}
34
35template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
36void RankEndToEnd(const std::vector<armnn::BackendId>& backends)
37{
38 using namespace armnn;
39
40 std::vector<float> floatInputData{
41 1, 2, 3, 4, 5,
42 11, 12, 13, 14, 15,
43 21, 22, 23, 24, 25
44 };
45 std::vector<T> inputData = armnnUtils::QuantizedVector<T>(floatInputData);
46
47 std::vector<int32_t> expectedOutputData{ 4 };
48
Cathal Corbett5b8093c2021-10-22 11:12:07 +010049 TensorInfo inputInfo ({ 1, 1, 5, 3 }, ArmnnType, 0.0f, 0, true);
Teresa Charlin2e3f4d22020-07-29 14:29:20 +010050 TensorShape outputShape (Dimensionality::Scalar);
51 TensorInfo outputInfo(outputShape, DataType::Signed32);
52
53 armnn::INetworkPtr network = CreateRankNetwork(inputInfo, outputInfo);
54
Sadik Armagan1625efc2021-06-10 18:24:34 +010055 CHECK(network);
Teresa Charlin2e3f4d22020-07-29 14:29:20 +010056
57 std::map<int, std::vector<T>> inputTensorData = {{ 0, inputData }};
58 std::map<int, std::vector<int32_t>> expectedOutputTensorData = {{ 0, expectedOutputData }};
59
60 EndToEndLayerTestImpl<ArmnnType, DataType::Signed32>(move(network),
61 inputTensorData,
62 expectedOutputTensorData,
63 backends);
64}
65
66} // anonymous namespace