1*89c4ff92SAndroid Build Coastguard Worker // 2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2021 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 "armnnOnnxParser/IOnnxParser.hpp" 7*89c4ff92SAndroid Build Coastguard Worker #include "ParserPrototxtFixture.hpp" 8*89c4ff92SAndroid Build Coastguard Worker #include "OnnxParserTestUtils.hpp" 9*89c4ff92SAndroid Build Coastguard Worker 10*89c4ff92SAndroid Build Coastguard Worker TEST_SUITE("OnnxParser_Concat") 11*89c4ff92SAndroid Build Coastguard Worker { 12*89c4ff92SAndroid Build Coastguard Worker 13*89c4ff92SAndroid Build Coastguard Worker struct ConcatFixture : public armnnUtils::ParserPrototxtFixture<armnnOnnxParser::IOnnxParser> 14*89c4ff92SAndroid Build Coastguard Worker { ConcatFixtureConcatFixture15*89c4ff92SAndroid Build Coastguard Worker ConcatFixture(const std::string& axis, 16*89c4ff92SAndroid Build Coastguard Worker const std::vector<int>& input0Shape, 17*89c4ff92SAndroid Build Coastguard Worker const std::vector<int>& input1Shape, 18*89c4ff92SAndroid Build Coastguard Worker const std::vector<int>& outputShape) 19*89c4ff92SAndroid Build Coastguard Worker { 20*89c4ff92SAndroid Build Coastguard Worker m_Prototext = R"( 21*89c4ff92SAndroid Build Coastguard Worker ir_version: 8 22*89c4ff92SAndroid Build Coastguard Worker producer_name: "onnx-example" 23*89c4ff92SAndroid Build Coastguard Worker graph { 24*89c4ff92SAndroid Build Coastguard Worker node { 25*89c4ff92SAndroid Build Coastguard Worker input: "Input0" 26*89c4ff92SAndroid Build Coastguard Worker input: "Input1" 27*89c4ff92SAndroid Build Coastguard Worker output: "Output" 28*89c4ff92SAndroid Build Coastguard Worker op_type: "Concat" 29*89c4ff92SAndroid Build Coastguard Worker attribute { 30*89c4ff92SAndroid Build Coastguard Worker name: "axis" 31*89c4ff92SAndroid Build Coastguard Worker i: )" + axis + R"( 32*89c4ff92SAndroid Build Coastguard Worker type: INT 33*89c4ff92SAndroid Build Coastguard Worker } 34*89c4ff92SAndroid Build Coastguard Worker } 35*89c4ff92SAndroid Build Coastguard Worker name: "concat-model" 36*89c4ff92SAndroid Build Coastguard Worker input { 37*89c4ff92SAndroid Build Coastguard Worker name: "Input0" 38*89c4ff92SAndroid Build Coastguard Worker type { 39*89c4ff92SAndroid Build Coastguard Worker tensor_type { 40*89c4ff92SAndroid Build Coastguard Worker elem_type: 1 41*89c4ff92SAndroid Build Coastguard Worker shape { 42*89c4ff92SAndroid Build Coastguard Worker )" + armnnUtils::ConstructTensorShapeString(input0Shape) + R"( 43*89c4ff92SAndroid Build Coastguard Worker } 44*89c4ff92SAndroid Build Coastguard Worker } 45*89c4ff92SAndroid Build Coastguard Worker } 46*89c4ff92SAndroid Build Coastguard Worker } 47*89c4ff92SAndroid Build Coastguard Worker input { 48*89c4ff92SAndroid Build Coastguard Worker name: "Input1" 49*89c4ff92SAndroid Build Coastguard Worker type { 50*89c4ff92SAndroid Build Coastguard Worker tensor_type { 51*89c4ff92SAndroid Build Coastguard Worker elem_type: 1 52*89c4ff92SAndroid Build Coastguard Worker shape { 53*89c4ff92SAndroid Build Coastguard Worker )" + armnnUtils::ConstructTensorShapeString(input1Shape) + R"( 54*89c4ff92SAndroid Build Coastguard Worker } 55*89c4ff92SAndroid Build Coastguard Worker } 56*89c4ff92SAndroid Build Coastguard Worker } 57*89c4ff92SAndroid Build Coastguard Worker } 58*89c4ff92SAndroid Build Coastguard Worker output { 59*89c4ff92SAndroid Build Coastguard Worker name: "Output" 60*89c4ff92SAndroid Build Coastguard Worker type { 61*89c4ff92SAndroid Build Coastguard Worker tensor_type { 62*89c4ff92SAndroid Build Coastguard Worker elem_type: 1 63*89c4ff92SAndroid Build Coastguard Worker shape { 64*89c4ff92SAndroid Build Coastguard Worker )" + armnnUtils::ConstructTensorShapeString(outputShape) + R"( 65*89c4ff92SAndroid Build Coastguard Worker } 66*89c4ff92SAndroid Build Coastguard Worker } 67*89c4ff92SAndroid Build Coastguard Worker } 68*89c4ff92SAndroid Build Coastguard Worker } 69*89c4ff92SAndroid Build Coastguard Worker })"; 70*89c4ff92SAndroid Build Coastguard Worker Setup(); 71*89c4ff92SAndroid Build Coastguard Worker } 72*89c4ff92SAndroid Build Coastguard Worker }; 73*89c4ff92SAndroid Build Coastguard Worker 74*89c4ff92SAndroid Build Coastguard Worker struct ConcatAxis0Fixture : ConcatFixture 75*89c4ff92SAndroid Build Coastguard Worker { ConcatAxis0FixtureConcatAxis0Fixture76*89c4ff92SAndroid Build Coastguard Worker ConcatAxis0Fixture() : ConcatFixture("0", { 1, 3, 2, 5 }, { 1, 3, 2, 5 }, { 2, 3, 2, 5 }) {} 77*89c4ff92SAndroid Build Coastguard Worker }; 78*89c4ff92SAndroid Build Coastguard Worker 79*89c4ff92SAndroid Build Coastguard Worker struct ConcatAxis1Fixture : ConcatFixture 80*89c4ff92SAndroid Build Coastguard Worker { ConcatAxis1FixtureConcatAxis1Fixture81*89c4ff92SAndroid Build Coastguard Worker ConcatAxis1Fixture() : ConcatFixture("1", { 2, 2, 1, 3 }, { 2, 1, 1, 3 }, { 2, 3, 1, 3 }) {} 82*89c4ff92SAndroid Build Coastguard Worker }; 83*89c4ff92SAndroid Build Coastguard Worker 84*89c4ff92SAndroid Build Coastguard Worker struct ConcatAxis2Fixture : ConcatFixture 85*89c4ff92SAndroid Build Coastguard Worker { ConcatAxis2FixtureConcatAxis2Fixture86*89c4ff92SAndroid Build Coastguard Worker ConcatAxis2Fixture() : ConcatFixture("2", { 2, 3, 1, 1 }, { 2, 3, 2, 1 }, { 2, 3, 3, 1 }) {} 87*89c4ff92SAndroid Build Coastguard Worker }; 88*89c4ff92SAndroid Build Coastguard Worker 89*89c4ff92SAndroid Build Coastguard Worker struct ConcatAxis3Fixture : ConcatFixture 90*89c4ff92SAndroid Build Coastguard Worker { ConcatAxis3FixtureConcatAxis3Fixture91*89c4ff92SAndroid Build Coastguard Worker ConcatAxis3Fixture() : ConcatFixture("3", { 1, 3, 2, 2 }, { 1, 3, 2, 2 }, { 1, 3, 2, 4 }) {} 92*89c4ff92SAndroid Build Coastguard Worker }; 93*89c4ff92SAndroid Build Coastguard Worker 94*89c4ff92SAndroid Build Coastguard Worker struct ConcatNegativeAxisFixture : ConcatFixture 95*89c4ff92SAndroid Build Coastguard Worker { ConcatNegativeAxisFixtureConcatNegativeAxisFixture96*89c4ff92SAndroid Build Coastguard Worker ConcatNegativeAxisFixture() : ConcatFixture("-1", { 1, 2, 5 }, { 1, 2, 3 }, { 1, 2, 8 }) {} 97*89c4ff92SAndroid Build Coastguard Worker }; 98*89c4ff92SAndroid Build Coastguard Worker 99*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(ConcatAxis0Fixture, "ConcatAxis0Test") 100*89c4ff92SAndroid Build Coastguard Worker { 101*89c4ff92SAndroid Build Coastguard Worker RunTest<4, float>({{"Input0", { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 102*89c4ff92SAndroid Build Coastguard Worker 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 103*89c4ff92SAndroid Build Coastguard Worker 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 104*89c4ff92SAndroid Build Coastguard Worker 16.0f, 17.0f, 18.0f, 19.0f, 20.0f, 105*89c4ff92SAndroid Build Coastguard Worker 21.0f, 22.0f, 23.0f, 24.0f, 25.0f, 106*89c4ff92SAndroid Build Coastguard Worker 26.0f, 27.0f, 28.0f, 29.0f, 30.0f }}, 107*89c4ff92SAndroid Build Coastguard Worker {"Input1", { 31.0f, 32.0f, 33.0f, 34.0f, 35.0f, 108*89c4ff92SAndroid Build Coastguard Worker 36.0f, 37.0f, 38.0f, 39.0f, 40.0f, 109*89c4ff92SAndroid Build Coastguard Worker 41.0f, 42.0f, 43.0f, 44.0f, 45.0f, 110*89c4ff92SAndroid Build Coastguard Worker 46.0f, 47.0f, 48.0f, 49.0f, 50.0f, 111*89c4ff92SAndroid Build Coastguard Worker 51.0f, 52.0f, 53.0f, 54.0f, 55.0f, 112*89c4ff92SAndroid Build Coastguard Worker 56.0f, 57.0f, 58.0f, 59.0f, 60.0f }}}, 113*89c4ff92SAndroid Build Coastguard Worker {{"Output", { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 114*89c4ff92SAndroid Build Coastguard Worker 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 115*89c4ff92SAndroid Build Coastguard Worker 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 116*89c4ff92SAndroid Build Coastguard Worker 16.0f, 17.0f, 18.0f, 19.0f, 20.0f, 117*89c4ff92SAndroid Build Coastguard Worker 21.0f, 22.0f, 23.0f, 24.0f, 25.0f, 118*89c4ff92SAndroid Build Coastguard Worker 26.0f, 27.0f, 28.0f, 29.0f, 30.0f, 119*89c4ff92SAndroid Build Coastguard Worker 31.0f, 32.0f, 33.0f, 34.0f, 35.0f, 120*89c4ff92SAndroid Build Coastguard Worker 36.0f, 37.0f, 38.0f, 39.0f, 40.0f, 121*89c4ff92SAndroid Build Coastguard Worker 41.0f, 42.0f, 43.0f, 44.0f, 45.0f, 122*89c4ff92SAndroid Build Coastguard Worker 46.0f, 47.0f, 48.0f, 49.0f, 50.0f, 123*89c4ff92SAndroid Build Coastguard Worker 51.0f, 52.0f, 53.0f, 54.0f, 55.0f, 124*89c4ff92SAndroid Build Coastguard Worker 56.0f, 57.0f, 58.0f, 59.0f, 60.0f }}}); 125*89c4ff92SAndroid Build Coastguard Worker } 126*89c4ff92SAndroid Build Coastguard Worker 127*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(ConcatAxis1Fixture, "ConcatAxis1est") 128*89c4ff92SAndroid Build Coastguard Worker { 129*89c4ff92SAndroid Build Coastguard Worker RunTest<4, float>({{"Input0", { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f }}, 130*89c4ff92SAndroid Build Coastguard Worker {"Input1", { 13.0f, 14.0f, 15.0f, 16.0f, 17.0f, 18.0f }}}, 131*89c4ff92SAndroid Build Coastguard Worker {{"Output", { 1.0f, 2.0f, 3.0f, 132*89c4ff92SAndroid Build Coastguard Worker 4.0f, 5.0f, 6.0f, 133*89c4ff92SAndroid Build Coastguard Worker 13.0f, 14.0f, 15.0f, 134*89c4ff92SAndroid Build Coastguard Worker 7.0f, 8.0f, 9.0f, 135*89c4ff92SAndroid Build Coastguard Worker 10.0f, 11.0f, 12.0f, 136*89c4ff92SAndroid Build Coastguard Worker 16.0f, 17.0f, 18.0f }}}); 137*89c4ff92SAndroid Build Coastguard Worker } 138*89c4ff92SAndroid Build Coastguard Worker 139*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(ConcatAxis2Fixture, "ConcatAxis2Test") 140*89c4ff92SAndroid Build Coastguard Worker { 141*89c4ff92SAndroid Build Coastguard Worker RunTest<4, float>({{"Input0", { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f }}, 142*89c4ff92SAndroid Build Coastguard Worker {"Input1", { 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f, 17.0f, 18.0f }}}, 143*89c4ff92SAndroid Build Coastguard Worker {{"Output", { 1.0f, 7.0f, 8.0f, 144*89c4ff92SAndroid Build Coastguard Worker 2.0f, 9.0f, 10.0f, 145*89c4ff92SAndroid Build Coastguard Worker 3.0f, 11.0f, 12.0f, 146*89c4ff92SAndroid Build Coastguard Worker 4.0f, 13.0f, 14.0f, 147*89c4ff92SAndroid Build Coastguard Worker 5.0f, 15.0f, 16.0f, 148*89c4ff92SAndroid Build Coastguard Worker 6.0f, 17.0f, 18.0f }}}); 149*89c4ff92SAndroid Build Coastguard Worker } 150*89c4ff92SAndroid Build Coastguard Worker 151*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(ConcatAxis3Fixture, "ConcatAxis3Test") 152*89c4ff92SAndroid Build Coastguard Worker { 153*89c4ff92SAndroid Build Coastguard Worker RunTest<4, float>({{"Input0", { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 154*89c4ff92SAndroid Build Coastguard Worker 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f }}, 155*89c4ff92SAndroid Build Coastguard Worker {"Input1", { 13.0f, 14.0f, 15.0f, 16.0f, 17.0f, 18.0f, 156*89c4ff92SAndroid Build Coastguard Worker 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f }}}, 157*89c4ff92SAndroid Build Coastguard Worker {{"Output", { 1.0f, 2.0f, 13.0f, 14.0f, 158*89c4ff92SAndroid Build Coastguard Worker 3.0f, 4.0f, 15.0f, 16.0f, 159*89c4ff92SAndroid Build Coastguard Worker 5.0f, 6.0f, 17.0f, 18.0f, 160*89c4ff92SAndroid Build Coastguard Worker 7.0f, 8.0f, 19.0f, 20.0f, 161*89c4ff92SAndroid Build Coastguard Worker 9.0f, 10.0f, 21.0f, 22.0f, 162*89c4ff92SAndroid Build Coastguard Worker 11.0f, 12.0f, 23.0f, 24.0f }}}); 163*89c4ff92SAndroid Build Coastguard Worker } 164*89c4ff92SAndroid Build Coastguard Worker 165*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(ConcatNegativeAxisFixture, "ConcatNegativeAxisTest") 166*89c4ff92SAndroid Build Coastguard Worker { 167*89c4ff92SAndroid Build Coastguard Worker RunTest<3, float>({{"Input0", { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 168*89c4ff92SAndroid Build Coastguard Worker 6.0f, 7.0f, 8.0f, 9.0f, 10.0f }}, 169*89c4ff92SAndroid Build Coastguard Worker {"Input1", { 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f }}}, 170*89c4ff92SAndroid Build Coastguard Worker {{"Output", { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 11.0f, 12.0f, 13.0f, 171*89c4ff92SAndroid Build Coastguard Worker 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 14.0f, 15.0f, 16.0f }}}); 172*89c4ff92SAndroid Build Coastguard Worker } 173*89c4ff92SAndroid Build Coastguard Worker 174*89c4ff92SAndroid Build Coastguard Worker struct ConcatMultipleInputsFixture : public armnnUtils::ParserPrototxtFixture<armnnOnnxParser::IOnnxParser> 175*89c4ff92SAndroid Build Coastguard Worker { ConcatMultipleInputsFixtureConcatMultipleInputsFixture176*89c4ff92SAndroid Build Coastguard Worker ConcatMultipleInputsFixture() 177*89c4ff92SAndroid Build Coastguard Worker { 178*89c4ff92SAndroid Build Coastguard Worker m_Prototext = R"( 179*89c4ff92SAndroid Build Coastguard Worker ir_version: 8 180*89c4ff92SAndroid Build Coastguard Worker producer_name: "onnx-example" 181*89c4ff92SAndroid Build Coastguard Worker graph { 182*89c4ff92SAndroid Build Coastguard Worker node { 183*89c4ff92SAndroid Build Coastguard Worker input: "Input0" 184*89c4ff92SAndroid Build Coastguard Worker input: "Input1" 185*89c4ff92SAndroid Build Coastguard Worker input: "Input2" 186*89c4ff92SAndroid Build Coastguard Worker output: "Output" 187*89c4ff92SAndroid Build Coastguard Worker op_type: "Concat" 188*89c4ff92SAndroid Build Coastguard Worker attribute { 189*89c4ff92SAndroid Build Coastguard Worker name: "axis" 190*89c4ff92SAndroid Build Coastguard Worker i: 1 191*89c4ff92SAndroid Build Coastguard Worker type: INT 192*89c4ff92SAndroid Build Coastguard Worker } 193*89c4ff92SAndroid Build Coastguard Worker } 194*89c4ff92SAndroid Build Coastguard Worker name: "concat-model" 195*89c4ff92SAndroid Build Coastguard Worker input { 196*89c4ff92SAndroid Build Coastguard Worker name: "Input0" 197*89c4ff92SAndroid Build Coastguard Worker type { 198*89c4ff92SAndroid Build Coastguard Worker tensor_type { 199*89c4ff92SAndroid Build Coastguard Worker elem_type: 1 200*89c4ff92SAndroid Build Coastguard Worker shape { 201*89c4ff92SAndroid Build Coastguard Worker dim { 202*89c4ff92SAndroid Build Coastguard Worker dim_value: 3 203*89c4ff92SAndroid Build Coastguard Worker } 204*89c4ff92SAndroid Build Coastguard Worker dim { 205*89c4ff92SAndroid Build Coastguard Worker dim_value: 2 206*89c4ff92SAndroid Build Coastguard Worker } 207*89c4ff92SAndroid Build Coastguard Worker } 208*89c4ff92SAndroid Build Coastguard Worker } 209*89c4ff92SAndroid Build Coastguard Worker } 210*89c4ff92SAndroid Build Coastguard Worker } 211*89c4ff92SAndroid Build Coastguard Worker input { 212*89c4ff92SAndroid Build Coastguard Worker name: "Input1" 213*89c4ff92SAndroid Build Coastguard Worker type { 214*89c4ff92SAndroid Build Coastguard Worker tensor_type { 215*89c4ff92SAndroid Build Coastguard Worker elem_type: 1 216*89c4ff92SAndroid Build Coastguard Worker shape { 217*89c4ff92SAndroid Build Coastguard Worker dim { 218*89c4ff92SAndroid Build Coastguard Worker dim_value: 3 219*89c4ff92SAndroid Build Coastguard Worker } 220*89c4ff92SAndroid Build Coastguard Worker dim { 221*89c4ff92SAndroid Build Coastguard Worker dim_value: 3 222*89c4ff92SAndroid Build Coastguard Worker } 223*89c4ff92SAndroid Build Coastguard Worker } 224*89c4ff92SAndroid Build Coastguard Worker } 225*89c4ff92SAndroid Build Coastguard Worker } 226*89c4ff92SAndroid Build Coastguard Worker } 227*89c4ff92SAndroid Build Coastguard Worker input { 228*89c4ff92SAndroid Build Coastguard Worker name: "Input2" 229*89c4ff92SAndroid Build Coastguard Worker type { 230*89c4ff92SAndroid Build Coastguard Worker tensor_type { 231*89c4ff92SAndroid Build Coastguard Worker elem_type: 1 232*89c4ff92SAndroid Build Coastguard Worker shape { 233*89c4ff92SAndroid Build Coastguard Worker dim { 234*89c4ff92SAndroid Build Coastguard Worker dim_value: 3 235*89c4ff92SAndroid Build Coastguard Worker } 236*89c4ff92SAndroid Build Coastguard Worker dim { 237*89c4ff92SAndroid Build Coastguard Worker dim_value: 1 238*89c4ff92SAndroid Build Coastguard Worker } 239*89c4ff92SAndroid Build Coastguard Worker } 240*89c4ff92SAndroid Build Coastguard Worker } 241*89c4ff92SAndroid Build Coastguard Worker } 242*89c4ff92SAndroid Build Coastguard Worker } 243*89c4ff92SAndroid Build Coastguard Worker output { 244*89c4ff92SAndroid Build Coastguard Worker name: "Output" 245*89c4ff92SAndroid Build Coastguard Worker type { 246*89c4ff92SAndroid Build Coastguard Worker tensor_type { 247*89c4ff92SAndroid Build Coastguard Worker elem_type: 1 248*89c4ff92SAndroid Build Coastguard Worker shape { 249*89c4ff92SAndroid Build Coastguard Worker dim { 250*89c4ff92SAndroid Build Coastguard Worker dim_value: 3 251*89c4ff92SAndroid Build Coastguard Worker } 252*89c4ff92SAndroid Build Coastguard Worker dim { 253*89c4ff92SAndroid Build Coastguard Worker dim_value: 6 254*89c4ff92SAndroid Build Coastguard Worker } 255*89c4ff92SAndroid Build Coastguard Worker } 256*89c4ff92SAndroid Build Coastguard Worker } 257*89c4ff92SAndroid Build Coastguard Worker } 258*89c4ff92SAndroid Build Coastguard Worker } 259*89c4ff92SAndroid Build Coastguard Worker })"; 260*89c4ff92SAndroid Build Coastguard Worker Setup(); 261*89c4ff92SAndroid Build Coastguard Worker } 262*89c4ff92SAndroid Build Coastguard Worker }; 263*89c4ff92SAndroid Build Coastguard Worker 264*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(ConcatMultipleInputsFixture, "ConcatMultipleInputsTest") 265*89c4ff92SAndroid Build Coastguard Worker { 266*89c4ff92SAndroid Build Coastguard Worker RunTest<2, float>({{"Input0", { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f }}, 267*89c4ff92SAndroid Build Coastguard Worker {"Input1", { 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f }}, 268*89c4ff92SAndroid Build Coastguard Worker {"Input2", { 16.0f, 17.0f, 18.0f }}}, 269*89c4ff92SAndroid Build Coastguard Worker {{"Output", { 1.0f, 2.0f, 7.0f, 8.0f, 9.0f, 16.0f, 270*89c4ff92SAndroid Build Coastguard Worker 3.0f, 4.0f, 10.0f, 11.0f, 12.0f, 17.0f, 271*89c4ff92SAndroid Build Coastguard Worker 5.0f, 6.0f, 13.0f, 14.0f, 15.0f, 18.0f }}}); 272*89c4ff92SAndroid Build Coastguard Worker } 273*89c4ff92SAndroid Build Coastguard Worker 274*89c4ff92SAndroid Build Coastguard Worker } 275