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_FloorDiv") 10*89c4ff92SAndroid Build Coastguard Worker { 11*89c4ff92SAndroid Build Coastguard Worker struct FloorDivFixture : public ParserFlatbuffersFixture 12*89c4ff92SAndroid Build Coastguard Worker { FloorDivFixtureFloorDivFixture13*89c4ff92SAndroid Build Coastguard Worker explicit FloorDivFixture(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 const std::string& inputShapeSignature1, 17*89c4ff92SAndroid Build Coastguard Worker const std::string& inputShapeSignature2, 18*89c4ff92SAndroid Build Coastguard Worker const std::string& outputShapeSignature, 19*89c4ff92SAndroid Build Coastguard Worker const std::string& dataType = "FLOAT32") 20*89c4ff92SAndroid Build Coastguard Worker { 21*89c4ff92SAndroid Build Coastguard Worker m_JsonString = R"( 22*89c4ff92SAndroid Build Coastguard Worker { 23*89c4ff92SAndroid Build Coastguard Worker "version": 3, 24*89c4ff92SAndroid Build Coastguard Worker "operator_codes": [ 25*89c4ff92SAndroid Build Coastguard Worker { 26*89c4ff92SAndroid Build Coastguard Worker "deprecated_builtin_code": 90, 27*89c4ff92SAndroid Build Coastguard Worker "version": 2, 28*89c4ff92SAndroid Build Coastguard Worker "builtin_code": "FLOOR_DIV" 29*89c4ff92SAndroid Build Coastguard Worker } 30*89c4ff92SAndroid Build Coastguard Worker ], 31*89c4ff92SAndroid Build Coastguard Worker "subgraphs": [ 32*89c4ff92SAndroid Build Coastguard Worker { 33*89c4ff92SAndroid Build Coastguard Worker "tensors": [ 34*89c4ff92SAndroid Build Coastguard Worker { 35*89c4ff92SAndroid Build Coastguard Worker "shape": )" + inputShape1 + R"(, 36*89c4ff92SAndroid Build Coastguard Worker "type": )" + dataType + R"(, 37*89c4ff92SAndroid Build Coastguard Worker "buffer": 1, 38*89c4ff92SAndroid Build Coastguard Worker "name": "inputTensor1", 39*89c4ff92SAndroid Build Coastguard Worker "quantization": { 40*89c4ff92SAndroid Build Coastguard Worker "details_type": "NONE", 41*89c4ff92SAndroid Build Coastguard Worker "quantized_dimension": 0 42*89c4ff92SAndroid Build Coastguard Worker }, 43*89c4ff92SAndroid Build Coastguard Worker "is_variable": false, 44*89c4ff92SAndroid Build Coastguard Worker "shape_signature": )" + inputShapeSignature1 + R"(, 45*89c4ff92SAndroid Build Coastguard Worker }, 46*89c4ff92SAndroid Build Coastguard Worker { 47*89c4ff92SAndroid Build Coastguard Worker "shape": )" + inputShape2 + R"(, 48*89c4ff92SAndroid Build Coastguard Worker "type": )" + dataType + R"(, 49*89c4ff92SAndroid Build Coastguard Worker "buffer": 2, 50*89c4ff92SAndroid Build Coastguard Worker "name": "inputTensor2", 51*89c4ff92SAndroid Build Coastguard Worker "quantization": { 52*89c4ff92SAndroid Build Coastguard Worker "details_type": "NONE", 53*89c4ff92SAndroid Build Coastguard Worker "quantized_dimension": 0 54*89c4ff92SAndroid Build Coastguard Worker }, 55*89c4ff92SAndroid Build Coastguard Worker "is_variable": false, 56*89c4ff92SAndroid Build Coastguard Worker "shape_signature": )" + inputShapeSignature2 + R"(, 57*89c4ff92SAndroid Build Coastguard Worker }, 58*89c4ff92SAndroid Build Coastguard Worker { 59*89c4ff92SAndroid Build Coastguard Worker "shape": )" + outputShape + R"(, 60*89c4ff92SAndroid Build Coastguard Worker "type": )" + dataType + R"(, 61*89c4ff92SAndroid Build Coastguard Worker "buffer": 3, 62*89c4ff92SAndroid Build Coastguard Worker "name": "outputTensor", 63*89c4ff92SAndroid Build Coastguard Worker "quantization": { 64*89c4ff92SAndroid Build Coastguard Worker "details_type": "NONE", 65*89c4ff92SAndroid Build Coastguard Worker "quantized_dimension": 0 66*89c4ff92SAndroid Build Coastguard Worker }, 67*89c4ff92SAndroid Build Coastguard Worker "is_variable": false, 68*89c4ff92SAndroid Build Coastguard Worker "shape_signature": )" + outputShapeSignature + R"(, 69*89c4ff92SAndroid Build Coastguard Worker } 70*89c4ff92SAndroid Build Coastguard Worker ], 71*89c4ff92SAndroid Build Coastguard Worker "inputs": [ 72*89c4ff92SAndroid Build Coastguard Worker 0, 73*89c4ff92SAndroid Build Coastguard Worker 1 74*89c4ff92SAndroid Build Coastguard Worker ], 75*89c4ff92SAndroid Build Coastguard Worker "outputs": [ 76*89c4ff92SAndroid Build Coastguard Worker 2 77*89c4ff92SAndroid Build Coastguard Worker ], 78*89c4ff92SAndroid Build Coastguard Worker "operators": [ 79*89c4ff92SAndroid Build Coastguard Worker { 80*89c4ff92SAndroid Build Coastguard Worker "opcode_index": 0, 81*89c4ff92SAndroid Build Coastguard Worker "inputs": [ 82*89c4ff92SAndroid Build Coastguard Worker 0, 83*89c4ff92SAndroid Build Coastguard Worker 1 84*89c4ff92SAndroid Build Coastguard Worker ], 85*89c4ff92SAndroid Build Coastguard Worker "outputs": [ 86*89c4ff92SAndroid Build Coastguard Worker 2 87*89c4ff92SAndroid Build Coastguard Worker ], 88*89c4ff92SAndroid Build Coastguard Worker "builtin_options_type": "NONE", 89*89c4ff92SAndroid Build Coastguard Worker "custom_options_format": "FLEXBUFFERS" 90*89c4ff92SAndroid Build Coastguard Worker } 91*89c4ff92SAndroid Build Coastguard Worker ], 92*89c4ff92SAndroid Build Coastguard Worker "name": "main" 93*89c4ff92SAndroid Build Coastguard Worker } 94*89c4ff92SAndroid Build Coastguard Worker ], 95*89c4ff92SAndroid Build Coastguard Worker "description": "MLIR Converted.", 96*89c4ff92SAndroid Build Coastguard Worker "buffers": [ {}, {}, {}, {}, 97*89c4ff92SAndroid Build Coastguard Worker { 98*89c4ff92SAndroid Build Coastguard Worker "data": [ 99*89c4ff92SAndroid Build Coastguard Worker 49, 100*89c4ff92SAndroid Build Coastguard Worker 46, 101*89c4ff92SAndroid Build Coastguard Worker 49, 102*89c4ff92SAndroid Build Coastguard Worker 52, 103*89c4ff92SAndroid Build Coastguard Worker 46, 104*89c4ff92SAndroid Build Coastguard Worker 48, 105*89c4ff92SAndroid Build Coastguard Worker 0, 106*89c4ff92SAndroid Build Coastguard Worker 0, 107*89c4ff92SAndroid Build Coastguard Worker 0, 108*89c4ff92SAndroid Build Coastguard Worker 0, 109*89c4ff92SAndroid Build Coastguard Worker 0, 110*89c4ff92SAndroid Build Coastguard Worker 0, 111*89c4ff92SAndroid Build Coastguard Worker 0, 112*89c4ff92SAndroid Build Coastguard Worker 0, 113*89c4ff92SAndroid Build Coastguard Worker 0, 114*89c4ff92SAndroid Build Coastguard Worker 0 115*89c4ff92SAndroid Build Coastguard Worker ] 116*89c4ff92SAndroid Build Coastguard Worker } 117*89c4ff92SAndroid Build Coastguard Worker ], 118*89c4ff92SAndroid Build Coastguard Worker "metadata": [ 119*89c4ff92SAndroid Build Coastguard Worker { 120*89c4ff92SAndroid Build Coastguard Worker "name": "min_runtime_version", 121*89c4ff92SAndroid Build Coastguard Worker "buffer": 4 122*89c4ff92SAndroid Build Coastguard Worker } 123*89c4ff92SAndroid Build Coastguard Worker ], 124*89c4ff92SAndroid Build Coastguard Worker "signature_defs": [ 125*89c4ff92SAndroid Build Coastguard Worker 126*89c4ff92SAndroid Build Coastguard Worker ] 127*89c4ff92SAndroid Build Coastguard Worker } 128*89c4ff92SAndroid Build Coastguard Worker )"; 129*89c4ff92SAndroid Build Coastguard Worker Setup(); 130*89c4ff92SAndroid Build Coastguard Worker } 131*89c4ff92SAndroid Build Coastguard Worker }; 132*89c4ff92SAndroid Build Coastguard Worker 133*89c4ff92SAndroid Build Coastguard Worker struct SimpleFloorDivFixture : public FloorDivFixture 134*89c4ff92SAndroid Build Coastguard Worker { SimpleFloorDivFixtureSimpleFloorDivFixture135*89c4ff92SAndroid Build Coastguard Worker SimpleFloorDivFixture() : FloorDivFixture("[ 1, 3, 4 ]", "[ 1, 3, 4 ]", "[ 1, 3, 4 ]", 136*89c4ff92SAndroid Build Coastguard Worker "[ -1, 3, 4 ]", "[ -1, 3, 4 ]", "[ -1, 3, 4 ]") {} 137*89c4ff92SAndroid Build Coastguard Worker }; 138*89c4ff92SAndroid Build Coastguard Worker 139*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(SimpleFloorDivFixture, "ParseFloorDiv") 140*89c4ff92SAndroid Build Coastguard Worker { 141*89c4ff92SAndroid Build Coastguard Worker using armnn::DataType; 142*89c4ff92SAndroid Build Coastguard Worker float Inf = std::numeric_limits<float>::infinity(); 143*89c4ff92SAndroid Build Coastguard Worker float NaN = std::numeric_limits<float>::quiet_NaN(); 144*89c4ff92SAndroid Build Coastguard Worker 145*89c4ff92SAndroid Build Coastguard Worker RunTest<3, DataType::Float32>(0, {{ "inputTensor1", { 0.0f, 1.0f, 2.0f, 146*89c4ff92SAndroid Build Coastguard Worker 3.0f, 4.0f, 5.0f, 147*89c4ff92SAndroid Build Coastguard Worker 6.0f, -7.0f, 8.0f, 148*89c4ff92SAndroid Build Coastguard Worker 9.0f, 10.0f, -11.0f } }, 149*89c4ff92SAndroid Build Coastguard Worker { "inputTensor2", { 0.0f, 0.0f, 4.0f, 150*89c4ff92SAndroid Build Coastguard Worker 3.0f, 40.0f, 5.0f, 151*89c4ff92SAndroid Build Coastguard Worker 6.0f, 2.0f, 8.0f, 152*89c4ff92SAndroid Build Coastguard Worker 9.0f, 10.0f, 11.0f} } }, 153*89c4ff92SAndroid Build Coastguard Worker {{ "outputTensor", { NaN, Inf, 0.0f, 154*89c4ff92SAndroid Build Coastguard Worker 1.0f, 0.0f, 1.0f, 155*89c4ff92SAndroid Build Coastguard Worker 1.0f, -4.0f, 1.0f, 156*89c4ff92SAndroid Build Coastguard Worker 1.0f, 1.0f, -1.0f } } }); 157*89c4ff92SAndroid Build Coastguard Worker } 158*89c4ff92SAndroid Build Coastguard Worker 159*89c4ff92SAndroid Build Coastguard Worker struct SimpleFloorDivInt32Fixture : public FloorDivFixture 160*89c4ff92SAndroid Build Coastguard Worker { SimpleFloorDivInt32FixtureSimpleFloorDivInt32Fixture161*89c4ff92SAndroid Build Coastguard Worker SimpleFloorDivInt32Fixture() : FloorDivFixture("[ 1, 3, 4 ]", "[ 1, 3, 4 ]", "[ 1, 3, 4 ]", 162*89c4ff92SAndroid Build Coastguard Worker "[ -1, 3, 4 ]", "[ -1, 3, 4 ]", "[ -1, 3, 4 ]", "INT32") {} 163*89c4ff92SAndroid Build Coastguard Worker }; 164*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(SimpleFloorDivInt32Fixture, "ParseFloorDivInt32") 165*89c4ff92SAndroid Build Coastguard Worker { 166*89c4ff92SAndroid Build Coastguard Worker using armnn::DataType; 167*89c4ff92SAndroid Build Coastguard Worker 168*89c4ff92SAndroid Build Coastguard Worker RunTest<3, DataType::Signed32>(0, {{ "inputTensor1", { 1, 1, 2, 169*89c4ff92SAndroid Build Coastguard Worker 3, 4, 5, 170*89c4ff92SAndroid Build Coastguard Worker 6, -7, 8, 171*89c4ff92SAndroid Build Coastguard Worker 9, 10, -11 } }, 172*89c4ff92SAndroid Build Coastguard Worker { "inputTensor2", { 1, 1, 4, 173*89c4ff92SAndroid Build Coastguard Worker 3, 40, 5, 174*89c4ff92SAndroid Build Coastguard Worker 6, 2, 8, 175*89c4ff92SAndroid Build Coastguard Worker 9, 10, 11} } }, 176*89c4ff92SAndroid Build Coastguard Worker {{ "outputTensor", { 1, 1, 0, 177*89c4ff92SAndroid Build Coastguard Worker 1, 0, 1, 178*89c4ff92SAndroid Build Coastguard Worker 1, -4, 1, 179*89c4ff92SAndroid Build Coastguard Worker 1, 1, -1 } } }); 180*89c4ff92SAndroid Build Coastguard Worker } 181*89c4ff92SAndroid Build Coastguard Worker 182*89c4ff92SAndroid Build Coastguard Worker 183*89c4ff92SAndroid Build Coastguard Worker struct DynamicFloorDivFixture : public FloorDivFixture 184*89c4ff92SAndroid Build Coastguard Worker { DynamicFloorDivFixtureDynamicFloorDivFixture185*89c4ff92SAndroid Build Coastguard Worker DynamicFloorDivFixture() : FloorDivFixture("[ 1, 3, 4 ]", "[ 1, 3, 4 ]", "[ 1, 3, 4 ]", 186*89c4ff92SAndroid Build Coastguard Worker "[ -1, 3, 4 ]", "[ -1, 3, 4 ]", "[ -1, 3, 4 ]") {} 187*89c4ff92SAndroid Build Coastguard Worker }; 188*89c4ff92SAndroid Build Coastguard Worker 189*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(DynamicFloorDivFixture, "ParseDynamicFloorDiv") 190*89c4ff92SAndroid Build Coastguard Worker { 191*89c4ff92SAndroid Build Coastguard Worker using armnn::DataType; 192*89c4ff92SAndroid Build Coastguard Worker float Inf = std::numeric_limits<float>::infinity(); 193*89c4ff92SAndroid Build Coastguard Worker float NaN = std::numeric_limits<float>::quiet_NaN(); 194*89c4ff92SAndroid Build Coastguard Worker 195*89c4ff92SAndroid Build Coastguard Worker RunTest<3, DataType::Float32, DataType::Float32>(0, {{ "inputTensor1", { 0.0f, 1.0f, 2.0f, 196*89c4ff92SAndroid Build Coastguard Worker 3.0f, 4.0f, 5.0f, 197*89c4ff92SAndroid Build Coastguard Worker 6.0f, -7.0f, 8.0f, 198*89c4ff92SAndroid Build Coastguard Worker 9.0f, 10.0f, -11.0f } }, 199*89c4ff92SAndroid Build Coastguard Worker { "inputTensor2", { 0.0f, 0.0f, 4.0f, 200*89c4ff92SAndroid Build Coastguard Worker 3.0f, 40.0f, 5.0f, 201*89c4ff92SAndroid Build Coastguard Worker 6.0f, 2.0f, 8.0f, 202*89c4ff92SAndroid Build Coastguard Worker 9.0f, 10.0f, 11.0f} } }, 203*89c4ff92SAndroid Build Coastguard Worker {{ "outputTensor", { NaN, Inf, 0.0f, 204*89c4ff92SAndroid Build Coastguard Worker 1.0f, 0.0f, 1.0f, 205*89c4ff92SAndroid Build Coastguard Worker 1.0f, -4.0f, 1.0f, 206*89c4ff92SAndroid Build Coastguard Worker 1.0f, 1.0f, -1.0f } } }, true); 207*89c4ff92SAndroid Build Coastguard Worker } 208*89c4ff92SAndroid Build Coastguard Worker 209*89c4ff92SAndroid Build Coastguard Worker } 210