aboutsummaryrefslogtreecommitdiff
path: root/src/armnnTfLiteParser/test/Unpack.cpp
blob: 10e682e36a958c25eb41eff18187e8a355400a32 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
//
// Copyright © 2017 Arm Ltd. All rights reserved.
// SPDX-License-Identifier: MIT
//

#include <boost/test/unit_test.hpp>
#include "ParserFlatbuffersFixture.hpp"
#include "../TfLiteParser.hpp"

#include <string>
#include <iostream>

BOOST_AUTO_TEST_SUITE(TensorflowLiteParser)

struct UnpackFixture : public ParserFlatbuffersFixture
{
    explicit UnpackFixture(const std::string & inputShape,
                           const unsigned int numberOfOutputs,
                           const std::string & outputShape,
                           const std::string & axis,
                           const std::string & num)
    {
        // As input index is 0, output indexes start at 1
        std::string outputIndexes = "1";
        for(unsigned int i = 1; i < numberOfOutputs; i++)
        {
            outputIndexes += ", " + std::to_string(i+1);
        }
        m_JsonString = R"(
            {
                "version": 3,
                "operator_codes": [ { "builtin_code": "UNPACK" } ],
                "subgraphs": [ {
                    "tensors": [
                        {
                            "shape": )" + inputShape + R"(,
                            "type": "FLOAT32",
                            "buffer": 0,
                            "name": "inputTensor",
                            "quantization": {
                                "min": [ 0.0 ],
                                "max": [ 255.0 ],
                                "scale": [ 1.0 ],
                                "zero_point": [ 0 ],
                            }
                        },)";
        // Append the required number of outputs for this UnpackFixture.
        // As input index is 0, output indexes start at 1.
        for(unsigned int i = 0; i < numberOfOutputs; i++)
        {
            m_JsonString += R"(
                        {
                            "shape": )" + outputShape + R"( ,
                                "type": "FLOAT32",
                                "buffer": )" + std::to_string(i + 1) + R"(,
                                "name": "outputTensor)" + std::to_string(i + 1) + R"(",
                                "quantization": {
                                "min": [ 0.0 ],
                                "max": [ 255.0 ],
                                "scale": [ 1.0 ],
                                "zero_point": [ 0 ],
                            }
                        },)";
        }
        m_JsonString += R"(
                    ],
                    "inputs": [ 0 ],
                    "outputs": [ )" + outputIndexes + R"( ],
                    "operators": [
                        {
                            "opcode_index": 0,
                            "inputs": [ 0 ],
                            "outputs": [ )" + outputIndexes + R"( ],
                            "builtin_options_type": "UnpackOptions",
                            "builtin_options": {
                                "axis": )" + axis;

                    if(!num.empty())
                    {
                        m_JsonString += R"(,
                                "num" : )" + num;
                    }

                    m_JsonString += R"(
                            },
                            "custom_options_format": "FLEXBUFFERS"
                        }
                    ],
                } ],
                "buffers" : [
                    { },
                    { }
                ]
            }
        )";
        Setup();
    }
};

struct DefaultUnpackAxisZeroFixture : UnpackFixture
{
    DefaultUnpackAxisZeroFixture() : UnpackFixture("[ 4, 1, 6 ]", 4, "[ 1, 6 ]", "0", "") {}
};

BOOST_FIXTURE_TEST_CASE(UnpackAxisZeroNumIsDefaultNotSpecified, DefaultUnpackAxisZeroFixture)
{
    RunTest<2, armnn::DataType::Float32>(
        0,
        { {"inputTensor", { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f,
                            7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f,
                            13.0f, 14.0f, 15.0f, 16.0f, 17.0f, 18.0f,
                            19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f } } },
        { {"outputTensor1", { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f }},
          {"outputTensor2", { 7.0f,  8.0f,  9.0f, 10.0f, 11.0f, 12.0f }},
          {"outputTensor3", { 13.0f, 14.0f, 15.0f, 16.0f, 17.0f, 18.0f }},
          {"outputTensor4", { 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f }} });
}

BOOST_AUTO_TEST_SUITE_END()