Mon, 19 Aug 2013 11:54:54 +0200
added sstrcasecmp
test/main.c | file | annotate | diff | comparison | revisions | |
test/string_tests.c | file | annotate | diff | comparison | revisions | |
test/string_tests.h | file | annotate | diff | comparison | revisions | |
ucx/string.c | file | annotate | diff | comparison | revisions | |
ucx/string.h | file | annotate | diff | comparison | revisions |
1.1 --- a/test/main.c Mon Aug 19 10:44:11 2013 +0200 1.2 +++ b/test/main.c Mon Aug 19 11:54:54 2013 +0200 1.3 @@ -115,7 +115,9 @@ 1.4 /* sstring Tests */ 1.5 ucx_test_register(suite, test_sstr); 1.6 ucx_test_register(suite, test_sstr_len_cat); 1.7 - ucx_test_register(suite, test_sstrchr); 1.8 + ucx_test_register(suite, test_sstrcmp); 1.9 + ucx_test_register(suite, test_sstrcasecmp); 1.10 + ucx_test_register(suite, test_sstrchr_sstrrchr); 1.11 ucx_test_register(suite, test_sstrsplit); 1.12 ucx_test_register(suite, test_sstrtrim); 1.13 ucx_test_register(suite, test_sstrprefixsuffix);
2.1 --- a/test/string_tests.c Mon Aug 19 10:44:11 2013 +0200 2.2 +++ b/test/string_tests.c Mon Aug 19 11:54:54 2013 +0200 2.3 @@ -69,7 +69,7 @@ 2.4 free(cat.ptr); 2.5 } 2.6 2.7 -UCX_TEST(test_sstrchr) { 2.8 +UCX_TEST(test_sstrchr_sstrrchr) { 2.9 sstr_t str = ST("I will find you - and I will kill you"); 2.10 UCX_TEST_BEGIN 2.11 2.12 @@ -86,6 +86,35 @@ 2.13 UCX_TEST_END 2.14 } 2.15 2.16 +UCX_TEST(test_sstrcmp) { 2.17 + sstr_t str = ST("compare this"); 2.18 + 2.19 + UCX_TEST_BEGIN 2.20 + UCX_TEST_ASSERT(sstrcmp(str, S("compare this")) == 0, "false negative"); 2.21 + UCX_TEST_ASSERT(sstrcmp(str, S("Compare This")) != 0, "false positive"); 2.22 + UCX_TEST_ASSERT(sstrcmp(str, S("compare tool")) < 0, "memcmp < 0 failed"); 2.23 + UCX_TEST_ASSERT(sstrcmp(str, S("compare shit")) > 0, "memcmp > 0 failed"); 2.24 + UCX_TEST_ASSERT(sstrcmp(str, S("compare this not")) < 0, "len < 0 failed"); 2.25 + UCX_TEST_ASSERT(sstrcmp(str, S("compare")) > 0, "len > 0 failed"); 2.26 + UCX_TEST_END 2.27 +} 2.28 + 2.29 +UCX_TEST(test_sstrcasecmp) { 2.30 + 2.31 + sstr_t str = ST("compare this"); 2.32 + 2.33 + UCX_TEST_BEGIN 2.34 + UCX_TEST_ASSERT(sstrcasecmp(str, S("compare this")) == 0, "false negative"); 2.35 + UCX_TEST_ASSERT(sstrcasecmp(str, S("Compare This")) == 0, 2.36 + "not ignoring case"); 2.37 + UCX_TEST_ASSERT(sstrcasecmp(str, S("compare tool")) < 0, "< 0 failed"); 2.38 + UCX_TEST_ASSERT(sstrcasecmp(str, S("compare shit")) > 0, "> 0 failed"); 2.39 + UCX_TEST_ASSERT(sstrcasecmp(str, S("compare this not")) < 0, 2.40 + "len < 0 failed"); 2.41 + UCX_TEST_ASSERT(sstrcasecmp(str, S("compare")) > 0, "len > 0 failed"); 2.42 + UCX_TEST_END 2.43 +} 2.44 + 2.45 UCX_TEST(test_sstrsplit) { 2.46 2.47 const char *original = "this,is,a,csv,string";
3.1 --- a/test/string_tests.h Mon Aug 19 10:44:11 2013 +0200 3.2 +++ b/test/string_tests.h Mon Aug 19 11:54:54 2013 +0200 3.3 @@ -38,7 +38,9 @@ 3.4 3.5 UCX_TEST(test_sstr); 3.6 UCX_TEST(test_sstr_len_cat); 3.7 -UCX_TEST(test_sstrchr); 3.8 +UCX_TEST(test_sstrcmp); 3.9 +UCX_TEST(test_sstrcasecmp); 3.10 +UCX_TEST(test_sstrchr_sstrrchr); 3.11 UCX_TEST(test_sstrsplit); 3.12 UCX_TEST(test_sstrtrim); 3.13 UCX_TEST(test_sstrprefixsuffix);
4.1 --- a/ucx/string.c Mon Aug 19 10:44:11 2013 +0200 4.2 +++ b/ucx/string.c Mon Aug 19 11:54:54 2013 +0200 4.3 @@ -211,6 +211,20 @@ 4.4 } 4.5 } 4.6 4.7 +int sstrcasecmp(sstr_t s1, sstr_t s2) { 4.8 + if (s1.length == s2.length) { 4.9 +#ifdef _WIN32 4.10 + return _strnicmp(s1.ptr, s2.ptr, s1.length); 4.11 +#else 4.12 + return strncasecmp(s1.ptr, s2.ptr, s1.length); 4.13 +#endif 4.14 + } else if (s1.length > s2.length) { 4.15 + return 1; 4.16 + } else { 4.17 + return -1; 4.18 + } 4.19 +} 4.20 + 4.21 sstr_t sstrdup(sstr_t s) { 4.22 return sstrdup_a(ucx_default_allocator(), s); 4.23 }
5.1 --- a/ucx/string.h Mon Aug 19 10:44:11 2013 +0200 5.2 +++ b/ucx/string.h Mon Aug 19 11:54:54 2013 +0200 5.3 @@ -301,6 +301,22 @@ 5.4 int sstrcmp(sstr_t s1, sstr_t s2); 5.5 5.6 /** 5.7 + * Compares two UCX strings ignoring the case. 5.8 + * 5.9 + * At first it compares the sstr_t.length attribute of the two strings. If and 5.10 + * only if the lengths match, both strings are compared char by char ignoring 5.11 + * the case. 5.12 + * 5.13 + * @param s1 the first string 5.14 + * @param s2 the second string 5.15 + * @return -1, if the length of s1 is less than the length of s2 or 1, if the 5.16 + * length of s1 is greater than the length of s2 or the difference between the 5.17 + * first two differing characters otherwise (i.e. 0 if the strings match and 5.18 + * no characters differ) 5.19 + */ 5.20 +int sstrcasecmp(sstr_t s1, sstr_t s2); 5.21 + 5.22 +/** 5.23 * Creates a duplicate of the specified string. 5.24 * 5.25 * The new sstr_t will contain a copy allocated by standard