Skip to content

Commit

Permalink
tests: lib: cmsis_dsp: transform: Add CF16 tests for 1.9.0
Browse files Browse the repository at this point in the history
This commit adds the transform CF16 test patterns and implementations
for the CMSIS-DSP 1.9.0.

Signed-off-by: Stephanos Ioannidis <[email protected]>
  • Loading branch information
stephanosio authored and carlescufi committed Aug 30, 2021
1 parent 600ca01 commit 6547025
Show file tree
Hide file tree
Showing 7 changed files with 12,678 additions and 0 deletions.
5 changes: 5 additions & 0 deletions tests/lib/cmsis_dsp/transform/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,11 @@ target_sources_ifdef(
app PRIVATE src/rq31.c
)

target_sources_ifdef(
CONFIG_CMSIS_DSP_TEST_TRANSFORM_CF16
app PRIVATE src/cf16.c
)

target_sources_ifdef(
CONFIG_CMSIS_DSP_TEST_TRANSFORM_RF16
app PRIVATE src/rf16.c
Expand Down
4 changes: 4 additions & 0 deletions tests/lib/cmsis_dsp/transform/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ config CMSIS_DSP_TEST_TRANSFORM_CQ31
config CMSIS_DSP_TEST_TRANSFORM_RQ31
bool "Test: Transform RQ31"

config CMSIS_DSP_TEST_TRANSFORM_CF16
bool "Test: Transform CF16"
depends on CMSIS_DSP_FLOAT16

config CMSIS_DSP_TEST_TRANSFORM_RF16
bool "Test: Transform RF16"
depends on CMSIS_DSP_FLOAT16
Expand Down
1 change: 1 addition & 0 deletions tests/lib/cmsis_dsp/transform/prj.conf
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ CONFIG_CMSIS_DSP_TEST_TRANSFORM_CQ15=y
CONFIG_CMSIS_DSP_TEST_TRANSFORM_RQ15=y
CONFIG_CMSIS_DSP_TEST_TRANSFORM_CQ31=y
CONFIG_CMSIS_DSP_TEST_TRANSFORM_RQ31=y
CONFIG_CMSIS_DSP_TEST_TRANSFORM_CF16=y
CONFIG_CMSIS_DSP_TEST_TRANSFORM_RF16=y
CONFIG_CMSIS_DSP_TEST_TRANSFORM_CF32=y
CONFIG_CMSIS_DSP_TEST_TRANSFORM_RF32=y
Expand Down
214 changes: 214 additions & 0 deletions tests/lib/cmsis_dsp/transform/src/cf16.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,214 @@
/*
* Copyright (c) 2021 Stephanos Ioannidis <[email protected]>
* Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved.
*
* SPDX-License-Identifier: Apache-2.0
*/

#include <ztest.h>
#include <zephyr.h>
#include <stdlib.h>
#include <arm_math_f16.h>
#include <arm_const_structs.h>
#include "../../common/test_common.h"

#include "cf16.pat"

#define SNR_ERROR_THRESH ((float32_t)58)

static void test_arm_cfft_f16_cmplx_backend(
bool inverse, const uint16_t *input, const uint16_t *ref, size_t length)
{
arm_cfft_instance_f16 inst;
float16_t *output;
arm_status status;

/* Initialise instance */
status = arm_cfft_init_f16(&inst, length / 2);

zassert_equal(status, ARM_MATH_SUCCESS,
ASSERT_MSG_INCORRECT_COMP_RESULT);

/* Allocate output buffer */
output = malloc(length * sizeof(float16_t));
zassert_not_null(output, ASSERT_MSG_BUFFER_ALLOC_FAILED);

/* Load data in place */
memcpy(output, input, length * sizeof(float16_t));

/* Run test function */
arm_cfft_f16(&inst, output, inverse, true);

/* Validate output */
zassert_true(
test_snr_error_f16(length, output, (float16_t *)ref,
SNR_ERROR_THRESH),
ASSERT_MSG_SNR_LIMIT_EXCEED);

/* Free output buffer */
free(output);
}

static void test_arm_cfft_f16_cmplx(
const uint16_t *input, const uint16_t *ref, size_t length)
{
test_arm_cfft_f16_cmplx_backend(false, input, ref, length);
}

DEFINE_TEST_VARIANT3(arm_cfft_f16_cmplx, noisy_16,
in_cfft_noisy_16, ref_cfft_noisy_16, 32);

DEFINE_TEST_VARIANT3(arm_cfft_f16_cmplx, noisy_32,
in_cfft_noisy_32, ref_cfft_noisy_32, 64);

DEFINE_TEST_VARIANT3(arm_cfft_f16_cmplx, noisy_64,
in_cfft_noisy_64, ref_cfft_noisy_64, 128);

DEFINE_TEST_VARIANT3(arm_cfft_f16_cmplx, noisy_128,
in_cfft_noisy_128, ref_cfft_noisy_128, 256);

DEFINE_TEST_VARIANT3(arm_cfft_f16_cmplx, noisy_256,
in_cfft_noisy_256, ref_cfft_noisy_256, 512);

DEFINE_TEST_VARIANT3(arm_cfft_f16_cmplx, noisy_512,
in_cfft_noisy_512, ref_cfft_noisy_512, 1024);

DEFINE_TEST_VARIANT3(arm_cfft_f16_cmplx, noisy_1024,
in_cfft_noisy_1024, ref_cfft_noisy_1024, 2048);

DEFINE_TEST_VARIANT3(arm_cfft_f16_cmplx, noisy_2048,
in_cfft_noisy_2048, ref_cfft_noisy_2048, 4096);

DEFINE_TEST_VARIANT3(arm_cfft_f16_cmplx, noisy_4096,
in_cfft_noisy_4096, ref_cfft_noisy_4096, 8192);

DEFINE_TEST_VARIANT3(arm_cfft_f16_cmplx, step_16,
in_cfft_step_16, ref_cfft_step_16, 32);

DEFINE_TEST_VARIANT3(arm_cfft_f16_cmplx, step_32,
in_cfft_step_32, ref_cfft_step_32, 64);

DEFINE_TEST_VARIANT3(arm_cfft_f16_cmplx, step_64,
in_cfft_step_64, ref_cfft_step_64, 128);

DEFINE_TEST_VARIANT3(arm_cfft_f16_cmplx, step_128,
in_cfft_step_128, ref_cfft_step_128, 256);

DEFINE_TEST_VARIANT3(arm_cfft_f16_cmplx, step_256,
in_cfft_step_256, ref_cfft_step_256, 512);

DEFINE_TEST_VARIANT3(arm_cfft_f16_cmplx, step_512,
in_cfft_step_512, ref_cfft_step_512, 1024);

DEFINE_TEST_VARIANT3(arm_cfft_f16_cmplx, step_1024,
in_cfft_step_1024, ref_cfft_step_1024, 2048);

DEFINE_TEST_VARIANT3(arm_cfft_f16_cmplx, step_2048,
in_cfft_step_2048, ref_cfft_step_2048, 4096);

DEFINE_TEST_VARIANT3(arm_cfft_f16_cmplx, step_4096,
in_cfft_step_4096, ref_cfft_step_4096, 8192);

static void test_arm_cifft_f16_cmplx(
const uint16_t *input, const uint16_t *ref, size_t length)
{
test_arm_cfft_f16_cmplx_backend(true, input, ref, length);
}

DEFINE_TEST_VARIANT3(arm_cifft_f16_cmplx, noisy_16,
in_cifft_noisy_16, in_cfft_noisy_16, 32);

DEFINE_TEST_VARIANT3(arm_cifft_f16_cmplx, noisy_32,
in_cifft_noisy_32, in_cfft_noisy_32, 64);

DEFINE_TEST_VARIANT3(arm_cifft_f16_cmplx, noisy_64,
in_cifft_noisy_64, in_cfft_noisy_64, 128);

DEFINE_TEST_VARIANT3(arm_cifft_f16_cmplx, noisy_128,
in_cifft_noisy_128, in_cfft_noisy_128, 256);

DEFINE_TEST_VARIANT3(arm_cifft_f16_cmplx, noisy_256,
in_cifft_noisy_256, in_cfft_noisy_256, 512);

DEFINE_TEST_VARIANT3(arm_cifft_f16_cmplx, noisy_512,
in_cifft_noisy_512, in_cfft_noisy_512, 1024);

DEFINE_TEST_VARIANT3(arm_cifft_f16_cmplx, noisy_1024,
in_cifft_noisy_1024, in_cfft_noisy_1024, 2048);

DEFINE_TEST_VARIANT3(arm_cifft_f16_cmplx, noisy_2048,
in_cifft_noisy_2048, in_cfft_noisy_2048, 4096);

DEFINE_TEST_VARIANT3(arm_cifft_f16_cmplx, noisy_4096,
in_cifft_noisy_4096, in_cfft_noisy_4096, 8192);

DEFINE_TEST_VARIANT3(arm_cifft_f16_cmplx, step_16,
in_cifft_step_16, in_cfft_step_16, 32);

DEFINE_TEST_VARIANT3(arm_cifft_f16_cmplx, step_32,
in_cifft_step_32, in_cfft_step_32, 64);

DEFINE_TEST_VARIANT3(arm_cifft_f16_cmplx, step_64,
in_cifft_step_64, in_cfft_step_64, 128);

DEFINE_TEST_VARIANT3(arm_cifft_f16_cmplx, step_128,
in_cifft_step_128, in_cfft_step_128, 256);

DEFINE_TEST_VARIANT3(arm_cifft_f16_cmplx, step_256,
in_cifft_step_256, in_cfft_step_256, 512);

DEFINE_TEST_VARIANT3(arm_cifft_f16_cmplx, step_512,
in_cifft_step_512, in_cfft_step_512, 1024);

DEFINE_TEST_VARIANT3(arm_cifft_f16_cmplx, step_1024,
in_cifft_step_1024, in_cfft_step_1024, 2048);

DEFINE_TEST_VARIANT3(arm_cifft_f16_cmplx, step_2048,
in_cifft_step_2048, in_cfft_step_2048, 4096);

DEFINE_TEST_VARIANT3(arm_cifft_f16_cmplx, step_4096,
in_cifft_step_4096, in_cfft_step_4096, 8192);

void test_transform_cf16(void)
{
ztest_test_suite(transform_cf16,
ztest_unit_test(test_arm_cfft_f16_cmplx_noisy_16),
ztest_unit_test(test_arm_cifft_f16_cmplx_noisy_16),
ztest_unit_test(test_arm_cfft_f16_cmplx_noisy_32),
ztest_unit_test(test_arm_cifft_f16_cmplx_noisy_32),
ztest_unit_test(test_arm_cfft_f16_cmplx_noisy_64),
ztest_unit_test(test_arm_cifft_f16_cmplx_noisy_64),
ztest_unit_test(test_arm_cfft_f16_cmplx_noisy_128),
ztest_unit_test(test_arm_cifft_f16_cmplx_noisy_128),
ztest_unit_test(test_arm_cfft_f16_cmplx_noisy_256),
ztest_unit_test(test_arm_cifft_f16_cmplx_noisy_256),
ztest_unit_test(test_arm_cfft_f16_cmplx_noisy_512),
ztest_unit_test(test_arm_cifft_f16_cmplx_noisy_512),
ztest_unit_test(test_arm_cfft_f16_cmplx_noisy_1024),
ztest_unit_test(test_arm_cifft_f16_cmplx_noisy_1024),
ztest_unit_test(test_arm_cfft_f16_cmplx_noisy_2048),
ztest_unit_test(test_arm_cifft_f16_cmplx_noisy_2048),
ztest_unit_test(test_arm_cfft_f16_cmplx_noisy_4096),
ztest_unit_test(test_arm_cifft_f16_cmplx_noisy_4096),
ztest_unit_test(test_arm_cfft_f16_cmplx_step_16),
ztest_unit_test(test_arm_cifft_f16_cmplx_step_16),
ztest_unit_test(test_arm_cfft_f16_cmplx_step_32),
ztest_unit_test(test_arm_cifft_f16_cmplx_step_32),
ztest_unit_test(test_arm_cfft_f16_cmplx_step_64),
ztest_unit_test(test_arm_cifft_f16_cmplx_step_64),
ztest_unit_test(test_arm_cfft_f16_cmplx_step_128),
ztest_unit_test(test_arm_cifft_f16_cmplx_step_128),
ztest_unit_test(test_arm_cfft_f16_cmplx_step_256),
ztest_unit_test(test_arm_cifft_f16_cmplx_step_256),
ztest_unit_test(test_arm_cfft_f16_cmplx_step_512),
ztest_unit_test(test_arm_cifft_f16_cmplx_step_512),
ztest_unit_test(test_arm_cfft_f16_cmplx_step_1024),
ztest_unit_test(test_arm_cifft_f16_cmplx_step_1024),
ztest_unit_test(test_arm_cfft_f16_cmplx_step_2048),
ztest_unit_test(test_arm_cifft_f16_cmplx_step_2048),
ztest_unit_test(test_arm_cfft_f16_cmplx_step_4096),
ztest_unit_test(test_arm_cifft_f16_cmplx_step_4096)
);

ztest_run_test_suite(transform_cf16);
}
Loading

0 comments on commit 6547025

Please sign in to comment.