diff options
author | Dmitrii Agibov <dmitrii.agibov@arm.com> | 2024-01-02 15:41:01 +0000 |
---|---|---|
committer | Eric Kunze <eric.kunze@arm.com> | 2024-01-05 19:29:29 +0000 |
commit | 2936f13d0e26c394333495ce909740eaf58a45cc (patch) | |
tree | 0b602d9389c93e1e1152b6abd18c66e8140f00a8 /reference_model/test | |
parent | 54bb61effee583239d30ec6d4fda32c1a710050c (diff) | |
download | reference_model-2936f13d0e26c394333495ce909740eaf58a45cc.tar.gz |
Remove operators API
The operators API generated by the script is no longer used
and could be removed from the project.
Signed-off-by: Dmitrii Agibov <dmitrii.agibov@arm.com>
Change-Id: Ia611b069463b3aded7d6546987c2323674184673
Diffstat (limited to 'reference_model/test')
-rw-r--r-- | reference_model/test/model_runner_tests.cpp | 637 |
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/"); |