29 for (
int i =
size()-2; i >= 0; --i) {
30 if (compare(
str[i],
str[i+1], client_data) == 0) {
72 size_t nonsepcount = strcspn(sep, separator);
77 size_t sepcount = strspn(sep, separator);
81 for (
size_t s = 1;
s<sepcount; ++
s) names.
put(sep);
93 char separator_string[] =
"x";
94 separator_string[0] = separator;
107 if (!strings[0] || (!strings[0][0] && !strings[1]))
return ARB_strdup(
"");
112 for (
int n = 1; strings[n]; ++n) {
113 if (separator) out.
put(separator);
123 if (search_for && allocated) {
124 for (
int i = 0;
str[i]; ++i) {
125 if (strcmp(
str[i], search_for) == 0) {
142 if (oidx == -1) oidx = siz-1;
143 if (nidx == -1) nidx = siz-1;
144 else if (nidx >= siz) nidx = 0;
148 if (oidx != nidx && oidx<siz) {
149 if (oidx>nidx)
for (
int i = oidx-1; i>= nidx; --i)
swap(i, i+1);
150 else for (
int i = oidx; i< nidx; ++i)
swap(i, i+1);
160 while (
size_t(i) <
elems) {
173 void TEST_StrArray() {
208 void TEST_StrArray_truncate() {
219 #define TEST_SPLIT_JOIN(str,sep) \
221 ConstStrArray cnames; \
222 GBT_split_string(cnames, str, sep); \
223 TEST_EXPECT_STRARRAY_CONTAINS(cnames, sep, joined); \
226 void TEST_GBT_split_join_names() {
230 size_t count = names.
size();
240 size_t count = names.
size();
255 size_t count = names.
size();
267 size_t count = names.
size();
277 size_t count = names.
size();
286 size_t count = names.
size();
292 TEST_SPLIT_JOIN(
"a.b.c",
'.');
293 TEST_SPLIT_JOIN(
"a.b.c",
'*');
295 TEST_SPLIT_JOIN(
"..a.b.c",
'.');
296 TEST_SPLIT_JOIN(
"a.b.c..",
'.');
297 TEST_SPLIT_JOIN(
"a..b..c",
'.');
298 TEST_SPLIT_JOIN(
".",
'.');
299 TEST_SPLIT_JOIN(
"....",
'.');
300 TEST_SPLIT_JOIN(
"",
'.');
303 void TEST_StrArray_index_of() {
317 #define TEST_EXPECT_NAMES_JOIN_TO(names,sep,expected) TEST_EXPECT_STRARRAY_CONTAINS(names,sep,expected)
319 void TEST_join_empty_strings() {
345 void TEST_StrArray_safe_remove() {
350 TEST_EXPECT_NAMES_JOIN_TO(names, 0,
"abcde");
353 TEST_EXPECT_NAMES_JOIN_TO(names,
'*',
"b*c*d*e");
356 TEST_EXPECT_NAMES_JOIN_TO(names,
'*',
"b*c*d");
359 TEST_EXPECT_NAMES_JOIN_TO(names,
'*',
"b*c*d");
362 TEST_EXPECT_NAMES_JOIN_TO(names,
'*',
"b*c*d");
365 TEST_EXPECT_NAMES_JOIN_TO(names,
'*',
"b*d");
368 void TEST_StrArray_move() {
373 TEST_EXPECT_NAMES_JOIN_TO(names,
'*',
"b*c*dee*a");
375 TEST_EXPECT_NAMES_JOIN_TO(names,
'*',
"a*b*c*dee");
377 TEST_EXPECT_NAMES_JOIN_TO(names,
'*',
"a*b*dee*c");
379 TEST_EXPECT_NAMES_JOIN_TO(names,
'*',
"a*dee*b*c");
383 TEST_EXPECT_NAMES_JOIN_TO(names,
'*',
"dee*b*c*a");
384 names.
move(-1, 99999);
385 TEST_EXPECT_NAMES_JOIN_TO(names,
'*',
"a*dee*b*c");
388 void TEST_StrArray_put_before() {
393 TEST_EXPECT_NAMES_JOIN_TO(names,
'*',
"a*b");
396 TEST_EXPECT_NAMES_JOIN_TO(names,
'*',
"a*b*c");
399 TEST_EXPECT_NAMES_JOIN_TO(names,
'*',
"a*b*c*d");
402 TEST_EXPECT_NAMES_JOIN_TO(names,
'*',
"a*b*b2*c*d");
405 TEST_EXPECT_NAMES_JOIN_TO(names,
'*',
"a0*a*b*b2*c*d");
408 TEST_EXPECT_NAMES_JOIN_TO(names,
'*',
"a0*a*b*b2*c*d0*d");
void put(const char *elem)
#define implicated(hypothesis, conclusion)
int(* CharPtrArray_compare_fun)(const void *p0, const void *p1, void *client_data)
void GB_sort(void **array, size_t first, size_t behind_last, gb_compare_function compare, void *client_data)
#define TEST_EXPECT_STRARRAY_CONTAINS(strings, separator, expected)
char * ARB_strdup(const char *str)
void uniq(CharPtrArray_compare_fun compare, void *client_data)
void cat(const char *from)
void set_memblock(char *block)
#define TEST_PUBLISH(testfunction)
virtual void free_elem(int i)=0
#define TEST_EXPECT(cond)
void swap(int i1, int i2)
int index_of(const char *search_for) const
#define TEST_REJECT(cond)
void put_before(int insert_before, const char *elem)
char * GBT_join_strings(const CharPtrArray &strings, char separator)
#define TEST_EXPECT_NULL(n)
void move(int from, int to)
void sort(CharPtrArray_compare_fun compare, void *client_data)
void GBT_split_string(ConstStrArray &dest, const char *namelist, const char *separator, SplitMode mode)
void GBT_splitNdestroy_string(ConstStrArray &names, char *&namelist, const char *separator, SplitMode mode)
bool elem_index(int i) const
#define TEST_EXPECT_EQUAL(expr, want)
GB_write_int const char s