summaryrefslogtreecommitdiff
path: root/test/utils_str.c
diff options
context:
space:
mode:
authorNicolas Boichat <drinkcat@google.com>2017-05-25 07:51:23 +0800
committerchrome-bot <chrome-bot@chromium.org>2017-05-25 02:33:04 -0700
commit661259ebff96a3acc1f72701b90ea2c4955addc6 (patch)
treed0fbe38a80af8c06728cfb325a5fef8f285373ba /test/utils_str.c
parent3219d9988b4816f5dbbacfda038aa448e6065f61 (diff)
downloadchrome-ec-661259ebff96a3acc1f72701b90ea2c4955addc6.tar.gz
tests: Split utils in 2 subtests
utils test is a little too large for hammer's small RO, so we split it in 2 test: utils and utils_str. Instead of one test that requires about 8kb extra flash, we have 2 tests that take respectively 3.4kb (utils_str) and 4.6kb (utils) of extra flash. BRANCH=none BUG=chromium:726113 TEST=make BOARD=hammer tests -j util/flash_ec --board=hammer --image=build/hammer/test-utils.bin runtest => pass Repeat with test-utils_str.bin TEST=Before this change: make runtests -j ./util/run_host_test utils | grep Running | sort > old Apply this change: make runtests -j (./util/run_host_test utils; ./util/run_host_test utils_str) \ | grep Running | sort > new diff old new => No difference (except timing) Change-Id: I917d572e671d6ce0a8799508761f55de7bd83133 Reviewed-on: https://chromium-review.googlesource.com/514604 Commit-Ready: Nicolas Boichat <drinkcat@chromium.org> Tested-by: Nicolas Boichat <drinkcat@chromium.org> Reviewed-by: Aseda Aboagye <aaboagye@chromium.org>
Diffstat (limited to 'test/utils_str.c')
-rw-r--r--test/utils_str.c162
1 files changed, 162 insertions, 0 deletions
diff --git a/test/utils_str.c b/test/utils_str.c
new file mode 100644
index 0000000000..23890639e2
--- /dev/null
+++ b/test/utils_str.c
@@ -0,0 +1,162 @@
+/* Copyright 2017 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 common utilities (string functions).
+ */
+
+#include "common.h"
+#include "console.h"
+#include "system.h"
+#include "test_util.h"
+#include "timer.h"
+#include "util.h"
+
+static int test_isalpha(void)
+{
+ TEST_CHECK(isalpha('a') && isalpha('z') && isalpha('A') &&
+ isalpha('Z') && !isalpha('0') && !isalpha('~') &&
+ !isalpha(' ') && !isalpha('\0') && !isalpha('\n'));
+}
+
+static int test_isprint(void)
+{
+ TEST_CHECK(isprint('a') && isprint('z') && isprint('A') &&
+ isprint('Z') && isprint('0') && isprint('~') &&
+ isprint(' ') && !isprint('\0') && !isprint('\n'));
+}
+
+static int test_strtoi(void)
+{
+ char *e;
+
+ TEST_ASSERT(strtoi("10", &e, 0) == 10);
+ TEST_ASSERT(e && (*e == '\0'));
+ TEST_ASSERT(strtoi("0x1f z", &e, 0) == 31);
+ TEST_ASSERT(e && (*e == ' '));
+ TEST_ASSERT(strtoi("10a", &e, 16) == 266);
+ TEST_ASSERT(e && (*e == '\0'));
+ TEST_ASSERT(strtoi("0x02C", &e, 16) == 44);
+ TEST_ASSERT(e && (*e == '\0'));
+ TEST_ASSERT(strtoi(" -12", &e, 0) == -12);
+ TEST_ASSERT(e && (*e == '\0'));
+ TEST_ASSERT(strtoi("!", &e, 0) == 0);
+ TEST_ASSERT(e && (*e == '!'));
+
+ return EC_SUCCESS;
+}
+
+static int test_parse_bool(void)
+{
+ int v;
+
+ TEST_ASSERT(parse_bool("on", &v) == 1);
+ TEST_ASSERT(v == 1);
+ TEST_ASSERT(parse_bool("off", &v) == 1);
+ TEST_ASSERT(v == 0);
+ TEST_ASSERT(parse_bool("enable", &v) == 1);
+ TEST_ASSERT(v == 1);
+ TEST_ASSERT(parse_bool("disable", &v) == 1);
+ TEST_ASSERT(v == 0);
+ TEST_ASSERT(parse_bool("di", &v) == 0);
+ TEST_ASSERT(parse_bool("en", &v) == 0);
+ TEST_ASSERT(parse_bool("of", &v) == 0);
+
+ return EC_SUCCESS;
+}
+
+static int test_strzcpy(void)
+{
+ char dest[10];
+
+ strzcpy(dest, "test", 10);
+ TEST_ASSERT_ARRAY_EQ("test", dest, 5);
+ strzcpy(dest, "testtesttest", 10);
+ TEST_ASSERT_ARRAY_EQ("testtestt", dest, 10);
+ strzcpy(dest, "aaaa", -1);
+ TEST_ASSERT_ARRAY_EQ("testtestt", dest, 10);
+
+ return EC_SUCCESS;
+}
+
+static int test_strncpy(void)
+{
+ char dest[10];
+
+ strncpy(dest, "test", 10);
+ TEST_ASSERT_ARRAY_EQ("test", dest, 5);
+ strncpy(dest, "12345", 6);
+ TEST_ASSERT_ARRAY_EQ("12345", dest, 6);
+ strncpy(dest, "testtesttest", 10);
+ TEST_ASSERT_ARRAY_EQ("testtestte", dest, 10);
+
+ return EC_SUCCESS;
+}
+
+static int test_strncmp(void)
+{
+ TEST_ASSERT(strncmp("123", "123", 8) == 0);
+ TEST_ASSERT(strncmp("789", "456", 8) > 0);
+ TEST_ASSERT(strncmp("abc", "abd", 4) < 0);
+ TEST_ASSERT(strncmp("abc", "abd", 2) == 0);
+ return EC_SUCCESS;
+}
+
+static int test_strlen(void)
+{
+ TEST_CHECK(strlen("this is a string") == 16);
+}
+
+static int test_strnlen(void)
+{
+ TEST_ASSERT(strnlen("this is a string", 17) == 16);
+ TEST_ASSERT(strnlen("this is a string", 16) == 16);
+ TEST_ASSERT(strnlen("this is a string", 5) == 5);
+
+ return EC_SUCCESS;
+}
+
+static int test_strcasecmp(void)
+{
+ TEST_CHECK((strcasecmp("test string", "TEST strIng") == 0) &&
+ (strcasecmp("test123!@#", "TesT123!@#") == 0) &&
+ (strcasecmp("lower", "UPPER") != 0));
+}
+
+static int test_strncasecmp(void)
+{
+ TEST_CHECK((strncasecmp("test string", "TEST str", 4) == 0) &&
+ (strncasecmp("test string", "TEST str", 8) == 0) &&
+ (strncasecmp("test123!@#", "TesT321!@#", 5) != 0) &&
+ (strncasecmp("test123!@#", "TesT321!@#", 4) == 0) &&
+ (strncasecmp("1test123!@#", "1TesT321!@#", 5) == 0) &&
+ (strncasecmp("1test123", "teststr", 0) == 0));
+}
+
+static int test_atoi(void)
+{
+ TEST_CHECK((atoi(" 901") == 901) &&
+ (atoi("-12c") == -12) &&
+ (atoi(" 0 ") == 0) &&
+ (atoi("\t111") == 111));
+}
+
+void run_test(void)
+{
+ test_reset();
+
+ RUN_TEST(test_isalpha);
+ RUN_TEST(test_isprint);
+ RUN_TEST(test_strtoi);
+ RUN_TEST(test_parse_bool);
+ RUN_TEST(test_strzcpy);
+ RUN_TEST(test_strncpy);
+ RUN_TEST(test_strncmp);
+ RUN_TEST(test_strlen);
+ RUN_TEST(test_strnlen);
+ RUN_TEST(test_strcasecmp);
+ RUN_TEST(test_strncasecmp);
+ RUN_TEST(test_atoi);
+
+ test_print_result();
+}