added sstrcasecmp

Mon, 19 Aug 2013 11:54:54 +0200

author
Mike Becker <universe@uap-core.de>
date
Mon, 19 Aug 2013 11:54:54 +0200
changeset 149
3bf87676d42d
parent 148
c27c2425c0b1
child 150
1cf2eabf94ed

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

mercurial