7 #include "../TfLiteParser.hpp" 13 #include <boost/assert.hpp> 14 #include <boost/polymorphic_cast.hpp> 15 #include <boost/test/unit_test.hpp> 23 using namespace armnn;
28 StandInLayerVerifier(
const std::vector<TensorInfo>& inputInfos,
29 const std::vector<TensorInfo>& outputInfos)
31 , m_InputInfos(inputInfos)
32 , m_OutputInfos(outputInfos) {}
42 unsigned int numInputs = boost::numeric_cast<
unsigned int>(m_InputInfos.size());
46 unsigned int numOutputs = boost::numeric_cast<
unsigned int>(m_OutputInfos.size());
50 const StandInLayer* standInLayer = boost::polymorphic_downcast<const StandInLayer*>(layer);
51 for (
unsigned int i = 0u; i < numInputs; ++i)
53 const OutputSlot* connectedSlot = standInLayer->GetInputSlot(i).GetConnectedOutputSlot();
60 for (
unsigned int i = 0u; i < numOutputs; ++i)
68 std::vector<TensorInfo> m_InputInfos;
69 std::vector<TensorInfo> m_OutputInfos;
75 explicit DummyCustomFixture(
const std::vector<TensorInfo>& inputInfos,
76 const std::vector<TensorInfo>& outputInfos)
78 , m_StandInLayerVerifier(inputInfos, outputInfos)
80 const unsigned int numInputs = boost::numeric_cast<
unsigned int>(inputInfos.size());
81 BOOST_ASSERT(numInputs > 0);
83 const unsigned int numOutputs = boost::numeric_cast<
unsigned int>(outputInfos.size());
84 BOOST_ASSERT(numOutputs > 0);
90 "builtin_code": "CUSTOM", 91 "custom_code": "DummyCustomOperator" 97 for (
unsigned int i = 0u; i < numInputs; ++i)
102 "shape": )" + GetTensorShapeAsString(inputInfo.GetShape()) + R"(, 103 "type": )" + GetDataTypeAsString(inputInfo.GetDataType()) + R"(, 105 "name": "inputTensor)" + std::to_string(i) + R"(", 116 for (
unsigned int i = 0u; i < numOutputs; ++i)
118 const TensorInfo& outputInfo = outputInfos[i];
121 "shape": )" + GetTensorShapeAsString(outputInfo.GetShape()) + R"(, 122 "type": )" + GetDataTypeAsString(outputInfo.GetDataType()) + R"(, 124 "name": "outputTensor)" + std::to_string(i) + R"(", 133 if (i + 1 < numOutputs)
139 const std::string inputIndices = GetIndicesAsString(0u, numInputs - 1u);
140 const std::string outputIndices = GetIndicesAsString(numInputs, numInputs + numOutputs - 1u);
143 m_JsonString += R
"(], 144 "inputs": )" + inputIndices + R"(, 145 "outputs": )" + outputIndices + R"(, 149 "inputs": )" + inputIndices + R"(, 150 "outputs": )" + outputIndices + R"(, 151 "builtin_options_type": 0, 152 "custom_options": [ ], 153 "custom_options_format": "FLEXBUFFERS" 164 ReadStringToBinary(); 169 INetworkPtr network = m_Parser->CreateNetworkFromBinary(m_GraphBinary);
170 network->Accept(m_StandInLayerVerifier);
174 static std::string GetTensorShapeAsString(
const TensorShape& tensorShape)
176 std::stringstream stream;
180 stream << tensorShape[i];
181 if (i + 1 < tensorShape.GetNumDimensions())
192 static std::string GetDataTypeAsString(
DataType dataType)
198 default:
return "UNKNOWN";
202 static std::string GetIndicesAsString(
unsigned int first,
unsigned int last)
204 std::stringstream stream;
206 for (
unsigned int i = first; i <= last ; ++i)
220 StandInLayerVerifier m_StandInLayerVerifier;
223 class DummyCustom1Input1OutputFixture :
public DummyCustomFixture
226 DummyCustom1Input1OutputFixture()
231 class DummyCustom2Inputs1OutputFixture :
public DummyCustomFixture
234 DummyCustom2Inputs1OutputFixture()
int32_t GetQuantizationOffset() const
unsigned int GetNumDimensions() const
virtual const TensorInfo & GetTensorInfo() const =0
uint32_t m_NumOutputs
Number of output tensors.
int RunTest(const std::string &format, const std::string &inputTensorShapesStr, const vector< armnn::BackendId > &computeDevices, const std::string &dynamicBackendsPath, const std::string &path, const std::string &inputNames, const std::string &inputTensorDataFilePaths, const std::string &inputTypes, bool quantizeInput, const std::string &outputTypes, const std::string &outputNames, const std::string &outputTensorFiles, bool enableProfiling, bool enableFp16TurboMode, const double &thresholdTime, bool printIntermediate, const size_t subgraphId, bool enableLayerDetails=false, bool parseUnsupported=false, const std::shared_ptr< armnn::IRuntime > &runtime=nullptr)
virtual unsigned int GetNumOutputSlots() const =0
BOOST_CHECK(profilingService.GetCurrentState()==ProfilingState::WaitingForAck)
std::unique_ptr< INetwork, void(*)(INetwork *network)> INetworkPtr
BOOST_AUTO_TEST_SUITE_END()
uint32_t m_NumInputs
Number of input tensors.
Interface for a layer that is connectable to other layers via InputSlots and OutputSlots.
DataType GetDataType() const
BOOST_AUTO_TEST_SUITE(TensorflowLiteParser)
BOOST_FIXTURE_TEST_CASE(UnsupportedCustomOperator1Input1Output, DummyCustom1Input1OutputFixture)
virtual unsigned int GetNumInputSlots() const =0
A StandInDescriptor for the StandIn layer.
This layer represents an unknown operation in the input graph.
const TensorShape & GetShape() const
const TensorInfo & GetTensorInfo() const override
int LayerBindingId
Type of identifiers for bindable layers (inputs, outputs).
virtual const IOutputSlot & GetOutputSlot(unsigned int index) const =0
float GetQuantizationScale() const