1 /*
2  * Copyright (c) 2021 Stephanos Ioannidis <root@stephanos.io>
3  * Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved.
4  *
5  * SPDX-License-Identifier: Apache-2.0
6  */
7 
8 #include <zephyr/dsp/dsp.h>
9 #include <zephyr/ztest.h>
10 #include <zephyr/kernel.h>
11 #include <stdlib.h>
12 #include "common/test_common.h"
13 
14 #include "q15.pat"
15 
16 #define SNR_ERROR_THRESH	((float32_t)70)
17 #define SNR_ERROR_THRESH_HIGH	((float32_t)60)
18 #define ABS_ERROR_THRESH_Q15	((q15_t)2)
19 #define ABS_ERROR_THRESH_Q63	((q63_t)(1 << 17))
20 
test_zdsp_add_q15(const DSP_DATA q15_t * input1,const DSP_DATA q15_t * input2,const q15_t * ref,size_t length)21 static void test_zdsp_add_q15(
22 	const DSP_DATA q15_t *input1, const DSP_DATA q15_t *input2, const q15_t *ref,
23 	size_t length)
24 {
25 	DSP_DATA q15_t *output;
26 
27 	/* Allocate output buffer */
28 	output = (DSP_DATA q15_t *)malloc(length * sizeof(q15_t));
29 	zassert_not_null(output, ASSERT_MSG_BUFFER_ALLOC_FAILED);
30 
31 	/* Run test function */
32 	zdsp_add_q15(input1, input2, output, length);
33 
34 	/* Validate output */
35 	zassert_true(
36 		test_snr_error_q15(length, output, ref, SNR_ERROR_THRESH),
37 		ASSERT_MSG_SNR_LIMIT_EXCEED);
38 
39 	zassert_true(
40 		test_near_equal_q15(length, output, ref, ABS_ERROR_THRESH_Q15),
41 		ASSERT_MSG_ABS_ERROR_LIMIT_EXCEED);
42 
43 	/* Free output buffer */
44 	free(output);
45 }
46 
47 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_add_q15, 7, in_com1, in_com2, ref_add, 7);
48 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_add_q15, 16, in_com1, in_com2, ref_add, 16);
49 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_add_q15, 23, in_com1, in_com2, ref_add, 23);
50 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_add_q15, possat, in_maxpos, in_maxpos, ref_add_possat,
51 		     17);
52 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_add_q15, negsat, in_maxneg, in_maxneg, ref_add_negsat,
53 		     17);
54 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_add_q15, long, in_com1, in_com2, ref_add,
55 		     ARRAY_SIZE(in_com1));
56 
test_zdsp_add_q15_in_place(const DSP_DATA q15_t * input1,const DSP_DATA q15_t * input2,const q15_t * ref,size_t length)57 static void test_zdsp_add_q15_in_place(const DSP_DATA q15_t *input1, const DSP_DATA q15_t *input2,
58 				const q15_t *ref, size_t length)
59 {
60 	DSP_DATA q15_t *output;
61 
62 	/* Allocate output buffer */
63 	output = (DSP_DATA q15_t *)malloc(length * sizeof(q15_t));
64 	zassert_not_null(output, ASSERT_MSG_BUFFER_ALLOC_FAILED);
65 
66 	/* Copy input data to output*/
67 	memcpy(output, input1, length * sizeof(q15_t));
68 
69 	/* Run test function */
70 	zdsp_add_q15(output, input2, output, length);
71 
72 	/* Validate output */
73 	zassert_true(test_snr_error_q15(length, output, ref, SNR_ERROR_THRESH),
74 		     ASSERT_MSG_SNR_LIMIT_EXCEED);
75 
76 	zassert_true(test_near_equal_q15(length, output, ref, ABS_ERROR_THRESH_Q15),
77 		     ASSERT_MSG_ABS_ERROR_LIMIT_EXCEED);
78 
79 	/* Free output buffer */
80 	free(output);
81 }
82 
83 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_add_q15_in_place, 7, in_com1, in_com2, ref_add, 7);
84 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_add_q15_in_place, 16, in_com1, in_com2, ref_add, 16);
85 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_add_q15_in_place, 23, in_com1, in_com2, ref_add, 23);
86 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_add_q15_in_place, possat, in_maxpos, in_maxpos,
87 		     ref_add_possat, 17);
88 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_add_q15_in_place, negsat, in_maxneg, in_maxneg,
89 		     ref_add_negsat, 17);
90 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_add_q15_in_place, long, in_com1, in_com2, ref_add,
91 		     ARRAY_SIZE(in_com1));
92 
test_zdsp_sub_q15(const DSP_DATA q15_t * input1,const DSP_DATA q15_t * input2,const q15_t * ref,size_t length)93 static void test_zdsp_sub_q15(
94 	const DSP_DATA q15_t *input1, const DSP_DATA q15_t *input2, const q15_t *ref,
95 	size_t length)
96 {
97 	DSP_DATA q15_t *output;
98 
99 	/* Allocate output buffer */
100 	output = (DSP_DATA q15_t *)malloc(length * sizeof(q15_t));
101 	zassert_not_null(output, ASSERT_MSG_BUFFER_ALLOC_FAILED);
102 
103 	/* Run test function */
104 	zdsp_sub_q15(input1, input2, output, length);
105 
106 	/* Validate output */
107 	zassert_true(
108 		test_snr_error_q15(length, output, ref, SNR_ERROR_THRESH),
109 		ASSERT_MSG_SNR_LIMIT_EXCEED);
110 
111 	zassert_true(
112 		test_near_equal_q15(length, output, ref, ABS_ERROR_THRESH_Q15),
113 		ASSERT_MSG_ABS_ERROR_LIMIT_EXCEED);
114 
115 	/* Free output buffer */
116 	free(output);
117 }
118 
119 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_sub_q15, 7, in_com1, in_com2, ref_sub, 7);
120 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_sub_q15, 16, in_com1, in_com2, ref_sub, 16);
121 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_sub_q15, 23, in_com1, in_com2, ref_sub, 23);
122 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_sub_q15, possat, in_maxpos, in_maxneg, ref_sub_possat,
123 		     17);
124 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_sub_q15, negsat, in_maxneg, in_maxpos, ref_sub_negsat,
125 		     17);
126 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_sub_q15, long, in_com1, in_com2, ref_sub,
127 		     ARRAY_SIZE(in_com1));
128 
test_zdsp_sub_q15_in_place(const DSP_DATA q15_t * input1,const DSP_DATA q15_t * input2,const q15_t * ref,size_t length)129 static void test_zdsp_sub_q15_in_place(const DSP_DATA q15_t *input1, const DSP_DATA q15_t *input2,
130 				const q15_t *ref, size_t length)
131 {
132 	DSP_DATA q15_t *output;
133 
134 	/* Allocate output buffer */
135 	output = (DSP_DATA q15_t *)malloc(length * sizeof(q15_t));
136 	zassert_not_null(output, ASSERT_MSG_BUFFER_ALLOC_FAILED);
137 
138 	/* Copy input data to output*/
139 	memcpy(output, input1, length * sizeof(q15_t));
140 
141 	/* Run test function */
142 	zdsp_sub_q15(output, input2, output, length);
143 
144 	/* Validate output */
145 	zassert_true(test_snr_error_q15(length, output, ref, SNR_ERROR_THRESH),
146 		     ASSERT_MSG_SNR_LIMIT_EXCEED);
147 
148 	zassert_true(test_near_equal_q15(length, output, ref, ABS_ERROR_THRESH_Q15),
149 		     ASSERT_MSG_ABS_ERROR_LIMIT_EXCEED);
150 
151 	/* Free output buffer */
152 	free(output);
153 }
154 
155 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_sub_q15_in_place, 7, in_com1, in_com2, ref_sub, 7);
156 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_sub_q15_in_place, 16, in_com1, in_com2, ref_sub, 16);
157 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_sub_q15_in_place, 23, in_com1, in_com2, ref_sub, 23);
158 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_sub_q15_in_place, possat, in_maxpos, in_maxneg,
159 		     ref_sub_possat, 17);
160 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_sub_q15_in_place, negsat, in_maxneg, in_maxpos,
161 		     ref_sub_negsat, 17);
162 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_sub_q15_in_place, long, in_com1, in_com2, ref_sub,
163 		     ARRAY_SIZE(in_com1));
164 
test_zdsp_mult_q15(const DSP_DATA q15_t * input1,const DSP_DATA q15_t * input2,const q15_t * ref,size_t length)165 static void test_zdsp_mult_q15(
166 	const DSP_DATA q15_t *input1, const DSP_DATA q15_t *input2, const q15_t *ref,
167 	size_t length)
168 {
169 	DSP_DATA q15_t *output;
170 
171 	/* Allocate output buffer */
172 	output = (DSP_DATA q15_t *)malloc(length * sizeof(q15_t));
173 	zassert_not_null(output, ASSERT_MSG_BUFFER_ALLOC_FAILED);
174 
175 	/* Run test function */
176 	zdsp_mult_q15(input1, input2, output, length);
177 
178 	/* Validate output */
179 	zassert_true(
180 		test_snr_error_q15(length, output, ref, SNR_ERROR_THRESH_HIGH),
181 		ASSERT_MSG_SNR_LIMIT_EXCEED);
182 
183 	zassert_true(
184 		test_near_equal_q15(length, output, ref, ABS_ERROR_THRESH_Q15),
185 		ASSERT_MSG_ABS_ERROR_LIMIT_EXCEED);
186 
187 	/* Free output buffer */
188 	free(output);
189 }
190 
191 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_mult_q15, 7, in_com1, in_com2, ref_mult, 7);
192 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_mult_q15, 16, in_com1, in_com2, ref_mult, 16);
193 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_mult_q15, 23, in_com1, in_com2, ref_mult, 23);
194 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_mult_q15, possat, in_maxneg2, in_maxneg2, ref_mult_possat,
195 		     17);
196 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_mult_q15, long, in_com1, in_com2, ref_mult,
197 		     ARRAY_SIZE(in_com1));
198 
test_zdsp_mult_q15_in_place(const DSP_DATA q15_t * input1,const DSP_DATA q15_t * input2,const q15_t * ref,size_t length)199 static void test_zdsp_mult_q15_in_place(const DSP_DATA q15_t *input1, const DSP_DATA q15_t *input2,
200 				const q15_t *ref, size_t length)
201 {
202 	DSP_DATA q15_t *output;
203 
204 	/* Allocate output buffer */
205 	output = (DSP_DATA q15_t *)malloc(length * sizeof(q15_t));
206 	zassert_not_null(output, ASSERT_MSG_BUFFER_ALLOC_FAILED);
207 
208 	/* Copy input data to output*/
209 	memcpy(output, input1, length * sizeof(q15_t));
210 
211 	/* Run test function */
212 	zdsp_mult_q15(output, input2, output, length);
213 
214 	/* Validate output */
215 	zassert_true(test_snr_error_q15(length, output, ref, SNR_ERROR_THRESH_HIGH),
216 		     ASSERT_MSG_SNR_LIMIT_EXCEED);
217 
218 	zassert_true(test_near_equal_q15(length, output, ref, ABS_ERROR_THRESH_Q15),
219 		     ASSERT_MSG_ABS_ERROR_LIMIT_EXCEED);
220 
221 	/* Free output buffer */
222 	free(output);
223 }
224 
225 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_mult_q15_in_place, 7, in_com1, in_com2, ref_mult, 7);
226 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_mult_q15_in_place, 16, in_com1, in_com2, ref_mult, 16);
227 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_mult_q15_in_place, 23, in_com1, in_com2, ref_mult, 23);
228 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_mult_q15_in_place, possat, in_maxneg2, in_maxneg2,
229 		     ref_mult_possat, 17);
230 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_mult_q15_in_place, long, in_com1, in_com2, ref_mult,
231 		     ARRAY_SIZE(in_com1));
232 
test_zdsp_negate_q15(const DSP_DATA q15_t * input1,const q15_t * ref,size_t length)233 static void test_zdsp_negate_q15(
234 	const DSP_DATA q15_t *input1, const q15_t *ref, size_t length)
235 {
236 	DSP_DATA q15_t *output;
237 
238 	/* Allocate output buffer */
239 	output = (DSP_DATA q15_t *)malloc(length * sizeof(q15_t));
240 	zassert_not_null(output, ASSERT_MSG_BUFFER_ALLOC_FAILED);
241 
242 	/* Run test function */
243 	zdsp_negate_q15(input1, output, length);
244 
245 	/* Validate output */
246 	zassert_true(
247 		test_snr_error_q15(length, output, ref, SNR_ERROR_THRESH),
248 		ASSERT_MSG_SNR_LIMIT_EXCEED);
249 
250 	zassert_true(
251 		test_near_equal_q15(length, output, ref, ABS_ERROR_THRESH_Q15),
252 		ASSERT_MSG_ABS_ERROR_LIMIT_EXCEED);
253 
254 	/* Free output buffer */
255 	free(output);
256 }
257 
258 DEFINE_TEST_VARIANT3(basic_math_q15, zdsp_negate_q15, 7, in_com1, ref_negate, 7);
259 DEFINE_TEST_VARIANT3(basic_math_q15, zdsp_negate_q15, 16, in_com1, ref_negate, 16);
260 DEFINE_TEST_VARIANT3(basic_math_q15, zdsp_negate_q15, 23, in_com1, ref_negate, 23);
261 DEFINE_TEST_VARIANT3(basic_math_q15, zdsp_negate_q15, possat, in_maxneg2, ref_negate_possat, 17);
262 DEFINE_TEST_VARIANT3(basic_math_q15, zdsp_negate_q15, long, in_com1, ref_negate,
263 		     ARRAY_SIZE(in_com1));
264 
test_zdsp_negate_q15_in_place(const DSP_DATA q15_t * input1,const q15_t * ref,size_t length)265 static void test_zdsp_negate_q15_in_place(const DSP_DATA q15_t *input1, const q15_t *ref,
266 				size_t length)
267 {
268 	DSP_DATA q15_t *output;
269 
270 	/* Allocate output buffer */
271 	output = (DSP_DATA q15_t *)malloc(length * sizeof(q15_t));
272 	zassert_not_null(output, ASSERT_MSG_BUFFER_ALLOC_FAILED);
273 
274 	/* Copy input data to output*/
275 	memcpy(output, input1, length * sizeof(q15_t));
276 
277 	/* Run test function */
278 	zdsp_negate_q15(output, output, length);
279 
280 	/* Validate output */
281 	zassert_true(test_snr_error_q15(length, output, ref, SNR_ERROR_THRESH),
282 		     ASSERT_MSG_SNR_LIMIT_EXCEED);
283 
284 	zassert_true(test_near_equal_q15(length, output, ref, ABS_ERROR_THRESH_Q15),
285 		     ASSERT_MSG_ABS_ERROR_LIMIT_EXCEED);
286 
287 	/* Free output buffer */
288 	free(output);
289 }
290 
291 DEFINE_TEST_VARIANT3(basic_math_q15, zdsp_negate_q15_in_place, 7, in_com1, ref_negate, 7);
292 DEFINE_TEST_VARIANT3(basic_math_q15, zdsp_negate_q15_in_place, 16, in_com1, ref_negate, 16);
293 DEFINE_TEST_VARIANT3(basic_math_q15, zdsp_negate_q15_in_place, 23, in_com1, ref_negate, 23);
294 DEFINE_TEST_VARIANT3(basic_math_q15, zdsp_negate_q15_in_place, possat, in_maxneg2,
295 		     ref_negate_possat, 17);
296 DEFINE_TEST_VARIANT3(basic_math_q15, zdsp_negate_q15_in_place, long, in_com1, ref_negate,
297 		     ARRAY_SIZE(in_com1));
298 
test_zdsp_offset_q15(const DSP_DATA q15_t * input1,q15_t scalar,const q15_t * ref,size_t length)299 static void test_zdsp_offset_q15(
300 	const DSP_DATA q15_t *input1, q15_t scalar, const q15_t *ref, size_t length)
301 {
302 	DSP_DATA q15_t *output;
303 
304 	/* Allocate output buffer */
305 	output = (DSP_DATA q15_t *)malloc(length * sizeof(q15_t));
306 	zassert_not_null(output, ASSERT_MSG_BUFFER_ALLOC_FAILED);
307 
308 	/* Run test function */
309 	zdsp_offset_q15(input1, scalar, output, length);
310 
311 	/* Validate output */
312 	zassert_true(
313 		test_snr_error_q15(length, output, ref, SNR_ERROR_THRESH),
314 		ASSERT_MSG_SNR_LIMIT_EXCEED);
315 
316 	zassert_true(
317 		test_near_equal_q15(length, output, ref, ABS_ERROR_THRESH_Q15),
318 		ASSERT_MSG_ABS_ERROR_LIMIT_EXCEED);
319 
320 	/* Free output buffer */
321 	free(output);
322 }
323 
324 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_offset_q15, 0p5_7, in_com1, 0x4000, ref_offset, 7);
325 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_offset_q15, 0p5_16, in_com1, 0x4000, ref_offset, 16);
326 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_offset_q15, 0p5_23, in_com1, 0x4000, ref_offset, 23);
327 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_offset_q15, possat, in_maxpos, 0x7333, ref_offset_possat,
328 		     17);
329 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_offset_q15, negsat, in_maxneg, 0x8ccd, ref_offset_negsat,
330 		     17);
331 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_offset_q15, long, in_com1, 0x4000, ref_offset,
332 		     ARRAY_SIZE(in_com1));
333 
test_zdsp_offset_q15_in_place(const DSP_DATA q15_t * input1,q15_t scalar,const q15_t * ref,size_t length)334 static void test_zdsp_offset_q15_in_place(const DSP_DATA q15_t *input1, q15_t scalar,
335 				const q15_t *ref, size_t length)
336 {
337 	DSP_DATA q15_t *output;
338 
339 	/* Allocate output buffer */
340 	output = (DSP_DATA q15_t *)malloc(length * sizeof(q15_t));
341 	zassert_not_null(output, ASSERT_MSG_BUFFER_ALLOC_FAILED);
342 
343 	/* Copy input data to output*/
344 	memcpy(output, input1, length * sizeof(q15_t));
345 
346 	/* Run test function */
347 	zdsp_offset_q15(output, scalar, output, length);
348 
349 	/* Validate output */
350 	zassert_true(test_snr_error_q15(length, output, ref, SNR_ERROR_THRESH),
351 		     ASSERT_MSG_SNR_LIMIT_EXCEED);
352 
353 	zassert_true(test_near_equal_q15(length, output, ref, ABS_ERROR_THRESH_Q15),
354 		     ASSERT_MSG_ABS_ERROR_LIMIT_EXCEED);
355 
356 	/* Free output buffer */
357 	free(output);
358 }
359 
360 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_offset_q15_in_place, 0p5_7, in_com1, 0x4000, ref_offset,
361 		     7);
362 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_offset_q15_in_place, 0p5_16, in_com1, 0x4000, ref_offset,
363 		     16);
364 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_offset_q15_in_place, 0p5_23, in_com1, 0x4000, ref_offset,
365 		     23);
366 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_offset_q15_in_place, possat, in_maxpos, 0x7333,
367 		     ref_offset_possat, 17);
368 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_offset_q15_in_place, negsat, in_maxneg, 0x8ccd,
369 		     ref_offset_negsat, 17);
370 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_offset_q15_in_place, long, in_com1, 0x4000, ref_offset,
371 		     ARRAY_SIZE(in_com1));
372 
test_zdsp_scale_q15(const DSP_DATA q15_t * input1,q15_t scalar,const q15_t * ref,size_t length)373 static void test_zdsp_scale_q15(
374 	const DSP_DATA q15_t *input1, q15_t scalar, const q15_t *ref, size_t length)
375 {
376 	DSP_DATA q15_t *output;
377 
378 	/* Allocate output buffer */
379 	output = (DSP_DATA q15_t *)malloc(length * sizeof(q15_t));
380 	zassert_not_null(output, ASSERT_MSG_BUFFER_ALLOC_FAILED);
381 
382 	/* Run test function */
383 	zdsp_scale_q15(input1, scalar, 0, output, length);
384 
385 	/* Validate output */
386 	zassert_true(
387 		test_snr_error_q15(length, output, ref, SNR_ERROR_THRESH),
388 		ASSERT_MSG_SNR_LIMIT_EXCEED);
389 
390 	zassert_true(
391 		test_near_equal_q15(length, output, ref, ABS_ERROR_THRESH_Q15),
392 		ASSERT_MSG_ABS_ERROR_LIMIT_EXCEED);
393 
394 	/* Free output buffer */
395 	free(output);
396 }
397 
398 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_scale_q15, 0p5_7, in_com1, 0x4000, ref_scale, 7);
399 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_scale_q15, 0p5_16, in_com1, 0x4000, ref_scale, 16);
400 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_scale_q15, 0p5_23, in_com1, 0x4000, ref_scale, 23);
401 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_scale_q15, possat, in_maxneg2, 0x8000, ref_scale_possat,
402 		     17);
403 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_scale_q15, long, in_com1, 0x4000, ref_scale,
404 		     ARRAY_SIZE(in_com1));
405 
test_zdsp_scale_q15_in_place(const DSP_DATA q15_t * input1,q15_t scalar,const q15_t * ref,size_t length)406 static void test_zdsp_scale_q15_in_place(const DSP_DATA q15_t *input1, q15_t scalar,
407 				const q15_t *ref, size_t length)
408 {
409 	DSP_DATA q15_t *output;
410 
411 	/* Allocate output buffer */
412 	output = (DSP_DATA q15_t *)malloc(length * sizeof(q15_t));
413 	zassert_not_null(output, ASSERT_MSG_BUFFER_ALLOC_FAILED);
414 
415 	/* Copy input data to output*/
416 	memcpy(output, input1, length * sizeof(q15_t));
417 
418 	/* Run test function */
419 	zdsp_scale_q15(output, scalar, 0, output, length);
420 
421 	/* Validate output */
422 	zassert_true(test_snr_error_q15(length, output, ref, SNR_ERROR_THRESH),
423 		     ASSERT_MSG_SNR_LIMIT_EXCEED);
424 
425 	zassert_true(test_near_equal_q15(length, output, ref, ABS_ERROR_THRESH_Q15),
426 		     ASSERT_MSG_ABS_ERROR_LIMIT_EXCEED);
427 
428 	/* Free output buffer */
429 	free(output);
430 }
431 
432 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_scale_q15_in_place, 0p5_7, in_com1, 0x4000, ref_scale, 7);
433 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_scale_q15_in_place, 0p5_16, in_com1, 0x4000, ref_scale,
434 		     16);
435 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_scale_q15_in_place, 0p5_23, in_com1, 0x4000, ref_scale,
436 		     23);
437 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_scale_q15_in_place, possat, in_maxneg2, 0x8000,
438 		     ref_scale_possat, 17);
439 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_scale_q15_in_place, long, in_com1, 0x4000, ref_scale,
440 		     ARRAY_SIZE(in_com1));
441 
test_zdsp_dot_prod_q15(const DSP_DATA q15_t * input1,const DSP_DATA q15_t * input2,const q63_t * ref,size_t length)442 static void test_zdsp_dot_prod_q15(
443 	const DSP_DATA q15_t *input1, const DSP_DATA q15_t *input2, const q63_t *ref,
444 	size_t length)
445 {
446 	DSP_DATA q63_t *output;
447 
448 	/* Allocate output buffer */
449 	output = (DSP_DATA q63_t *)malloc(1 * sizeof(q63_t));
450 	zassert_not_null(output, ASSERT_MSG_BUFFER_ALLOC_FAILED);
451 
452 	/* Run test function */
453 	zdsp_dot_prod_q15(input1, input2, length, &output[0]);
454 
455 	/* Validate output */
456 	zassert_true(
457 		test_snr_error_q63(1, output, ref, SNR_ERROR_THRESH_HIGH),
458 		ASSERT_MSG_SNR_LIMIT_EXCEED);
459 
460 	zassert_true(
461 		test_near_equal_q63(1, output, ref, ABS_ERROR_THRESH_Q63),
462 		ASSERT_MSG_ABS_ERROR_LIMIT_EXCEED);
463 
464 	/* Free output buffer */
465 	free(output);
466 }
467 
468 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_dot_prod_q15, 7, in_com1, in_com2, ref_dot_prod_3, 7);
469 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_dot_prod_q15, 16, in_com1, in_com2, ref_dot_prod_4, 16);
470 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_dot_prod_q15, 23, in_com1, in_com2, ref_dot_prod_4n1, 23);
471 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_dot_prod_q15, long, in_com1, in_com2, ref_dot_prod_long,
472 		     ARRAY_SIZE(in_com1));
473 
test_zdsp_abs_q15(const DSP_DATA q15_t * input1,const q15_t * ref,size_t length)474 static void test_zdsp_abs_q15(
475 	const DSP_DATA q15_t *input1, const q15_t *ref, size_t length)
476 {
477 	DSP_DATA q15_t *output;
478 
479 	/* Allocate output buffer */
480 	output = (DSP_DATA q15_t *)malloc(length * sizeof(q15_t));
481 	zassert_not_null(output, ASSERT_MSG_BUFFER_ALLOC_FAILED);
482 
483 	/* Run test function */
484 	zdsp_abs_q15(input1, output, length);
485 
486 	/* Validate output */
487 	zassert_true(
488 		test_snr_error_q15(length, output, ref, SNR_ERROR_THRESH),
489 		ASSERT_MSG_SNR_LIMIT_EXCEED);
490 
491 	zassert_true(
492 		test_near_equal_q15(length, output, ref, ABS_ERROR_THRESH_Q15),
493 		ASSERT_MSG_ABS_ERROR_LIMIT_EXCEED);
494 
495 	/* Free output buffer */
496 	free(output);
497 }
498 
499 DEFINE_TEST_VARIANT3(basic_math_q15, zdsp_abs_q15, 7, in_com1, ref_abs, 7);
500 DEFINE_TEST_VARIANT3(basic_math_q15, zdsp_abs_q15, 16, in_com1, ref_abs, 16);
501 DEFINE_TEST_VARIANT3(basic_math_q15, zdsp_abs_q15, 23, in_com1, ref_abs, 23);
502 DEFINE_TEST_VARIANT3(basic_math_q15, zdsp_abs_q15, long, in_com1, ref_abs, ARRAY_SIZE(in_com1));
503 
test_zdsp_abs_q15_in_place(const DSP_DATA q15_t * input1,const q15_t * ref,size_t length)504 static void test_zdsp_abs_q15_in_place(
505 	const DSP_DATA q15_t *input1, const q15_t *ref, size_t length)
506 {
507 	DSP_DATA q15_t *output;
508 
509 	/* Allocate output buffer */
510 	output = (DSP_DATA q15_t *)malloc(length * sizeof(q15_t));
511 	zassert_not_null(output, ASSERT_MSG_BUFFER_ALLOC_FAILED);
512 
513 	/* Copy input data to output*/
514 	memcpy(output, input1, length * sizeof(q15_t));
515 
516 	/* Run test function */
517 	zdsp_abs_q15(output, output, length);
518 
519 	/* Validate output */
520 	zassert_true(test_snr_error_q15(length, output, ref, SNR_ERROR_THRESH),
521 		     ASSERT_MSG_SNR_LIMIT_EXCEED);
522 
523 	zassert_true(test_near_equal_q15(length, output, ref, ABS_ERROR_THRESH_Q15),
524 		     ASSERT_MSG_ABS_ERROR_LIMIT_EXCEED);
525 
526 	/* Free output buffer */
527 	free(output);
528 }
529 
530 DEFINE_TEST_VARIANT3(basic_math_q15, zdsp_abs_q15_in_place, 7, in_com1, ref_abs, 7);
531 DEFINE_TEST_VARIANT3(basic_math_q15, zdsp_abs_q15_in_place, 16, in_com1, ref_abs, 16);
532 DEFINE_TEST_VARIANT3(basic_math_q15, zdsp_abs_q15_in_place, 23, in_com1, ref_abs, 23);
533 DEFINE_TEST_VARIANT3(basic_math_q15, zdsp_abs_q15_in_place, long, in_com1, ref_abs,
534 		     ARRAY_SIZE(in_com1));
535 
test_zdsp_shift_q15(const DSP_DATA q15_t * input1,const q15_t * ref,size_t length)536 static void test_zdsp_shift_q15(
537 	const DSP_DATA q15_t *input1, const q15_t *ref, size_t length)
538 {
539 	DSP_DATA q15_t *output;
540 
541 	/* Allocate output buffer */
542 	output = (DSP_DATA q15_t *)malloc(length * sizeof(q15_t));
543 	zassert_not_null(output, ASSERT_MSG_BUFFER_ALLOC_FAILED);
544 
545 	/* Run test function */
546 	zdsp_shift_q15(input1, 1, output, length);
547 
548 	/* Validate output */
549 	zassert_true(
550 		test_snr_error_q15(length, output, ref, SNR_ERROR_THRESH),
551 		ASSERT_MSG_SNR_LIMIT_EXCEED);
552 
553 	zassert_true(
554 		test_near_equal_q15(length, output, ref, ABS_ERROR_THRESH_Q15),
555 		ASSERT_MSG_ABS_ERROR_LIMIT_EXCEED);
556 
557 	/* Free output buffer */
558 	free(output);
559 }
560 
561 DEFINE_TEST_VARIANT3(basic_math_q15, zdsp_shift_q15, rand, in_rand, ref_shift, 17);
562 DEFINE_TEST_VARIANT3(basic_math_q15, zdsp_shift_q15, possat, in_maxpos, ref_shift_possat, 17);
563 DEFINE_TEST_VARIANT3(basic_math_q15, zdsp_shift_q15, negsat, in_maxneg, ref_shift_negsat, 17);
564 
test_zdsp_shift_q15_in_place(const DSP_DATA q15_t * input1,const q15_t * ref,size_t length)565 static void test_zdsp_shift_q15_in_place(
566 	const DSP_DATA q15_t *input1, const q15_t *ref, size_t length)
567 {
568 	DSP_DATA q15_t *output;
569 
570 	/* Allocate output buffer */
571 	output = (DSP_DATA q15_t *)malloc(length * sizeof(q15_t));
572 	zassert_not_null(output, ASSERT_MSG_BUFFER_ALLOC_FAILED);
573 
574 	/* Copy input data to output*/
575 	memcpy(output, input1, length * sizeof(q15_t));
576 
577 	/* Run test function */
578 	zdsp_shift_q15(output, 1, output, length);
579 
580 	/* Validate output */
581 	zassert_true(test_snr_error_q15(length, output, ref, SNR_ERROR_THRESH),
582 		     ASSERT_MSG_SNR_LIMIT_EXCEED);
583 
584 	zassert_true(test_near_equal_q15(length, output, ref, ABS_ERROR_THRESH_Q15),
585 		     ASSERT_MSG_ABS_ERROR_LIMIT_EXCEED);
586 
587 	/* Free output buffer */
588 	free(output);
589 }
590 
591 DEFINE_TEST_VARIANT3(basic_math_q15, zdsp_shift_q15_in_place, rand, in_rand, ref_shift, 17);
592 DEFINE_TEST_VARIANT3(basic_math_q15, zdsp_shift_q15_in_place, possat, in_maxpos, ref_shift_possat,
593 		     17);
594 DEFINE_TEST_VARIANT3(basic_math_q15, zdsp_shift_q15_in_place, negsat, in_maxneg, ref_shift_negsat,
595 		     17);
596 
test_zdsp_and_u16(const DSP_DATA uint16_t * input1,const DSP_DATA uint16_t * input2,const uint16_t * ref,size_t length)597 static void test_zdsp_and_u16(
598 	const DSP_DATA uint16_t *input1, const DSP_DATA uint16_t *input2, const uint16_t *ref,
599 	size_t length)
600 {
601 	DSP_DATA uint16_t *output;
602 
603 	/* Allocate output buffer */
604 	output = (DSP_DATA q15_t *)malloc(length * sizeof(uint16_t));
605 	zassert_not_null(output, ASSERT_MSG_BUFFER_ALLOC_FAILED);
606 
607 	/* Run test function */
608 	zdsp_and_u16(input1, input2, output, length);
609 
610 	/* Validate output */
611 	zassert_true(
612 		test_equal_q15(length, output, ref),
613 		ASSERT_MSG_INCORRECT_COMP_RESULT);
614 
615 	/* Free output buffer */
616 	free(output);
617 }
618 
619 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_and_u16, 7, in_bitwise1, in_bitwise2, ref_and, 7);
620 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_and_u16, 16, in_bitwise1, in_bitwise2, ref_and, 16);
621 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_and_u16, 23, in_bitwise1, in_bitwise2, ref_and, 23);
622 
test_zdsp_and_u16_in_place(const DSP_DATA uint16_t * input1,const DSP_DATA uint16_t * input2,const uint16_t * ref,size_t length)623 static void test_zdsp_and_u16_in_place(
624 	const DSP_DATA uint16_t *input1, const DSP_DATA uint16_t *input2, const uint16_t *ref,
625 	size_t length)
626 {
627 	DSP_DATA uint16_t *output;
628 
629 	/* Allocate output buffer */
630 	output = (DSP_DATA q15_t *)malloc(length * sizeof(uint16_t));
631 	zassert_not_null(output, ASSERT_MSG_BUFFER_ALLOC_FAILED);
632 
633 	/* Copy input data to output*/
634 	memcpy(output, input1, length * sizeof(q15_t));
635 
636 	/* Run test function */
637 	zdsp_and_u16(output, input2, output, length);
638 
639 	/* Validate output */
640 	zassert_true(test_equal_q15(length, output, ref), ASSERT_MSG_INCORRECT_COMP_RESULT);
641 
642 	/* Free output buffer */
643 	free(output);
644 }
645 
646 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_and_u16_in_place, 7, in_bitwise1, in_bitwise2, ref_and,
647 		     7);
648 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_and_u16_in_place, 16, in_bitwise1, in_bitwise2, ref_and,
649 		     16);
650 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_and_u16_in_place, 23, in_bitwise1, in_bitwise2, ref_and,
651 		     23);
652 
test_zdsp_or_u16(const DSP_DATA uint16_t * input1,const DSP_DATA uint16_t * input2,const uint16_t * ref,size_t length)653 static void test_zdsp_or_u16(
654 	const DSP_DATA uint16_t *input1, const DSP_DATA uint16_t *input2, const uint16_t *ref,
655 	size_t length)
656 {
657 	DSP_DATA uint16_t *output;
658 
659 	/* Allocate output buffer */
660 	output = (DSP_DATA q15_t *)malloc(length * sizeof(uint16_t));
661 	zassert_not_null(output, ASSERT_MSG_BUFFER_ALLOC_FAILED);
662 
663 	/* Run test function */
664 	zdsp_or_u16(input1, input2, output, length);
665 
666 	/* Validate output */
667 	zassert_true(
668 		test_equal_q15(length, output, ref),
669 		ASSERT_MSG_INCORRECT_COMP_RESULT);
670 
671 	/* Free output buffer */
672 	free(output);
673 }
674 
675 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_or_u16, 7, in_bitwise1, in_bitwise2, ref_or, 7);
676 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_or_u16, 16, in_bitwise1, in_bitwise2, ref_or, 16);
677 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_or_u16, 23, in_bitwise1, in_bitwise2, ref_or, 23);
678 
test_zdsp_or_u16_in_place(const DSP_DATA uint16_t * input1,const DSP_DATA uint16_t * input2,const uint16_t * ref,size_t length)679 static void test_zdsp_or_u16_in_place(
680 	const DSP_DATA uint16_t *input1, const DSP_DATA uint16_t *input2, const uint16_t *ref,
681 	size_t length)
682 {
683 	DSP_DATA uint16_t *output;
684 
685 	/* Allocate output buffer */
686 	output = (DSP_DATA q15_t *)malloc(length * sizeof(uint16_t));
687 	zassert_not_null(output, ASSERT_MSG_BUFFER_ALLOC_FAILED);
688 
689 	/* Copy input data to output*/
690 	memcpy(output, input1, length * sizeof(q15_t));
691 
692 	/* Run test function */
693 	zdsp_or_u16(output, input2, output, length);
694 
695 	/* Validate output */
696 	zassert_true(test_equal_q15(length, output, ref), ASSERT_MSG_INCORRECT_COMP_RESULT);
697 
698 	/* Free output buffer */
699 	free(output);
700 }
701 
702 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_or_u16_in_place, 7, in_bitwise1, in_bitwise2, ref_or, 7);
703 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_or_u16_in_place, 16, in_bitwise1, in_bitwise2, ref_or,
704 		     16);
705 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_or_u16_in_place, 23, in_bitwise1, in_bitwise2, ref_or,
706 		     23);
707 
test_zdsp_not_u16(const DSP_DATA uint16_t * input1,const uint16_t * ref,size_t length)708 static void test_zdsp_not_u16(
709 	const DSP_DATA uint16_t *input1, const uint16_t *ref, size_t length)
710 {
711 	DSP_DATA uint16_t *output;
712 
713 	/* Allocate output buffer */
714 	output = (DSP_DATA q15_t *)malloc(length * sizeof(uint16_t));
715 	zassert_not_null(output, ASSERT_MSG_BUFFER_ALLOC_FAILED);
716 
717 	/* Run test function */
718 	zdsp_not_u16(input1, output, length);
719 
720 	/* Validate output */
721 	zassert_true(
722 		test_equal_q15(length, output, ref),
723 		ASSERT_MSG_INCORRECT_COMP_RESULT);
724 
725 	/* Free output buffer */
726 	free(output);
727 }
728 
729 DEFINE_TEST_VARIANT3(basic_math_q15, zdsp_not_u16, 7, in_bitwise1, ref_not, 7);
730 DEFINE_TEST_VARIANT3(basic_math_q15, zdsp_not_u16, 16, in_bitwise1, ref_not, 16);
731 DEFINE_TEST_VARIANT3(basic_math_q15, zdsp_not_u16, 23, in_bitwise1, ref_not, 23);
732 
test_zdsp_not_u16_in_place(const DSP_DATA uint16_t * input1,const uint16_t * ref,size_t length)733 static void test_zdsp_not_u16_in_place(
734 	const DSP_DATA uint16_t *input1, const uint16_t *ref, size_t length)
735 {
736 	DSP_DATA uint16_t *output;
737 
738 	/* Allocate output buffer */
739 	output = (DSP_DATA q15_t *)malloc(length * sizeof(uint16_t));
740 	zassert_not_null(output, ASSERT_MSG_BUFFER_ALLOC_FAILED);
741 
742 	/* Copy input data to output*/
743 	memcpy(output, input1, length * sizeof(q15_t));
744 
745 	/* Run test function */
746 	zdsp_not_u16(output, output, length);
747 
748 	/* Validate output */
749 	zassert_true(test_equal_q15(length, output, ref), ASSERT_MSG_INCORRECT_COMP_RESULT);
750 
751 	/* Free output buffer */
752 	free(output);
753 }
754 
755 DEFINE_TEST_VARIANT3(basic_math_q15, zdsp_not_u16_in_place, 7, in_bitwise1, ref_not, 7);
756 DEFINE_TEST_VARIANT3(basic_math_q15, zdsp_not_u16_in_place, 16, in_bitwise1, ref_not, 16);
757 DEFINE_TEST_VARIANT3(basic_math_q15, zdsp_not_u16_in_place, 23, in_bitwise1, ref_not, 23);
758 
test_zdsp_xor_u16(const DSP_DATA uint16_t * input1,const DSP_DATA uint16_t * input2,const uint16_t * ref,size_t length)759 static void test_zdsp_xor_u16(
760 	const DSP_DATA uint16_t *input1, const DSP_DATA uint16_t *input2, const uint16_t *ref,
761 	size_t length)
762 {
763 	DSP_DATA uint16_t *output;
764 
765 	/* Allocate output buffer */
766 	output = (DSP_DATA q15_t *)malloc(length * sizeof(uint16_t));
767 	zassert_not_null(output, ASSERT_MSG_BUFFER_ALLOC_FAILED);
768 
769 	/* Run test function */
770 	zdsp_xor_u16(input1, input2, output, length);
771 
772 	/* Validate output */
773 	zassert_true(
774 		test_equal_q15(length, output, ref),
775 		ASSERT_MSG_INCORRECT_COMP_RESULT);
776 
777 	/* Free output buffer */
778 	free(output);
779 }
780 
781 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_xor_u16, 7, in_bitwise1, in_bitwise2, ref_xor, 7);
782 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_xor_u16, 16, in_bitwise1, in_bitwise2, ref_xor, 16);
783 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_xor_u16, 23, in_bitwise1, in_bitwise2, ref_xor, 23);
784 
test_zdsp_xor_u16_in_place(const DSP_DATA uint16_t * input1,const DSP_DATA uint16_t * input2,const uint16_t * ref,size_t length)785 static void test_zdsp_xor_u16_in_place(
786 	const DSP_DATA uint16_t *input1, const DSP_DATA uint16_t *input2, const uint16_t *ref,
787 	size_t length)
788 {
789 	DSP_DATA uint16_t *output;
790 
791 	/* Allocate output buffer */
792 	output = (DSP_DATA q15_t *)malloc(length * sizeof(uint16_t));
793 	zassert_not_null(output, ASSERT_MSG_BUFFER_ALLOC_FAILED);
794 
795 	/* Copy input data to output*/
796 	memcpy(output, input1, length * sizeof(q15_t));
797 
798 	/* Run test function */
799 	zdsp_xor_u16(output, input2, output, length);
800 
801 	/* Validate output */
802 	zassert_true(test_equal_q15(length, output, ref), ASSERT_MSG_INCORRECT_COMP_RESULT);
803 
804 	/* Free output buffer */
805 	free(output);
806 }
807 
808 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_xor_u16_in_place, 7, in_bitwise1, in_bitwise2, ref_xor,
809 		     7);
810 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_xor_u16_in_place, 16, in_bitwise1, in_bitwise2, ref_xor,
811 		     16);
812 DEFINE_TEST_VARIANT4(basic_math_q15, zdsp_xor_u16_in_place, 23, in_bitwise1, in_bitwise2, ref_xor,
813 		     23);
814 
test_zdsp_clip_q15(const DSP_DATA q15_t * input,const q15_t * ref,q15_t min,q15_t max,size_t length)815 static void test_zdsp_clip_q15(
816 	const DSP_DATA q15_t *input, const q15_t *ref, q15_t min, q15_t max, size_t length)
817 {
818 	DSP_DATA q15_t *output;
819 
820 	/* Allocate output buffer */
821 	output = (DSP_DATA q15_t *)malloc(length * sizeof(q15_t));
822 	zassert_not_null(output, ASSERT_MSG_BUFFER_ALLOC_FAILED);
823 
824 	/* Run test function */
825 	zdsp_clip_q15(input, output, min, max, length);
826 
827 	/* Validate output */
828 	zassert_true(
829 		test_equal_q15(length, output, ref),
830 		ASSERT_MSG_INCORRECT_COMP_RESULT);
831 
832 	/* Free output buffer */
833 	free(output);
834 }
835 
836 DEFINE_TEST_VARIANT5(basic_math_q15, zdsp_clip_q15, c000_f333, in_clip, ref_clip1,
837 		     0xc000, 0xf333, ARRAY_SIZE(ref_clip1));
838 DEFINE_TEST_VARIANT5(basic_math_q15, zdsp_clip_q15, c000_4000, in_clip, ref_clip2,
839 		     0xc000, 0x4000, ARRAY_SIZE(ref_clip2));
840 DEFINE_TEST_VARIANT5(basic_math_q15, zdsp_clip_q15, 0ccd_4000, in_clip, ref_clip3,
841 		     0x0ccd, 0x4000, ARRAY_SIZE(ref_clip3));
842 
test_zdsp_clip_q15_in_place(const DSP_DATA q15_t * input,const q15_t * ref,q15_t min,q15_t max,size_t length)843 static void test_zdsp_clip_q15_in_place(
844 	const DSP_DATA q15_t *input, const q15_t *ref, q15_t min, q15_t max, size_t length)
845 {
846 	DSP_DATA q15_t *output;
847 
848 	/* Allocate output buffer */
849 	output = (DSP_DATA q15_t *)malloc(length * sizeof(q15_t));
850 	zassert_not_null(output, ASSERT_MSG_BUFFER_ALLOC_FAILED);
851 
852 	/* Copy input data to output*/
853 	memcpy(output, input, length * sizeof(q15_t));
854 
855 	/* Run test function */
856 	zdsp_clip_q15(output, output, min, max, length);
857 
858 	/* Validate output */
859 	zassert_true(test_equal_q15(length, output, ref), ASSERT_MSG_INCORRECT_COMP_RESULT);
860 
861 	/* Free output buffer */
862 	free(output);
863 }
864 
865 DEFINE_TEST_VARIANT5(basic_math_q15, zdsp_clip_q15_in_place, c000_f333, in_clip, ref_clip1, 0xc000,
866 		     0xf333, ARRAY_SIZE(ref_clip1));
867 DEFINE_TEST_VARIANT5(basic_math_q15, zdsp_clip_q15_in_place, c000_4000, in_clip, ref_clip2, 0xc000,
868 		     0x4000, ARRAY_SIZE(ref_clip2));
869 DEFINE_TEST_VARIANT5(basic_math_q15, zdsp_clip_q15_in_place, 0ccd_4000, in_clip, ref_clip3, 0x0ccd,
870 		     0x4000, ARRAY_SIZE(ref_clip3));
871 
872 ZTEST_SUITE(basic_math_q15, NULL, NULL, NULL, NULL, NULL);
873