1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/test/string_tests.c Tue Oct 02 13:43:17 2012 +0200 1.3 @@ -0,0 +1,131 @@ 1.4 +/* 1.5 + * 1.6 + */ 1.7 + 1.8 +#include "string_tests.h" 1.9 + 1.10 +UCX_TEST_IMPLEMENT(test_sstrsplit) { 1.11 + 1.12 + const char *original = "this,is,a,csv,string"; 1.13 + sstr_t test = sstr("this,is,a,csv,string"); /* use copy of original here */ 1.14 + size_t n; 1.15 + sstr_t *list; 1.16 + 1.17 + UCX_TEST_BEGIN 1.18 + 1.19 + /* Nullpointer check */ 1.20 + n = 0; 1.21 + UCX_TEST_ASSERT(sstrsplit(test, ST(""), &n) == NULL, 1.22 + "empty delimiter must return NULL"); 1.23 + 1.24 + /* no delimiter occurence (ndo) */ 1.25 + n = 0; 1.26 + list = sstrsplit(test, ST("z"), &n); 1.27 + UCX_TEST_ASSERT(n == 1, "ndo, list length must be 1"); 1.28 + UCX_TEST_ASSERT(strcmp(list[0].ptr, original) == 0, "ndo, " 1.29 + "original string shall be returned as single list element"); 1.30 + UCX_TEST_ASSERT(strcmp(test.ptr, original) == 0, 1.31 + "ndo, original has been modified"); 1.32 + free(list); 1.33 + 1.34 + /* partially matching delimiter (pmd) */ 1.35 + n = 0; 1.36 + list = sstrsplit(test, ST("stringbuilder"), &n); 1.37 + UCX_TEST_ASSERT(n == 1, "pmd, list length must be 1"); 1.38 + UCX_TEST_ASSERT(strcmp(list[0].ptr, original) == 0, "pmd, " 1.39 + "original string shall be returned as single list element"); 1.40 + UCX_TEST_ASSERT(strcmp(test.ptr, original) == 0, 1.41 + "pmd, original has been modified"); 1.42 + free(list); 1.43 + 1.44 + /* matching single-char delimiter (mscd) */ 1.45 + n = 0; 1.46 + list = sstrsplit(test, ST(","), &n); 1.47 + UCX_TEST_ASSERT(n == 5, "mscd, list length must be 5"); 1.48 + UCX_TEST_ASSERT(strcmp(list[0].ptr, "this") == 0, "mscd, item 0 mismatch"); 1.49 + UCX_TEST_ASSERT(strcmp(list[1].ptr, "is") == 0, "mscd, item 1 mismatch"); 1.50 + UCX_TEST_ASSERT(strcmp(list[2].ptr, "a") == 0, "mscd, item 2 mismatch"); 1.51 + UCX_TEST_ASSERT(strcmp(list[3].ptr, "csv") == 0, "mscd, item 3 mismatch"); 1.52 + UCX_TEST_ASSERT(strcmp(list[4].ptr, "string")==0, "mscd, item 4 mismatch"); 1.53 + UCX_TEST_ASSERT(strcmp(test.ptr, original) == 0, 1.54 + "mscd, original has been modified"); 1.55 + free(list); 1.56 + 1.57 + /* matching multi-char delimiter (mmcd) */ 1.58 + n = 0; 1.59 + list = sstrsplit(test, ST("is"), &n); 1.60 + UCX_TEST_ASSERT(n == 3, "mscd, list length must be 3"); 1.61 + UCX_TEST_ASSERT(strcmp(list[0].ptr, "th") == 0, "mmcd, item 0 mismatch"); 1.62 + UCX_TEST_ASSERT(strcmp(list[1].ptr, ",") == 0, "mmcd, item 1 mismatch"); 1.63 + UCX_TEST_ASSERT(strcmp(list[2].ptr, ",a,csv,string") == 0, 1.64 + "mmcd, item 2 mismatch"); 1.65 + UCX_TEST_ASSERT(strcmp(test.ptr, original) == 0, 1.66 + "mmcd, original has been modified"); 1.67 + free(list); 1.68 + 1.69 + /* bounded list using single-char delimiter (blsc) */ 1.70 + n = 3; 1.71 + list = sstrsplit(test, ST(","), &n); 1.72 + UCX_TEST_ASSERT(n == 3, "blsc, list length must be 3"); 1.73 + UCX_TEST_ASSERT(strcmp(list[0].ptr, "this") == 0, "blsc, item 0 mismatch"); 1.74 + UCX_TEST_ASSERT(strcmp(list[1].ptr, "is") == 0, "blsc, item 1 mismatch"); 1.75 + UCX_TEST_ASSERT(strcmp(list[2].ptr, "a,csv,string") == 0, 1.76 + "blsc, item 2 mismatch"); 1.77 + UCX_TEST_ASSERT(strcmp(test.ptr, original) == 0, 1.78 + "blsc, original has been modified"); 1.79 + free(list); 1.80 + 1.81 + /* bounded list using multi-char delimiter (blmc) */ 1.82 + n = 2; 1.83 + list = sstrsplit(test, ST("is"), &n); 1.84 + UCX_TEST_ASSERT(n == 2, "blmc, list length must be 2"); 1.85 + UCX_TEST_ASSERT(strcmp(list[0].ptr, "th") == 0, "blmc, item 0 mismatch"); 1.86 + UCX_TEST_ASSERT(strcmp(list[1].ptr, ",is,a,csv,string") == 0, 1.87 + "blmc, item 1 mismatch"); 1.88 + UCX_TEST_ASSERT(strcmp(test.ptr, original) == 0, 1.89 + "blmc, original has been modified"); 1.90 + free(list); 1.91 + 1.92 + /* start with delimiter (swd) */ 1.93 + n = 0; 1.94 + list = sstrsplit(test, ST("this"), &n); 1.95 + UCX_TEST_ASSERT(n == 2, "swd, list length must be 2"); 1.96 + UCX_TEST_ASSERT(list[0].length == 0, "swd, first item must be empty"); 1.97 + UCX_TEST_ASSERT(strcmp(list[1].ptr, ",is,a,csv,string") == 0, 1.98 + "swd, second item corrupt"); 1.99 + UCX_TEST_ASSERT(strcmp(test.ptr, original) == 0, 1.100 + "swd, original has been modified"); 1.101 + free(list); 1.102 + 1.103 + /* end with delimiter (ewd) */ 1.104 + n = 0; 1.105 + list = sstrsplit(test, ST("string"), &n); 1.106 + UCX_TEST_ASSERT(n == 2, "ewd, list length must be 2"); 1.107 + UCX_TEST_ASSERT(strcmp(list[0].ptr, "this,is,a,csv,") == 0, 1.108 + "swd, first item corrupt"); 1.109 + UCX_TEST_ASSERT(list[1].length == 0, "ewd, second item must be empty"); 1.110 + UCX_TEST_ASSERT(strcmp(test.ptr, original) == 0, 1.111 + "ewd, original has been modified"); 1.112 + free(list); 1.113 + 1.114 + /* exact match (exm) */ 1.115 + n = 0; 1.116 + list = sstrsplit(test, ST("this,is,a,csv,string"), &n); 1.117 + UCX_TEST_ASSERT(n == 1, "exm, list length must be 1"); 1.118 + UCX_TEST_ASSERT(list[0].length == 0, "exm, single item must be empty"); 1.119 + UCX_TEST_ASSERT(strcmp(test.ptr, original) == 0, 1.120 + "exm, original has been modified"); 1.121 + free(list); 1.122 + 1.123 + /* substring (subs) */ 1.124 + n = 0; 1.125 + list = sstrsplit(test, ST("this,is,a,csv,string,with,extension"), &n); 1.126 + UCX_TEST_ASSERT(n == 1, "subs, list length must be 1"); 1.127 + UCX_TEST_ASSERT(strcmp(list[0].ptr, original) == 0, 1.128 + "subs, single item must be the original string"); 1.129 + UCX_TEST_ASSERT(strcmp(test.ptr, original) == 0, 1.130 + "subs, original has been modified"); 1.131 + free(list); 1.132 + 1.133 + UCX_TEST_END 1.134 +}