{#
 Copyright (c) 2021 Arm Limited. All rights reserved.
 SPDX-License-Identifier: Apache-2.0

 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
#}
{{common_template_header}}

#ifndef GENERATED_TEST_DATA_H
#define GENERATED_TEST_DATA_H

#include <cstdint>

{% for namespace in namespaces %}
namespace {{namespace}} {
{% endfor %}

#define NUMBER_OF_FM_FILES  ({{fm_count}}U)
#define IFM_DATA_SIZE  ({{ifm_var_size}}U)
#define OFM_DATA_SIZE  ({{ofm_var_size}}U)

{% for ifm_var_name in ifm_var_names %}
extern const {{data_type}} {{ifm_var_name}}[IFM_DATA_SIZE];
{% endfor %}

{% for ofm_var_name in ofm_var_names %}
extern const {{data_type}} {{ofm_var_name}}[OFM_DATA_SIZE];
{% endfor %}

const {{data_type}}* get_ifm_data_array(const uint32_t idx);
const {{data_type}}* get_ofm_data_array(const uint32_t idx);

{% for namespace in namespaces %}
} /* namespace {{namespace}} */
{% endfor %}

#endif /* GENERATED_TEST_DATA_H */
