summaryrefslogtreecommitdiff
path: root/test/string/string.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/string/string.c')
-rw-r--r--test/string/string.c60
1 files changed, 60 insertions, 0 deletions
diff --git a/test/string/string.c b/test/string/string.c
index 43a1108b3..2f281e18c 100644
--- a/test/string/string.c
+++ b/test/string/string.c
@@ -140,6 +140,35 @@ test_strcpy (void)
}
void
+test_stpcpy (void)
+{
+ int i;
+ it = "stpcpy";
+ check (stpcpy (one, "abcd") == one+4, 1); /* Returned value. */
+ equal (one, "abcd", 2); /* Basic test. */
+
+ (void) stpcpy (one, "x");
+ equal (one, "x", 3); /* Writeover. */
+ equal (one+2, "cd", 4); /* Wrote too much? */
+
+ (void) stpcpy (two, "hi there");
+ (void) stpcpy (one, two);
+ equal (one, "hi there", 5); /* Basic test encore. */
+ equal (two, "hi there", 6); /* Stomped on source? */
+
+ (void) stpcpy (one, "");
+ equal (one, "", 7); /* Boundary condition. */
+
+ for (i = 0; i < 16; i++)
+ {
+ (void) stpcpy (one + i, "hi there"); /* Unaligned destination. */
+ equal (one + i, "hi there", 8 + (i * 2));
+ (void) stpcpy (two, one + i); /* Unaligned source. */
+ equal (two, "hi there", 9 + (i * 2));
+ }
+}
+
+void
test_strcat (void)
{
it = "strcat";
@@ -443,6 +472,33 @@ test_strstr (void)
}
void
+test_strcasestr (void)
+{
+ it = "strcasestr";
+ check(strcasestr("abcd", "z") == NULL, 1); /* Not found. */
+ check(strcasestr("abcd", "abx") == NULL, 2); /* Dead end. */
+ (void) strcpy(one, "aBcD");
+ check(strcasestr(one, "c") == one+2, 3); /* Basic test. */
+ check(strcasestr(one, "bc") == one+1, 4); /* Multichar. */
+ check(strcasestr(one, "d") == one+3, 5); /* End of string. */
+ check(strcasestr(one, "cd") == one+2, 6); /* Tail of string. */
+ check(strcasestr(one, "abc") == one, 7); /* Beginning. */
+ check(strcasestr(one, "abcd") == one, 8); /* Exact match. */
+ check(strcasestr(one, "abcde") == NULL, 9); /* Too long. */
+ check(strcasestr(one, "de") == NULL, 10); /* Past end. */
+ check(strcasestr(one, "") == one, 11); /* Finding empty. */
+ (void) strcpy(one, "aBaBa");
+ check(strcasestr(one, "ba") == one+1, 12); /* Finding first. */
+ (void) strcpy(one, "");
+ check(strcasestr(one, "b") == NULL, 13); /* Empty string. */
+ check(strcasestr(one, "") == one, 14); /* Empty in empty string. */
+ (void) strcpy(one, "BcBcA");
+ check(strcasestr(one, "bca") == one+2, 15); /* False start. */
+ (void) strcpy(one, "BbBcABBcA");
+ check(strcasestr(one, "bbca") == one+1, 16); /* With overlap. */
+}
+
+void
test_strspn (void)
{
it = "strspn";
@@ -913,6 +969,9 @@ main (void)
/* Test strcpy next because we need it to set up other tests. */
test_strcpy ();
+ /* stpcpy */
+ test_stpcpy ();
+
/* strcat. */
test_strcat ();
@@ -945,6 +1004,7 @@ main (void)
/* strstr - somewhat like strchr. */
test_strstr ();
+ test_strcasestr ();
/* strspn. */
test_strspn ();