1*89c4ff92SAndroid Build Coastguard Worker // 2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2022 Arm Ltd and Contributors. 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 "ParserFlatbuffersFixture.hpp" 7*89c4ff92SAndroid Build Coastguard Worker 8*89c4ff92SAndroid Build Coastguard Worker 9*89c4ff92SAndroid Build Coastguard Worker TEST_SUITE("TensorflowLiteParser_Pad") 10*89c4ff92SAndroid Build Coastguard Worker { 11*89c4ff92SAndroid Build Coastguard Worker struct PadV2Fixture : public ParserFlatbuffersFixture 12*89c4ff92SAndroid Build Coastguard Worker { PadV2FixturePadV2Fixture13*89c4ff92SAndroid Build Coastguard Worker explicit PadV2Fixture(const std::string& inputShape, 14*89c4ff92SAndroid Build Coastguard Worker const std::string& outputShape, 15*89c4ff92SAndroid Build Coastguard Worker const std::string& padListShape, 16*89c4ff92SAndroid Build Coastguard Worker const std::string& padListData, 17*89c4ff92SAndroid Build Coastguard Worker const std::string& constantValuesShape, 18*89c4ff92SAndroid Build Coastguard Worker const std::string& constantValuesData, 19*89c4ff92SAndroid Build Coastguard Worker const std::string& dataType = "FLOAT32", 20*89c4ff92SAndroid Build Coastguard Worker const std::string& scale = "1.0", 21*89c4ff92SAndroid Build Coastguard Worker const std::string& offset = "0") 22*89c4ff92SAndroid Build Coastguard Worker { 23*89c4ff92SAndroid Build Coastguard Worker m_JsonString = R"( 24*89c4ff92SAndroid Build Coastguard Worker { 25*89c4ff92SAndroid Build Coastguard Worker "version": 3, 26*89c4ff92SAndroid Build Coastguard Worker "operator_codes": [ { "builtin_code": "PADV2" } ], 27*89c4ff92SAndroid Build Coastguard Worker "subgraphs": [ { 28*89c4ff92SAndroid Build Coastguard Worker "tensors": [ 29*89c4ff92SAndroid Build Coastguard Worker { 30*89c4ff92SAndroid Build Coastguard Worker "shape": )" + inputShape + R"(, 31*89c4ff92SAndroid Build Coastguard Worker "type": )" + dataType + R"(, 32*89c4ff92SAndroid Build Coastguard Worker "buffer": 0, 33*89c4ff92SAndroid Build Coastguard Worker "name": "inputTensor", 34*89c4ff92SAndroid Build Coastguard Worker "quantization": { 35*89c4ff92SAndroid Build Coastguard Worker "min": [ 0.0 ], 36*89c4ff92SAndroid Build Coastguard Worker "max": [ 255.0 ], 37*89c4ff92SAndroid Build Coastguard Worker "scale": [ )" + scale + R"( ], 38*89c4ff92SAndroid Build Coastguard Worker "zero_point": [ )" + offset + R"( ], 39*89c4ff92SAndroid Build Coastguard Worker } 40*89c4ff92SAndroid Build Coastguard Worker }, 41*89c4ff92SAndroid Build Coastguard Worker { 42*89c4ff92SAndroid Build Coastguard Worker "shape": )" + outputShape + R"(, 43*89c4ff92SAndroid Build Coastguard Worker "type": )" + dataType + R"(, 44*89c4ff92SAndroid Build Coastguard Worker "buffer": 1, 45*89c4ff92SAndroid Build Coastguard Worker "name": "outputTensor", 46*89c4ff92SAndroid Build Coastguard Worker "quantization": { 47*89c4ff92SAndroid Build Coastguard Worker "min": [ 0.0 ], 48*89c4ff92SAndroid Build Coastguard Worker "max": [ 255.0 ], 49*89c4ff92SAndroid Build Coastguard Worker "scale": [ )" + scale + R"( ], 50*89c4ff92SAndroid Build Coastguard Worker "zero_point": [ )" + offset + R"( ], 51*89c4ff92SAndroid Build Coastguard Worker } 52*89c4ff92SAndroid Build Coastguard Worker }, 53*89c4ff92SAndroid Build Coastguard Worker { 54*89c4ff92SAndroid Build Coastguard Worker "shape": )" + padListShape + R"( , 55*89c4ff92SAndroid Build Coastguard Worker "type": "INT64", 56*89c4ff92SAndroid Build Coastguard Worker "buffer": 2, 57*89c4ff92SAndroid Build Coastguard Worker "name": "padList", 58*89c4ff92SAndroid Build Coastguard Worker "quantization": { 59*89c4ff92SAndroid Build Coastguard Worker "min": [ 0.0 ], 60*89c4ff92SAndroid Build Coastguard Worker "max": [ 255.0 ], 61*89c4ff92SAndroid Build Coastguard Worker "scale": [ 1.0 ], 62*89c4ff92SAndroid Build Coastguard Worker "zero_point": [ 0 ], 63*89c4ff92SAndroid Build Coastguard Worker } 64*89c4ff92SAndroid Build Coastguard Worker }, 65*89c4ff92SAndroid Build Coastguard Worker { 66*89c4ff92SAndroid Build Coastguard Worker "shape": )" + constantValuesShape + R"( , 67*89c4ff92SAndroid Build Coastguard Worker "type": )" + dataType + R"(, 68*89c4ff92SAndroid Build Coastguard Worker "buffer": 3, 69*89c4ff92SAndroid Build Coastguard Worker "name": "constantValues", 70*89c4ff92SAndroid Build Coastguard Worker "quantization": { 71*89c4ff92SAndroid Build Coastguard Worker "min": [ 0.0 ], 72*89c4ff92SAndroid Build Coastguard Worker "max": [ 255.0 ], 73*89c4ff92SAndroid Build Coastguard Worker "scale": [ 1.0 ], 74*89c4ff92SAndroid Build Coastguard Worker "zero_point": [ 0 ], 75*89c4ff92SAndroid Build Coastguard Worker } 76*89c4ff92SAndroid Build Coastguard Worker } 77*89c4ff92SAndroid Build Coastguard Worker ], 78*89c4ff92SAndroid Build Coastguard Worker "inputs": [ 0 ], 79*89c4ff92SAndroid Build Coastguard Worker "outputs": [ 1 ], 80*89c4ff92SAndroid Build Coastguard Worker "operators": [ 81*89c4ff92SAndroid Build Coastguard Worker { 82*89c4ff92SAndroid Build Coastguard Worker "opcode_index": 0, 83*89c4ff92SAndroid Build Coastguard Worker "inputs": [ 0, 2, 3 ], 84*89c4ff92SAndroid Build Coastguard Worker "outputs": [ 1 ], 85*89c4ff92SAndroid Build Coastguard Worker "custom_options_format": "FLEXBUFFERS" 86*89c4ff92SAndroid Build Coastguard Worker } 87*89c4ff92SAndroid Build Coastguard Worker ], 88*89c4ff92SAndroid Build Coastguard Worker } ], 89*89c4ff92SAndroid Build Coastguard Worker "buffers" : [ 90*89c4ff92SAndroid Build Coastguard Worker { }, 91*89c4ff92SAndroid Build Coastguard Worker { }, 92*89c4ff92SAndroid Build Coastguard Worker { "data": )" + padListData + R"(, }, 93*89c4ff92SAndroid Build Coastguard Worker { "data": )" + constantValuesData + R"(, }, 94*89c4ff92SAndroid Build Coastguard Worker ] 95*89c4ff92SAndroid Build Coastguard Worker } 96*89c4ff92SAndroid Build Coastguard Worker )"; 97*89c4ff92SAndroid Build Coastguard Worker SetupSingleInputSingleOutput("inputTensor", "outputTensor"); 98*89c4ff92SAndroid Build Coastguard Worker } 99*89c4ff92SAndroid Build Coastguard Worker }; 100*89c4ff92SAndroid Build Coastguard Worker 101*89c4ff92SAndroid Build Coastguard Worker struct SimplePadV2Fixture : public PadV2Fixture 102*89c4ff92SAndroid Build Coastguard Worker { SimplePadV2FixtureSimplePadV2Fixture103*89c4ff92SAndroid Build Coastguard Worker SimplePadV2Fixture() : PadV2Fixture("[ 2,3 ]", "[ 4,7 ]", "[ 2,2 ]", 104*89c4ff92SAndroid Build Coastguard Worker "[ 1,0,0,0,0,0,0,0, 1,0,0,0,0,0,0,0, 2,0,0,0,0,0,0,0, 2,0,0,0,0,0,0,0 ]", 105*89c4ff92SAndroid Build Coastguard Worker "[1]", "[0,0,160,64]") {} 106*89c4ff92SAndroid Build Coastguard Worker }; 107*89c4ff92SAndroid Build Coastguard Worker 108*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(SimplePadV2Fixture, "ParsePadV2") 109*89c4ff92SAndroid Build Coastguard Worker { 110*89c4ff92SAndroid Build Coastguard Worker RunTest<2, armnn::DataType::Float32> 111*89c4ff92SAndroid Build Coastguard Worker (0, 112*89c4ff92SAndroid Build Coastguard Worker {{ "inputTensor", { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f }}}, 113*89c4ff92SAndroid Build Coastguard Worker {{ "outputTensor", { 5.0f, 5.0f, 5.0f, 5.0f, 5.0f, 5.0f, 5.0f, 114*89c4ff92SAndroid Build Coastguard Worker 5.0f, 5.0f, 1.0f, 2.0f, 3.0f, 5.0f, 5.0f, 115*89c4ff92SAndroid Build Coastguard Worker 5.0f, 5.0f, 4.0f, 5.0f, 6.0f, 5.0f, 5.0f, 116*89c4ff92SAndroid Build Coastguard Worker 5.0f, 5.0f, 5.0f, 5.0f, 5.0f, 5.0f, 5.0f }}}); 117*89c4ff92SAndroid Build Coastguard Worker } 118*89c4ff92SAndroid Build Coastguard Worker 119*89c4ff92SAndroid Build Coastguard Worker struct NoConstValuePadV2Fixture : public PadV2Fixture 120*89c4ff92SAndroid Build Coastguard Worker { NoConstValuePadV2FixtureNoConstValuePadV2Fixture121*89c4ff92SAndroid Build Coastguard Worker NoConstValuePadV2Fixture() : PadV2Fixture("[ 2,3 ]", "[ 4,7 ]", "[ 2,2 ]", 122*89c4ff92SAndroid Build Coastguard Worker "[ 1,0,0,0,0,0,0,0, 1,0,0,0,0,0,0,0, 2,0,0,0,0,0,0,0, 2,0,0,0,0,0,0,0 ]", 123*89c4ff92SAndroid Build Coastguard Worker "[]", "[]") {} 124*89c4ff92SAndroid Build Coastguard Worker }; 125*89c4ff92SAndroid Build Coastguard Worker 126*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(NoConstValuePadV2Fixture, "ParsePadV2NoConstValue") 127*89c4ff92SAndroid Build Coastguard Worker { 128*89c4ff92SAndroid Build Coastguard Worker RunTest<2, armnn::DataType::Float32> 129*89c4ff92SAndroid Build Coastguard Worker (0, 130*89c4ff92SAndroid Build Coastguard Worker {{ "inputTensor", { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f }}}, 131*89c4ff92SAndroid Build Coastguard Worker {{ "outputTensor", { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, .0f, 132*89c4ff92SAndroid Build Coastguard Worker 0.0f, 0.0f, 1.0f, 2.0f, 3.0f, 0.0f, 0.0f, 133*89c4ff92SAndroid Build Coastguard Worker 0.0f, 0.0f, 4.0f, 5.0f, 6.0f, 0.0f, 0.0f, 134*89c4ff92SAndroid Build Coastguard Worker 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }}}); 135*89c4ff92SAndroid Build Coastguard Worker } 136*89c4ff92SAndroid Build Coastguard Worker 137*89c4ff92SAndroid Build Coastguard Worker struct Uint8PadV2Fixture : public PadV2Fixture 138*89c4ff92SAndroid Build Coastguard Worker { Uint8PadV2FixtureUint8PadV2Fixture139*89c4ff92SAndroid Build Coastguard Worker Uint8PadV2Fixture() : PadV2Fixture("[ 2,3 ]", "[ 4,7 ]", "[ 2,2 ]", 140*89c4ff92SAndroid Build Coastguard Worker "[ 1,0,0,0,0,0,0,0, 1,0,0,0,0,0,0,0, 2,0,0,0,0,0,0,0, 2,0,0,0,0,0,0,0 ]", 141*89c4ff92SAndroid Build Coastguard Worker "[1]", "[1]","UINT8", "-2.0", "3") {} 142*89c4ff92SAndroid Build Coastguard Worker }; 143*89c4ff92SAndroid Build Coastguard Worker 144*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(Uint8PadV2Fixture, "ParsePadV2Uint8") 145*89c4ff92SAndroid Build Coastguard Worker { 146*89c4ff92SAndroid Build Coastguard Worker RunTest<2, armnn::DataType::QAsymmU8> 147*89c4ff92SAndroid Build Coastguard Worker (0, 148*89c4ff92SAndroid Build Coastguard Worker {{ "inputTensor", { 1, 2, 3, 4, 5, 6 }}}, 149*89c4ff92SAndroid Build Coastguard Worker {{ "outputTensor", { 1, 1, 1, 1, 1, 1, 1, 150*89c4ff92SAndroid Build Coastguard Worker 1, 1, 1, 2, 3, 1, 1, 151*89c4ff92SAndroid Build Coastguard Worker 1, 1, 4, 5, 6, 1, 1, 152*89c4ff92SAndroid Build Coastguard Worker 1, 1, 1, 1, 1, 1, 1 }}}); 153*89c4ff92SAndroid Build Coastguard Worker } 154*89c4ff92SAndroid Build Coastguard Worker 155*89c4ff92SAndroid Build Coastguard Worker struct Int8PadV2Fixture : public PadV2Fixture 156*89c4ff92SAndroid Build Coastguard Worker { Int8PadV2FixtureInt8PadV2Fixture157*89c4ff92SAndroid Build Coastguard Worker Int8PadV2Fixture() : PadV2Fixture("[ 2,3 ]", "[ 4,7 ]", "[ 2,2 ]", 158*89c4ff92SAndroid Build Coastguard Worker "[ 1,0,0,0,0,0,0,0, 1,0,0,0,0,0,0,0, 2,0,0,0,0,0,0,0, 2,0,0,0,0,0,0,0 ]", 159*89c4ff92SAndroid Build Coastguard Worker "[1]", "[2]","INT8", "-2.0", "3") {} 160*89c4ff92SAndroid Build Coastguard Worker }; 161*89c4ff92SAndroid Build Coastguard Worker 162*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(Int8PadV2Fixture, "ParsePadV2Int8") 163*89c4ff92SAndroid Build Coastguard Worker { 164*89c4ff92SAndroid Build Coastguard Worker RunTest<2, armnn::DataType::QAsymmS8> 165*89c4ff92SAndroid Build Coastguard Worker (0, 166*89c4ff92SAndroid Build Coastguard Worker {{ "inputTensor", { 1, -2, 3, 4, 5, -6 }}}, 167*89c4ff92SAndroid Build Coastguard Worker {{ "outputTensor", { 2, 2, 2, 2, 2, 2, 2, 168*89c4ff92SAndroid Build Coastguard Worker 2, 2, 1, -2, 3, 2, 2, 169*89c4ff92SAndroid Build Coastguard Worker 2, 2, 4, 5, -6, 2, 2, 170*89c4ff92SAndroid Build Coastguard Worker 2, 2, 2, 2, 2, 2, 2 }}}); 171*89c4ff92SAndroid Build Coastguard Worker } 172*89c4ff92SAndroid Build Coastguard Worker 173*89c4ff92SAndroid Build Coastguard Worker } 174