📄 string.c
字号:
test_index (void){ it = "index"; check (index ("abcd", 'z') == NULL, 1); /* Not found. */ (void) strcpy (one, "abcd"); check (index (one, 'c') == one+2, 2); /* Basic test. */ check (index (one, 'd') == one+3, 3); /* End of string. */ check (index (one, 'a') == one, 4); /* Beginning. */ check (index (one, '\0') == one+4, 5); /* Finding NUL. */ (void) strcpy (one, "ababa"); check (index (one, 'b') == one+1, 6); /* Finding first. */ (void) strcpy (one, ""); check (index (one, 'b') == NULL, 7); /* Empty string. */ check (index (one, '\0') == one, 8); /* NUL in empty string. */}voidtest_strrchr (void){ it = "strrchr"; check (strrchr ("abcd", 'z') == NULL, 1); /* Not found. */ (void) strcpy (one, "abcd"); check (strrchr (one, 'c') == one+2, 2); /* Basic test. */ check (strrchr (one, 'd') == one+3, 3); /* End of string. */ check (strrchr (one, 'a') == one, 4); /* Beginning. */ check (strrchr (one, '\0') == one+4, 5); /* Finding NUL. */ (void) strcpy (one, "ababa"); check (strrchr (one, 'b') == one+3, 6); /* Finding last. */ (void) strcpy (one, ""); check (strrchr (one, 'b') == NULL, 7); /* Empty string. */ check (strrchr (one, '\0') == one, 8); /* NUL in empty string. */ { char buf[4096]; int i; char *p; for (i=0; i < 0x100; i++) { p = (char *) ((unsigned long int) (buf + 0xff) & ~0xff) + i; strcpy (p, "OK"); strcpy (p+3, "BAD/WRONG"); check (strrchr (p, '/') == NULL, 9+i); } }}voidtest_rindex (void){ it = "rindex"; check (rindex ("abcd", 'z') == NULL, 1); /* Not found. */ (void) strcpy (one, "abcd"); check (rindex (one, 'c') == one+2, 2); /* Basic test. */ check (rindex (one, 'd') == one+3, 3); /* End of string. */ check (rindex (one, 'a') == one, 4); /* Beginning. */ check (rindex (one, '\0') == one+4, 5); /* Finding NUL. */ (void) strcpy (one, "ababa"); check (rindex (one, 'b') == one+3, 6); /* Finding last. */ (void) strcpy (one, ""); check (rindex (one, 'b') == NULL, 7); /* Empty string. */ check (rindex (one, '\0') == one, 8); /* NUL in empty string. */}voidtest_strpbrk (void){ it = "strpbrk"; check(strpbrk("abcd", "z") == NULL, 1); /* Not found. */ (void) strcpy(one, "abcd"); check(strpbrk(one, "c") == one+2, 2); /* Basic test. */ check(strpbrk(one, "d") == one+3, 3); /* End of string. */ check(strpbrk(one, "a") == one, 4); /* Beginning. */ check(strpbrk(one, "") == NULL, 5); /* Empty search list. */ check(strpbrk(one, "cb") == one+1, 6); /* Multiple search. */ (void) strcpy(one, "abcabdea"); check(strpbrk(one, "b") == one+1, 7); /* Finding first. */ check(strpbrk(one, "cb") == one+1, 8); /* With multiple search. */ check(strpbrk(one, "db") == one+1, 9); /* Another variant. */ (void) strcpy(one, ""); check(strpbrk(one, "bc") == NULL, 10); /* Empty string. */ (void) strcpy(one, ""); check(strpbrk(one, "bcd") == NULL, 11); /* Empty string. */ (void) strcpy(one, ""); check(strpbrk(one, "bcde") == NULL, 12); /* Empty string. */ check(strpbrk(one, "") == NULL, 13); /* Both strings empty. */ (void) strcpy(one, "abcabdea"); check(strpbrk(one, "befg") == one+1, 14); /* Finding first. */ check(strpbrk(one, "cbr") == one+1, 15); /* With multiple search. */ check(strpbrk(one, "db") == one+1, 16); /* Another variant. */ check(strpbrk(one, "efgh") == one+6, 17); /* And yet another. */}voidtest_strstr (void){ it = "strstr"; check(strstr("abcd", "z") == NULL, 1); /* Not found. */ check(strstr("abcd", "abx") == NULL, 2); /* Dead end. */ (void) strcpy(one, "abcd"); check(strstr(one, "c") == one+2, 3); /* Basic test. */ check(strstr(one, "bc") == one+1, 4); /* Multichar. */ check(strstr(one, "d") == one+3, 5); /* End of string. */ check(strstr(one, "cd") == one+2, 6); /* Tail of string. */ check(strstr(one, "abc") == one, 7); /* Beginning. */ check(strstr(one, "abcd") == one, 8); /* Exact match. */ check(strstr(one, "abcde") == NULL, 9); /* Too long. */ check(strstr(one, "de") == NULL, 10); /* Past end. */ check(strstr(one, "") == one, 11); /* Finding empty. */ (void) strcpy(one, "ababa"); check(strstr(one, "ba") == one+1, 12); /* Finding first. */ (void) strcpy(one, ""); check(strstr(one, "b") == NULL, 13); /* Empty string. */ check(strstr(one, "") == one, 14); /* Empty in empty string. */ (void) strcpy(one, "bcbca"); check(strstr(one, "bca") == one+2, 15); /* False start. */ (void) strcpy(one, "bbbcabbca"); check(strstr(one, "bbca") == one+1, 16); /* With overlap. */}voidtest_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. */}voidtest_strspn (void){ it = "strspn"; check(strspn("abcba", "abc") == 5, 1); /* Whole string. */ check(strspn("abcba", "ab") == 2, 2); /* Partial. */ check(strspn("abc", "qx") == 0, 3); /* None. */ check(strspn("", "ab") == 0, 4); /* Null string. */ check(strspn("abc", "") == 0, 5); /* Null search list. */}voidtest_strcspn (void){ it = "strcspn"; check(strcspn("abcba", "qx") == 5, 1); /* Whole string. */ check(strcspn("abcba", "cx") == 2, 2); /* Partial. */ check(strcspn("abc", "abc") == 0, 3); /* None. */ check(strcspn("", "ab") == 0, 4); /* Null string. */ check(strcspn("abc", "") == 3, 5); /* Null search list. */}voidtest_strtok (void){ it = "strtok"; (void) strcpy(one, "first, second, third"); equal(strtok(one, ", "), "first", 1); /* Basic test. */ equal(one, "first", 2); equal(strtok((char *)NULL, ", "), "second", 3); equal(strtok((char *)NULL, ", "), "third", 4); check(strtok((char *)NULL, ", ") == NULL, 5); (void) strcpy(one, ", first, "); equal(strtok(one, ", "), "first", 6); /* Extra delims, 1 tok. */ check(strtok((char *)NULL, ", ") == NULL, 7); (void) strcpy(one, "1a, 1b; 2a, 2b"); equal(strtok(one, ", "), "1a", 8); /* Changing delim lists. */ equal(strtok((char *)NULL, "; "), "1b", 9); equal(strtok((char *)NULL, ", "), "2a", 10); (void) strcpy(two, "x-y"); equal(strtok(two, "-"), "x", 11); /* New string before done. */ equal(strtok((char *)NULL, "-"), "y", 12); check(strtok((char *)NULL, "-") == NULL, 13); (void) strcpy(one, "a,b, c,, ,d"); equal(strtok(one, ", "), "a", 14); /* Different separators. */ equal(strtok((char *)NULL, ", "), "b", 15); equal(strtok((char *)NULL, " ,"), "c", 16); /* Permute list too. */ equal(strtok((char *)NULL, " ,"), "d", 17); check(strtok((char *)NULL, ", ") == NULL, 18); check(strtok((char *)NULL, ", ") == NULL, 19); /* Persistence. */ (void) strcpy(one, ", "); check(strtok(one, ", ") == NULL, 20); /* No tokens. */ (void) strcpy(one, ""); check(strtok(one, ", ") == NULL, 21); /* Empty string. */ (void) strcpy(one, "abc"); equal(strtok(one, ", "), "abc", 22); /* No delimiters. */ check(strtok((char *)NULL, ", ") == NULL, 23); (void) strcpy(one, "abc"); equal(strtok(one, ""), "abc", 24); /* Empty delimiter list. */ check(strtok((char *)NULL, "") == NULL, 25); (void) strcpy(one, "abcdefgh"); (void) strcpy(one, "a,b,c"); equal(strtok(one, ","), "a", 26); /* Basics again... */ equal(strtok((char *)NULL, ","), "b", 27); equal(strtok((char *)NULL, ","), "c", 28); check(strtok((char *)NULL, ",") == NULL, 29); equal(one+6, "gh", 30); /* Stomped past end? */ equal(one, "a", 31); /* Stomped old tokens? */ equal(one+2, "b", 32); equal(one+4, "c", 33);}voidtest_strsep (void){ it = "strsep"; cp = strcpy(one, "first, second, third"); equal(strsep(&cp, ", "), "first", 1); /* Basic test. */ equal(one, "first", 2); equal(strsep(&cp, ", "), "", 3); equal(strsep(&cp, ", "), "second", 4); equal(strsep(&cp, ", "), "", 5); equal(strsep(&cp, ", "), "third", 6); check(strsep(&cp, ", ") == NULL, 7); cp = strcpy(one, ", first, "); equal(strsep(&cp, ", "), "", 8); equal(strsep(&cp, ", "), "", 9); equal(strsep(&cp, ", "), "first", 10); /* Extra delims, 1 tok. */ equal(strsep(&cp, ", "), "", 11); equal(strsep(&cp, ", "), "", 12); check(strsep(&cp, ", ") == NULL, 13); cp = strcpy(one, "1a, 1b; 2a, 2b"); equal(strsep(&cp, ", "), "1a", 14); /* Changing delim lists. */ equal(strsep(&cp, ", "), "", 15); equal(strsep(&cp, "; "), "1b", 16); equal(strsep(&cp, ", "), "", 17); equal(strsep(&cp, ", "), "2a", 18); cp = strcpy(two, "x-y"); equal(strsep(&cp, "-"), "x", 19); /* New string before done. */ equal(strsep(&cp, "-"), "y", 20); check(strsep(&cp, "-") == NULL, 21); cp = strcpy(one, "a,b, c,, ,d "); equal(strsep(&cp, ", "), "a", 22); /* Different separators. */ equal(strsep(&cp, ", "), "b", 23); equal(strsep(&cp, " ,"), "", 24); equal(strsep(&cp, " ,"), "c", 25); /* Permute list too. */ equal(strsep(&cp, " ,"), "", 26); equal(strsep(&cp, " ,"), "", 27); equal(strsep(&cp, " ,"), "", 28); equal(strsep(&cp, " ,"), "d", 29); equal(strsep(&cp, " ,"), "", 30); check(strsep(&cp, ", ") == NULL, 31); check(strsep(&cp, ", ") == NULL, 32); /* Persistence. */ cp = strcpy(one, ", "); equal(strsep(&cp, ", "), "", 33); equal(strsep(&cp, ", "), "", 34); equal(strsep(&cp, ", "), "", 35); check(strsep(&cp, ", ") == NULL, 36); /* No tokens. */ cp = strcpy(one, ""); equal(strsep(&cp, ", "), "", 37); check(strsep(&cp, ", ") == NULL, 38); /* Empty string. */ cp = strcpy(one, "abc"); equal(strsep(&cp, ", "), "abc", 39); /* No delimiters. */ check(strsep(&cp, ", ") == NULL, 40); cp = strcpy(one, "abc"); equal(strsep(&cp, ""), "abc", 41); /* Empty delimiter list. */ check(strsep(&cp, "") == NULL, 42); (void) strcpy(one, "abcdefgh"); cp = strcpy(one, "a,b,c"); equal(strsep(&cp, ","), "a", 43); /* Basics again... */ equal(strsep(&cp, ","), "b", 44); equal(strsep(&cp, ","), "c", 45); check(strsep(&cp, ",") == NULL, 46); equal(one+6, "gh", 47); /* Stomped past end? */ equal(one, "a", 48); /* Stomped old tokens? */ equal(one+2, "b", 49); equal(one+4, "c", 50); { char text[] = "This,is,a,test"; char *list = strdup (text); equal (strsep (&list, ","), "This", 51); equal (strsep (&list, ","), "is", 52); equal (strsep (&list, ","), "a", 53); equal (strsep (&list, ","), "test", 54); check (strsep (&list, ",") == NULL, 55); } cp = strcpy(one, "a,b, c,, ,d,"); equal(strsep(&cp, ","), "a", 56); /* Different separators. */ equal(strsep(&cp, ","), "b", 57); equal(strsep(&cp, ","), " c", 58); /* Permute list too. */ equal(strsep(&cp, ","), "", 59); equal(strsep(&cp, ","), " ", 60); equal(strsep(&cp, ","), "d", 61); equal(strsep(&cp, ","), "", 62); check(strsep(&cp, ",") == NULL, 63); check(strsep(&cp, ",") == NULL, 64); /* Persistence. */ cp = strcpy(one, "a,b, c,, ,d,"); equal(strsep(&cp, "xy,"), "a", 65); /* Different separators. */ equal(strsep(&cp, "x,y"), "b", 66); equal(strsep(&cp, ",xy"), " c", 67); /* Permute list too. */ equal(strsep(&cp, "xy,"), "", 68); equal(strsep(&cp, "x,y"), " ", 69); equal(strsep(&cp, ",xy"), "d", 70); equal(strsep(&cp, "xy,"), "", 71); check(strsep(&cp, "x,y") == NULL, 72); check(strsep(&cp, ",xy") == NULL, 73); /* Persistence. */}voidtest_memcmp (void){ int foo[6] = {'\0','0','1','2','3','4'}; int bar[6] = {'\0','0','1','2','3','5'}; it = "memcmp"; check(memcmp("a", "a", 1) == 0, 1); /* Identity. */ check(memcmp("abc", "abc", 3) == 0, 2); /* Multicharacter. */ check(memcmp("abcd", "abce", 4) < 0, 3); /* Honestly unequal. */ check(memcmp("abce", "abcd", 4) > 0, 4); check(memcmp("alph", "beta", 4) < 0, 5); check(memcmp("a\203", "a\003", 2) > 0, 6); check(memcmp("abce", "abcd", 3) == 0, 7); /* Count limited. */ check(memcmp("abc", "def", 0) == 0, 8); /* Zero count. */ check(memcmp(foo, bar, 5*(sizeof(int))) == 0, 9); /* non-string test case (both begin with a NULL) */ check(memcmp(foo, bar, 6*(sizeof(int))) < 0, 10); /* non-string test case (both begin with a NULL) */}voidtest_memchr (void){ it = "memchr"; check(memchr("abcd", 'z', 4) == NULL, 1); /* Not found. */ (void) strcpy(one, "abcd"); check(memchr(one, 'c', 4) == one+2, 2); /* Basic test. */ check(memchr(one, ~0xff|'c', 4) == one+2, 2); /* ignore highorder bits. */ check(memchr(one, 'd', 4) == one+3, 3); /* End of string. */ check(memchr(one, 'a', 4) == one, 4); /* Beginning. */ check(memchr(one, '\0', 5) == one+4, 5); /* Finding NUL. */ (void) strcpy(one, "ababa"); check(memchr(one, 'b', 5) == one+1, 6); /* Finding first. */ check(memchr(one, 'b', 0) == NULL, 7); /* Zero count. */ check(memchr(one, 'a', 1) == one, 8); /* Singleton case. */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -