From 965c7c63ffe069bf3b5e20372e8b3dc3873f8166 Mon Sep 17 00:00:00 2001 From: Jim Flynn Date: Mon, 24 Jun 2019 14:32:41 +0100 Subject: IVGCVSW-3343 Add backward compatibility deserialisation test for pad value Change-Id: Ic0f4745e26ce177dad26c60d3b84c450240d2c7b Signed-off-by: Jim Flynn --- src/armnnSerializer/test/SerializerTests.cpp | 103 +++++++++++++++++++++------ 1 file changed, 80 insertions(+), 23 deletions(-) (limited to 'src/armnnSerializer/test') diff --git a/src/armnnSerializer/test/SerializerTests.cpp b/src/armnnSerializer/test/SerializerTests.cpp index c1918c79f6..8b1594e141 100644 --- a/src/armnnSerializer/test/SerializerTests.cpp +++ b/src/armnnSerializer/test/SerializerTests.cpp @@ -1691,34 +1691,34 @@ BOOST_AUTO_TEST_CASE(SerializeNormalization) deserializedNetwork->Accept(verifier); } -BOOST_AUTO_TEST_CASE(SerializePad) +class PadLayerVerifier : public LayerVerifierBase { - class PadLayerVerifier : public LayerVerifierBase +public: + PadLayerVerifier(const std::string& layerName, + const std::vector& inputInfos, + const std::vector& outputInfos, + const armnn::PadDescriptor& descriptor) + : LayerVerifierBase(layerName, inputInfos, outputInfos), m_Descriptor(descriptor) {} + + void VisitPadLayer(const armnn::IConnectableLayer* layer, + const armnn::PadDescriptor& descriptor, + const char* name) override { - public: - PadLayerVerifier(const std::string& layerName, - const std::vector& inputInfos, - const std::vector& outputInfos, - const armnn::PadDescriptor& descriptor) - : LayerVerifierBase(layerName, inputInfos, outputInfos) - , m_Descriptor(descriptor) {} + VerifyNameAndConnections(layer, name); + VerifyDescriptor(descriptor); + } - void VisitPadLayer(const armnn::IConnectableLayer* layer, - const armnn::PadDescriptor& descriptor, - const char* name) override - { - VerifyNameAndConnections(layer, name); - VerifyDescriptor(descriptor); - } +private: + void VerifyDescriptor(const armnn::PadDescriptor& descriptor) + { + BOOST_TEST(descriptor.m_PadList == m_Descriptor.m_PadList); + } - private: - void VerifyDescriptor(const armnn::PadDescriptor& descriptor) - { - BOOST_TEST(descriptor.m_PadList == m_Descriptor.m_PadList); - } + armnn::PadDescriptor m_Descriptor; +}; - armnn::PadDescriptor m_Descriptor; - }; +BOOST_AUTO_TEST_CASE(SerializePad) +{ const std::string layerName("pad"); const armnn::TensorInfo inputTensorInfo = armnn::TensorInfo({1, 2, 3, 4}, armnn::DataType::Float32); @@ -1744,6 +1744,63 @@ BOOST_AUTO_TEST_CASE(SerializePad) deserializedNetwork->Accept(verifier); } +BOOST_AUTO_TEST_CASE(CheckSerializePadBackwardCompatibility) +{ + // The PadDescriptor is being extended with a float PadValue (so a value other than 0 + // can be used to pad the tensor. + // + // This test contains a binary representation of a simple input->pad->output network + // prior to this change to test that the descriptor has been updated in a backward + // compatible way with respect to Deserialization of older binary dumps + unsigned int size = 532; + const unsigned char padModel[] = { + 0x10,0x00,0x00,0x00,0x00,0x00,0x0A,0x00,0x10,0x00,0x04,0x00,0x08,0x00,0x0C,0x00,0x0A,0x00,0x00,0x00, + 0x0C,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x54,0x01,0x00,0x00, + 0x6C,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, + 0x02,0x00,0x00,0x00,0xD0,0xFE,0xFF,0xFF,0x00,0x00,0x00,0x0B,0x04,0x00,0x00,0x00,0x96,0xFF,0xFF,0xFF, + 0x04,0x00,0x00,0x00,0x9E,0xFF,0xFF,0xFF,0x04,0x00,0x00,0x00,0x72,0xFF,0xFF,0xFF,0x02,0x00,0x00,0x00, + 0x10,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2C,0xFF,0xFF,0xFF, + 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x24,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x16,0x0C,0x00,0x00,0x00, + 0x08,0x00,0x0E,0x00,0x04,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x4C,0x00,0x00,0x00,0x0C,0x00,0x00,0x00, + 0x00,0x00,0x06,0x00,0x08,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x08,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, + 0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x18,0x00,0x04,0x00, + 0x08,0x00,0x0C,0x00,0x10,0x00,0x14,0x00,0x0E,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x10,0x00,0x00,0x00, + 0x14,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x70,0x61,0x64,0x00, + 0x01,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x08,0x00,0x08,0x00, + 0x00,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x52,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x01, + 0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00, + 0x05,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x08,0x00,0x0C,0x00,0x00,0x00,0x04,0x00,0x08,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x0C,0x00,0x07,0x00,0x08,0x00,0x08,0x00,0x00,0x00, + 0x00,0x00,0x00,0x09,0x04,0x00,0x00,0x00,0xF6,0xFF,0xFF,0xFF,0x0C,0x00,0x00,0x00,0x00,0x00,0x06,0x00, + 0x0A,0x00,0x04,0x00,0x06,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x14,0x00,0x00,0x00, + 0x04,0x00,0x08,0x00,0x0C,0x00,0x10,0x00,0x0E,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00, + 0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x01,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x08,0x00,0x0A,0x00,0x00,0x00,0x04,0x00,0x08,0x00,0x00,0x00, + 0x10,0x00,0x00,0x00,0x00,0x00,0x0A,0x00,0x10,0x00,0x08,0x00,0x07,0x00,0x0C,0x00,0x0A,0x00,0x00,0x00, + 0x00,0x00,0x00,0x01,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x00,0x00, + 0x02,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0 }; + + std::stringstream ss; + for (unsigned int i = 0; i < size; ++i) + { + ss << padModel[i]; + } + std::string padNetwork = ss.str(); + armnn::INetworkPtr deserializedNetwork = DeserializeNetwork(padNetwork); + BOOST_CHECK(deserializedNetwork); + + const std::string layerName("pad"); + const armnn::TensorInfo inputTensorInfo = armnn::TensorInfo({1, 2, 3, 4}, armnn::DataType::Float32); + const armnn::TensorInfo outputTensorInfo = armnn::TensorInfo({1, 3, 5, 7}, armnn::DataType::Float32); + + armnn::PadDescriptor desc({{0, 0}, {1, 0}, {1, 1}, {1, 2}}); + + PadLayerVerifier verifier(layerName, {inputTensorInfo}, {outputTensorInfo}, desc); + deserializedNetwork->Accept(verifier); +} + BOOST_AUTO_TEST_CASE(SerializePermute) { class PermuteLayerVerifier : public LayerVerifierBase -- cgit v1.2.1