ArmNN
 22.05
ComparisonSerializationTests.cpp File Reference
#include "../Serializer.hpp"
#include "SerializerTestUtils.hpp"
#include <armnn/Descriptors.hpp>
#include <armnn/INetwork.hpp>
#include <armnn/IRuntime.hpp>
#include <armnnDeserializer/IDeserializer.hpp>
#include <armnn/utility/IgnoreUnused.hpp>
#include <doctest/doctest.h>

Go to the source code of this file.

Functions

 TEST_SUITE ("SerializerTests")
 

Function Documentation

◆ TEST_SUITE()

TEST_SUITE ( "SerializerTests"  )

Definition at line 17 of file ComparisonSerializationTests.cpp.

References armnn::Boolean, armnn::Comparison, IOutputSlot::Connect(), INetwork::Create(), DeserializeNetwork(), armnn::Equal, armnn::Float32, IConnectableLayer::GetInputSlot(), IConnectableLayer::GetOutputSlot(), IConnectableLayer::GetType(), armnn::Greater, armnn::IgnoreUnused(), armnn::Input, ComparisonDescriptor::m_Operation, armnn::Output, SerializeNetwork(), and IOutputSlot::SetTensorInfo().

18 {
19 struct ComparisonModel
20 {
21  ComparisonModel(const std::string& layerName,
22  const armnn::TensorInfo& inputInfo,
23  const armnn::TensorInfo& outputInfo,
24  armnn::ComparisonDescriptor& descriptor)
25  : m_network(armnn::INetwork::Create())
26  {
27  armnn::IConnectableLayer* const inputLayer0 = m_network->AddInputLayer(0);
28  armnn::IConnectableLayer* const inputLayer1 = m_network->AddInputLayer(1);
29  armnn::IConnectableLayer* const equalLayer = m_network->AddComparisonLayer(descriptor, layerName.c_str());
30  armnn::IConnectableLayer* const outputLayer = m_network->AddOutputLayer(0);
31 
32  inputLayer0->GetOutputSlot(0).Connect(equalLayer->GetInputSlot(0));
33  inputLayer1->GetOutputSlot(0).Connect(equalLayer->GetInputSlot(1));
34  equalLayer->GetOutputSlot(0).Connect(outputLayer->GetInputSlot(0));
35 
36  inputLayer0->GetOutputSlot(0).SetTensorInfo(inputInfo);
37  inputLayer1->GetOutputSlot(0).SetTensorInfo(inputInfo);
38  equalLayer->GetOutputSlot(0).SetTensorInfo(outputInfo);
39  }
40 
41  armnn::INetworkPtr m_network;
42 };
43 
44 class ComparisonLayerVerifier : public LayerVerifierBase
45 {
46 public:
47  ComparisonLayerVerifier(const std::string& layerName,
48  const std::vector<armnn::TensorInfo>& inputInfos,
49  const std::vector<armnn::TensorInfo>& outputInfos,
50  const armnn::ComparisonDescriptor& descriptor)
51  : LayerVerifierBase(layerName, inputInfos, outputInfos)
52  , m_Descriptor (descriptor) {}
53 
54  void ExecuteStrategy(const armnn::IConnectableLayer* layer,
55  const armnn::BaseDescriptor& descriptor,
56  const std::vector<armnn::ConstTensor>& constants,
57  const char* name,
58  const armnn::LayerBindingId id = 0) override
59  {
60  armnn::IgnoreUnused(descriptor, constants, id);
61  switch (layer->GetType())
62  {
63  case armnn::LayerType::Input: break;
64  case armnn::LayerType::Output: break;
66  {
67  VerifyNameAndConnections(layer, name);
68  const armnn::ComparisonDescriptor& layerDescriptor =
69  static_cast<const armnn::ComparisonDescriptor&>(descriptor);
70  CHECK(layerDescriptor.m_Operation == m_Descriptor.m_Operation);
71  break;
72  }
73  default:
74  {
75  throw armnn::Exception("Unexpected layer type in Comparison test model");
76  }
77  }
78  }
79 
80 private:
81  armnn::ComparisonDescriptor m_Descriptor;
82 };
83 
84 TEST_CASE("SerializeEqual")
85 {
86  const std::string layerName("equal");
87 
88  const armnn::TensorShape shape{2, 1, 2, 4};
91 
93 
94  ComparisonModel model(layerName, inputInfo, outputInfo, descriptor);
95 
96  armnn::INetworkPtr deserializedNetwork = DeserializeNetwork(SerializeNetwork(*model.m_network));
97  CHECK(deserializedNetwork);
98 
99  ComparisonLayerVerifier verifier(layerName, { inputInfo, inputInfo }, { outputInfo }, descriptor);
100  deserializedNetwork->ExecuteStrategy(verifier);
101 }
102 
103 TEST_CASE("SerializeGreater")
104 {
105  const std::string layerName("greater");
106 
107  const armnn::TensorShape shape{2, 1, 2, 4};
110 
112 
113  ComparisonModel model(layerName, inputInfo, outputInfo, descriptor);
114 
115  armnn::INetworkPtr deserializedNetwork = DeserializeNetwork(SerializeNetwork(*model.m_network));
116  CHECK(deserializedNetwork);
117 
118  ComparisonLayerVerifier verifier(layerName, { inputInfo, inputInfo }, { outputInfo }, descriptor);
119  deserializedNetwork->ExecuteStrategy(verifier);
120 }
121 
122 }
Interface for a layer that is connectable to other layers via InputSlots and OutputSlots.
Definition: INetwork.hpp:66
armnn::INetworkPtr DeserializeNetwork(const std::string &serializerString)
A ComparisonDescriptor for the ComparisonLayer.
Definition: Descriptors.hpp:89
Copyright (c) 2021 ARM Limited and Contributors.
void IgnoreUnused(Ts &&...)
int LayerBindingId
Type of identifiers for bindable layers (inputs, outputs).
Definition: Types.hpp:290
virtual void SetTensorInfo(const TensorInfo &tensorInfo)=0
Base class for all descriptors.
Definition: Descriptors.hpp:22
virtual LayerType GetType() const =0
Returns the armnn::LayerType of this layer.
ComparisonOperation m_Operation
Specifies the comparison operation to execute.
Base class for all ArmNN exceptions so that users can filter to just those.
Definition: Exceptions.hpp:46
virtual const IInputSlot & GetInputSlot(unsigned int index) const =0
Get a const input slot handle by slot index.
virtual const IOutputSlot & GetOutputSlot(unsigned int index) const =0
Get the const output slot handle by slot index.
std::unique_ptr< INetwork, void(*)(INetwork *network)> INetworkPtr
Definition: INetwork.hpp:241
virtual int Connect(IInputSlot &destination)=0
std::string SerializeNetwork(const armnn::INetwork &network)