Merge with 22fb97e9f58a0a8b18db7f81b7392dae0cd64571

Fri, 05 Oct 2012 11:55:36 +0200

author
Mike Becker <universe@uap-core.de>
date
Fri, 05 Oct 2012 11:55:36 +0200
changeset 49
1771360b740d
parent 48
621a4430c404 (current diff)
parent 47
22fb97e9f58a (diff)
child 50
ff194559eb41

Merge with 22fb97e9f58a0a8b18db7f81b7392dae0cd64571

test/main.c file | annotate | diff | comparison | revisions
     1.1 --- a/test/main.c	Fri Oct 05 11:52:53 2012 +0200
     1.2 +++ b/test/main.c	Fri Oct 05 11:55:36 2012 +0200
     1.3 @@ -152,6 +152,8 @@
     1.4          ucx_test_register(suite, test_ucx_map_clone);
     1.5          
     1.6          /* sstring Tests */
     1.7 +        ucx_test_register(suite, test_sstr);
     1.8 +        ucx_test_register(suite, test_sstr_len_cat);
     1.9          ucx_test_register(suite, test_sstrsplit);
    1.10  
    1.11          ucx_test_run(suite, stdout);
     2.1 --- a/test/string_tests.c	Fri Oct 05 11:52:53 2012 +0200
     2.2 +++ b/test/string_tests.c	Fri Oct 05 11:55:36 2012 +0200
     2.3 @@ -4,6 +4,53 @@
     2.4  
     2.5  #include "string_tests.h"
     2.6  
     2.7 +UCX_TEST_IMPLEMENT(test_sstr) {
     2.8 +    sstr_t s1 = sstr("1234");
     2.9 +    sstr_t s2 = sstrn("ab", 2);
    2.10 +    
    2.11 +    UCX_TEST_BEGIN
    2.12 +    
    2.13 +    UCX_TEST_ASSERT(s1.length == 4, "s1 length must be 4");
    2.14 +    UCX_TEST_ASSERT(s2.length == 2, "s2 length must be 2");
    2.15 +    
    2.16 +    UCX_TEST_END
    2.17 +}
    2.18 +
    2.19 +UCX_TEST_IMPLEMENT(test_sstr_len_cat) {
    2.20 +    sstr_t s1 = sstr("1234");
    2.21 +    sstr_t s2 = sstr(".:.:.");
    2.22 +    sstr_t s3 = sstr("X");
    2.23 +    
    2.24 +    sstr_t cat;
    2.25 +    
    2.26 +    size_t len = sstrnlen(3, s1, s2, s3);
    2.27 +    
    2.28 +    UCX_TEST_BEGIN
    2.29 +    
    2.30 +    UCX_TEST_ASSERT(len == s1.length + s2.length + s3.length,
    2.31 +            "sstrnlen returned wrong size");
    2.32 +    
    2.33 +    len = s1.length + s2.length + s3.length;
    2.34 +    
    2.35 +    cat.ptr = malloc(len + 1);
    2.36 +    cat.ptr[len] = 0;
    2.37 +    cat.length = len;
    2.38 +    
    2.39 +    sstrncat(3, cat, s1, s2, s3);
    2.40 +    
    2.41 +    UCX_TEST_ASSERT(cat.ptr[0] == '1', "sstrncat, wrong content");
    2.42 +    UCX_TEST_ASSERT(cat.ptr[1] == '2', "sstrncat, wrong content");
    2.43 +    UCX_TEST_ASSERT(cat.ptr[2] == '3', "sstrncat, wrong content");
    2.44 +    UCX_TEST_ASSERT(cat.ptr[3] == '4', "sstrncat, wrong content");
    2.45 +    UCX_TEST_ASSERT(cat.ptr[4] == '.', "sstrncat, wrong content");
    2.46 +    UCX_TEST_ASSERT(cat.ptr[8] == '.', "sstrncat, wrong content");
    2.47 +    UCX_TEST_ASSERT(cat.ptr[9] == 'X', "sstrncat, wrong content");
    2.48 +    
    2.49 +    UCX_TEST_END
    2.50 +    
    2.51 +    free(cat.ptr);
    2.52 +}
    2.53 +
    2.54  UCX_TEST_IMPLEMENT(test_sstrsplit) {
    2.55  
    2.56      const char *original = "this,is,a,csv,string";
     3.1 --- a/test/string_tests.h	Fri Oct 05 11:52:53 2012 +0200
     3.2 +++ b/test/string_tests.h	Fri Oct 05 11:55:36 2012 +0200
     3.3 @@ -12,6 +12,8 @@
     3.4  extern "C" {
     3.5  #endif
     3.6  
     3.7 +UCX_TEST_DECLARE(test_sstr)
     3.8 +UCX_TEST_DECLARE(test_sstr_len_cat)
     3.9  UCX_TEST_DECLARE(test_sstrsplit)
    3.10  
    3.11  #ifdef	__cplusplus
     4.1 --- a/ucx/string.c	Fri Oct 05 11:52:53 2012 +0200
     4.2 +++ b/ucx/string.c	Fri Oct 05 11:55:36 2012 +0200
     4.3 @@ -58,11 +58,24 @@
     4.4      va_list ap;
     4.5      va_start(ap, c1);
     4.6      s.ptr[0] = 0;
     4.7 -
     4.8 -    s.ptr = strncat (s.ptr, c1.ptr, s.length);
     4.9 +    
    4.10 +    size_t len = s.length;
    4.11 +    size_t cplen = c1.length > len ? len : c1.length;
    4.12 +    char   *ptr = s.ptr;
    4.13 +    
    4.14 +    memcpy(ptr, c1.ptr, cplen);
    4.15 +    len -= cplen;
    4.16 +    ptr += cplen;
    4.17      for (int i=0;i<n-1;i++) {
    4.18          sstr_t str = va_arg (ap, sstr_t);
    4.19 -        s.ptr = strncat (s.ptr, str.ptr, s.length);
    4.20 +        cplen = str.length > len ? len : str.length;
    4.21 +        if(cplen <= 0) {
    4.22 +            va_end(ap);
    4.23 +            return s;
    4.24 +        }
    4.25 +        memcpy(ptr, str.ptr, cplen);
    4.26 +        len -= cplen;
    4.27 +        ptr += cplen;
    4.28      }
    4.29      va_end(ap);
    4.30  
     5.1 --- a/ucx/string.h	Fri Oct 05 11:52:53 2012 +0200
     5.2 +++ b/ucx/string.h	Fri Oct 05 11:55:36 2012 +0200
     5.3 @@ -67,7 +67,7 @@
     5.4  /*
     5.5   *
     5.6   */
     5.7 -sstr_t sstrsubsl (sstr_t s, size_t start, size_t end);
     5.8 +sstr_t sstrsubsl (sstr_t s, size_t start, size_t length);
     5.9  
    5.10  /*
    5.11   * splits s into n parts

mercurial