You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
110 lines
3.0 KiB
C++
110 lines
3.0 KiB
C++
#include "ExampleCategoryF32.h"
|
|
#include <stdio.h>
|
|
#include "Error.h"
|
|
|
|
/*
|
|
|
|
Tests to write and test criteria depend on the algorithm.
|
|
When SNR is meaningful, SNR threshold depends on the type.
|
|
CMSIS-DSP tests are using similar SNR values for different type (f32, q31, q15, q7)
|
|
|
|
*/
|
|
#define SNR_THRESHOLD 120
|
|
|
|
/*
|
|
|
|
With thie threshold, the test will fail
|
|
|
|
#define REL_ERROR (2.0e-6)
|
|
|
|
*/
|
|
|
|
#define REL_ERROR (5.0e-6)
|
|
|
|
void ExampleCategoryF32::test_op_f32()
|
|
{
|
|
/* Get a pointer to the input data.
|
|
For benchmark, getting pointers should be done in the setUp function
|
|
since there is an overhead. Lot of checks are done before returning a pointer.
|
|
*/
|
|
const float32_t *inp1=input1.ptr();
|
|
const float32_t *inp2=input2.ptr();
|
|
|
|
/* Get a pointer to the output buffer */
|
|
float32_t *outp=output.ptr();
|
|
|
|
/* Run the test */
|
|
arm_add_f32(inp1,inp2,outp,input1.nbSamples());
|
|
|
|
/* Check there is no buffer overflow on the output */
|
|
ASSERT_EMPTY_TAIL(output);
|
|
|
|
/* Check SNR error */
|
|
ASSERT_SNR(output,ref,(float32_t)SNR_THRESHOLD);
|
|
|
|
/* Check relative error */
|
|
ASSERT_REL_ERROR(output,ref,REL_ERROR);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
setUp function is used to load the patterns and create required buffers
|
|
|
|
*/
|
|
void ExampleCategoryF32::setUp(Testing::testID_t id,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr)
|
|
{
|
|
|
|
Testing::nbSamples_t nb=MAX_NB_SAMPLES;
|
|
(void)params;
|
|
|
|
/*
|
|
|
|
All IDs can be found in GeneratedInclude/ExampleCategoryF32_decl.h
|
|
|
|
*/
|
|
|
|
/*
|
|
Different allocations depending on the test.
|
|
*/
|
|
switch(id)
|
|
{
|
|
/* In both tests, the same function is tested as defined in desc.txt.
|
|
But different configurations are used.
|
|
*/
|
|
case ExampleCategoryF32::TEST_OP_F32_1:
|
|
/* Load patterns with all samples */
|
|
input1.reload(ExampleCategoryF32::INPUT1_F32_ID,mgr);
|
|
input2.reload(ExampleCategoryF32::INPUT2_F32_ID,mgr);
|
|
ref.reload(ExampleCategoryF32::REF_OUT_F32_ID,mgr);
|
|
break;
|
|
|
|
case ExampleCategoryF32::TEST_OP_F32_2:
|
|
nb = 9;
|
|
/* Load patterns with 9 samples */
|
|
input1.reload(ExampleCategoryF32::INPUT1_F32_ID,mgr,nb);
|
|
input2.reload(ExampleCategoryF32::INPUT2_F32_ID,mgr,nb);
|
|
ref.reload(ExampleCategoryF32::REF_OUT_F32_ID,mgr,nb);
|
|
break;
|
|
|
|
}
|
|
|
|
/* Create output buffer with same size as reference pattern */
|
|
output.create(ref.nbSamples(),ExampleCategoryF32::OUT_F32_ID,mgr);
|
|
}
|
|
|
|
void ExampleCategoryF32::tearDown(Testing::testID_t id,Client::PatternMgr *mgr)
|
|
{
|
|
(void)id;
|
|
/*
|
|
Dump output buffer into a file.
|
|
|
|
Location of the file is defined by Folder directives in desc.txt test
|
|
description file and relative to the Output folder.
|
|
|
|
*/
|
|
output.dump(mgr);
|
|
}
|