[Sound-open-firmware] [PATCH 03/10] test: Math unit tests
Liam Girdwood
liam.r.girdwood at linux.intel.com
Thu Jun 21 12:12:01 CEST 2018
From: Slawomir Blauciak <slawomir.blauciak at linux.intel.com>
Tests provided: ceil_divide, find_equal_int16, find_min_int16, find_max_abs_int32, norm_int32, sin_fixed
Signed-off-by: Slawomir Blauciak <slawomir.blauciak at linux.intel.com>
---
test/cmocka/Makefile.am | 24 +++
test/cmocka/src/math/numbers/ceil_divide.c | 82 +++++++++
.../src/math/numbers/find_equal_int16.c | 78 ++++++++
.../src/math/numbers/find_max_abs_int32.c | 72 ++++++++
test/cmocka/src/math/numbers/find_min_int16.c | 71 ++++++++
test/cmocka/src/math/numbers/gcd.c | 3 +-
test/cmocka/src/math/numbers/norm_int32.c | 78 ++++++++
test/cmocka/src/math/trig/sin_fixed.c | 169 ++++++++++++++++++
8 files changed, 576 insertions(+), 1 deletion(-)
create mode 100644 test/cmocka/src/math/numbers/ceil_divide.c
create mode 100644 test/cmocka/src/math/numbers/find_equal_int16.c
create mode 100644 test/cmocka/src/math/numbers/find_max_abs_int32.c
create mode 100644 test/cmocka/src/math/numbers/find_min_int16.c
create mode 100644 test/cmocka/src/math/numbers/norm_int32.c
create mode 100644 test/cmocka/src/math/trig/sin_fixed.c
diff --git a/test/cmocka/Makefile.am b/test/cmocka/Makefile.am
index 565fb80..bca9f56 100644
--- a/test/cmocka/Makefile.am
+++ b/test/cmocka/Makefile.am
@@ -50,5 +50,29 @@ check_PROGRAMS += gcd
gcd_SOURCES = src/math/numbers/gcd.c
gcd_LDADD = ../../src/math/libsof_math.a $(LDADD)
+check_PROGRAMS += ceil_divide
+ceil_divide_SOURCES = src/math/numbers/ceil_divide.c
+ceil_divide_LDADD = ../../src/math/libsof_math.a -lm $(LDADD)
+
+check_PROGRAMS += find_equal_int16
+find_equal_int16_SOURCES = src/math/numbers/find_equal_int16.c
+find_equal_int16_LDADD = ../../src/math/libsof_math.a $(LDADD)
+
+check_PROGRAMS += find_min_int16
+find_min_int16_SOURCES = src/math/numbers/find_min_int16.c
+find_min_int16_LDADD = ../../src/math/libsof_math.a $(LDADD)
+
+check_PROGRAMS += find_max_abs_int32
+find_max_abs_int32_SOURCES = src/math/numbers/find_max_abs_int32.c
+find_max_abs_int32_LDADD = ../../src/math/libsof_math.a $(LDADD)
+
+check_PROGRAMS += norm_int32
+norm_int32_SOURCES = src/math/numbers/norm_int32.c
+norm_int32_LDADD = ../../src/math/libsof_math.a $(LDADD)
+
+check_PROGRAMS += sin_fixed
+sin_fixed_SOURCES = src/math/trig/sin_fixed.c
+sin_fixed_LDADD = ../../src/math/libsof_math.a $(LDADD)
+
# all our binaries are test cases
TESTS = $(check_PROGRAMS)
diff --git a/test/cmocka/src/math/numbers/ceil_divide.c b/test/cmocka/src/math/numbers/ceil_divide.c
new file mode 100644
index 0000000..f20514e
--- /dev/null
+++ b/test/cmocka/src/math/numbers/ceil_divide.c
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2018, Intel Corporation
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the Intel Corporation nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Author: Slawomir Blauciak <slawomir.blauciak at linux.intel.com>
+ */
+
+#include <sof/math/numbers.h>
+
+#include <stdio.h>
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <math.h>
+#include <cmocka.h>
+
+static void test_math_numbers_ceil_divide(void **state)
+{
+ (void)state;
+
+ int params[8] = {
+ -1000,
+ 300,
+ 123,
+ -10,
+ 1337,
+ -6,
+ 999,
+ -2
+ };
+
+ int i, j;
+
+ for (i = 0; i < 8; ++i) {
+ for (j = 0; j < 8; ++j) {
+ int ref = ceilf((float)params[i] / (float)params[j]);
+ int r = ceil_divide(params[i], params[j]);
+
+ if (r != ref) {
+ printf("%s: %d / %d = %d (ref: %d)\n", __func__,
+ params[i], params[j], r, ref);
+ }
+
+ assert_int_equal(r, ref);
+ }
+ }
+
+}
+
+int main(void)
+{
+ const struct CMUnitTest tests[] = {
+ cmocka_unit_test(test_math_numbers_ceil_divide)
+ };
+
+ cmocka_set_message_output(CM_OUTPUT_TAP);
+
+ return cmocka_run_group_tests(tests, NULL, NULL);
+}
diff --git a/test/cmocka/src/math/numbers/find_equal_int16.c b/test/cmocka/src/math/numbers/find_equal_int16.c
new file mode 100644
index 0000000..84e06de
--- /dev/null
+++ b/test/cmocka/src/math/numbers/find_equal_int16.c
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2018, Intel Corporation
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the Intel Corporation nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Author: Slawomir Blauciak <slawomir.blauciak at linux.intel.com>
+ */
+
+#include <sof/math/numbers.h>
+
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <cmocka.h>
+
+static void test_math_numbers_find_equal_int16_for_5_123_5_10_123_500_123_n_123_equals_1_4_and_6
+ (void **state)
+{
+ (void)state;
+
+ int16_t r[4];
+ int16_t vec[] = {5, 123, 5, 10, 123, 500, 123};
+ int16_t template[] = {1, 4, 6};
+
+ int r_num = find_equal_int16(r, vec, 123, 7, 4);
+
+ assert_int_equal(r_num, 3);
+ assert_memory_equal(r, template, sizeof(int16_t) * 3);
+}
+
+static void test_math_numbers_find_equal_int16_for_1_2_3_4_5_n_0_equals_nothing
+ (void **state)
+{
+ (void)state;
+
+ int16_t r[4];
+ int16_t vec[] = {1, 2, 3, 4, 5};
+
+ int r_num = find_equal_int16(r, vec, 0, 5, 4);
+
+ assert_int_equal(r_num, 0);
+}
+
+int main(void)
+{
+ const struct CMUnitTest tests[] = {
+ cmocka_unit_test
+ (test_math_numbers_find_equal_int16_for_5_123_5_10_123_500_123_n_123_equals_1_4_and_6),
+ cmocka_unit_test
+ (test_math_numbers_find_equal_int16_for_1_2_3_4_5_n_0_equals_nothing)
+ };
+
+ cmocka_set_message_output(CM_OUTPUT_TAP);
+
+ return cmocka_run_group_tests(tests, NULL, NULL);
+}
diff --git a/test/cmocka/src/math/numbers/find_max_abs_int32.c b/test/cmocka/src/math/numbers/find_max_abs_int32.c
new file mode 100644
index 0000000..1a88263
--- /dev/null
+++ b/test/cmocka/src/math/numbers/find_max_abs_int32.c
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2018, Intel Corporation
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the Intel Corporation nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Author: Slawomir Blauciak <slawomir.blauciak at linux.intel.com>
+ */
+
+#include <sof/math/numbers.h>
+
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <cmocka.h>
+
+static void test_math_numbers_find_max_abs_int32_for_neg100_99_98_50_equals_100
+ (void **state)
+{
+ (void)state;
+
+ int32_t vec[] = {-100, 99, 98, 50};
+ int r = find_max_abs_int32(vec, sizeof(vec) / sizeof(int32_t));
+
+ assert_int_equal(r, 100);
+}
+
+static void test_math_numbers_find_max_abs_int32_for_neg100_99_98_50_101_equals_101
+ (void **state)
+{
+ (void)state;
+
+ int32_t vec[] = {-100, 99, 98, 50, 101};
+ int r = find_max_abs_int32(vec, sizeof(vec) / sizeof(int32_t));
+
+ assert_int_equal(r, 101);
+}
+
+int main(void)
+{
+ const struct CMUnitTest tests[] = {
+ cmocka_unit_test
+ (test_math_numbers_find_max_abs_int32_for_neg100_99_98_50_equals_100),
+ cmocka_unit_test
+ (test_math_numbers_find_max_abs_int32_for_neg100_99_98_50_101_equals_101)
+ };
+
+ cmocka_set_message_output(CM_OUTPUT_TAP);
+
+ return cmocka_run_group_tests(tests, NULL, NULL);
+}
diff --git a/test/cmocka/src/math/numbers/find_min_int16.c b/test/cmocka/src/math/numbers/find_min_int16.c
new file mode 100644
index 0000000..744ed12
--- /dev/null
+++ b/test/cmocka/src/math/numbers/find_min_int16.c
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2018, Intel Corporation
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the Intel Corporation nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Author: Slawomir Blauciak <slawomir.blauciak at linux.intel.com>
+ */
+
+#include <sof/math/numbers.h>
+
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <cmocka.h>
+
+static void test_math_numbers_find_min_int16_for_2_equals_2(void **state)
+{
+ (void)state;
+
+ int16_t vec[] = {2};
+ int r = find_min_int16(vec, sizeof(vec) / sizeof(int16_t));
+
+ assert_int_equal(r, 2);
+}
+
+static void test_math_numbers_find_min_int16_for_5_2_3_4_1_equals_1
+ (void **state)
+{
+ (void)state;
+
+ int16_t vec[] = {5, 2, 3, 4, 1};
+ int r = find_min_int16(vec, sizeof(vec) / sizeof(int16_t));
+
+ assert_int_equal(r, 1);
+}
+
+int main(void)
+{
+ const struct CMUnitTest tests[] = {
+ cmocka_unit_test
+ (test_math_numbers_find_min_int16_for_2_equals_2),
+ cmocka_unit_test
+ (test_math_numbers_find_min_int16_for_5_2_3_4_1_equals_1)
+ };
+
+ cmocka_set_message_output(CM_OUTPUT_TAP);
+
+ return cmocka_run_group_tests(tests, NULL, NULL);
+}
diff --git a/test/cmocka/src/math/numbers/gcd.c b/test/cmocka/src/math/numbers/gcd.c
index 7a8329e..dab9fa3 100644
--- a/test/cmocka/src/math/numbers/gcd.c
+++ b/test/cmocka/src/math/numbers/gcd.c
@@ -59,7 +59,8 @@ static void test_math_numbers_gcd_for_12_and_9_equals_3(void **state)
int main(void)
{
const struct CMUnitTest tests[] = {
- cmocka_unit_test(test_math_numbers_gcd_for_5083_and_391_equals_391),
+ cmocka_unit_test
+ (test_math_numbers_gcd_for_5083_and_391_equals_391),
cmocka_unit_test(test_math_numbers_gcd_for_12_and_9_equals_3),
};
diff --git a/test/cmocka/src/math/numbers/norm_int32.c b/test/cmocka/src/math/numbers/norm_int32.c
new file mode 100644
index 0000000..772f74b
--- /dev/null
+++ b/test/cmocka/src/math/numbers/norm_int32.c
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2018, Intel Corporation
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the Intel Corporation nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Author: Slawomir Blauciak <slawomir.blauciak at linux.intel.com>
+ */
+
+#include <sof/math/numbers.h>
+
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <cmocka.h>
+
+static void test_math_numbers_norm_int32_for_0_equals_31(void **state)
+{
+ (void)state;
+
+ int r = norm_int32(0);
+
+ assert_int_equal(r, 31);
+}
+
+static void test_math_numbers_norm_int32_for_35_equals_10(void **state)
+{
+ (void)state;
+
+ int r = norm_int32(35);
+
+ assert_int_equal(r, 25);
+}
+
+static void test_math_numbers_norm_int32_for_2147483648_equals_0(void **state)
+{
+ (void)state;
+
+ int r = norm_int32(2147483648);
+
+ assert_int_equal(r, 0);
+}
+
+int main(void)
+{
+ const struct CMUnitTest tests[] = {
+ cmocka_unit_test(test_math_numbers_norm_int32_for_0_equals_31),
+ cmocka_unit_test
+ (test_math_numbers_norm_int32_for_35_equals_10),
+ cmocka_unit_test
+ (test_math_numbers_norm_int32_for_2147483648_equals_0)
+ };
+
+ cmocka_set_message_output(CM_OUTPUT_TAP);
+
+ return cmocka_run_group_tests(tests, NULL, NULL);
+}
diff --git a/test/cmocka/src/math/trig/sin_fixed.c b/test/cmocka/src/math/trig/sin_fixed.c
new file mode 100644
index 0000000..de0bd41
--- /dev/null
+++ b/test/cmocka/src/math/trig/sin_fixed.c
@@ -0,0 +1,169 @@
+/*
+ * Copyright (c) 2018, Intel Corporation
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the Intel Corporation nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Author: Slawomir Blauciak <slawomir.blauciak at linux.intel.com>
+ */
+
+#include <stdio.h>
+#include <stdint.h>
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <math.h>
+#include <cmocka.h>
+
+#include <sof/audio/format.h>
+#include <sof/math/trig.h>
+
+#define CMP_TOLERANCE 0.000005
+
+/* Reference table generated by sin(), gcc-4.3.2 */
+static const float sin_ref_table[] = {
+ 0.0000000000, 0.0174524064, 0.0348994967, 0.0523359562,
+ 0.0697564737, 0.0871557427, 0.1045284633, 0.1218693434,
+ 0.1391731010, 0.1564344650, 0.1736481777, 0.1908089954,
+ 0.2079116908, 0.2249510543, 0.2419218956, 0.2588190451,
+ 0.2756373558, 0.2923717047, 0.3090169944, 0.3255681545,
+ 0.3420201433, 0.3583679495, 0.3746065934, 0.3907311285,
+ 0.4067366431, 0.4226182617, 0.4383711468, 0.4539904997,
+ 0.4694715628, 0.4848096202, 0.5000000000, 0.5150380749,
+ 0.5299192642, 0.5446390350, 0.5591929035, 0.5735764364,
+ 0.5877852523, 0.6018150232, 0.6156614753, 0.6293203910,
+ 0.6427876097, 0.6560590290, 0.6691306064, 0.6819983601,
+ 0.6946583705, 0.7071067812, 0.7193398003, 0.7313537016,
+ 0.7431448255, 0.7547095802, 0.7660444431, 0.7771459615,
+ 0.7880107536, 0.7986355100, 0.8090169944, 0.8191520443,
+ 0.8290375726, 0.8386705679, 0.8480480962, 0.8571673007,
+ 0.8660254038, 0.8746197071, 0.8829475929, 0.8910065242,
+ 0.8987940463, 0.9063077870, 0.9135454576, 0.9205048535,
+ 0.9271838546, 0.9335804265, 0.9396926208, 0.9455185756,
+ 0.9510565163, 0.9563047560, 0.9612616959, 0.9659258263,
+ 0.9702957263, 0.9743700648, 0.9781476007, 0.9816271834,
+ 0.9848077530, 0.9876883406, 0.9902680687, 0.9925461516,
+ 0.9945218954, 0.9961946981, 0.9975640503, 0.9986295348,
+ 0.9993908270, 0.9998476952, 1.0000000000, 0.9998476952,
+ 0.9993908270, 0.9986295348, 0.9975640503, 0.9961946981,
+ 0.9945218954, 0.9925461516, 0.9902680687, 0.9876883406,
+ 0.9848077530, 0.9816271834, 0.9781476007, 0.9743700648,
+ 0.9702957263, 0.9659258263, 0.9612616959, 0.9563047560,
+ 0.9510565163, 0.9455185756, 0.9396926208, 0.9335804265,
+ 0.9271838546, 0.9205048535, 0.9135454576, 0.9063077870,
+ 0.8987940463, 0.8910065242, 0.8829475929, 0.8746197071,
+ 0.8660254038, 0.8571673007, 0.8480480962, 0.8386705679,
+ 0.8290375726, 0.8191520443, 0.8090169944, 0.7986355100,
+ 0.7880107536, 0.7771459615, 0.7660444431, 0.7547095802,
+ 0.7431448255, 0.7313537016, 0.7193398003, 0.7071067812,
+ 0.6946583705, 0.6819983601, 0.6691306064, 0.6560590290,
+ 0.6427876097, 0.6293203910, 0.6156614753, 0.6018150232,
+ 0.5877852523, 0.5735764364, 0.5591929035, 0.5446390350,
+ 0.5299192642, 0.5150380749, 0.5000000000, 0.4848096202,
+ 0.4694715628, 0.4539904997, 0.4383711468, 0.4226182617,
+ 0.4067366431, 0.3907311285, 0.3746065934, 0.3583679495,
+ 0.3420201433, 0.3255681545, 0.3090169944, 0.2923717047,
+ 0.2756373558, 0.2588190451, 0.2419218956, 0.2249510543,
+ 0.2079116908, 0.1908089954, 0.1736481777, 0.1564344650,
+ 0.1391731010, 0.1218693434, 0.1045284633, 0.0871557427,
+ 0.0697564737, 0.0523359562, 0.0348994967, 0.0174524064,
+ 0.0000000000, -0.0174524064, -0.0348994967, -0.0523359562,
+ -0.0697564737, -0.0871557427, -0.1045284633, -0.1218693434,
+ -0.1391731010, -0.1564344650, -0.1736481777, -0.1908089954,
+ -0.2079116908, -0.2249510543, -0.2419218956, -0.2588190451,
+ -0.2756373558, -0.2923717047, -0.3090169944, -0.3255681545,
+ -0.3420201433, -0.3583679495, -0.3746065934, -0.3907311285,
+ -0.4067366431, -0.4226182617, -0.4383711468, -0.4539904997,
+ -0.4694715628, -0.4848096202, -0.5000000000, -0.5150380749,
+ -0.5299192642, -0.5446390350, -0.5591929035, -0.5735764364,
+ -0.5877852523, -0.6018150232, -0.6156614753, -0.6293203910,
+ -0.6427876097, -0.6560590290, -0.6691306064, -0.6819983601,
+ -0.6946583705, -0.7071067812, -0.7193398003, -0.7313537016,
+ -0.7431448255, -0.7547095802, -0.7660444431, -0.7771459615,
+ -0.7880107536, -0.7986355100, -0.8090169944, -0.8191520443,
+ -0.8290375726, -0.8386705679, -0.8480480962, -0.8571673007,
+ -0.8660254038, -0.8746197071, -0.8829475929, -0.8910065242,
+ -0.8987940463, -0.9063077870, -0.9135454576, -0.9205048535,
+ -0.9271838546, -0.9335804265, -0.9396926208, -0.9455185756,
+ -0.9510565163, -0.9563047560, -0.9612616959, -0.9659258263,
+ -0.9702957263, -0.9743700648, -0.9781476007, -0.9816271834,
+ -0.9848077530, -0.9876883406, -0.9902680687, -0.9925461516,
+ -0.9945218954, -0.9961946981, -0.9975640503, -0.9986295348,
+ -0.9993908270, -0.9998476952, -1.0000000000, -0.9998476952,
+ -0.9993908270, -0.9986295348, -0.9975640503, -0.9961946981,
+ -0.9945218954, -0.9925461516, -0.9902680687, -0.9876883406,
+ -0.9848077530, -0.9816271834, -0.9781476007, -0.9743700648,
+ -0.9702957263, -0.9659258263, -0.9612616959, -0.9563047560,
+ -0.9510565163, -0.9455185756, -0.9396926208, -0.9335804265,
+ -0.9271838546, -0.9205048535, -0.9135454576, -0.9063077870,
+ -0.8987940463, -0.8910065242, -0.8829475929, -0.8746197071,
+ -0.8660254038, -0.8571673007, -0.8480480962, -0.8386705679,
+ -0.8290375726, -0.8191520443, -0.8090169944, -0.7986355100,
+ -0.7880107536, -0.7771459615, -0.7660444431, -0.7547095802,
+ -0.7431448255, -0.7313537016, -0.7193398003, -0.7071067812,
+ -0.6946583705, -0.6819983601, -0.6691306064, -0.6560590290,
+ -0.6427876097, -0.6293203910, -0.6156614753, -0.6018150232,
+ -0.5877852523, -0.5735764364, -0.5591929035, -0.5446390350,
+ -0.5299192642, -0.5150380749, -0.5000000000, -0.4848096202,
+ -0.4694715628, -0.4539904997, -0.4383711468, -0.4226182617,
+ -0.4067366431, -0.3907311285, -0.3746065934, -0.3583679495,
+ -0.3420201433, -0.3255681545, -0.3090169944, -0.2923717047,
+ -0.2756373558, -0.2588190451, -0.2419218956, -0.2249510543,
+ -0.2079116908, -0.1908089954, -0.1736481777, -0.1564344650,
+ -0.1391731010, -0.1218693434, -0.1045284633, -0.0871557427,
+ -0.0697564737, -0.0523359562, -0.0348994967, -0.0174524064
+};
+
+static void test_math_trig_sin_fixed(void **state)
+{
+ (void)state;
+
+ int theta;
+
+ for (theta = 0; theta < 360; ++theta) {
+ double rad = M_PI / (180.0 / theta);
+ int32_t rad_q28 = Q_CONVERT_FLOAT(rad, 28);
+
+ float r = Q_CONVERT_QTOF(sin_fixed(rad_q28), 31);
+ float diff = fabsf(sin_ref_table[theta] - r);
+
+ if (diff > CMP_TOLERANCE) {
+ printf("%s: diff for %d deg = %.10f\n", __func__,
+ theta, diff);
+ }
+
+ assert_true(diff <= CMP_TOLERANCE);
+ }
+}
+
+int main(void)
+{
+ const struct CMUnitTest tests[] = {
+ cmocka_unit_test(test_math_trig_sin_fixed)
+ };
+
+ cmocka_set_message_output(CM_OUTPUT_TAP);
+
+ return cmocka_run_group_tests(tests, NULL, NULL);
+}
--
2.17.0
More information about the Sound-open-firmware
mailing list