1*89c4ff92SAndroid Build Coastguard Worker // 2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2017 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_Minimum") 10*89c4ff92SAndroid Build Coastguard Worker { 11*89c4ff92SAndroid Build Coastguard Worker struct MinimumFixture : public ParserFlatbuffersFixture 12*89c4ff92SAndroid Build Coastguard Worker { MinimumFixtureMinimumFixture13*89c4ff92SAndroid Build Coastguard Worker explicit MinimumFixture(const std::string & inputShape1, 14*89c4ff92SAndroid Build Coastguard Worker const std::string & inputShape2, 15*89c4ff92SAndroid Build Coastguard Worker const std::string & outputShape) 16*89c4ff92SAndroid Build Coastguard Worker { 17*89c4ff92SAndroid Build Coastguard Worker m_JsonString = R"( 18*89c4ff92SAndroid Build Coastguard Worker { 19*89c4ff92SAndroid Build Coastguard Worker "version": 3, 20*89c4ff92SAndroid Build Coastguard Worker "operator_codes": [ { "builtin_code": "MINIMUM" } ], 21*89c4ff92SAndroid Build Coastguard Worker "subgraphs": [ { 22*89c4ff92SAndroid Build Coastguard Worker "tensors": [ 23*89c4ff92SAndroid Build Coastguard Worker { 24*89c4ff92SAndroid Build Coastguard Worker "shape": )" + inputShape1 + R"(, 25*89c4ff92SAndroid Build Coastguard Worker "type": "FLOAT32", 26*89c4ff92SAndroid Build Coastguard Worker "buffer": 0, 27*89c4ff92SAndroid Build Coastguard Worker "name": "inputTensor1", 28*89c4ff92SAndroid Build Coastguard Worker "quantization": { 29*89c4ff92SAndroid Build Coastguard Worker "min": [ 0.0 ], 30*89c4ff92SAndroid Build Coastguard Worker "max": [ 255.0 ], 31*89c4ff92SAndroid Build Coastguard Worker "scale": [ 1.0 ], 32*89c4ff92SAndroid Build Coastguard Worker "zero_point": [ 0 ], 33*89c4ff92SAndroid Build Coastguard Worker } 34*89c4ff92SAndroid Build Coastguard Worker }, 35*89c4ff92SAndroid Build Coastguard Worker { 36*89c4ff92SAndroid Build Coastguard Worker "shape": )" + inputShape2 + R"(, 37*89c4ff92SAndroid Build Coastguard Worker "type": "FLOAT32", 38*89c4ff92SAndroid Build Coastguard Worker "buffer": 1, 39*89c4ff92SAndroid Build Coastguard Worker "name": "inputTensor2", 40*89c4ff92SAndroid Build Coastguard Worker "quantization": { 41*89c4ff92SAndroid Build Coastguard Worker "min": [ 0.0 ], 42*89c4ff92SAndroid Build Coastguard Worker "max": [ 255.0 ], 43*89c4ff92SAndroid Build Coastguard Worker "scale": [ 1.0 ], 44*89c4ff92SAndroid Build Coastguard Worker "zero_point": [ 0 ], 45*89c4ff92SAndroid Build Coastguard Worker } 46*89c4ff92SAndroid Build Coastguard Worker }, 47*89c4ff92SAndroid Build Coastguard Worker { 48*89c4ff92SAndroid Build Coastguard Worker "shape": )" + outputShape + R"( , 49*89c4ff92SAndroid Build Coastguard Worker "type": "FLOAT32", 50*89c4ff92SAndroid Build Coastguard Worker "buffer": 2, 51*89c4ff92SAndroid Build Coastguard Worker "name": "outputTensor", 52*89c4ff92SAndroid Build Coastguard Worker "quantization": { 53*89c4ff92SAndroid Build Coastguard Worker "min": [ 0.0 ], 54*89c4ff92SAndroid Build Coastguard Worker "max": [ 255.0 ], 55*89c4ff92SAndroid Build Coastguard Worker "scale": [ 1.0 ], 56*89c4ff92SAndroid Build Coastguard Worker "zero_point": [ 0 ], 57*89c4ff92SAndroid Build Coastguard Worker } 58*89c4ff92SAndroid Build Coastguard Worker } 59*89c4ff92SAndroid Build Coastguard Worker ], 60*89c4ff92SAndroid Build Coastguard Worker "inputs": [ 0, 1 ], 61*89c4ff92SAndroid Build Coastguard Worker "outputs": [ 2 ], 62*89c4ff92SAndroid Build Coastguard Worker "operators": [ 63*89c4ff92SAndroid Build Coastguard Worker { 64*89c4ff92SAndroid Build Coastguard Worker "opcode_index": 0, 65*89c4ff92SAndroid Build Coastguard Worker "inputs": [ 0, 1 ], 66*89c4ff92SAndroid Build Coastguard Worker "outputs": [ 2 ], 67*89c4ff92SAndroid Build Coastguard Worker "custom_options_format": "FLEXBUFFERS" 68*89c4ff92SAndroid Build Coastguard Worker } 69*89c4ff92SAndroid Build Coastguard Worker ], 70*89c4ff92SAndroid Build Coastguard Worker } ], 71*89c4ff92SAndroid Build Coastguard Worker "buffers" : [ 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 )"; 77*89c4ff92SAndroid Build Coastguard Worker Setup(); 78*89c4ff92SAndroid Build Coastguard Worker } 79*89c4ff92SAndroid Build Coastguard Worker }; 80*89c4ff92SAndroid Build Coastguard Worker 81*89c4ff92SAndroid Build Coastguard Worker 82*89c4ff92SAndroid Build Coastguard Worker struct MinimumFixture4D : MinimumFixture 83*89c4ff92SAndroid Build Coastguard Worker { MinimumFixture4DMinimumFixture4D84*89c4ff92SAndroid Build Coastguard Worker MinimumFixture4D() : MinimumFixture("[ 1, 2, 2, 3 ]", 85*89c4ff92SAndroid Build Coastguard Worker "[ 1, 2, 2, 3 ]", 86*89c4ff92SAndroid Build Coastguard Worker "[ 1, 2, 2, 3 ]") {} 87*89c4ff92SAndroid Build Coastguard Worker }; 88*89c4ff92SAndroid Build Coastguard Worker 89*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(MinimumFixture4D, "ParseMinimum4D") 90*89c4ff92SAndroid Build Coastguard Worker { 91*89c4ff92SAndroid Build Coastguard Worker RunTest<4, armnn::DataType::Float32>( 92*89c4ff92SAndroid Build Coastguard Worker 0, 93*89c4ff92SAndroid Build Coastguard Worker {{"inputTensor1", { 0.0f, 1.0f, 2.0f, 94*89c4ff92SAndroid Build Coastguard Worker 3.0f, 4.0f, 5.0f, 95*89c4ff92SAndroid Build Coastguard Worker 6.0f, 7.0f, 8.0f, 96*89c4ff92SAndroid Build Coastguard Worker 9.0f, 10.0f, 11.0f }}, 97*89c4ff92SAndroid Build Coastguard Worker {"inputTensor2", { 0.0f, 0.0f, 0.0f, 98*89c4ff92SAndroid Build Coastguard Worker 5.0f, 5.0f, 5.0f, 99*89c4ff92SAndroid Build Coastguard Worker 7.0f, 7.0f, 7.0f, 100*89c4ff92SAndroid Build Coastguard Worker 9.0f, 9.0f, 9.0f }}}, 101*89c4ff92SAndroid Build Coastguard Worker {{"outputTensor", { 0.0f, 0.0f, 0.0f, 102*89c4ff92SAndroid Build Coastguard Worker 3.0f, 4.0f, 5.0f, 103*89c4ff92SAndroid Build Coastguard Worker 6.0f, 7.0f, 7.0f, 104*89c4ff92SAndroid Build Coastguard Worker 9.0f, 9.0f, 9.0f }}}); 105*89c4ff92SAndroid Build Coastguard Worker } 106*89c4ff92SAndroid Build Coastguard Worker 107*89c4ff92SAndroid Build Coastguard Worker struct MinimumBroadcastFixture4D : MinimumFixture 108*89c4ff92SAndroid Build Coastguard Worker { MinimumBroadcastFixture4DMinimumBroadcastFixture4D109*89c4ff92SAndroid Build Coastguard Worker MinimumBroadcastFixture4D() : MinimumFixture("[ 1, 1, 2, 1 ]", 110*89c4ff92SAndroid Build Coastguard Worker "[ 1, 2, 1, 3 ]", 111*89c4ff92SAndroid Build Coastguard Worker "[ 1, 2, 2, 3 ]") {} 112*89c4ff92SAndroid Build Coastguard Worker }; 113*89c4ff92SAndroid Build Coastguard Worker 114*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(MinimumBroadcastFixture4D, "ParseMinimumBroadcast4D") 115*89c4ff92SAndroid Build Coastguard Worker { 116*89c4ff92SAndroid Build Coastguard Worker RunTest<4, armnn::DataType::Float32>( 117*89c4ff92SAndroid Build Coastguard Worker 0, 118*89c4ff92SAndroid Build Coastguard Worker {{"inputTensor1", { 2.0f, 119*89c4ff92SAndroid Build Coastguard Worker 4.0f }}, 120*89c4ff92SAndroid Build Coastguard Worker {"inputTensor2", { 1.0f, 2.0f, 3.0f, 121*89c4ff92SAndroid Build Coastguard Worker 4.0f, 5.0f, 6.0f }}}, 122*89c4ff92SAndroid Build Coastguard Worker {{"outputTensor", { 1.0f, 2.0f, 2.0f, 123*89c4ff92SAndroid Build Coastguard Worker 1.0f, 2.0f, 3.0f, 124*89c4ff92SAndroid Build Coastguard Worker 2.0f, 2.0f, 2.0f, 125*89c4ff92SAndroid Build Coastguard Worker 4.0f, 4.0f, 4.0f }}}); 126*89c4ff92SAndroid Build Coastguard Worker } 127*89c4ff92SAndroid Build Coastguard Worker 128*89c4ff92SAndroid Build Coastguard Worker struct MinimumBroadcastFixture4D1D : MinimumFixture 129*89c4ff92SAndroid Build Coastguard Worker { MinimumBroadcastFixture4D1DMinimumBroadcastFixture4D1D130*89c4ff92SAndroid Build Coastguard Worker MinimumBroadcastFixture4D1D() : MinimumFixture("[ 1, 2, 2, 3 ]", 131*89c4ff92SAndroid Build Coastguard Worker "[ 1 ]", 132*89c4ff92SAndroid Build Coastguard Worker "[ 1, 2, 2, 3 ]") {} 133*89c4ff92SAndroid Build Coastguard Worker }; 134*89c4ff92SAndroid Build Coastguard Worker 135*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(MinimumBroadcastFixture4D1D, "ParseMinimumBroadcast4D1D") 136*89c4ff92SAndroid Build Coastguard Worker { 137*89c4ff92SAndroid Build Coastguard Worker RunTest<4, armnn::DataType::Float32>( 138*89c4ff92SAndroid Build Coastguard Worker 0, 139*89c4ff92SAndroid Build Coastguard Worker {{"inputTensor1", { 0.0f, 1.0f, 2.0f, 140*89c4ff92SAndroid Build Coastguard Worker 3.0f, 4.0f, 5.0f, 141*89c4ff92SAndroid Build Coastguard Worker 6.0f, 7.0f, 8.0f, 142*89c4ff92SAndroid Build Coastguard Worker 9.0f, 10.0f, 11.0f }}, 143*89c4ff92SAndroid Build Coastguard Worker {"inputTensor2", { 5.0f }}}, 144*89c4ff92SAndroid Build Coastguard Worker {{"outputTensor", { 0.0f, 1.0f, 2.0f, 145*89c4ff92SAndroid Build Coastguard Worker 3.0f, 4.0f, 5.0f, 146*89c4ff92SAndroid Build Coastguard Worker 5.0f, 5.0f, 5.0f, 147*89c4ff92SAndroid Build Coastguard Worker 5.0f, 5.0f, 5.0f }}}); 148*89c4ff92SAndroid Build Coastguard Worker } 149*89c4ff92SAndroid Build Coastguard Worker 150*89c4ff92SAndroid Build Coastguard Worker struct MinimumBroadcastFixture1D4D : MinimumFixture 151*89c4ff92SAndroid Build Coastguard Worker { MinimumBroadcastFixture1D4DMinimumBroadcastFixture1D4D152*89c4ff92SAndroid Build Coastguard Worker MinimumBroadcastFixture1D4D() : MinimumFixture("[ 3 ]", 153*89c4ff92SAndroid Build Coastguard Worker "[ 1, 2, 2, 3 ]", 154*89c4ff92SAndroid Build Coastguard Worker "[ 1, 2, 2, 3 ]") {} 155*89c4ff92SAndroid Build Coastguard Worker }; 156*89c4ff92SAndroid Build Coastguard Worker 157*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(MinimumBroadcastFixture1D4D, "ParseMinimumBroadcast1D4D") 158*89c4ff92SAndroid Build Coastguard Worker { 159*89c4ff92SAndroid Build Coastguard Worker RunTest<4, armnn::DataType::Float32>( 160*89c4ff92SAndroid Build Coastguard Worker 0, 161*89c4ff92SAndroid Build Coastguard Worker {{"inputTensor1", { 5.0f, 6.0f, 7.0f }}, 162*89c4ff92SAndroid Build Coastguard Worker {"inputTensor2", { 0.0f, 1.0f, 2.0f, 163*89c4ff92SAndroid Build Coastguard Worker 3.0f, 4.0f, 5.0f, 164*89c4ff92SAndroid Build Coastguard Worker 6.0f, 7.0f, 8.0f, 165*89c4ff92SAndroid Build Coastguard Worker 9.0f, 10.0f, 11.0f }}}, 166*89c4ff92SAndroid Build Coastguard Worker {{"outputTensor", { 0.0f, 1.0f, 2.0f, 167*89c4ff92SAndroid Build Coastguard Worker 3.0f, 4.0f, 5.0f, 168*89c4ff92SAndroid Build Coastguard Worker 5.0f, 6.0f, 7.0f, 169*89c4ff92SAndroid Build Coastguard Worker 5.0f, 6.0f, 7.0f }}}); 170*89c4ff92SAndroid Build Coastguard Worker } 171*89c4ff92SAndroid Build Coastguard Worker 172*89c4ff92SAndroid Build Coastguard Worker struct MinimumBroadcastFixture2D0D : public ParserFlatbuffersFixture 173*89c4ff92SAndroid Build Coastguard Worker { MinimumBroadcastFixture2D0DMinimumBroadcastFixture2D0D174*89c4ff92SAndroid Build Coastguard Worker explicit MinimumBroadcastFixture2D0D() 175*89c4ff92SAndroid Build Coastguard Worker { 176*89c4ff92SAndroid Build Coastguard Worker m_JsonString = R"( 177*89c4ff92SAndroid Build Coastguard Worker { 178*89c4ff92SAndroid Build Coastguard Worker "version": 3, 179*89c4ff92SAndroid Build Coastguard Worker "operator_codes": [ { "builtin_code": "MINIMUM" } ], 180*89c4ff92SAndroid Build Coastguard Worker "subgraphs": [ { 181*89c4ff92SAndroid Build Coastguard Worker "tensors": [ 182*89c4ff92SAndroid Build Coastguard Worker { 183*89c4ff92SAndroid Build Coastguard Worker "shape": [ 1, 2 ], 184*89c4ff92SAndroid Build Coastguard Worker "type": "FLOAT32", 185*89c4ff92SAndroid Build Coastguard Worker "buffer": 0, 186*89c4ff92SAndroid Build Coastguard Worker "name": "input0", 187*89c4ff92SAndroid Build Coastguard Worker "quantization": { 188*89c4ff92SAndroid Build Coastguard Worker "min": [ 0.0 ], 189*89c4ff92SAndroid Build Coastguard Worker "max": [ 255.0 ], 190*89c4ff92SAndroid Build Coastguard Worker "scale": [ 1.0 ], 191*89c4ff92SAndroid Build Coastguard Worker "zero_point": [ 0 ], 192*89c4ff92SAndroid Build Coastguard Worker } 193*89c4ff92SAndroid Build Coastguard Worker }, 194*89c4ff92SAndroid Build Coastguard Worker { 195*89c4ff92SAndroid Build Coastguard Worker "shape": [ ], 196*89c4ff92SAndroid Build Coastguard Worker "type": "FLOAT32", 197*89c4ff92SAndroid Build Coastguard Worker "buffer": 2, 198*89c4ff92SAndroid Build Coastguard Worker "name": "input1", 199*89c4ff92SAndroid Build Coastguard Worker "quantization": { 200*89c4ff92SAndroid Build Coastguard Worker "min": [ 0.0 ], 201*89c4ff92SAndroid Build Coastguard Worker "max": [ 255.0 ], 202*89c4ff92SAndroid Build Coastguard Worker "scale": [ 1.0 ], 203*89c4ff92SAndroid Build Coastguard Worker "zero_point": [ 0 ], 204*89c4ff92SAndroid Build Coastguard Worker } 205*89c4ff92SAndroid Build Coastguard Worker }, 206*89c4ff92SAndroid Build Coastguard Worker { 207*89c4ff92SAndroid Build Coastguard Worker "shape": [ 1, 2 ] , 208*89c4ff92SAndroid Build Coastguard Worker "type": "FLOAT32", 209*89c4ff92SAndroid Build Coastguard Worker "buffer": 1, 210*89c4ff92SAndroid Build Coastguard Worker "name": "output", 211*89c4ff92SAndroid Build Coastguard Worker "quantization": { 212*89c4ff92SAndroid Build Coastguard Worker "min": [ 0.0 ], 213*89c4ff92SAndroid Build Coastguard Worker "max": [ 255.0 ], 214*89c4ff92SAndroid Build Coastguard Worker "scale": [ 1.0 ], 215*89c4ff92SAndroid Build Coastguard Worker "zero_point": [ 0 ], 216*89c4ff92SAndroid Build Coastguard Worker } 217*89c4ff92SAndroid Build Coastguard Worker } 218*89c4ff92SAndroid Build Coastguard Worker ], 219*89c4ff92SAndroid Build Coastguard Worker "inputs": [ 0 ], 220*89c4ff92SAndroid Build Coastguard Worker "outputs": [ 2 ], 221*89c4ff92SAndroid Build Coastguard Worker "operators": [ 222*89c4ff92SAndroid Build Coastguard Worker { 223*89c4ff92SAndroid Build Coastguard Worker "opcode_index": 0, 224*89c4ff92SAndroid Build Coastguard Worker "inputs": [ 0, 1 ], 225*89c4ff92SAndroid Build Coastguard Worker "outputs": [ 2 ], 226*89c4ff92SAndroid Build Coastguard Worker "custom_options_format": "FLEXBUFFERS" 227*89c4ff92SAndroid Build Coastguard Worker } 228*89c4ff92SAndroid Build Coastguard Worker ], 229*89c4ff92SAndroid Build Coastguard Worker } ], 230*89c4ff92SAndroid Build Coastguard Worker "buffers" : [ 231*89c4ff92SAndroid Build Coastguard Worker { }, 232*89c4ff92SAndroid Build Coastguard Worker { }, 233*89c4ff92SAndroid Build Coastguard Worker { "data": [ 0, 0, 0, 64 ] } 234*89c4ff92SAndroid Build Coastguard Worker ] 235*89c4ff92SAndroid Build Coastguard Worker } 236*89c4ff92SAndroid Build Coastguard Worker )"; 237*89c4ff92SAndroid Build Coastguard Worker Setup(); 238*89c4ff92SAndroid Build Coastguard Worker } 239*89c4ff92SAndroid Build Coastguard Worker }; 240*89c4ff92SAndroid Build Coastguard Worker 241*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(MinimumBroadcastFixture2D0D, "ParseMinimumBroadcast2D0D") 242*89c4ff92SAndroid Build Coastguard Worker { 243*89c4ff92SAndroid Build Coastguard Worker RunTest<2, armnn::DataType::Float32>( 244*89c4ff92SAndroid Build Coastguard Worker 0, 245*89c4ff92SAndroid Build Coastguard Worker {{"input0", { 1.0f, 5.0f }}}, 246*89c4ff92SAndroid Build Coastguard Worker {{"output", { 1.0f, 2.0f }}}); 247*89c4ff92SAndroid Build Coastguard Worker } 248*89c4ff92SAndroid Build Coastguard Worker 249*89c4ff92SAndroid Build Coastguard Worker } 250