6 #include "../GraphUtils.hpp" 7 #include "../TestUtils.hpp" 11 #include <boost/test/unit_test.hpp> 13 using namespace armnn;
16 using namespace optimizations;
21 const std::string& reshapeLayerName,
40 &IsLayerOfType<InputLayer>,
41 &IsLayerOfType<InputLayer>,
42 &IsLayerOfType<AdditionLayer>,
43 &IsLayerOfType<OutputLayer>));
50 &IsLayerOfType<InputLayer>,
51 &IsLayerOfType<InputLayer>,
52 &IsLayerOfType<ReshapeLayer>,
53 &IsLayerOfType<AdditionLayer>,
54 &IsLayerOfType<OutputLayer>));
57 BOOST_TEST(reshapeLayer);
61 BOOST_TEST((addedReshapeTensorInfo.GetShape() == expectedReshapeShape));
62 BOOST_TEST((addedReshapeTensorInfo.GetDataType() == expectedDataType));
134 &IsLayerOfType<InputLayer>,
135 &IsLayerOfType<InputLayer>,
136 &IsLayerOfType<SubtractionLayer>,
137 &IsLayerOfType<OutputLayer>));
144 &IsLayerOfType<InputLayer>,
145 &IsLayerOfType<InputLayer>,
146 &IsLayerOfType<ReshapeLayer>,
147 &IsLayerOfType<SubtractionLayer>,
148 &IsLayerOfType<OutputLayer>));
151 BOOST_TEST(reshapeLayer);
155 BOOST_TEST((addedReshapeTensorInfo.GetShape() ==
TensorShape({ 1, 1, 1, 5 })));
179 &IsLayerOfType<InputLayer>,
180 &IsLayerOfType<InputLayer>,
181 &IsLayerOfType<DivisionLayer>,
182 &IsLayerOfType<OutputLayer>));
189 &IsLayerOfType<InputLayer>,
190 &IsLayerOfType<InputLayer>,
191 &IsLayerOfType<ReshapeLayer>,
192 &IsLayerOfType<DivisionLayer>,
193 &IsLayerOfType<OutputLayer>));
196 BOOST_TEST(reshapeLayer);
200 BOOST_TEST((addedReshapeTensorInfo.GetShape() ==
TensorShape({ 1, 1, 4, 5 })));
224 &IsLayerOfType<InputLayer>,
225 &IsLayerOfType<InputLayer>,
226 &IsLayerOfType<MultiplicationLayer>,
227 &IsLayerOfType<OutputLayer>));
234 &IsLayerOfType<InputLayer>,
235 &IsLayerOfType<InputLayer>,
236 &IsLayerOfType<ReshapeLayer>,
237 &IsLayerOfType<MultiplicationLayer>,
238 &IsLayerOfType<OutputLayer>));
241 BOOST_TEST(reshapeLayer);
245 BOOST_TEST((addedReshapeTensorInfo.GetShape() ==
TensorShape({ 1, 1, 3, 5 })));
269 &IsLayerOfType<InputLayer>,
270 &IsLayerOfType<InputLayer>,
271 &IsLayerOfType<MultiplicationLayer>,
272 &IsLayerOfType<OutputLayer>));
279 &IsLayerOfType<InputLayer>,
280 &IsLayerOfType<InputLayer>,
281 &IsLayerOfType<MultiplicationLayer>,
282 &IsLayerOfType<OutputLayer>));
285 BOOST_TEST(!reshapeLayer);
300 uint8_t tensor[] = { 1, 1, 1, 1, 1 };
302 constant->m_LayerOutput = std::make_unique<ScopedTensorHandle>(
ConstTensor(info1, &tensor));
313 &IsLayerOfType<InputLayer>,
314 &IsLayerOfType<ConstantLayer>,
315 &IsLayerOfType<MultiplicationLayer>,
316 &IsLayerOfType<OutputLayer>));
323 &IsLayerOfType<InputLayer>,
324 &IsLayerOfType<ConstantLayer>,
325 &IsLayerOfType<MultiplicationLayer>,
326 &IsLayerOfType<OutputLayer>));
329 BOOST_TEST(constant->m_LayerOutput.get()->GetTensorInfo().GetShape() == expectedShape);
331 BOOST_TEST(constant->m_LayerOutput.get()->GetTensorInfo().GetNumDimensions() == info0.GetNumDimensions());
334 BOOST_TEST(!reshapeLayer);
359 float tensor[] = { 2.0f };
360 constant->m_LayerOutput = std::make_unique<ScopedTensorHandle>(
ConstTensor(constantTermInfo, &tensor));
371 &IsLayerOfType<InputLayer>,
372 &IsLayerOfType<ConstantLayer>,
373 &IsLayerOfType<AdditionLayer>,
374 &IsLayerOfType<AdditionLayer>,
375 &IsLayerOfType<OutputLayer>));
382 &IsLayerOfType<InputLayer>,
383 &IsLayerOfType<ConstantLayer>,
384 &IsLayerOfType<ReshapeLayer>,
385 &IsLayerOfType<ReshapeLayer>,
386 &IsLayerOfType<AdditionLayer>,
387 &IsLayerOfType<AdditionLayer>,
388 &IsLayerOfType<OutputLayer>));
391 BOOST_TEST(constant->m_LayerOutput.get()->GetTensorInfo().GetShape() == constantTermInfo.GetShape());
395 BOOST_TEST(reshapeLayer1);
396 BOOST_TEST(reshapeLayer2);
A layer that the constant data can be bound to.
BOOST_AUTO_TEST_SUITE(TensorflowLiteParser)
Optimizer::Optimizations MakeOptimizations(Args &&... args)
armnn::Layer * GetFirstLayerWithName(armnn::Graph &graph, const std::string &name)
void AddBroadcastReshapeLayerOptimizerTest(const TensorInfo &info0, const TensorInfo &info1, const TensorInfo &outputInfo, const std::string &reshapeLayerName, const TensorShape &expectedReshapeShape, const DataType expectedDataType)
LayerT * AddLayer(Args &&... args)
Adds a new layer, of type LayerType, to the graph constructed with the arguments passed.
ConstIterator cbegin() const
Returns const iterator pointing to the beginning of the list. Lowercase for range-based for loops...
int Connect(InputSlot &destination)
static void Pass(Graph &graph, const Optimizations &optimizations)
Copyright (c) 2021 ARM Limited and Contributors.
const InputSlot & GetInputSlot(unsigned int index) const override
Get a const input slot handle by slot index.
A layer user-provided data can be bound to (e.g. inputs, outputs).
A tensor defined by a TensorInfo (shape and data type) and an immutable backing store.
BOOST_AUTO_TEST_CASE(CheckConvolution2dLayer)
This layer represents an addition operation.
BOOST_AUTO_TEST_SUITE_END()
This layer represents a subtraction operation.
bool CheckSequence(const armnn::Graph::ConstIterator first, const armnn::Graph::ConstIterator last)
void SetTensorInfo(const TensorInfo &tensorInfo) override
This layer represents a division operation.
const OutputSlot & GetOutputSlot(unsigned int index=0) const override
Get the const output slot handle by slot index.
ConstIterator cend() const
Returns const iterator pointing to the end of the list. Lowercase for range-based for loops...
OptimizeForType< Layer, AddBroadcastReshapeLayerImpl > AddBroadcastReshapeLayer
This layer represents a multiplication operation.
const TensorInfo & GetTensorInfo() const override