From 2e71c17778021dc0c87d2e4590a637f6919e5431 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Thu, 6 Aug 2020 13:53:40 -0700 Subject: Trivial strxfrm coverage improvement. Test: treehugger Change-Id: I450bd3324c3f0f8ab95cecebe0f57dc85acc2996 --- tests/string_test.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'tests/string_test.cpp') diff --git a/tests/string_test.cpp b/tests/string_test.cpp index 0ed0598f6..53fb18cff 100644 --- a/tests/string_test.cpp +++ b/tests/string_test.cpp @@ -1592,10 +1592,21 @@ TEST(STRING_TEST, strcoll_smoke) { TEST(STRING_TEST, strxfrm_smoke) { const char* src1 = "aab"; char dst1[16] = {}; - ASSERT_GT(strxfrm(dst1, src1, sizeof(dst1)), 0U); + // Dry run. + ASSERT_EQ(strxfrm(dst1, src1, 0), 3U); + ASSERT_STREQ(dst1, ""); + // Really do it. + ASSERT_EQ(strxfrm(dst1, src1, sizeof(dst1)), 3U); + const char* src2 = "aac"; char dst2[16] = {}; - ASSERT_GT(strxfrm(dst2, src2, sizeof(dst2)), 0U); + // Dry run. + ASSERT_EQ(strxfrm(dst2, src2, 0), 3U); + ASSERT_STREQ(dst2, ""); + // Really do it. + ASSERT_EQ(strxfrm(dst2, src2, sizeof(dst2)), 3U); + + // The "transform" of two different strings should cause different outputs. ASSERT_TRUE(strcmp(dst1, dst2) < 0); } -- cgit v1.2.3 From 5633caa285899527bffddb32cf1e33906a63edcd Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Thu, 6 Aug 2020 14:32:43 -0700 Subject: Switch to musl memmem (via OpenBSD). Similar to the musl strstr. This patch also increases test coverage for memmem, again similar to the strstr tests. Test: treehugger Change-Id: I7f4a2ab93a610cb692994d06d2512976e657ae9f --- tests/string_test.cpp | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) (limited to 'tests/string_test.cpp') diff --git a/tests/string_test.cpp b/tests/string_test.cpp index 0ed0598f6..f157416c1 100644 --- a/tests/string_test.cpp +++ b/tests/string_test.cpp @@ -1538,13 +1538,31 @@ TEST(STRING_TEST, memmem_strstr_empty_needle) { } TEST(STRING_TEST, memmem_smoke) { - const char haystack[] = "big\0daddy\0giant\0haystacks"; - ASSERT_EQ(haystack, memmem(haystack, sizeof(haystack), "", 0)); - ASSERT_EQ(haystack + 3, memmem(haystack, sizeof(haystack), "", 1)); + const char haystack[] = "big\0daddy/giant\0haystacks!"; + + // The current memmem() implementation has special cases for needles of + // lengths 0, 1, 2, 3, and 4, plus a long needle case. We test matches at the + // beginning, middle, and end of the haystack. + + ASSERT_EQ(haystack + 0, memmem(haystack, sizeof(haystack), "", 0)); + ASSERT_EQ(haystack + 0, memmem(haystack, sizeof(haystack), "b", 1)); - ASSERT_EQ(haystack + 1, memmem(haystack, sizeof(haystack), "i", 1)); - ASSERT_EQ(haystack + 4, memmem(haystack, sizeof(haystack), "da", 2)); - ASSERT_EQ(haystack + 8, memmem(haystack, sizeof(haystack), "y\0g", 3)); + ASSERT_EQ(haystack + 0, memmem(haystack, sizeof(haystack), "bi", 2)); + ASSERT_EQ(haystack + 0, memmem(haystack, sizeof(haystack), "big", 3)); + ASSERT_EQ(haystack + 0, memmem(haystack, sizeof(haystack), "big\0", 4)); + ASSERT_EQ(haystack + 0, memmem(haystack, sizeof(haystack), "big\0d", 5)); + + ASSERT_EQ(haystack + 2, memmem(haystack, sizeof(haystack), "g", 1)); + ASSERT_EQ(haystack + 10, memmem(haystack, sizeof(haystack), "gi", 2)); + ASSERT_EQ(haystack + 10, memmem(haystack, sizeof(haystack), "gia", 3)); + ASSERT_EQ(haystack + 10, memmem(haystack, sizeof(haystack), "gian", 4)); + ASSERT_EQ(haystack + 10, memmem(haystack, sizeof(haystack), "giant", 5)); + + ASSERT_EQ(haystack + 25, memmem(haystack, sizeof(haystack), "!", 1)); + ASSERT_EQ(haystack + 24, memmem(haystack, sizeof(haystack), "s!", 2)); + ASSERT_EQ(haystack + 23, memmem(haystack, sizeof(haystack), "ks!", 3)); + ASSERT_EQ(haystack + 22, memmem(haystack, sizeof(haystack), "cks!", 4)); + ASSERT_EQ(haystack + 21, memmem(haystack, sizeof(haystack), "acks!", 5)); } TEST(STRING_TEST, strstr_smoke) { -- cgit v1.2.3 From 7cebf835f310650f67b254295a685918681656fc Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Wed, 12 Aug 2020 14:25:41 -0700 Subject: Various coverage improvements. Mostly from extra test cases, but also: * Move the fgets size < 0 assertion into fgets. * Use ELF aliases for strtoq/strtouq rather than duplicating code. * Don't check uname() succeeded, since it can't fail. Test: treehugger Change-Id: I2e6b3b88b0a3eb16bd68be68b9bc9f40d8043291 --- tests/string_test.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'tests/string_test.cpp') diff --git a/tests/string_test.cpp b/tests/string_test.cpp index fd7a551c3..22be85241 100644 --- a/tests/string_test.cpp +++ b/tests/string_test.cpp @@ -64,6 +64,11 @@ TEST(STRING_TEST, strerror) { ASSERT_STREQ("Unknown error 134", strerror(EHWPOISON + 1)); } +TEST(STRING_TEST, strerror_l) { + // bionic just forwards to strerror(3). + ASSERT_STREQ("Success", strerror_l(0, LC_GLOBAL_LOCALE)); +} + #if defined(__BIONIC__) static void* ConcurrentStrErrorFn(void*) { bool equal = (strcmp("Unknown error 2002", strerror(2002)) == 0); @@ -1607,6 +1612,13 @@ TEST(STRING_TEST, strcoll_smoke) { ASSERT_TRUE(strcoll("aac", "aab") > 0); } +TEST(STRING_TEST, strcoll_l_smoke) { + // bionic just forwards to strcoll(3). + ASSERT_TRUE(strcoll_l("aab", "aac", LC_GLOBAL_LOCALE) < 0); + ASSERT_TRUE(strcoll_l("aab", "aab", LC_GLOBAL_LOCALE) == 0); + ASSERT_TRUE(strcoll_l("aac", "aab", LC_GLOBAL_LOCALE) > 0); +} + TEST(STRING_TEST, strxfrm_smoke) { const char* src1 = "aab"; char dst1[16] = {}; @@ -1628,6 +1640,16 @@ TEST(STRING_TEST, strxfrm_smoke) { ASSERT_TRUE(strcmp(dst1, dst2) < 0); } +TEST(STRING_TEST, strxfrm_l_smoke) { + // bionic just forwards to strxfrm(3), so this is a subset of the + // strxfrm test. + const char* src1 = "aab"; + char dst1[16] = {}; + ASSERT_EQ(strxfrm_l(dst1, src1, 0, LC_GLOBAL_LOCALE), 3U); + ASSERT_STREQ(dst1, ""); + ASSERT_EQ(strxfrm_l(dst1, src1, sizeof(dst1), LC_GLOBAL_LOCALE), 3U); +} + TEST(STRING_TEST, memccpy_smoke) { char dst[32]; -- cgit v1.2.3