summaryrefslogtreecommitdiff
path: root/test/fp.c
diff options
context:
space:
mode:
authorJack Rosenthal <jrosenth@chromium.org>2021-11-04 12:11:58 -0600
committerCommit Bot <commit-bot@chromium.org>2021-11-05 04:22:34 +0000
commit252457d4b21f46889eebad61d4c0a65331919cec (patch)
tree01856c4d31d710b20e85a74c8d7b5836e35c3b98 /test/fp.c
parent08f5a1e6fc2c9467230444ac9b582dcf4d9f0068 (diff)
downloadchrome-ec-stabilize-14388.62.B-ish.tar.gz
In the interest of making long-term branch maintenance incur as little technical debt on us as possible, we should not maintain any files on the branch we are not actually using. This has the added effect of making it extremely clear when merging CLs from the main branch when changes have the possibility to affect us. The follow-on CL adds a convenience script to actually pull updates from the main branch and generate a CL for the update. BUG=b:204206272 BRANCH=ish TEST=make BOARD=arcada_ish && make BOARD=drallion_ish Signed-off-by: Jack Rosenthal <jrosenth@chromium.org> Change-Id: I17e4694c38219b5a0823e0a3e55a28d1348f4b18 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3262038 Reviewed-by: Jett Rink <jettrink@chromium.org> Reviewed-by: Tom Hughes <tomhughes@chromium.org>
Diffstat (limited to 'test/fp.c')
-rw-r--r--test/fp.c340
1 files changed, 0 insertions, 340 deletions
diff --git a/test/fp.c b/test/fp.c
deleted file mode 100644
index 0324da6c8d..0000000000
--- a/test/fp.c
+++ /dev/null
@@ -1,340 +0,0 @@
-/* Copyright 2018 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-/*
- * Explicitly include common.h to populate predefined macros in test_config.h
- * early. e.g. CONFIG_FPU, which is needed in math_util.h
- */
-#include "common.h"
-
-#include "mat33.h"
-#include "mat44.h"
-#include "math_util.h"
-#include "test_util.h"
-#include "vec3.h"
-
-#if defined(TEST_FP) && !defined(CONFIG_FPU)
-#define NORM_TOLERANCE FLOAT_TO_FP(0.01f)
-#define NORM_SQUARED_TOLERANCE FLOAT_TO_FP(0.0f)
-#define DOT_TOLERANCE FLOAT_TO_FP(0.001f)
-#define SCALAR_MUL_TOLERANCE FLOAT_TO_FP(0.005f)
-#define EIGENBASIS_TOLERANCE FLOAT_TO_FP(0.03f)
-#define LUP_TOLERANCE FLOAT_TO_FP(0.0005f)
-#define SOLVE_TOLERANCE FLOAT_TO_FP(0.0005f)
-#elif defined(TEST_FLOAT) && defined(CONFIG_FPU)
-#define NORM_TOLERANCE FLOAT_TO_FP(0.00001f)
-#define NORM_SQUARED_TOLERANCE FLOAT_TO_FP(0.0f)
-#define DOT_TOLERANCE FLOAT_TO_FP(0.0f)
-#define SCALAR_MUL_TOLERANCE FLOAT_TO_FP(0.005f)
-#define EIGENBASIS_TOLERANCE FLOAT_TO_FP(0.02f)
-#define LUP_TOLERANCE FLOAT_TO_FP(0.00001f)
-#define SOLVE_TOLERANCE FLOAT_TO_FP(0.00001f)
-#else
-#error "No such test configuration."
-#endif
-
-#define IS_FPV3_VECTOR_EQUAL(a, b, diff) \
- (IS_FP_EQUAL((a)[0], (b)[0], (diff)) && \
- IS_FP_EQUAL((a)[1], (b)[1], (diff)) && \
- IS_FP_EQUAL((a)[2], (b)[2], (diff)))
-#define IS_FP_EQUAL(a, b, diff) ((a) >= ((b)-diff) && (a) <= ((b) + diff))
-#define IS_FLOAT_EQUAL(a, b, diff) IS_FP_EQUAL(a, b, diff)
-
-static int test_fpv3_scalar_mul(void)
-{
- const int N = 3;
- const float s = 2.0f;
- floatv3_t r = {1.0f, 2.0f, 4.0f};
- /* Golden result g = s * r; */
- const floatv3_t g = {2.0f, 4.0f, 8.0f};
- int i;
- fpv3_t a;
-
- for (i = 0; i < N; ++i)
- a[i] = FLOAT_TO_FP(r[i]);
-
- fpv3_scalar_mul(a, FLOAT_TO_FP(s));
-
- for (i = 0; i < N; ++i)
- TEST_ASSERT(IS_FP_EQUAL(a[i], FLOAT_TO_FP(g[i]), 0));
-
- return EC_SUCCESS;
-}
-
-static int test_fpv3_dot(void)
-{
- const int N = 3;
- int i;
- floatv3_t a = {1.8f, 2.12f, 4.12f};
- floatv3_t b = {3.1f, 4.3f, 5.8f};
- /* Golden result g = dot(a, b) */
- float g = 38.592f;
- fpv3_t fpa, fpb;
- volatile fp_t result;
-
- for (i = 0; i < N; ++i) {
- fpa[i] = FLOAT_TO_FP(a[i]);
- fpb[i] = FLOAT_TO_FP(b[i]);
- }
-
- result = fpv3_dot(fpa, fpb);
- TEST_ASSERT(IS_FP_EQUAL(result, FLOAT_TO_FP(g),
- DOT_TOLERANCE));
-
- return EC_SUCCESS;
-}
-
-static int test_fpv3_norm_squared(void)
-{
- const int N = 3;
- int i;
- floatv3_t a = {3.0f, 4.0f, 5.0f};
- /* Golden result g = norm_squared(a) */
- float g = 50.0f;
- fpv3_t fpa;
-
- for (i = 0; i < N; ++i)
- fpa[i] = FLOAT_TO_FP(a[i]);
-
- TEST_ASSERT(IS_FP_EQUAL(fpv3_norm_squared(fpa), FLOAT_TO_FP(g),
- NORM_SQUARED_TOLERANCE));
-
- return EC_SUCCESS;
-}
-
-static int test_fpv3_norm(void)
-{
- const int N = 3;
- floatv3_t a = {3.1f, 4.2f, 5.3f};
- /* Golden result g = norm(a) */
- float g = 7.439086f;
- int i;
- fpv3_t fpa;
- volatile fp_t result;
-
- for (i = 0; i < N; ++i)
- fpa[i] = FLOAT_TO_FP(a[i]);
-
- result = fpv3_norm(fpa);
- TEST_ASSERT(IS_FP_EQUAL(result, FLOAT_TO_FP(g), NORM_TOLERANCE));
- return EC_SUCCESS;
-}
-
-static int test_int_sqrtf(void)
-{
-#ifndef CONFIG_FPU
- TEST_ASSERT(int_sqrtf(0) == 0);
- TEST_ASSERT(int_sqrtf(15) == 3);
- TEST_ASSERT(int_sqrtf(25) == 5);
- TEST_ASSERT(int_sqrtf(1111088889) == 33333);
- TEST_ASSERT(int_sqrtf(123456789) == 11111);
- TEST_ASSERT(int_sqrtf(1000000000000000005) == 1000000000);
- /* Return zero for imaginary numbers */
- TEST_ASSERT(int_sqrtf(-100) == 0);
- /* Return INT32_MAX for input greater than INT32_MAX ^ 2 */
- TEST_ASSERT(int_sqrtf(INT64_MAX) == INT32_MAX);
-#endif
-
- return EC_SUCCESS;
-}
-
-static int test_mat33_fp_init_zero(void)
-{
- const int N = 3;
- int i, j;
- mat33_fp_t a;
-
- for (i = 0; i < N; ++i)
- for (j = 0; j < N; ++j)
- a[i][j] = FLOAT_TO_FP(55.66f);
-
- mat33_fp_init_zero(a);
-
- for (i = 0; i < N; ++i)
- for (j = 0; j < N; ++j)
- TEST_ASSERT(a[i][j] == FLOAT_TO_FP(0.0f));
-
- return EC_SUCCESS;
-}
-
-static int test_mat33_fp_init_diagonal(void)
-{
- const int N = 3;
- int i, j;
- mat33_fp_t a;
- fp_t v = FLOAT_TO_FP(-3.45f);
-
- for (i = 0; i < N; ++i)
- for (j = 0; j < N; ++j)
- a[i][j] = FLOAT_TO_FP(55.66f);
-
- mat33_fp_init_diagonal(a, v);
-
- for (i = 0; i < N; ++i)
- for (j = 0; j < N; ++j) {
- if (i == j)
- TEST_ASSERT(a[i][j] == v);
- else
- TEST_ASSERT(a[i][j] == FLOAT_TO_FP(0.0f));
- }
-
- return EC_SUCCESS;
-}
-
-static int test_mat33_fp_scalar_mul(void)
-{
- const int N = 3;
- float scale = 3.11f;
- mat33_float_t a = {
- {1.0f, 2.0f, 3.0f},
- {1.1f, 2.2f, 3.3f},
- {0.38f, 13.2f, 88.3f}
- };
- /* Golden result g = scalar_mul(a, scale) */
- mat33_float_t g = {{3.11f, 6.22f, 9.33f},
- {3.421f, 6.842f, 10.263f},
- {1.18179988861083984375f, 41.051998138427734375f,
- 274.613006591796875f}
- };
- int i, j;
- mat33_fp_t fpa;
-
- for (i = 0; i < N; ++i)
- for (j = 0; j < N; ++j)
- fpa[i][j] = FLOAT_TO_FP(a[i][j]);
-
- mat33_fp_scalar_mul(fpa, FLOAT_TO_FP(scale));
-
- for (i = 0; i < N; ++i)
- for (j = 0; j < N; ++j)
- TEST_ASSERT(IS_FP_EQUAL(fpa[i][j], FLOAT_TO_FP(g[i][j]),
- SCALAR_MUL_TOLERANCE));
-
- return EC_SUCCESS;
-}
-
-static int test_mat33_fp_get_eigenbasis(void)
-{
- mat33_fp_t s = {
- {FLOAT_TO_FP(4.0f), FLOAT_TO_FP(2.0f), FLOAT_TO_FP(2.0f)},
- {FLOAT_TO_FP(2.0f), FLOAT_TO_FP(4.0f), FLOAT_TO_FP(2.0f)},
- {FLOAT_TO_FP(2.0f), FLOAT_TO_FP(2.0f), FLOAT_TO_FP(4.0f)}
- };
- fpv3_t e_vals;
- mat33_fp_t e_vecs;
- int i, j;
-
- /* Golden result from float version. */
- mat33_fp_t gold_vecs = {
- {FLOAT_TO_FP(0.55735206f), FLOAT_TO_FP(0.55735206f),
- FLOAT_TO_FP(0.55735206f)},
- {FLOAT_TO_FP(0.70710677f), FLOAT_TO_FP(-0.70710677f),
- FLOAT_TO_FP(0.0f)},
- {FLOAT_TO_FP(-0.40824828f), FLOAT_TO_FP(-0.40824828f),
- FLOAT_TO_FP(0.81649655f)}
- };
- fpv3_t gold_vals = {FLOAT_TO_FP(8.0f), FLOAT_TO_FP(2.0f),
- FLOAT_TO_FP(2.0f)};
-
- mat33_fp_get_eigenbasis(s, e_vals, e_vecs);
-
- for (i = 0; i < 3; ++i) {
- TEST_ASSERT(IS_FP_EQUAL(gold_vals[i], e_vals[i],
- EIGENBASIS_TOLERANCE));
- for (j = 0; j < 3; ++j) {
- TEST_ASSERT(IS_FP_EQUAL(gold_vecs[i][j], e_vecs[i][j],
- EIGENBASIS_TOLERANCE));
- }
- }
-
- return EC_SUCCESS;
-}
-
-static int test_mat44_fp_decompose_lup(void)
-{
- int i, j;
- sizev4_t pivot;
- mat44_fp_t fpa = {
- {FLOAT_TO_FP(11.0f), FLOAT_TO_FP(9.0f),
- FLOAT_TO_FP(24.0f), FLOAT_TO_FP(2.0f)},
- {FLOAT_TO_FP(1.0f), FLOAT_TO_FP(5.0f),
- FLOAT_TO_FP(2.0f), FLOAT_TO_FP(6.0f)},
- {FLOAT_TO_FP(3.0f), FLOAT_TO_FP(17.0f),
- FLOAT_TO_FP(18.0f), FLOAT_TO_FP(1.0f)},
- {FLOAT_TO_FP(2.0f), FLOAT_TO_FP(5.0f),
- FLOAT_TO_FP(7.0f), FLOAT_TO_FP(1.0f)}
- };
- /* Golden result from float version. */
- mat44_fp_t gold_lu = {
- {FLOAT_TO_FP(11.0f), FLOAT_TO_FP(0.8181818f),
- FLOAT_TO_FP(2.1818182f), FLOAT_TO_FP(0.18181819f)},
- {FLOAT_TO_FP(3.0f), FLOAT_TO_FP(14.545455f),
- FLOAT_TO_FP(0.78749999f), FLOAT_TO_FP(0.031249999f)},
- {FLOAT_TO_FP(1.0f), FLOAT_TO_FP(4.181818f),
- FLOAT_TO_FP(-3.4749996f), FLOAT_TO_FP(-1.6366909f)},
- {FLOAT_TO_FP(2.0f), FLOAT_TO_FP(3.3636365f),
- FLOAT_TO_FP(-0.012500112f), FLOAT_TO_FP(0.5107912f)}
- };
- sizev4_t gold_pivot = {0, 2, 2, 3};
-
- mat44_fp_decompose_lup(fpa, pivot);
-
- for (i = 0; i < 4; ++i) {
- TEST_ASSERT(gold_pivot[i] == pivot[i]);
- for (j = 0; j < 4; ++j)
- TEST_ASSERT(IS_FP_EQUAL(gold_lu[i][j], fpa[i][j],
- LUP_TOLERANCE));
- }
-
- return EC_SUCCESS;
-}
-
-static int test_mat44_fp_solve(void)
-{
- int i;
- fpv4_t x;
- mat44_fp_t A = {
- {FLOAT_TO_FP(11.0f), FLOAT_TO_FP(0.8181818f),
- FLOAT_TO_FP(2.1818182f), FLOAT_TO_FP(0.18181819f)},
- {FLOAT_TO_FP(3.0f), FLOAT_TO_FP(14.545454),
- FLOAT_TO_FP(0.7875f), FLOAT_TO_FP(0.03125f)},
- {FLOAT_TO_FP(1.0f), FLOAT_TO_FP(4.181818f),
- FLOAT_TO_FP(-3.4750001f), FLOAT_TO_FP(-1.6366906f)},
- {FLOAT_TO_FP(2.0f), FLOAT_TO_FP(3.3636365f),
- FLOAT_TO_FP(-0.012500286f), FLOAT_TO_FP(0.5107909f)}
- };
- sizev4_t pivot = {0, 2, 2, 3};
- fpv4_t b = {FLOAT_TO_FP(1.0f), FLOAT_TO_FP(3.3f), FLOAT_TO_FP(0.8f),
- FLOAT_TO_FP(8.9f)};
- /* Golden result from float version. */
- fpv4_t gold_x = {FLOAT_TO_FP(-43.507435f), FLOAT_TO_FP(-21.459525f),
- FLOAT_TO_FP(26.629248f), FLOAT_TO_FP(16.80776f)};
-
- mat44_fp_solve(A, x, b, pivot);
-
- for (i = 0; i < 4; ++i)
- TEST_ASSERT(IS_FP_EQUAL(gold_x[i], x[i], SOLVE_TOLERANCE));
-
- return EC_SUCCESS;
-}
-
-void run_test(int argc, char **argv)
-{
- test_reset();
-
- RUN_TEST(test_fpv3_scalar_mul);
- RUN_TEST(test_fpv3_dot);
- RUN_TEST(test_fpv3_norm_squared);
- RUN_TEST(test_fpv3_norm);
- RUN_TEST(test_int_sqrtf);
- RUN_TEST(test_mat33_fp_init_zero);
- RUN_TEST(test_mat33_fp_init_diagonal);
- RUN_TEST(test_mat33_fp_scalar_mul);
- RUN_TEST(test_mat33_fp_get_eigenbasis);
- RUN_TEST(test_mat44_fp_decompose_lup);
- RUN_TEST(test_mat44_fp_solve);
-
- test_print_result();
-}