#include #include #include #define COUNT 1024 static char aaa[COUNT], bbb[COUNT]; #define memcmp LIBCLAYER(memcmp) #define memcpy LIBCLAYER(memcpy) #define memmove LIBCLAYER(memmove) #define memchr LIBCLAYER(memchr) #define memset LIBCLAYER(memset) #define strcat LIBCLAYER(strcat) #define strchr LIBCLAYER(strchr) #define strcmp LIBCLAYER(strcmp) #define strcpy LIBCLAYER(strcpy) #define strlen LIBCLAYER(strlen) #define strncat LIBCLAYER(strncat) #define strncmp LIBCLAYER(strncmp) #define strncpy LIBCLAYER(strncpy) #define strnlen LIBCLAYER(strnlen) #define strstr LIBCLAYER(strstr) void test_main() { { // memcmp for (size_t i = 0; i < COUNT; ++i) aaa[i] = bbb[i] = i * i; assert(memcmp(aaa, bbb, COUNT) == 0); aaa[123] = 1; bbb[123] = 2; assert(memcmp(aaa, bbb, COUNT) == -1); aaa[123] = 2; bbb[123] = 1; assert(memcmp(aaa, bbb, COUNT) == 1); } { // memcpy for (size_t i = 0; i < COUNT; ++i) { aaa[i] = 0; bbb[i] = i * i; } assert(memcpy(aaa, bbb, COUNT) == aaa); for (size_t i = 0; i < COUNT; ++i) assert(aaa[i] == (char)(i * i)); } { // memmove for (size_t i = 0; i < COUNT; ++i) { aaa[i] = 0; bbb[i] = i * i; } assert(memcpy(aaa, bbb, COUNT) == aaa); for (size_t i = 0; i < COUNT; ++i) assert(aaa[i] == (char)(i * i)); } { // memchr for (size_t i = 0; i < COUNT; ++i) aaa[i] = 0; aaa[256] = 'a'; assert(memchr(aaa, 'a', COUNT) == &aaa[256]); } { // memset memset(&aaa[0], 'a', COUNT / 2); memset(&aaa[COUNT / 2], 'b', COUNT / 2); for (size_t i = 0; i < COUNT / 2; ++i) assert(aaa[i] == 'a'); for (size_t i = COUNT / 2; i < COUNT; ++i) assert(aaa[i] == 'b'); } { // strcat aaa[0] = 'f'; aaa[1] = 'o'; aaa[2] = 'o'; aaa[3] = '\0'; strcat(aaa, "bar"); for (const char *e = "foobar", *g = aaa; *e; ++e, ++g) assert(*g == *e); assert(aaa[6] == '\0'); } { // strchr const char *const s = "foobar"; assert(strchr(s, 'f') == &s[0]); assert(strchr(s, 'b') == &s[3]); assert(strchr(s, 'r') == &s[5]); assert(strchr(s, 'x') == NULL); assert(strchr(s, 'F') == NULL); } { // strcmp assert(strcmp("", "") == 0); assert(strcmp("", "a") == -1); assert(strcmp("a", "") == 1); assert(strcmp("a", "a") == 0); assert(strcmp("a", "aa") == -1); assert(strcmp("aa", "a") == 1); assert(strcmp("aa", "ab") == -1); assert(strcmp("ab", "aa") == 1); assert(strcmp("aa", "aa") == 0); } { // strcpy assert(strcpy(aaa, "foobar") == aaa); for (const char *e = "foobar", *g = aaa; *e; ++e, ++g) assert(*g == *e); assert(aaa[6] == '\0'); } { // strlen assert(strlen("") == 0); assert(strlen("a") == 1); assert(strlen("aa") == 2); assert(strlen("aaaaaaaaaa") == 10); } { // strncat memset(aaa, '\x01', COUNT); aaa[0] = 'f'; aaa[1] = 'o'; aaa[2] = 'o'; aaa[3] = '\0'; strncat(aaa, "bar", 4); for (const char *e = "foobar", *g = aaa; *e; ++e, ++g) assert(*g == *e); assert(aaa[6] == '\0'); memset(aaa, '\x01', COUNT); aaa[0] = 'f'; aaa[1] = 'o'; aaa[2] = 'o'; aaa[3] = '\0'; strncat(aaa, "bar", 3); for (const char *e = "foobar", *g = aaa; *e; ++e, ++g) assert(*g == *e); assert(aaa[6] == '\0'); memset(aaa, '\x01', COUNT); aaa[0] = 'f'; aaa[1] = 'o'; aaa[2] = 'o'; aaa[3] = '\0'; strncat(aaa, "bar", 2); for (const char *e = "fooba", *g = aaa; *e; ++e, ++g) assert(*g == *e); assert(aaa[5] == '\0'); memset(aaa, '\x01', COUNT); aaa[0] = 'f'; aaa[1] = 'o'; aaa[2] = 'o'; aaa[3] = '\0'; strncat(aaa, "bar", 1); for (const char *e = "foob", *g = aaa; *e; ++e, ++g) assert(*g == *e); assert(aaa[4] == '\0'); memset(aaa, '\x01', COUNT); aaa[0] = 'f'; aaa[1] = 'o'; aaa[2] = 'o'; aaa[3] = '\0'; strncat(aaa, "bar", 0); for (const char *e = "foo", *g = aaa; *e; ++e, ++g) assert(*g == *e); assert(aaa[3] == '\0'); } { // strncmp assert(strncmp("", "", 0) == 0); assert(strncmp("", "a", 0) == 0); assert(strncmp("a", "", 0) == 0); assert(strncmp("a", "a", 0) == 0); assert(strncmp("", "a", 1) == -1); assert(strncmp("a", "", 1) == 1); assert(strncmp("a", "a", 1) == 0); assert(strncmp("a", "aa", 1) == 0); assert(strncmp("aa", "a", 1) == 0); assert(strncmp("aa", "ab", 1) == 0); assert(strncmp("ab", "aa", 1) == 0); assert(strncmp("aa", "aa", 1) == 0); assert(strncmp("aa", "ba", 1) == -1); assert(strncmp("ba", "aa", 1) == 1); assert(strncmp("ab", "ab", 1) == 0); assert(strncmp("a", "aa", 2) == -1); assert(strncmp("aa", "a", 2) == 1); assert(strncmp("aa", "ab", 2) == -1); assert(strncmp("ab", "aa", 2) == 1); assert(strncmp("aa", "aa", 2) == 0); } { // strncpy aaa[6] = 'x'; assert(strncpy(aaa, "foobar", 7) == aaa); for (const char *e = "foobar", *g = aaa; *e; ++e, ++g) assert(*g == *e); assert(aaa[6] == '\0'); aaa[6] = 'x'; assert(strncpy(aaa, "foobar", 6) == aaa); for (const char *e = "foobar", *g = aaa; *e; ++e, ++g) assert(*g == *e); assert(aaa[6] == 'x'); } { // strnlen assert(strnlen("", 0) == 0); assert(strnlen("", 1) == 0); assert(strnlen("", 123) == 0); assert(strnlen("a", 0) == 0); assert(strnlen("a", 1) == 1); assert(strnlen("a", 123) == 1); assert(strnlen("aa", 0) == 0); assert(strnlen("aa", 1) == 1); assert(strnlen("aa", 2) == 2); assert(strnlen("aa", 123) == 2); assert(strnlen("aaaaaaaaaa", 0) == 0); assert(strnlen("aaaaaaaaaa", 9) == 9); assert(strnlen("aaaaaaaaaa", 10) == 10); assert(strnlen("aaaaaaaaaa", 123) == 10); } { // strstr const char *const s0 = ""; assert(strstr(s0, "") == s0); assert(strstr(s0, "x") == NULL); const char *const s1 = "a"; assert(strstr(s1, "") == s1); assert(strstr(s1, "a") == s1); assert(strstr(s1, "ab") == NULL); assert(strstr(s1, "x") == NULL); const char *const s2 = "ab"; assert(strstr(s2, "") == s2); assert(strstr(s2, "a") == s2); assert(strstr(s2, "ab") == s2); assert(strstr(s2, "abc") == NULL); assert(strstr(s2, "b") == &s2[1]); assert(strstr(s2, "bc") == NULL); assert(strstr(s2, "x") == NULL); const char *const s6 = "abcdef"; assert(strstr(s6, "abcdef") == s6); assert(strstr(s6, "def") == &s6[3]); assert(strstr(s6, "f") == &s6[5]); } }