1*89c4ff92SAndroid Build Coastguard Worker // 2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2017 Arm Ltd. All rights reserved. 3*89c4ff92SAndroid Build Coastguard Worker // SPDX-License-Identifier: MIT 4*89c4ff92SAndroid Build Coastguard Worker // 5*89c4ff92SAndroid Build Coastguard Worker 6*89c4ff92SAndroid Build Coastguard Worker #include "ParserFlatbuffersSerializeFixture.hpp" 7*89c4ff92SAndroid Build Coastguard Worker #include <armnnDeserializer/IDeserializer.hpp> 8*89c4ff92SAndroid Build Coastguard Worker 9*89c4ff92SAndroid Build Coastguard Worker #include <string> 10*89c4ff92SAndroid Build Coastguard Worker 11*89c4ff92SAndroid Build Coastguard Worker TEST_SUITE("Deserializer_Pad") 12*89c4ff92SAndroid Build Coastguard Worker { 13*89c4ff92SAndroid Build Coastguard Worker struct PadFixture : public ParserFlatbuffersSerializeFixture 14*89c4ff92SAndroid Build Coastguard Worker { PadFixturePadFixture15*89c4ff92SAndroid Build Coastguard Worker explicit PadFixture(const std::string& inputShape, 16*89c4ff92SAndroid Build Coastguard Worker const std::string& padList, 17*89c4ff92SAndroid Build Coastguard Worker const std::string& outputShape, 18*89c4ff92SAndroid Build Coastguard Worker const std::string& dataType, 19*89c4ff92SAndroid Build Coastguard Worker const std::string& paddingMode) 20*89c4ff92SAndroid Build Coastguard Worker { 21*89c4ff92SAndroid Build Coastguard Worker m_JsonString = R"( 22*89c4ff92SAndroid Build Coastguard Worker { 23*89c4ff92SAndroid Build Coastguard Worker inputIds: [0], 24*89c4ff92SAndroid Build Coastguard Worker outputIds: [2], 25*89c4ff92SAndroid Build Coastguard Worker layers: [ 26*89c4ff92SAndroid Build Coastguard Worker { 27*89c4ff92SAndroid Build Coastguard Worker layer_type: "InputLayer", 28*89c4ff92SAndroid Build Coastguard Worker layer: { 29*89c4ff92SAndroid Build Coastguard Worker base: { 30*89c4ff92SAndroid Build Coastguard Worker layerBindingId: 0, 31*89c4ff92SAndroid Build Coastguard Worker base: { 32*89c4ff92SAndroid Build Coastguard Worker index: 0, 33*89c4ff92SAndroid Build Coastguard Worker layerName: "InputLayer", 34*89c4ff92SAndroid Build Coastguard Worker layerType: "Input", 35*89c4ff92SAndroid Build Coastguard Worker inputSlots: [{ 36*89c4ff92SAndroid Build Coastguard Worker index: 0, 37*89c4ff92SAndroid Build Coastguard Worker connection: {sourceLayerIndex:0, outputSlotIndex:0 }, 38*89c4ff92SAndroid Build Coastguard Worker }], 39*89c4ff92SAndroid Build Coastguard Worker outputSlots: [{ 40*89c4ff92SAndroid Build Coastguard Worker index: 0, 41*89c4ff92SAndroid Build Coastguard Worker tensorInfo: { 42*89c4ff92SAndroid Build Coastguard Worker dimensions: )" + inputShape + R"(, 43*89c4ff92SAndroid Build Coastguard Worker dataType: )" + dataType + R"( 44*89c4ff92SAndroid Build Coastguard Worker } 45*89c4ff92SAndroid Build Coastguard Worker }] 46*89c4ff92SAndroid Build Coastguard Worker } 47*89c4ff92SAndroid Build Coastguard Worker } 48*89c4ff92SAndroid Build Coastguard Worker } 49*89c4ff92SAndroid Build Coastguard Worker }, 50*89c4ff92SAndroid Build Coastguard Worker { 51*89c4ff92SAndroid Build Coastguard Worker layer_type: "PadLayer", 52*89c4ff92SAndroid Build Coastguard Worker layer: { 53*89c4ff92SAndroid Build Coastguard Worker base: { 54*89c4ff92SAndroid Build Coastguard Worker index: 1, 55*89c4ff92SAndroid Build Coastguard Worker layerName: "PadLayer", 56*89c4ff92SAndroid Build Coastguard Worker layerType: "Pad", 57*89c4ff92SAndroid Build Coastguard Worker inputSlots: [{ 58*89c4ff92SAndroid Build Coastguard Worker index: 0, 59*89c4ff92SAndroid Build Coastguard Worker connection: {sourceLayerIndex:0, outputSlotIndex:0 }, 60*89c4ff92SAndroid Build Coastguard Worker }], 61*89c4ff92SAndroid Build Coastguard Worker outputSlots: [{ 62*89c4ff92SAndroid Build Coastguard Worker index: 0, 63*89c4ff92SAndroid Build Coastguard Worker tensorInfo: { 64*89c4ff92SAndroid Build Coastguard Worker dimensions: )" + outputShape + R"(, 65*89c4ff92SAndroid Build Coastguard Worker dataType: )" + dataType + R"( 66*89c4ff92SAndroid Build Coastguard Worker } 67*89c4ff92SAndroid Build Coastguard Worker }] 68*89c4ff92SAndroid Build Coastguard Worker }, 69*89c4ff92SAndroid Build Coastguard Worker descriptor: { 70*89c4ff92SAndroid Build Coastguard Worker padList: )" + padList + R"(, 71*89c4ff92SAndroid Build Coastguard Worker paddingMode: )" + paddingMode + R"(, 72*89c4ff92SAndroid Build Coastguard Worker } 73*89c4ff92SAndroid Build Coastguard Worker } 74*89c4ff92SAndroid Build Coastguard Worker }, 75*89c4ff92SAndroid Build Coastguard Worker { 76*89c4ff92SAndroid Build Coastguard Worker layer_type: "OutputLayer", 77*89c4ff92SAndroid Build Coastguard Worker layer: { 78*89c4ff92SAndroid Build Coastguard Worker base:{ 79*89c4ff92SAndroid Build Coastguard Worker layerBindingId: 2, 80*89c4ff92SAndroid Build Coastguard Worker base: { 81*89c4ff92SAndroid Build Coastguard Worker index: 2, 82*89c4ff92SAndroid Build Coastguard Worker layerName: "OutputLayer", 83*89c4ff92SAndroid Build Coastguard Worker layerType: "Output", 84*89c4ff92SAndroid Build Coastguard Worker inputSlots: [{ 85*89c4ff92SAndroid Build Coastguard Worker index: 0, 86*89c4ff92SAndroid Build Coastguard Worker connection: {sourceLayerIndex:1, outputSlotIndex:0 }, 87*89c4ff92SAndroid Build Coastguard Worker }], 88*89c4ff92SAndroid Build Coastguard Worker outputSlots: [{ 89*89c4ff92SAndroid Build Coastguard Worker index: 0, 90*89c4ff92SAndroid Build Coastguard Worker tensorInfo: { 91*89c4ff92SAndroid Build Coastguard Worker dimensions: )" + outputShape + R"(, 92*89c4ff92SAndroid Build Coastguard Worker dataType: )" + dataType + R"( 93*89c4ff92SAndroid Build Coastguard Worker }, 94*89c4ff92SAndroid Build Coastguard Worker }], 95*89c4ff92SAndroid Build Coastguard Worker } 96*89c4ff92SAndroid Build Coastguard Worker } 97*89c4ff92SAndroid Build Coastguard Worker }, 98*89c4ff92SAndroid Build Coastguard Worker } 99*89c4ff92SAndroid Build Coastguard Worker ] 100*89c4ff92SAndroid Build Coastguard Worker } 101*89c4ff92SAndroid Build Coastguard Worker )"; 102*89c4ff92SAndroid Build Coastguard Worker SetupSingleInputSingleOutput("InputLayer", "OutputLayer"); 103*89c4ff92SAndroid Build Coastguard Worker } 104*89c4ff92SAndroid Build Coastguard Worker }; 105*89c4ff92SAndroid Build Coastguard Worker 106*89c4ff92SAndroid Build Coastguard Worker struct SimplePadFixture : PadFixture 107*89c4ff92SAndroid Build Coastguard Worker { SimplePadFixtureSimplePadFixture108*89c4ff92SAndroid Build Coastguard Worker SimplePadFixture() : PadFixture("[ 2, 2, 2 ]", 109*89c4ff92SAndroid Build Coastguard Worker "[ 0, 1, 2, 1, 2, 2 ]", 110*89c4ff92SAndroid Build Coastguard Worker "[ 3, 5, 6 ]", 111*89c4ff92SAndroid Build Coastguard Worker "QuantisedAsymm8", 112*89c4ff92SAndroid Build Coastguard Worker "Constant") {} 113*89c4ff92SAndroid Build Coastguard Worker }; 114*89c4ff92SAndroid Build Coastguard Worker 115*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(SimplePadFixture, "SimplePadQuantisedAsymm8") 116*89c4ff92SAndroid Build Coastguard Worker { 117*89c4ff92SAndroid Build Coastguard Worker RunTest<3, armnn::DataType::QAsymmU8>(0, 118*89c4ff92SAndroid Build Coastguard Worker { 119*89c4ff92SAndroid Build Coastguard Worker 0, 4, 2, 5, 6, 1, 5, 2 120*89c4ff92SAndroid Build Coastguard Worker }, 121*89c4ff92SAndroid Build Coastguard Worker { 122*89c4ff92SAndroid Build Coastguard Worker 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123*89c4ff92SAndroid Build Coastguard Worker 4, 0, 0, 0, 0, 2, 5, 0, 0, 0, 0, 0, 0, 0, 0, 124*89c4ff92SAndroid Build Coastguard Worker 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 125*89c4ff92SAndroid Build Coastguard Worker 1, 0, 0, 0, 0, 5, 2, 0, 0, 0, 0, 0, 0, 0, 0, 126*89c4ff92SAndroid Build Coastguard Worker 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127*89c4ff92SAndroid Build Coastguard Worker 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 128*89c4ff92SAndroid Build Coastguard Worker }); 129*89c4ff92SAndroid Build Coastguard Worker } 130*89c4ff92SAndroid Build Coastguard Worker 131*89c4ff92SAndroid Build Coastguard Worker struct SimplePadSymmetricFixture : PadFixture 132*89c4ff92SAndroid Build Coastguard Worker { SimplePadSymmetricFixtureSimplePadSymmetricFixture133*89c4ff92SAndroid Build Coastguard Worker SimplePadSymmetricFixture() : PadFixture("[ 2, 2, 2 ]", 134*89c4ff92SAndroid Build Coastguard Worker "[ 1, 1, 1, 1, 1, 1 ]", 135*89c4ff92SAndroid Build Coastguard Worker "[ 4, 4, 4 ]", 136*89c4ff92SAndroid Build Coastguard Worker "QuantisedAsymm8", 137*89c4ff92SAndroid Build Coastguard Worker "Symmetric") {} 138*89c4ff92SAndroid Build Coastguard Worker }; 139*89c4ff92SAndroid Build Coastguard Worker 140*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(SimplePadSymmetricFixture, "SimplePadSymmetricQuantisedAsymm8") 141*89c4ff92SAndroid Build Coastguard Worker { 142*89c4ff92SAndroid Build Coastguard Worker RunTest<3, armnn::DataType::QAsymmU8>(0, 143*89c4ff92SAndroid Build Coastguard Worker { 144*89c4ff92SAndroid Build Coastguard Worker 1, 2, 145*89c4ff92SAndroid Build Coastguard Worker 3, 4, 146*89c4ff92SAndroid Build Coastguard Worker 147*89c4ff92SAndroid Build Coastguard Worker 5, 6, 148*89c4ff92SAndroid Build Coastguard Worker 7, 8 149*89c4ff92SAndroid Build Coastguard Worker }, 150*89c4ff92SAndroid Build Coastguard Worker { 151*89c4ff92SAndroid Build Coastguard Worker 1, 1, 2, 2, 152*89c4ff92SAndroid Build Coastguard Worker 1, 1, 2, 2, 153*89c4ff92SAndroid Build Coastguard Worker 3, 3, 4, 4, 154*89c4ff92SAndroid Build Coastguard Worker 3, 3, 4, 4, 155*89c4ff92SAndroid Build Coastguard Worker 156*89c4ff92SAndroid Build Coastguard Worker 1, 1, 2, 2, 157*89c4ff92SAndroid Build Coastguard Worker 1, 1, 2, 2, 158*89c4ff92SAndroid Build Coastguard Worker 3, 3, 4, 4, 159*89c4ff92SAndroid Build Coastguard Worker 3, 3, 4, 4, 160*89c4ff92SAndroid Build Coastguard Worker 161*89c4ff92SAndroid Build Coastguard Worker 5, 5, 6, 6, 162*89c4ff92SAndroid Build Coastguard Worker 5, 5, 6, 6, 163*89c4ff92SAndroid Build Coastguard Worker 7, 7, 8, 8, 164*89c4ff92SAndroid Build Coastguard Worker 7, 7, 8, 8, 165*89c4ff92SAndroid Build Coastguard Worker 166*89c4ff92SAndroid Build Coastguard Worker 5, 5, 6, 6, 167*89c4ff92SAndroid Build Coastguard Worker 5, 5, 6, 6, 168*89c4ff92SAndroid Build Coastguard Worker 7, 7, 8, 8, 169*89c4ff92SAndroid Build Coastguard Worker 7, 7, 8, 8 170*89c4ff92SAndroid Build Coastguard Worker }); 171*89c4ff92SAndroid Build Coastguard Worker } 172*89c4ff92SAndroid Build Coastguard Worker 173*89c4ff92SAndroid Build Coastguard Worker struct SimplePadReflectFixture : PadFixture 174*89c4ff92SAndroid Build Coastguard Worker { SimplePadReflectFixtureSimplePadReflectFixture175*89c4ff92SAndroid Build Coastguard Worker SimplePadReflectFixture() : PadFixture("[ 2, 2, 2 ]", 176*89c4ff92SAndroid Build Coastguard Worker "[ 1, 1, 1, 1, 1, 1 ]", 177*89c4ff92SAndroid Build Coastguard Worker "[ 4, 4, 4 ]", 178*89c4ff92SAndroid Build Coastguard Worker "QuantisedAsymm8", 179*89c4ff92SAndroid Build Coastguard Worker "Reflect") {} 180*89c4ff92SAndroid Build Coastguard Worker }; 181*89c4ff92SAndroid Build Coastguard Worker 182*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(SimplePadReflectFixture, "SimplePadReflectQuantisedAsymm8") 183*89c4ff92SAndroid Build Coastguard Worker { 184*89c4ff92SAndroid Build Coastguard Worker RunTest<3, armnn::DataType::QAsymmU8>(0, 185*89c4ff92SAndroid Build Coastguard Worker { 186*89c4ff92SAndroid Build Coastguard Worker 1, 2, 187*89c4ff92SAndroid Build Coastguard Worker 3, 4, 188*89c4ff92SAndroid Build Coastguard Worker 189*89c4ff92SAndroid Build Coastguard Worker 5, 6, 190*89c4ff92SAndroid Build Coastguard Worker 7, 8 191*89c4ff92SAndroid Build Coastguard Worker }, 192*89c4ff92SAndroid Build Coastguard Worker { 193*89c4ff92SAndroid Build Coastguard Worker 8, 7, 8, 7, 194*89c4ff92SAndroid Build Coastguard Worker 6, 5, 6, 5, 195*89c4ff92SAndroid Build Coastguard Worker 8, 7, 8, 7, 196*89c4ff92SAndroid Build Coastguard Worker 6, 5, 6, 5, 197*89c4ff92SAndroid Build Coastguard Worker 198*89c4ff92SAndroid Build Coastguard Worker 4, 3, 4, 3, 199*89c4ff92SAndroid Build Coastguard Worker 2, 1, 2, 1, 200*89c4ff92SAndroid Build Coastguard Worker 4, 3, 4, 3, 201*89c4ff92SAndroid Build Coastguard Worker 2, 1, 2, 1, 202*89c4ff92SAndroid Build Coastguard Worker 203*89c4ff92SAndroid Build Coastguard Worker 8, 7, 8, 7, 204*89c4ff92SAndroid Build Coastguard Worker 6, 5, 6, 5, 205*89c4ff92SAndroid Build Coastguard Worker 8, 7, 8, 7, 206*89c4ff92SAndroid Build Coastguard Worker 6, 5, 6, 5, 207*89c4ff92SAndroid Build Coastguard Worker 208*89c4ff92SAndroid Build Coastguard Worker 4, 3, 4, 3, 209*89c4ff92SAndroid Build Coastguard Worker 2, 1, 2, 1, 210*89c4ff92SAndroid Build Coastguard Worker 4, 3, 4, 3, 211*89c4ff92SAndroid Build Coastguard Worker 2, 1, 2, 1 212*89c4ff92SAndroid Build Coastguard Worker }); 213*89c4ff92SAndroid Build Coastguard Worker } 214*89c4ff92SAndroid Build Coastguard Worker 215*89c4ff92SAndroid Build Coastguard Worker } 216