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 <armnn/utility/IgnoreUnused.hpp> 10*89c4ff92SAndroid Build Coastguard Worker 11*89c4ff92SAndroid Build Coastguard Worker #include <doctest/doctest.h> 12*89c4ff92SAndroid Build Coastguard Worker 13*89c4ff92SAndroid Build Coastguard Worker #include <string> 14*89c4ff92SAndroid Build Coastguard Worker 15*89c4ff92SAndroid Build Coastguard Worker TEST_SUITE("Deserializer_Add") 16*89c4ff92SAndroid Build Coastguard Worker { 17*89c4ff92SAndroid Build Coastguard Worker struct AddFixture : public ParserFlatbuffersSerializeFixture 18*89c4ff92SAndroid Build Coastguard Worker { AddFixtureAddFixture19*89c4ff92SAndroid Build Coastguard Worker explicit AddFixture(const std::string & inputShape1, 20*89c4ff92SAndroid Build Coastguard Worker const std::string & inputShape2, 21*89c4ff92SAndroid Build Coastguard Worker const std::string & outputShape, 22*89c4ff92SAndroid Build Coastguard Worker const std::string & dataType, 23*89c4ff92SAndroid Build Coastguard Worker const std::string & activation="NONE") 24*89c4ff92SAndroid Build Coastguard Worker { 25*89c4ff92SAndroid Build Coastguard Worker armnn::IgnoreUnused(activation); 26*89c4ff92SAndroid Build Coastguard Worker m_JsonString = R"( 27*89c4ff92SAndroid Build Coastguard Worker { 28*89c4ff92SAndroid Build Coastguard Worker inputIds: [0, 1], 29*89c4ff92SAndroid Build Coastguard Worker outputIds: [3], 30*89c4ff92SAndroid Build Coastguard Worker layers: [ 31*89c4ff92SAndroid Build Coastguard Worker { 32*89c4ff92SAndroid Build Coastguard Worker layer_type: "InputLayer", 33*89c4ff92SAndroid Build Coastguard Worker layer: { 34*89c4ff92SAndroid Build Coastguard Worker base: { 35*89c4ff92SAndroid Build Coastguard Worker layerBindingId: 0, 36*89c4ff92SAndroid Build Coastguard Worker base: { 37*89c4ff92SAndroid Build Coastguard Worker index: 0, 38*89c4ff92SAndroid Build Coastguard Worker layerName: "InputLayer1", 39*89c4ff92SAndroid Build Coastguard Worker layerType: "Input", 40*89c4ff92SAndroid Build Coastguard Worker inputSlots: [{ 41*89c4ff92SAndroid Build Coastguard Worker index: 0, 42*89c4ff92SAndroid Build Coastguard Worker connection: {sourceLayerIndex:0, outputSlotIndex:0 }, 43*89c4ff92SAndroid Build Coastguard Worker }], 44*89c4ff92SAndroid Build Coastguard Worker outputSlots: [ { 45*89c4ff92SAndroid Build Coastguard Worker index: 0, 46*89c4ff92SAndroid Build Coastguard Worker tensorInfo: { 47*89c4ff92SAndroid Build Coastguard Worker dimensions: )" + inputShape1 + R"(, 48*89c4ff92SAndroid Build Coastguard Worker dataType: )" + dataType + R"( 49*89c4ff92SAndroid Build Coastguard Worker }, 50*89c4ff92SAndroid Build Coastguard Worker }], 51*89c4ff92SAndroid Build Coastguard Worker },}}, 52*89c4ff92SAndroid Build Coastguard Worker }, 53*89c4ff92SAndroid Build Coastguard Worker { 54*89c4ff92SAndroid Build Coastguard Worker layer_type: "InputLayer", 55*89c4ff92SAndroid Build Coastguard Worker layer: { 56*89c4ff92SAndroid Build Coastguard Worker base: { 57*89c4ff92SAndroid Build Coastguard Worker layerBindingId: 1, 58*89c4ff92SAndroid Build Coastguard Worker base: { 59*89c4ff92SAndroid Build Coastguard Worker index:1, 60*89c4ff92SAndroid Build Coastguard Worker layerName: "InputLayer2", 61*89c4ff92SAndroid Build Coastguard Worker layerType: "Input", 62*89c4ff92SAndroid Build Coastguard Worker inputSlots: [{ 63*89c4ff92SAndroid Build Coastguard Worker index: 0, 64*89c4ff92SAndroid Build Coastguard Worker connection: {sourceLayerIndex:0, outputSlotIndex:0 }, 65*89c4ff92SAndroid Build Coastguard Worker }], 66*89c4ff92SAndroid Build Coastguard Worker outputSlots: [ { 67*89c4ff92SAndroid Build Coastguard Worker index: 0, 68*89c4ff92SAndroid Build Coastguard Worker tensorInfo: { 69*89c4ff92SAndroid Build Coastguard Worker dimensions: )" + inputShape2 + R"(, 70*89c4ff92SAndroid Build Coastguard Worker dataType: )" + dataType + R"( 71*89c4ff92SAndroid Build Coastguard Worker }, 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: "AdditionLayer", 77*89c4ff92SAndroid Build Coastguard Worker layer : { 78*89c4ff92SAndroid Build Coastguard Worker base: { 79*89c4ff92SAndroid Build Coastguard Worker index:2, 80*89c4ff92SAndroid Build Coastguard Worker layerName: "AdditionLayer", 81*89c4ff92SAndroid Build Coastguard Worker layerType: "Addition", 82*89c4ff92SAndroid Build Coastguard Worker inputSlots: [ 83*89c4ff92SAndroid Build Coastguard Worker { 84*89c4ff92SAndroid Build Coastguard Worker index: 0, 85*89c4ff92SAndroid Build Coastguard Worker connection: {sourceLayerIndex:0, outputSlotIndex:0 }, 86*89c4ff92SAndroid Build Coastguard Worker }, 87*89c4ff92SAndroid Build Coastguard Worker { 88*89c4ff92SAndroid Build Coastguard Worker index: 1, 89*89c4ff92SAndroid Build Coastguard Worker connection: {sourceLayerIndex:1, outputSlotIndex:0 }, 90*89c4ff92SAndroid Build Coastguard Worker } 91*89c4ff92SAndroid Build Coastguard Worker ], 92*89c4ff92SAndroid Build Coastguard Worker outputSlots: [ { 93*89c4ff92SAndroid Build Coastguard Worker index: 0, 94*89c4ff92SAndroid Build Coastguard Worker tensorInfo: { 95*89c4ff92SAndroid Build Coastguard Worker dimensions: )" + outputShape + R"(, 96*89c4ff92SAndroid Build Coastguard Worker dataType: )" + dataType + R"( 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 layer_type: "OutputLayer", 103*89c4ff92SAndroid Build Coastguard Worker layer: { 104*89c4ff92SAndroid Build Coastguard Worker base:{ 105*89c4ff92SAndroid Build Coastguard Worker layerBindingId: 0, 106*89c4ff92SAndroid Build Coastguard Worker base: { 107*89c4ff92SAndroid Build Coastguard Worker index: 3, 108*89c4ff92SAndroid Build Coastguard Worker layerName: "OutputLayer", 109*89c4ff92SAndroid Build Coastguard Worker layerType: "Output", 110*89c4ff92SAndroid Build Coastguard Worker inputSlots: [{ 111*89c4ff92SAndroid Build Coastguard Worker index: 0, 112*89c4ff92SAndroid Build Coastguard Worker connection: {sourceLayerIndex:2, outputSlotIndex:0 }, 113*89c4ff92SAndroid Build Coastguard Worker }], 114*89c4ff92SAndroid Build Coastguard Worker outputSlots: [ { 115*89c4ff92SAndroid Build Coastguard Worker index: 0, 116*89c4ff92SAndroid Build Coastguard Worker tensorInfo: { 117*89c4ff92SAndroid Build Coastguard Worker dimensions: )" + outputShape + R"(, 118*89c4ff92SAndroid Build Coastguard Worker dataType: )" + dataType + R"( 119*89c4ff92SAndroid Build Coastguard Worker }, 120*89c4ff92SAndroid Build Coastguard Worker }], 121*89c4ff92SAndroid Build Coastguard Worker }}}, 122*89c4ff92SAndroid Build Coastguard Worker }] 123*89c4ff92SAndroid Build Coastguard Worker } 124*89c4ff92SAndroid Build Coastguard Worker )"; 125*89c4ff92SAndroid Build Coastguard Worker Setup(); 126*89c4ff92SAndroid Build Coastguard Worker } 127*89c4ff92SAndroid Build Coastguard Worker }; 128*89c4ff92SAndroid Build Coastguard Worker 129*89c4ff92SAndroid Build Coastguard Worker 130*89c4ff92SAndroid Build Coastguard Worker struct SimpleAddFixture : AddFixture 131*89c4ff92SAndroid Build Coastguard Worker { SimpleAddFixtureSimpleAddFixture132*89c4ff92SAndroid Build Coastguard Worker SimpleAddFixture() : AddFixture("[ 2, 2 ]", 133*89c4ff92SAndroid Build Coastguard Worker "[ 2, 2 ]", 134*89c4ff92SAndroid Build Coastguard Worker "[ 2, 2 ]", 135*89c4ff92SAndroid Build Coastguard Worker "QuantisedAsymm8") {} 136*89c4ff92SAndroid Build Coastguard Worker }; 137*89c4ff92SAndroid Build Coastguard Worker 138*89c4ff92SAndroid Build Coastguard Worker struct SimpleAddFixture2 : AddFixture 139*89c4ff92SAndroid Build Coastguard Worker { SimpleAddFixture2SimpleAddFixture2140*89c4ff92SAndroid Build Coastguard Worker SimpleAddFixture2() : AddFixture("[ 2, 2, 1, 1 ]", 141*89c4ff92SAndroid Build Coastguard Worker "[ 2, 2, 1, 1 ]", 142*89c4ff92SAndroid Build Coastguard Worker "[ 2, 2, 1, 1 ]", 143*89c4ff92SAndroid Build Coastguard Worker "Float32") {} 144*89c4ff92SAndroid Build Coastguard Worker }; 145*89c4ff92SAndroid Build Coastguard Worker 146*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(SimpleAddFixture, "AddQuantisedAsymm8") 147*89c4ff92SAndroid Build Coastguard Worker { 148*89c4ff92SAndroid Build Coastguard Worker RunTest<2, armnn::DataType::QAsymmU8>( 149*89c4ff92SAndroid Build Coastguard Worker 0, 150*89c4ff92SAndroid Build Coastguard Worker {{"InputLayer1", { 0, 1, 2, 3 }}, 151*89c4ff92SAndroid Build Coastguard Worker {"InputLayer2", { 4, 5, 6, 7 }}}, 152*89c4ff92SAndroid Build Coastguard Worker {{"OutputLayer", { 4, 6, 8, 10 }}}); 153*89c4ff92SAndroid Build Coastguard Worker } 154*89c4ff92SAndroid Build Coastguard Worker 155*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(SimpleAddFixture2, "AddFloat32") 156*89c4ff92SAndroid Build Coastguard Worker { 157*89c4ff92SAndroid Build Coastguard Worker RunTest<4, armnn::DataType::Float32>( 158*89c4ff92SAndroid Build Coastguard Worker 0, 159*89c4ff92SAndroid Build Coastguard Worker {{"InputLayer1", { 111, 85, 226, 3 }}, 160*89c4ff92SAndroid Build Coastguard Worker {"InputLayer2", { 5, 8, 10, 12 }}}, 161*89c4ff92SAndroid Build Coastguard Worker {{"OutputLayer", { 116, 93, 236, 15 }}}); 162*89c4ff92SAndroid Build Coastguard Worker } 163*89c4ff92SAndroid Build Coastguard Worker 164*89c4ff92SAndroid Build Coastguard Worker } 165