1*89c4ff92SAndroid Build Coastguard Worker // 2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2020 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") 10*89c4ff92SAndroid Build Coastguard Worker { 11*89c4ff92SAndroid Build Coastguard Worker struct SplitVFixture : public ParserFlatbuffersFixture 12*89c4ff92SAndroid Build Coastguard Worker { SplitVFixtureSplitVFixture13*89c4ff92SAndroid Build Coastguard Worker explicit SplitVFixture(const std::string& inputShape, 14*89c4ff92SAndroid Build Coastguard Worker const std::string& splitValues, 15*89c4ff92SAndroid Build Coastguard Worker const std::string& sizeSplitsShape, 16*89c4ff92SAndroid Build Coastguard Worker const std::string& axisShape, 17*89c4ff92SAndroid Build Coastguard Worker const std::string& numSplits, 18*89c4ff92SAndroid Build Coastguard Worker const std::string& outputShape1, 19*89c4ff92SAndroid Build Coastguard Worker const std::string& outputShape2, 20*89c4ff92SAndroid Build Coastguard Worker const std::string& axisData, 21*89c4ff92SAndroid Build Coastguard Worker const std::string& dataType) 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": "SPLIT_V" } ], 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": [ 1.0 ], 38*89c4ff92SAndroid Build Coastguard Worker "zero_point": [ 0 ], 39*89c4ff92SAndroid Build Coastguard Worker } 40*89c4ff92SAndroid Build Coastguard Worker }, 41*89c4ff92SAndroid Build Coastguard Worker { 42*89c4ff92SAndroid Build Coastguard Worker "shape": )" + sizeSplitsShape + R"(, 43*89c4ff92SAndroid Build Coastguard Worker "type": "INT32", 44*89c4ff92SAndroid Build Coastguard Worker "buffer": 1, 45*89c4ff92SAndroid Build Coastguard Worker "name": "sizeSplits", 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": [ 1.0 ], 50*89c4ff92SAndroid Build Coastguard Worker "zero_point": [ 0 ], 51*89c4ff92SAndroid Build Coastguard Worker } 52*89c4ff92SAndroid Build Coastguard Worker }, 53*89c4ff92SAndroid Build Coastguard Worker { 54*89c4ff92SAndroid Build Coastguard Worker "shape": )" + axisShape + R"(, 55*89c4ff92SAndroid Build Coastguard Worker "type": "INT32", 56*89c4ff92SAndroid Build Coastguard Worker "buffer": 2, 57*89c4ff92SAndroid Build Coastguard Worker "name": "axis", 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": )" + outputShape1 + R"( , 67*89c4ff92SAndroid Build Coastguard Worker "type":)" + dataType + R"(, 68*89c4ff92SAndroid Build Coastguard Worker "buffer": 3, 69*89c4ff92SAndroid Build Coastguard Worker "name": "outputTensor1", 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 "shape": )" + outputShape2 + R"( , 79*89c4ff92SAndroid Build Coastguard Worker "type":)" + dataType + R"(, 80*89c4ff92SAndroid Build Coastguard Worker "buffer": 4, 81*89c4ff92SAndroid Build Coastguard Worker "name": "outputTensor2", 82*89c4ff92SAndroid Build Coastguard Worker "quantization": { 83*89c4ff92SAndroid Build Coastguard Worker "min": [ 0.0 ], 84*89c4ff92SAndroid Build Coastguard Worker "max": [ 255.0 ], 85*89c4ff92SAndroid Build Coastguard Worker "scale": [ 1.0 ], 86*89c4ff92SAndroid Build Coastguard Worker "zero_point": [ 0 ], 87*89c4ff92SAndroid Build Coastguard Worker } 88*89c4ff92SAndroid Build Coastguard Worker } 89*89c4ff92SAndroid Build Coastguard Worker ], 90*89c4ff92SAndroid Build Coastguard Worker "inputs": [ 0, 1, 2 ], 91*89c4ff92SAndroid Build Coastguard Worker "outputs": [ 3, 4 ], 92*89c4ff92SAndroid Build Coastguard Worker "operators": [ 93*89c4ff92SAndroid Build Coastguard Worker { 94*89c4ff92SAndroid Build Coastguard Worker "opcode_index": 0, 95*89c4ff92SAndroid Build Coastguard Worker "inputs": [ 0, 1, 2 ], 96*89c4ff92SAndroid Build Coastguard Worker "outputs": [ 3, 4 ], 97*89c4ff92SAndroid Build Coastguard Worker "builtin_options_type": "SplitVOptions", 98*89c4ff92SAndroid Build Coastguard Worker "builtin_options": { 99*89c4ff92SAndroid Build Coastguard Worker "num_splits": )" + numSplits + R"( 100*89c4ff92SAndroid Build Coastguard Worker }, 101*89c4ff92SAndroid Build Coastguard Worker "custom_options_format": "FLEXBUFFERS" 102*89c4ff92SAndroid Build Coastguard Worker } 103*89c4ff92SAndroid Build Coastguard Worker ], 104*89c4ff92SAndroid Build Coastguard Worker } ], 105*89c4ff92SAndroid Build Coastguard Worker "buffers" : [ {}, { "data": )" + splitValues + R"( }, { "data": )" + axisData + R"( }, {}, {}] 106*89c4ff92SAndroid Build Coastguard Worker } 107*89c4ff92SAndroid Build Coastguard Worker )"; 108*89c4ff92SAndroid Build Coastguard Worker 109*89c4ff92SAndroid Build Coastguard Worker Setup(); 110*89c4ff92SAndroid Build Coastguard Worker } 111*89c4ff92SAndroid Build Coastguard Worker }; 112*89c4ff92SAndroid Build Coastguard Worker 113*89c4ff92SAndroid Build Coastguard Worker /* 114*89c4ff92SAndroid Build Coastguard Worker * Tested inferred splitSizes with splitValues [-1, 1] locally. 115*89c4ff92SAndroid Build Coastguard Worker */ 116*89c4ff92SAndroid Build Coastguard Worker 117*89c4ff92SAndroid Build Coastguard Worker struct SimpleSplitVAxisOneFixture : SplitVFixture 118*89c4ff92SAndroid Build Coastguard Worker { SimpleSplitVAxisOneFixtureSimpleSplitVAxisOneFixture119*89c4ff92SAndroid Build Coastguard Worker SimpleSplitVAxisOneFixture() 120*89c4ff92SAndroid Build Coastguard Worker : SplitVFixture( "[ 4, 2, 2, 2 ]", "[ 1, 0, 0, 0, 3, 0, 0, 0 ]", "[ 2 ]","[ ]", "2", 121*89c4ff92SAndroid Build Coastguard Worker "[ 1, 2, 2, 2 ]", "[ 3, 2, 2, 2 ]", "[ 0, 0, 0, 0 ]", "FLOAT32") 122*89c4ff92SAndroid Build Coastguard Worker {} 123*89c4ff92SAndroid Build Coastguard Worker }; 124*89c4ff92SAndroid Build Coastguard Worker 125*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(SimpleSplitVAxisOneFixture, "ParseAxisOneSplitVTwo") 126*89c4ff92SAndroid Build Coastguard Worker { 127*89c4ff92SAndroid Build Coastguard Worker RunTest<4, armnn::DataType::Float32>( 128*89c4ff92SAndroid Build Coastguard Worker 0, 129*89c4ff92SAndroid Build Coastguard Worker { {"inputTensor", { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 130*89c4ff92SAndroid Build Coastguard Worker 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f, 131*89c4ff92SAndroid Build Coastguard Worker 17.0f, 18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f, 132*89c4ff92SAndroid Build Coastguard Worker 25.0f, 26.0f, 27.0f, 28.0f, 29.0f, 30.0f, 31.0f, 32.0f } } }, 133*89c4ff92SAndroid Build Coastguard Worker { {"outputTensor1", { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f } }, 134*89c4ff92SAndroid Build Coastguard Worker {"outputTensor2", { 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f, 135*89c4ff92SAndroid Build Coastguard Worker 17.0f, 18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f, 136*89c4ff92SAndroid Build Coastguard Worker 25.0f, 26.0f, 27.0f, 28.0f, 29.0f, 30.0f, 31.0f, 32.0f } } } ); 137*89c4ff92SAndroid Build Coastguard Worker } 138*89c4ff92SAndroid Build Coastguard Worker 139*89c4ff92SAndroid Build Coastguard Worker struct SimpleSplitVAxisTwoFixture : SplitVFixture 140*89c4ff92SAndroid Build Coastguard Worker { SimpleSplitVAxisTwoFixtureSimpleSplitVAxisTwoFixture141*89c4ff92SAndroid Build Coastguard Worker SimpleSplitVAxisTwoFixture() 142*89c4ff92SAndroid Build Coastguard Worker : SplitVFixture( "[ 2, 4, 2, 2 ]", "[ 3, 0, 0, 0, 1, 0, 0, 0 ]", "[ 2 ]","[ ]", "2", 143*89c4ff92SAndroid Build Coastguard Worker "[ 2, 3, 2, 2 ]", "[ 2, 1, 2, 2 ]", "[ 1, 0, 0, 0 ]", "FLOAT32") 144*89c4ff92SAndroid Build Coastguard Worker {} 145*89c4ff92SAndroid Build Coastguard Worker }; 146*89c4ff92SAndroid Build Coastguard Worker 147*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(SimpleSplitVAxisTwoFixture, "ParseAxisTwoSplitVTwo") 148*89c4ff92SAndroid Build Coastguard Worker { 149*89c4ff92SAndroid Build Coastguard Worker RunTest<4, armnn::DataType::Float32>( 150*89c4ff92SAndroid Build Coastguard Worker 0, 151*89c4ff92SAndroid Build Coastguard Worker { {"inputTensor", { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 152*89c4ff92SAndroid Build Coastguard Worker 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f, 153*89c4ff92SAndroid Build Coastguard Worker 17.0f, 18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f, 154*89c4ff92SAndroid Build Coastguard Worker 25.0f, 26.0f, 27.0f, 28.0f, 29.0f, 30.0f, 31.0f, 32.0f } } }, 155*89c4ff92SAndroid Build Coastguard Worker { {"outputTensor1", { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 156*89c4ff92SAndroid Build Coastguard Worker 9.0f, 10.0f, 11.0f, 12.0f, 17.0f, 18.0f, 19.0f, 20.0f, 157*89c4ff92SAndroid Build Coastguard Worker 21.0f, 22.0f, 23.0f, 24.0f, 25.0f, 26.0f, 27.0f, 28.0f } }, 158*89c4ff92SAndroid Build Coastguard Worker {"outputTensor2", { 13.0f, 14.0f, 15.0f, 16.0f, 29.0f, 30.0f, 31.0f, 32.0f } } } ); 159*89c4ff92SAndroid Build Coastguard Worker } 160*89c4ff92SAndroid Build Coastguard Worker 161*89c4ff92SAndroid Build Coastguard Worker struct SimpleSplitVAxisThreeFixture : SplitVFixture 162*89c4ff92SAndroid Build Coastguard Worker { SimpleSplitVAxisThreeFixtureSimpleSplitVAxisThreeFixture163*89c4ff92SAndroid Build Coastguard Worker SimpleSplitVAxisThreeFixture() 164*89c4ff92SAndroid Build Coastguard Worker : SplitVFixture( "[ 2, 2, 4, 2 ]", "[ 1, 0, 0, 0, 3, 0, 0, 0 ]", "[ 2 ]","[ ]", "2", 165*89c4ff92SAndroid Build Coastguard Worker "[ 2, 2, 1, 2 ]", "[ 2, 2, 3, 2 ]", "[ 2, 0, 0, 0 ]", "FLOAT32") 166*89c4ff92SAndroid Build Coastguard Worker {} 167*89c4ff92SAndroid Build Coastguard Worker }; 168*89c4ff92SAndroid Build Coastguard Worker 169*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(SimpleSplitVAxisThreeFixture, "ParseAxisThreeSplitVTwo") 170*89c4ff92SAndroid Build Coastguard Worker { 171*89c4ff92SAndroid Build Coastguard Worker RunTest<4, armnn::DataType::Float32>( 172*89c4ff92SAndroid Build Coastguard Worker 0, 173*89c4ff92SAndroid Build Coastguard Worker { {"inputTensor", { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 174*89c4ff92SAndroid Build Coastguard Worker 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f, 175*89c4ff92SAndroid Build Coastguard Worker 17.0f, 18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f, 176*89c4ff92SAndroid Build Coastguard Worker 25.0f, 26.0f, 27.0f, 28.0f, 29.0f, 30.0f, 31.0f, 32.0f } } }, 177*89c4ff92SAndroid Build Coastguard Worker { {"outputTensor1", { 1.0f, 2.0f, 9.0f, 10.0f, 17.0f, 18.0f, 25.0f, 26.0f } }, 178*89c4ff92SAndroid Build Coastguard Worker {"outputTensor2", { 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 11.0f, 12.0f, 179*89c4ff92SAndroid Build Coastguard Worker 13.0f, 14.0f, 15.0f, 16.0f, 19.0f, 20.0f, 21.0f, 22.0f, 180*89c4ff92SAndroid Build Coastguard Worker 23.0f, 24.0f, 27.0f, 28.0f, 29.0f, 30.0f, 31.0f, 32.0f } } } ); 181*89c4ff92SAndroid Build Coastguard Worker } 182*89c4ff92SAndroid Build Coastguard Worker 183*89c4ff92SAndroid Build Coastguard Worker struct SimpleSplitVAxisFourFixture : SplitVFixture 184*89c4ff92SAndroid Build Coastguard Worker { SimpleSplitVAxisFourFixtureSimpleSplitVAxisFourFixture185*89c4ff92SAndroid Build Coastguard Worker SimpleSplitVAxisFourFixture() 186*89c4ff92SAndroid Build Coastguard Worker : SplitVFixture( "[ 2, 2, 2, 4 ]", "[ 3, 0, 0, 0, 1, 0, 0, 0 ]", "[ 2 ]","[ ]", "2", 187*89c4ff92SAndroid Build Coastguard Worker "[ 2, 2, 2, 3 ]", "[ 2, 2, 2, 1 ]", "[ 3, 0, 0, 0 ]", "FLOAT32") 188*89c4ff92SAndroid Build Coastguard Worker {} 189*89c4ff92SAndroid Build Coastguard Worker }; 190*89c4ff92SAndroid Build Coastguard Worker 191*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(SimpleSplitVAxisFourFixture, "ParseAxisFourSplitVTwo") 192*89c4ff92SAndroid Build Coastguard Worker { 193*89c4ff92SAndroid Build Coastguard Worker RunTest<4, armnn::DataType::Float32>( 194*89c4ff92SAndroid Build Coastguard Worker 0, 195*89c4ff92SAndroid Build Coastguard Worker { {"inputTensor", { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 196*89c4ff92SAndroid Build Coastguard Worker 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f, 197*89c4ff92SAndroid Build Coastguard Worker 17.0f, 18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f, 198*89c4ff92SAndroid Build Coastguard Worker 25.0f, 26.0f, 27.0f, 28.0f, 29.0f, 30.0f, 31.0f, 32.0f } } }, 199*89c4ff92SAndroid Build Coastguard Worker { {"outputTensor1", { 1.0f, 2.0f, 3.0f, 5.0f, 6.0f, 7.0f, 9.0f, 10.0f, 200*89c4ff92SAndroid Build Coastguard Worker 11.0f, 13.0f, 14.0f, 15.0f, 17.0f, 18.0f, 19.0f, 21.0f, 201*89c4ff92SAndroid Build Coastguard Worker 22.0f, 23.0f, 25.0f, 26.0f, 27.0f, 29.0f, 30.0f, 31.0f} }, 202*89c4ff92SAndroid Build Coastguard Worker {"outputTensor2", { 4.0f, 8.0f, 12.0f, 16.0f, 20.0f, 24.0f, 28.0f, 32.0f } } } ); 203*89c4ff92SAndroid Build Coastguard Worker } 204*89c4ff92SAndroid Build Coastguard Worker 205*89c4ff92SAndroid Build Coastguard Worker } 206