blob: fcaff86113a65bc6ed06b09ffeedcd70bf242b12 [file] [log] [blame]
/* Copyright (c) 2023 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr/dsp/print_format.h>
#include <zephyr/ztest.h>
#include <string.h>
#define float_multiplier(type) ((INT64_C(1) << (8 * sizeof(type) - 1)) - 1)
#define assert_strings(expected, actual) \
zexpect_equal(strlen(expected), strlen(actual), "Expected %d(%s), got %d(%s)", \
strlen(expected), expected, strlen(actual), actual); \
zexpect_mem_equal(expected, actual, MIN(strlen(expected), strlen(actual)), \
"Expected '%s', got '%s'", expected, actual)
ZTEST_SUITE(zdsp_print_format, NULL, NULL, NULL, NULL, NULL);
ZTEST(zdsp_print_format, test_print_q31_precision_positive)
{
char buffer[256];
q31_t q = (q31_t)0x0f5c28f0; /* 0.119999997 */
snprintf(buffer, 256, "%" PRIq(6), PRIq_arg(q, 6, 0));
assert_strings("0.119999", buffer);
snprintf(buffer, 256, "%" PRIq(6), PRIq_arg(q, 6, 1));
assert_strings("0.239999", buffer);
snprintf(buffer, 256, "%" PRIq(6), PRIq_arg(q, 6, -2));
assert_strings("0.029999", buffer);
snprintf(buffer, 256, "%" PRIq(4), PRIq_arg(q, 4, 0));
assert_strings("0.1199", buffer);
snprintf(buffer, 256, "%" PRIq(4), PRIq_arg(q, 4, 1));
assert_strings("0.2399", buffer);
snprintf(buffer, 256, "%" PRIq(4), PRIq_arg(q, 4, -2));
assert_strings("0.0299", buffer);
}
ZTEST(zdsp_print_format, test_print_q31_precision_negative)
{
char buffer[256];
q31_t q = (q31_t)0x83d70a00; /* -0.970000029 */
snprintf(buffer, 256, "%" PRIq(6), PRIq_arg(q, 6, 0));
assert_strings("-0.970000", buffer);
snprintf(buffer, 256, "%" PRIq(6), PRIq_arg(q, 6, 1));
assert_strings("-1.940000", buffer);
snprintf(buffer, 256, "%" PRIq(6), PRIq_arg(q, 6, -2));
assert_strings("-0.242500", buffer);
snprintf(buffer, 256, "%" PRIq(4), PRIq_arg(q, 4, 0));
assert_strings("-0.9700", buffer);
snprintf(buffer, 256, "%" PRIq(4), PRIq_arg(q, 4, 1));
assert_strings("-1.9400", buffer);
snprintf(buffer, 256, "%" PRIq(4), PRIq_arg(q, 4, -2));
assert_strings("-0.2425", buffer);
}
ZTEST(zdsp_print_format, test_print_q15_precision_positive)
{
char buffer[256];
q15_t q = (q15_t)0x28f5; /* 0.319986672 */
snprintf(buffer, 256, "%" PRIq(5), PRIq_arg(q, 5, 0));
assert_strings("0.31997", buffer);
snprintf(buffer, 256, "%" PRIq(5), PRIq_arg(q, 5, 1));
assert_strings("0.63995", buffer);
snprintf(buffer, 256, "%" PRIq(5), PRIq_arg(q, 5, -2));
assert_strings("0.07999", buffer);
snprintf(buffer, 256, "%" PRIq(3), PRIq_arg(q, 3, 0));
assert_strings("0.319", buffer);
snprintf(buffer, 256, "%" PRIq(3), PRIq_arg(q, 3, 1));
assert_strings("0.639", buffer);
snprintf(buffer, 256, "%" PRIq(3), PRIq_arg(q, 3, -2));
assert_strings("0.079", buffer);
}
ZTEST(zdsp_print_format, test_print_q15_precision_negative)
{
char buffer[256];
q15_t q = (q15_t)0xc4bd; /* -0.462965789 */
snprintf(buffer, 256, "%" PRIq(5), PRIq_arg(q, 5, 0));
assert_strings("-0.46298", buffer);
snprintf(buffer, 256, "%" PRIq(5), PRIq_arg(q, 5, 1));
assert_strings("-0.92596", buffer);
snprintf(buffer, 256, "%" PRIq(5), PRIq_arg(q, 5, -2));
assert_strings("-0.11574", buffer);
snprintf(buffer, 256, "%" PRIq(3), PRIq_arg(q, 3, 0));
assert_strings("-0.462", buffer);
snprintf(buffer, 256, "%" PRIq(3), PRIq_arg(q, 3, 1));
assert_strings("-0.925", buffer);
snprintf(buffer, 256, "%" PRIq(3), PRIq_arg(q, 3, -2));
assert_strings("-0.115", buffer);
}
ZTEST(zdsp_print_format, test_print_q7_precision_positive)
{
char buffer[256];
q7_t q = (q7_t)0x01; /* 0.007874016 */
snprintf(buffer, 256, "%" PRIq(4), PRIq_arg(q, 4, 0));
assert_strings("0.0078", buffer);
snprintf(buffer, 256, "%" PRIq(4), PRIq_arg(q, 4, 1));
assert_strings("0.0156", buffer);
snprintf(buffer, 256, "%" PRIq(4), PRIq_arg(q, 4, -2));
assert_strings("0.0019", buffer);
snprintf(buffer, 256, "%" PRIq(2), PRIq_arg(q, 2, 0));
assert_strings("0.00", buffer);
snprintf(buffer, 256, "%" PRIq(2), PRIq_arg(q, 2, 1));
assert_strings("0.01", buffer);
snprintf(buffer, 256, "%" PRIq(2), PRIq_arg(q, 2, -2));
assert_strings("0.00", buffer);
}
ZTEST(zdsp_print_format, test_print_q7_precision_negative)
{
char buffer[256];
q7_t q = (q7_t)0xe2; /* -0.228346457 */
snprintf(buffer, 256, "%" PRIq(4), PRIq_arg(q, 4, 0));
assert_strings("-0.2343", buffer);
snprintf(buffer, 256, "%" PRIq(4), PRIq_arg(q, 4, 1));
assert_strings("-0.4687", buffer);
snprintf(buffer, 256, "%" PRIq(4), PRIq_arg(q, 4, -2));
assert_strings("-0.0585", buffer);
snprintf(buffer, 256, "%" PRIq(2), PRIq_arg(q, 2, 0));
assert_strings("-0.23", buffer);
snprintf(buffer, 256, "%" PRIq(2), PRIq_arg(q, 2, 1));
assert_strings("-0.46", buffer);
snprintf(buffer, 256, "%" PRIq(2), PRIq_arg(q, 2, -2));
assert_strings("-0.05", buffer);
}