aboutsummaryrefslogtreecommitdiff
path: root/reference_model/test/model_runner_tests.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'reference_model/test/model_runner_tests.cpp')
-rw-r--r--reference_model/test/model_runner_tests.cpp637
1 files changed, 1 insertions, 636 deletions
diff --git a/reference_model/test/model_runner_tests.cpp b/reference_model/test/model_runner_tests.cpp
index 5292dd8..2aed53f 100644
--- a/reference_model/test/model_runner_tests.cpp
+++ b/reference_model/test/model_runner_tests.cpp
@@ -1,5 +1,5 @@
-// Copyright (c) 2022, ARM Limited.
+// Copyright (c) 2022,2024 ARM Limited.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -19,7 +19,6 @@
#include "general_utils.h"
#include "model_runner.h"
-#include "operators.h"
#include <numeric>
@@ -43,640 +42,6 @@ void compareOutput(std::vector<T>& tensor1, std::vector<T>& tensor2, size_t size
TEST_SUITE("model_runner")
{
- TEST_CASE("op_entry_add")
- {
- // Inputs/Outputs
- tosa_datatype_t dt = tosa_datatype_fp32_t;
- std::vector<int32_t> input_shape = { 2, 4, 4, 1 };
- std::vector<int32_t> output_shape = { 2, 4, 4, 1 };
- std::vector<float> srcData1(32, 4.0f);
- std::vector<float> srcData2(32, 3.0f);
- std::vector<float> dstData(32, 0.0f);
-
- tosa_tensor_t input1;
- input1.shape = input_shape.data();
- input1.num_dims = input_shape.size();
- input1.data_type = dt;
- input1.data = reinterpret_cast<uint8_t*>(srcData1.data());
- input1.size = srcData1.size() * sizeof(float);
-
- tosa_tensor_t input2;
- input2.shape = input_shape.data();
- input2.num_dims = input_shape.size();
- input2.data_type = dt;
- input2.data = reinterpret_cast<uint8_t*>(srcData2.data());
- input2.size = srcData2.size() * sizeof(float);
-
- tosa_tensor_t output;
- output.shape = output_shape.data();
- output.num_dims = output_shape.size();
- output.data_type = dt;
- output.data = reinterpret_cast<uint8_t*>(dstData.data());
- output.size = dstData.size() * sizeof(float);
-
- // Execution
- auto status = tosa_run_add(input1, input2, output, {});
- CHECK((status == tosa_status_valid));
-
- // Compare results
- std::vector<float> expectedData(8, 7.0f);
- compareOutput(dstData, expectedData, expectedData.size());
- }
-
- TEST_CASE("op_entry_avg_pool2d")
- {
- // Pool parameters
- const int32_t kernel[2] = { 2, 2 };
- const int32_t stride[2] = { 2, 2 };
- const int32_t pad[4] = { 0, 0, 0, 0 };
-
- // Inputs/Outputs
- tosa_datatype_t dt = tosa_datatype_fp32_t;
- std::vector<int32_t> input_shape = { 2, 4, 4, 1 };
- std::vector<int32_t> output_shape = { 2, 2, 2, 1 };
- std::vector<float> srcData(32, 7.0f);
- std::vector<float> dstData(8, 0.f);
-
- tosa_tensor_t input;
- input.shape = input_shape.data();
- input.num_dims = input_shape.size();
- input.data_type = dt;
- input.data = reinterpret_cast<uint8_t*>(srcData.data());
- input.size = srcData.size() * sizeof(float);
-
- tosa_tensor_t output;
- output.shape = output_shape.data();
- output.num_dims = output_shape.size();
- output.data_type = dt;
- output.data = reinterpret_cast<uint8_t*>(dstData.data());
- output.size = dstData.size() * sizeof(float);
-
- tosa_acc_size_t acc_size = tosa_acc_size_fp32_t;
-
- // Execution
- auto status = tosa_run_avg_pool2d(input, kernel, stride, pad, acc_size, 0, 0, output, {});
- CHECK((status == tosa_status_valid));
-
- // Compare results
- std::vector<float> expectedData(8, 7.0f);
- compareOutput(dstData, expectedData, expectedData.size());
- }
-
- TEST_CASE("op_entry_cast")
- {
- // Inputs/Outputs
- std::vector<int32_t> shape = { 1, 2, 2, 1 };
- std::vector<int16_t> srcData = { 15, 13, 5, -51 };
- std::vector<float> dstData(4, 0.f);
-
- tosa_tensor_t input;
- input.shape = shape.data();
- input.num_dims = shape.size();
- input.data_type = tosa_datatype_int16_t;
- input.data = reinterpret_cast<uint8_t*>(srcData.data());
- input.size = srcData.size() * sizeof(int16_t);
-
- tosa_tensor_t output;
- output.shape = shape.data();
- output.num_dims = shape.size();
- output.data_type = tosa_datatype_fp32_t;
- output.data = reinterpret_cast<uint8_t*>(dstData.data());
- output.size = dstData.size() * sizeof(float);
-
- // Execution
- auto status = tosa_run_cast(input, output, {});
- CHECK((status == tosa_status_valid));
-
- // Compare results
- std::vector<float> expectedData = { 15.f, 13.f, 5.f, -51.f };
- compareOutput(dstData, expectedData, expectedData.size());
- }
-
- TEST_CASE("op_entry_concat")
- {
- // Concat parameters
- const int32_t axis = 2;
-
- // Inputs/Outputs
- tosa_datatype_t dt = tosa_datatype_fp32_t;
- std::vector<int32_t> input1_shape = { 1, 2, 3, 4 };
- std::vector<int32_t> input2_shape = { 1, 2, 5, 4 };
- std::vector<int32_t> output_shape = { 1, 2, 8, 4 };
- std::vector<float> src1Data(24, 1.0f);
- std::vector<float> src2Data(40, 1.0f);
- std::vector<float> dstData(64, 0.f);
-
- tosa_tensor_t input1;
- input1.shape = input1_shape.data();
- input1.num_dims = input1_shape.size();
- input1.data_type = dt;
- input1.data = reinterpret_cast<uint8_t*>(src1Data.data());
- input1.size = src1Data.size() * sizeof(float);
-
- tosa_tensor_t input2;
- input2.shape = input2_shape.data();
- input2.num_dims = input2_shape.size();
- input2.data_type = dt;
- input2.data = reinterpret_cast<uint8_t*>(src2Data.data());
- input2.size = src2Data.size() * sizeof(float);
-
- tosa_tensor_list_t input_list;
- tosa_tensor_t inputs[]{ input1, input2 };
- input_list.size = 2;
- input_list.tensors = inputs;
-
- tosa_tensor_t output;
- output.shape = output_shape.data();
- output.num_dims = output_shape.size();
- output.data_type = dt;
- output.data = reinterpret_cast<uint8_t*>(dstData.data());
- output.size = dstData.size() * sizeof(float);
-
- auto status = tosa_run_concat(input_list, axis, output, {});
- CHECK((status == tosa_status_valid));
-
- std::vector<float> expectedData(64, 1.0f);
- compareOutput(dstData, expectedData, expectedData.size());
- }
-
- TEST_CASE("op_entry_conv2d")
- {
- // Conv parameters
- const int32_t stride[2] = { 1, 1 };
- const int32_t pad[4] = { 0, 0, 0, 0 };
- const int32_t dilation[2] = { 1, 1 };
-
- // Inputs/Outputs
- tosa_datatype_t dt = tosa_datatype_fp32_t;
- std::vector<int32_t> input_shape = { 1, 32, 32, 8 };
- std::vector<int32_t> output_shape = { 1, 32, 32, 16 };
- std::vector<int32_t> weight_shape = { 16, 1, 1, 8 };
- std::vector<int32_t> bias_shape = { 16 };
- std::vector<float> srcData(32 * 32 * 8, 1.0f);
- std::vector<float> dstData(32 * 32 * 16, 0.f);
- std::vector<float> biasData(16, 0.f);
- std::vector<float> weightData(16 * 8, 1.0f);
-
- tosa_tensor_t input;
- input.shape = input_shape.data();
- input.num_dims = input_shape.size();
- input.data_type = dt;
- input.data = reinterpret_cast<uint8_t*>(srcData.data());
- input.size = srcData.size() * sizeof(float);
-
- tosa_tensor_t weight;
- weight.shape = weight_shape.data();
- weight.num_dims = weight_shape.size();
- weight.data_type = dt;
- weight.data = reinterpret_cast<uint8_t*>(weightData.data());
- weight.size = weightData.size() * sizeof(float);
-
- tosa_tensor_t bias;
- bias.shape = bias_shape.data();
- bias.num_dims = bias_shape.size();
- bias.data_type = dt;
- bias.data = reinterpret_cast<uint8_t*>(biasData.data());
- bias.size = biasData.size() * sizeof(float);
-
- tosa_tensor_t output;
- output.shape = output_shape.data();
- output.num_dims = output_shape.size();
- output.data_type = dt;
- output.data = reinterpret_cast<uint8_t*>(dstData.data());
- output.size = dstData.size() * sizeof(float);
-
- const int32_t input_zp = 0;
- const int32_t weight_zp = 0;
- const bool local_bound = false;
-
- // Execution
- auto status =
- tosa_run_conv2d(input, weight, bias, pad, stride, dilation, input_zp, weight_zp, local_bound, output, {});
- CHECK((status == tosa_status_valid));
-
- // Compare results
- std::vector<float> expectedData(32 * 32 * 16, 8.0f);
- compareOutput(dstData, expectedData, expectedData.size());
- }
-
- TEST_CASE("op_entry_fft2d")
- {
- // Fft2d parameters
- const bool inverse = false;
- const bool local_bound = false;
-
- // Inputs/Outputs
- tosa_datatype_t dt = tosa_datatype_fp32_t;
- std::vector<int32_t> input_shape_real = { 1, 32, 32 };
- std::vector<int32_t> output_shape_real = { 1, 32, 32 };
- std::vector<int32_t> input_shape_imag = { 1, 32, 32 };
- std::vector<int32_t> output_shape_imag = { 1, 32, 32 };
- std::vector<float> srcData(32 * 32 * 1, 0.f);
- std::vector<float> dstDataReal(32 * 32 * 1, 0.f);
- std::vector<float> dstDataImag(32 * 32 * 1, 0.f);
-
- tosa_tensor_t input_real;
- input_real.shape = input_shape_real.data();
- input_real.num_dims = input_shape_real.size();
- input_real.data_type = dt;
- input_real.data = reinterpret_cast<uint8_t*>(srcData.data());
- input_real.size = srcData.size() * sizeof(float);
-
- tosa_tensor_t input_imag;
- input_imag.shape = input_shape_imag.data();
- input_imag.num_dims = input_shape_imag.size();
- input_imag.data_type = dt;
- input_imag.data = reinterpret_cast<uint8_t*>(srcData.data());
- input_imag.size = srcData.size() * sizeof(float);
-
- tosa_tensor_t output_real;
- output_real.shape = output_shape_real.data();
- output_real.num_dims = output_shape_real.size();
- output_real.data_type = dt;
- output_real.data = reinterpret_cast<uint8_t*>(dstDataReal.data());
- output_real.size = dstDataReal.size() * sizeof(float);
-
- tosa_tensor_t output_imag;
- output_imag.shape = output_shape_imag.data();
- output_imag.num_dims = output_shape_imag.size();
- output_imag.data_type = dt;
- output_imag.data = reinterpret_cast<uint8_t*>(dstDataImag.data());
- output_imag.size = dstDataImag.size() * sizeof(float);
-
- // Execution
- auto status = tosa_run_fft2d(input_real, input_imag, inverse, output_real, local_bound, output_imag, {});
- CHECK((status == tosa_status_valid));
-
- // Compare results
- std::vector<float> expectedDataReal = {};
- std::vector<float> expectedDataImag = {};
- for (unsigned i = 0; i < dstDataReal.size(); ++i)
- {
- std::vector<float> sum_real = {};
- std::vector<float> sum_imag = {};
- for (unsigned j = 0; j < dstDataImag.size(); ++j)
- {
- float a = ((inverse) ? -1 : 1) * 402.123859659; /* 2 * pi * ((iY * oY) / H + (iX * oX) / W) */
- sum_real.emplace_back(srcData[j] * std::cos(a) + srcData[j] * std::sin(a));
- sum_imag.emplace_back((-1) * srcData[j] * std::sin(a) + srcData[j] * std::sin(a));
- }
- expectedDataReal.emplace_back(sum_real[i]);
- expectedDataImag.emplace_back(sum_imag[i]);
- }
- compareOutput(dstDataReal, expectedDataReal, expectedDataReal.size());
- compareOutput(dstDataImag, expectedDataImag, expectedDataImag.size());
- }
-
- TEST_CASE("op_entry_rfft2d")
- {
- // Rfft2d parameters
- const bool local_bound = false;
-
- // Inputs/Outputs
- tosa_datatype_t dt = tosa_datatype_fp32_t;
- std::vector<int32_t> input_shape = { 1, 32, 32 };
- std::vector<int32_t> output_shape_real = { 1, 32, 17 };
- std::vector<int32_t> output_shape_imag = { 1, 32, 17 };
- std::vector<float> srcData(32 * 32 * 1, 0.f);
- std::vector<float> dstDataReal(32 * 17 * 1, 0.f);
- std::vector<float> dstDataImag(32 * 17 * 1, 0.f);
-
- tosa_tensor_t input;
- input.shape = input_shape.data();
- input.num_dims = input_shape.size();
- input.data_type = dt;
- input.data = reinterpret_cast<uint8_t*>(srcData.data());
- input.size = srcData.size() * sizeof(float);
-
- tosa_tensor_t output_real;
- output_real.shape = output_shape_real.data();
- output_real.num_dims = output_shape_real.size();
- output_real.data_type = dt;
- output_real.data = reinterpret_cast<uint8_t*>(dstDataReal.data());
- output_real.size = dstDataReal.size() * sizeof(float);
-
- tosa_tensor_t output_imag;
- output_imag.shape = output_shape_imag.data();
- output_imag.num_dims = output_shape_imag.size();
- output_imag.data_type = dt;
- output_imag.data = reinterpret_cast<uint8_t*>(dstDataImag.data());
- output_imag.size = dstDataImag.size() * sizeof(float);
-
- // Execution
- auto status = tosa_run_rfft2d(input, output_real, local_bound, output_imag, {});
- CHECK((status == tosa_status_valid));
-
- // Compare results
- std::vector<float> expectedDataReal = {};
- std::vector<float> expectedDataImag = {};
- for (unsigned i = 0; i < dstDataReal.size(); ++i)
- {
- std::vector<float> sum_real = {};
- std::vector<float> sum_imag = {};
- for (unsigned j = 0; j < dstDataImag.size(); ++j)
- {
- float a = 307.876080052; /* 2 * pi * ((iY * oY) / H + (iX * oX) / W) */
- sum_real.emplace_back(srcData[j] * std::cos(a));
- sum_imag.emplace_back((-1) * srcData[j] * std::sin(a));
- }
- expectedDataReal.emplace_back(sum_real[i]);
- expectedDataImag.emplace_back(sum_imag[i]);
- }
- compareOutput(dstDataReal, expectedDataReal, expectedDataReal.size());
- compareOutput(dstDataImag, expectedDataImag, expectedDataImag.size());
- }
-
- TEST_CASE("op_entry_transpose_conv2d")
- {
- // Transpose Conv 2D parameters
- const int32_t stride[2] = { 1, 1 };
- const int32_t out_pad[4] = { 0, 0, 0, 0 };
- const int32_t out_shape[4] = { 1, 32, 32, 16 };
-
- // Inputs/Outputs
- tosa_datatype_t dt = tosa_datatype_fp32_t;
- std::vector<int32_t> input_shape = { 1, 32, 32, 8 };
- std::vector<int32_t> output_shape = { 1, 32, 32, 16 };
- std::vector<int32_t> weight_shape = { 16, 1, 1, 8 };
- std::vector<int32_t> bias_shape = { 16 };
-
- std::vector<float> srcData(32 * 32 * 8, 1.0f);
- std::vector<float> dstData(32 * 32 * 16, 0.f);
- std::vector<float> biasData(16, 0.f);
- std::vector<float> weightData(16 * 8, 1.0f);
-
- tosa_tensor_t input;
- input.shape = input_shape.data();
- input.num_dims = input_shape.size();
- input.data_type = dt;
- input.data = reinterpret_cast<uint8_t*>(srcData.data());
- input.size = srcData.size() * sizeof(float);
-
- tosa_tensor_t weight;
- weight.shape = weight_shape.data();
- weight.num_dims = weight_shape.size();
- weight.data_type = dt;
- weight.data = reinterpret_cast<uint8_t*>(weightData.data());
- weight.size = weightData.size() * sizeof(float);
-
- tosa_tensor_t bias;
- bias.shape = bias_shape.data();
- bias.num_dims = bias_shape.size();
- bias.data_type = dt;
- bias.data = reinterpret_cast<uint8_t*>(biasData.data());
- bias.size = biasData.size() * sizeof(float);
-
- tosa_tensor_t output;
- output.shape = output_shape.data();
- output.num_dims = output_shape.size();
- output.data_type = dt;
- output.data = reinterpret_cast<uint8_t*>(dstData.data());
- output.size = dstData.size() * sizeof(float);
-
- const int32_t input_zp = 0;
- const int32_t weight_zp = 0;
- const bool local_bound = false;
-
- // Execution
- auto status = tosa_run_transpose_conv2d(input, weight, bias, out_pad, stride, out_shape, input_zp, weight_zp,
- local_bound, output, {});
- CHECK((status == tosa_status_valid));
-
- // Compare results
- std::vector<float> expectedData(32 * 32 * 16, 8.0f);
- compareOutput(dstData, expectedData, expectedData.size());
- }
-
- TEST_CASE("op_entry_conv2d_abs_mode")
- {
- // Conv parameters
- const int32_t stride[2] = { 1, 1 };
- const int32_t pad[4] = { 0, 0, 0, 0 };
- const int32_t dilation[2] = { 1, 1 };
-
- // Inputs/Outputs
- tosa_datatype_t dt = tosa_datatype_fp32_t;
- std::vector<int32_t> input_shape = { 1, 32, 32, 8 };
- std::vector<int32_t> output_shape = { 1, 32, 32, 16 };
- std::vector<int32_t> weight_shape = { 16, 1, 1, 8 };
- std::vector<int32_t> bias_shape = { 16 };
- std::vector<float> srcData(32 * 32 * 8, -1.0f);
- std::vector<float> dstData(32 * 32 * 16, 0.f);
- std::vector<float> biasData(16, 0.f);
- std::vector<float> weightData(16 * 8, 1.0f);
-
- tosa_tensor_t input;
- input.shape = input_shape.data();
- input.num_dims = input_shape.size();
- input.data_type = dt;
- input.data = reinterpret_cast<uint8_t*>(srcData.data());
- input.size = srcData.size() * sizeof(float);
-
- tosa_tensor_t weight;
- weight.shape = weight_shape.data();
- weight.num_dims = weight_shape.size();
- weight.data_type = dt;
- weight.data = reinterpret_cast<uint8_t*>(weightData.data());
- weight.size = weightData.size() * sizeof(float);
-
- tosa_tensor_t bias;
- bias.shape = bias_shape.data();
- bias.num_dims = bias_shape.size();
- bias.data_type = dt;
- bias.data = reinterpret_cast<uint8_t*>(biasData.data());
- bias.size = biasData.size() * sizeof(float);
-
- tosa_tensor_t output;
- output.shape = output_shape.data();
- output.num_dims = output_shape.size();
- output.data_type = dt;
- output.data = reinterpret_cast<uint8_t*>(dstData.data());
- output.size = dstData.size() * sizeof(float);
-
- const int32_t input_zp = 0;
- const int32_t weight_zp = 0;
- const bool local_bound = false;
-
- // Execution
- func_ctx_t func_ctx;
- func_ctx.func_config.abs_mode = true;
- auto status = tosa_run_conv2d(input, weight, bias, pad, stride, dilation, input_zp, weight_zp, local_bound,
- output, func_ctx);
- CHECK((status == tosa_status_valid));
-
- // Compare results
- std::vector<float> expectedData(32 * 32 * 16, 8.0f);
- compareOutput(dstData, expectedData, expectedData.size());
- }
-
- TEST_CASE("op_entry_max_pool2d")
- {
- // Pool parameters
- const int32_t kernel[2] = { 2, 2 };
- const int32_t stride[2] = { 2, 2 };
- const int32_t pad[4] = { 0, 0, 0, 0 };
-
- // Inputs/Outputs
- tosa_datatype_t dt = tosa_datatype_fp32_t;
- std::vector<int32_t> input_shape = { 2, 4, 4, 1 };
- std::vector<int32_t> output_shape = { 2, 2, 2, 1 };
- std::vector<float> srcData(32);
- std::vector<float> dstData(8, 0.f);
- std::iota(std::begin(srcData), std::end(srcData), 1);
-
- tosa_tensor_t input;
- input.shape = input_shape.data();
- input.num_dims = input_shape.size();
- input.data_type = dt;
- input.data = reinterpret_cast<uint8_t*>(srcData.data());
- input.size = srcData.size() * sizeof(float);
-
- tosa_tensor_t output;
- output.shape = output_shape.data();
- output.num_dims = output_shape.size();
- output.data_type = dt;
- output.data = reinterpret_cast<uint8_t*>(dstData.data());
- output.size = dstData.size() * sizeof(float);
-
- // Execution
- auto status = tosa_run_max_pool2d(input, kernel, stride, pad, 0, 0, output, {});
- CHECK((status == tosa_status_valid));
-
- // Compare results
- std::vector<float> expectedData = { 6, 8, 14, 16, 22, 24, 30, 32 };
- compareOutput(dstData, expectedData, expectedData.size());
- }
-
- TEST_CASE("op_entry_pad")
- {
- // Inputs/Outputs
- tosa_datatype_t dt = tosa_datatype_fp32_t;
- std::vector<int32_t> input_shape = { 2, 2 };
- std::vector<int32_t> padding_shape = { 1, 4 };
- std::vector<int32_t> output_shape = { 4, 4 };
- std::vector<float> srcData1(4, 4.0f);
- std::vector<int32_t> padData(4, 1);
- std::vector<float> dstData(16, 0.0f);
-
- tosa_tensor_t input1;
- input1.shape = input_shape.data();
- input1.num_dims = input_shape.size();
- input1.data_type = dt;
- input1.data = reinterpret_cast<uint8_t*>(srcData1.data());
- input1.size = srcData1.size() * sizeof(float);
-
- tosa_tensor_t padding;
- padding.shape = padding_shape.data();
- padding.num_dims = padding_shape.size();
- padding.data_type = tosa_datatype_int32_t;
- padding.data = reinterpret_cast<uint8_t*>(padData.data());
- padding.size = padData.size() * sizeof(int32_t);
-
- tosa_tensor_t output;
- output.shape = output_shape.data();
- output.num_dims = output_shape.size();
- output.data_type = dt;
- output.data = reinterpret_cast<uint8_t*>(dstData.data());
- output.size = dstData.size() * sizeof(float);
-
- // Execution
- int32_t pad_const_int = 0;
- float pad_const_fp = 5.0f;
- auto status = tosa_run_pad(input1, padding, pad_const_int, pad_const_fp, output, func_ctx_t{});
- CHECK((status == tosa_status_valid));
-
- // Compare results
- // Expect a 4x4 array with a border of 5's and inner 2x2 of 4's
- std::vector<float> expectedData(16, 5.0f);
- expectedData[5] = 4.0f;
- expectedData[6] = 4.0f;
- expectedData[9] = 4.0f;
- expectedData[10] = 4.0f;
- compareOutput(dstData, expectedData, expectedData.size());
- }
-
- TEST_CASE("op_entry_reshape")
- {
- // Inputs/Outputs
- tosa_datatype_t dt = tosa_datatype_fp32_t;
- std::vector<int32_t> input_shape = { 2, 2 };
- std::vector<int32_t> new_shape = { 1, 2 };
- std::vector<int32_t> output_shape = { 4, 1 };
- std::vector<float> srcData1(4, 4.0f);
- std::vector<int32_t> shapeData = { 4, 1 };
- std::vector<float> dstData(4, 0.0f);
-
- tosa_tensor_t input1;
- input1.shape = input_shape.data();
- input1.num_dims = input_shape.size();
- input1.data_type = dt;
- input1.data = reinterpret_cast<uint8_t*>(srcData1.data());
- input1.size = srcData1.size() * sizeof(float);
-
- tosa_tensor_t shape;
- shape.shape = new_shape.data();
- shape.num_dims = new_shape.size();
- shape.data_type = tosa_datatype_int32_t;
- shape.data = reinterpret_cast<uint8_t*>(shapeData.data());
- shape.size = shapeData.size() * sizeof(int32_t);
-
- tosa_tensor_t output;
- output.shape = output_shape.data();
- output.num_dims = output_shape.size();
- output.data_type = dt;
- output.data = reinterpret_cast<uint8_t*>(dstData.data());
- output.size = dstData.size() * sizeof(float);
-
- // Execution
- auto status = tosa_run_reshape(input1, shape, output, func_ctx_t{});
- CHECK((status == tosa_status_valid));
-
- // Compare results
- std::vector<float> expectedData(4, 4.0f);
- compareOutput(dstData, expectedData, expectedData.size());
- }
-
- TEST_CASE("op_entry_tile")
- {
- // Inputs/Outputs
- tosa_datatype_t dt = tosa_datatype_fp32_t;
- std::vector<int32_t> input_shape = { 2, 3 };
- std::vector<int32_t> multiples_shape = { 1, 2 };
- std::vector<int32_t> output_shape = { 2, 6 };
- std::vector<float> srcData1 = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 };
- std::vector<int32_t> multiples_data = { 1, 2 };
- std::vector<float> dstData(12, 0.0f);
-
- tosa_tensor_t input1;
- input1.shape = input_shape.data();
- input1.num_dims = input_shape.size();
- input1.data_type = dt;
- input1.data = reinterpret_cast<uint8_t*>(srcData1.data());
- input1.size = srcData1.size() * sizeof(float);
-
- tosa_tensor_t multiples;
- multiples.shape = multiples_shape.data();
- multiples.num_dims = multiples_shape.size();
- multiples.data_type = tosa_datatype_int32_t;
- multiples.data = reinterpret_cast<uint8_t*>(multiples_data.data());
- multiples.size = multiples_data.size() * sizeof(int32_t);
-
- tosa_tensor_t output;
- output.shape = output_shape.data();
- output.num_dims = output_shape.size();
- output.data_type = dt;
- output.data = reinterpret_cast<uint8_t*>(dstData.data());
- output.size = dstData.size() * sizeof(float);
-
- // Execution
- auto status = tosa_run_tile(input1, multiples, output, {});
- CHECK((status == tosa_status_valid));
-
- // Compare results
- std::vector<float> expectedData = { 1.0, 2.0, 3.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 4.0, 5.0, 6.0 };
- compareOutput(dstData, expectedData, expectedData.size());
- }
-
TEST_CASE("simple_add_f32_test")
{
std::string test_root(std::string(PROJECT_ROOT) + "../examples/test_add_1x4x4x4_f32/");