summaryrefslogtreecommitdiff
path: root/test/math_util.c
diff options
context:
space:
mode:
authorAlec Berg <alecaberg@chromium.org>2014-02-14 15:40:41 -0800
committerchrome-internal-fetch <chrome-internal-fetch@google.com>2014-02-22 00:49:56 +0000
commit89cae30e5781c601d744ff2d2c177223c4468f39 (patch)
treeeeccd6fd3e4983d4e63899c7fe80f97316ac3bce /test/math_util.c
parent6f2869903d2c6d0147a9f0b0dbfb40f62c6af0ab (diff)
downloadchrome-ec-89cae30e5781c601d744ff2d2c177223c4468f39.tar.gz
Added unit tests for lid angle calculation and acos
Added unit test for motion_sense lid angle calculations. Added unit test for math_util arc_cos() function. BUG=none Original-BUG=chrome-os-partner:25640 BRANCH=rambi TEST=make buildall Original-Change-Id: I35debf6fc0e2d9996debc2ede175acaa060df627 Signed-off-by: Alec Berg <alecaberg@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/186720 Reviewed-by: Vic Yang <victoryang@chromium.org> (cherry picked from commit 55c3e8ee14693d6d667b5d21f0dcbb14d185ccbe) Change-Id: I017315128f318424cd3000affae785c69afd29d6 Signed-off-by: Alec Berg <alecaberg@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/187434 Reviewed-by: Randall Spangler <rspangler@chromium.org>
Diffstat (limited to 'test/math_util.c')
-rw-r--r--test/math_util.c60
1 files changed, 60 insertions, 0 deletions
diff --git a/test/math_util.c b/test/math_util.c
new file mode 100644
index 0000000000..bfc0345655
--- /dev/null
+++ b/test/math_util.c
@@ -0,0 +1,60 @@
+/* Copyright (c) 2014 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.
+ *
+ * Test motion sense code.
+ */
+
+#include <math.h>
+
+#include "math_util.h"
+#include "motion_sense.h"
+#include "test_util.h"
+
+/*****************************************************************************/
+/* Mock functions */
+
+/* Need to define accelerometer init and read functions just to compile. */
+int accel_init(enum accel_id id)
+{
+ return EC_SUCCESS;
+}
+
+int accel_read(enum accel_id id, int *x_acc, int *y_acc, int *z_acc)
+{
+ return EC_SUCCESS;
+}
+
+/*****************************************************************************/
+/* Test utilities */
+
+/* Macro to compare two floats and check if they are equal within diff. */
+#define IS_FLOAT_EQUAL(a, b, diff) ((a) >= ((b) - diff) && (a) <= ((b) + diff))
+
+#define ACOS_TOLERANCE_DEG 0.5f
+#define RAD_TO_DEG (180.0f / 3.1415926f)
+
+static int test_acos(void)
+{
+ float a, b;
+ float test;
+
+ /* Test a handful of values. */
+ for (test = -1.0; test <= 1.0; test += 0.01) {
+ a = arc_cos(test);
+ b = acos(test) * RAD_TO_DEG;
+ TEST_ASSERT(IS_FLOAT_EQUAL(a, b, ACOS_TOLERANCE_DEG));
+ }
+
+ return EC_SUCCESS;
+}
+
+
+void run_test(void)
+{
+ test_reset();
+
+ RUN_TEST(test_acos);
+
+ test_print_result();
+}