@@ -243,6 +243,138 @@ void test_string_list__filter(void)
243243 t_string_list_clear (& list , 0 );
244244}
245245
246+ static void t_string_list_has_string (
247+ struct string_list * list ,
248+ const char * string ,
249+ int expected )
250+ {
251+ int has_string = string_list_has_string (list , string );
252+ cl_assert_equal_i (has_string , expected );
253+ }
254+
255+ void test_string_list__has_string (void )
256+ {
257+ struct string_list list = STRING_LIST_INIT_DUP ;
258+
259+ t_create_string_list_dup (& list , 0 , NULL );
260+ t_string_list_has_string (& list , "" , 0 );
261+
262+ t_create_string_list_dup (& list , 0 , "a" , "b" , "c" , NULL );
263+ t_string_list_has_string (& list , "a" , 1 );
264+ t_string_list_has_string (& list , "b" , 1 );
265+ t_string_list_has_string (& list , "c" , 1 );
266+ t_string_list_has_string (& list , "d" , 0 );
267+
268+ t_string_list_clear (& list , 0 );
269+ }
270+
271+ static void t_string_list_insert (struct string_list * expected_strings , ...)
272+ {
273+ struct string_list strings_to_insert = STRING_LIST_INIT_DUP ;
274+ struct string_list list = STRING_LIST_INIT_DUP ;
275+ va_list ap ;
276+
277+ va_start (ap , expected_strings );
278+ t_vcreate_string_list_dup (& strings_to_insert , 0 , ap );
279+ va_end (ap );
280+
281+ for (size_t i = 0 ; i < strings_to_insert .nr ; i ++ )
282+ string_list_insert (& list , strings_to_insert .items [i ].string );
283+
284+ t_string_list_equal (& list , expected_strings );
285+
286+ string_list_clear (& strings_to_insert , 0 );
287+ string_list_clear (& list , 0 );
288+ }
289+
290+ void test_string_list__insert (void )
291+ {
292+ struct string_list expected_strings = STRING_LIST_INIT_DUP ;
293+
294+ t_create_string_list_dup (& expected_strings , 0 , NULL );
295+ t_string_list_insert (& expected_strings , NULL );
296+
297+ t_create_string_list_dup (& expected_strings , 0 , "a" , "b" , NULL );
298+ t_string_list_insert (& expected_strings , "b" , "a" , "a" , "b" , NULL );
299+
300+ t_create_string_list_dup (& expected_strings , 0 , "a" , "b" , "c" , NULL );
301+ t_string_list_insert (& expected_strings , "c" , "b" , "a" , "c" , "b" , NULL );
302+
303+ t_create_string_list_dup (& expected_strings , 0 , "" , "a" , NULL );
304+ t_string_list_insert (& expected_strings , "a" , "a" , "a" , "" , NULL );
305+
306+ t_string_list_clear (& expected_strings , 0 );
307+ }
308+
309+ static void t_string_list_sort (struct string_list * list , ...)
310+ {
311+ struct string_list expected_strings = STRING_LIST_INIT_DUP ;
312+ va_list ap ;
313+
314+ va_start (ap , list );
315+ t_vcreate_string_list_dup (& expected_strings , 0 , ap );
316+ va_end (ap );
317+
318+ string_list_sort (list );
319+ t_string_list_equal (list , & expected_strings );
320+
321+ string_list_clear (& expected_strings , 0 );
322+ }
323+
324+ void test_string_list__sort (void )
325+ {
326+ struct string_list list = STRING_LIST_INIT_DUP ;
327+
328+ t_create_string_list_dup (& list , 0 , NULL );
329+ t_string_list_sort (& list , NULL );
330+
331+ t_create_string_list_dup (& list , 0 , "b" , "" , "a" , NULL );
332+ t_string_list_sort (& list , "" , "a" , "b" , NULL );
333+
334+ t_create_string_list_dup (& list , 0 , "c" , "a" , "b" , "a" , NULL );
335+ t_string_list_sort (& list , "a" , "a" , "b" , "c" , NULL );
336+
337+ t_string_list_clear (& list , 0 );
338+ }
339+
340+ static void t_string_list_remove (
341+ struct string_list * expected_strings ,
342+ struct string_list * list ,
343+ char const * str )
344+ {
345+ string_list_remove (list , str , 0 );
346+ t_string_list_equal (list , expected_strings );
347+ }
348+
349+ void test_string_list__remove (void )
350+ {
351+ struct string_list expected_strings = STRING_LIST_INIT_DUP ;
352+ struct string_list list = STRING_LIST_INIT_DUP ;
353+
354+ t_create_string_list_dup (& expected_strings , 0 , NULL );
355+ t_create_string_list_dup (& list , 0 , NULL );
356+ t_string_list_remove (& expected_strings , & list , "" );
357+
358+ t_create_string_list_dup (& expected_strings , 0 , "a" , NULL );
359+ t_create_string_list_dup (& list , 0 , "a" , "a" , NULL );
360+ t_string_list_remove (& expected_strings , & list , "a" );
361+
362+ t_create_string_list_dup (& expected_strings , 0 , "a" , "b" , "b" , NULL );
363+ t_create_string_list_dup (& list , 0 , "a" , "b" , "b" , "c" , NULL );
364+ t_string_list_remove (& expected_strings , & list , "c" );
365+
366+ t_create_string_list_dup (& expected_strings , 0 , "a" , "b" , "d" , NULL );
367+ t_create_string_list_dup (& list , 0 , "a" , "b" , "c" , "d" , NULL );
368+ t_string_list_remove (& expected_strings , & list , "c" );
369+
370+ t_create_string_list_dup (& expected_strings , 0 , "a" , "b" , "c" , "d" , NULL );
371+ t_create_string_list_dup (& list , 0 , "a" , "b" , "c" , "d" , NULL );
372+ t_string_list_remove (& expected_strings , & list , "e" );
373+
374+ t_string_list_clear (& expected_strings , 0 );
375+ t_string_list_clear (& list , 0 );
376+ }
377+
246378static void t_string_list_remove_duplicates (struct string_list * list , ...)
247379{
248380 struct string_list expected_strings = STRING_LIST_INIT_DUP ;
@@ -304,3 +436,80 @@ void test_string_list__remove_duplicates(void)
304436
305437 t_string_list_clear (& list , 0 );
306438}
439+
440+ static void t_string_list_remove_empty_items (
441+ struct string_list * expected_strings ,
442+ struct string_list * list )
443+ {
444+ string_list_remove_empty_items (list , 0 );
445+ t_string_list_equal (list , expected_strings );
446+ }
447+
448+ void test_string_list__remove_empty_items (void )
449+ {
450+ struct string_list expected_strings = STRING_LIST_INIT_DUP ;
451+ struct string_list list = STRING_LIST_INIT_DUP ;
452+
453+ t_create_string_list_dup (& expected_strings , 0 , NULL );
454+ t_create_string_list_dup (& list , 0 , "" , "" , "" , NULL );
455+ t_string_list_remove_empty_items (& expected_strings , & list );
456+
457+ t_create_string_list_dup (& expected_strings , 0 , "a" , "b" , NULL );
458+ t_create_string_list_dup (& list , 0 , "a" , "" , "b" , "" , NULL );
459+ t_string_list_remove_empty_items (& expected_strings , & list );
460+
461+ t_string_list_clear (& expected_strings , 0 );
462+ t_string_list_clear (& list , 0 );
463+ }
464+
465+ static void t_string_list_unsorted_string_list_has_string (
466+ struct string_list * list ,
467+ const char * str , int expected )
468+ {
469+ int has_string = unsorted_string_list_has_string (list , str );
470+ cl_assert_equal_i (has_string , expected );
471+ }
472+
473+ void test_string_list__unsorted_string_list_has_string (void )
474+ {
475+ struct string_list list = STRING_LIST_INIT_DUP ;
476+
477+ t_create_string_list_dup (& list , 0 , "b" , "d" , "a" , NULL );
478+ t_string_list_unsorted_string_list_has_string (& list , "a" , 1 );
479+ t_string_list_unsorted_string_list_has_string (& list , "b" , 1 );
480+ t_string_list_unsorted_string_list_has_string (& list , "c" , 0 );
481+ t_string_list_unsorted_string_list_has_string (& list , "d" , 1 );
482+
483+ t_string_list_clear (& list , 0 );
484+ }
485+
486+ static void t_string_list_unsorted_string_list_delete_item (
487+ struct string_list * expected_list ,
488+ struct string_list * list ,
489+ int i )
490+ {
491+ unsorted_string_list_delete_item (list , i , 0 );
492+
493+ t_string_list_equal (list , expected_list );
494+ }
495+
496+ void test_string_list__unsorted_string_list_delete_item (void )
497+ {
498+ struct string_list expected_strings = STRING_LIST_INIT_DUP ;
499+ struct string_list list = STRING_LIST_INIT_DUP ;
500+
501+ t_create_string_list_dup (& expected_strings , 0 , "a" , "c" , "b" , NULL );
502+ t_create_string_list_dup (& list , 0 , "a" , "d" , "b" , "c" , NULL );
503+ t_string_list_unsorted_string_list_delete_item (& expected_strings , & list , 1 );
504+
505+ t_create_string_list_dup (& expected_strings , 0 , NULL );
506+ t_create_string_list_dup (& list , 0 , "" , NULL );
507+ t_string_list_unsorted_string_list_delete_item (& expected_strings , & list , 0 );
508+
509+ t_create_string_list_dup (& expected_strings , 0 , "a" , "d" , "c" , "b" , NULL );
510+ t_create_string_list_dup (& list , 0 , "a" , "d" , "c" , "b" , "d" , NULL );
511+ t_string_list_unsorted_string_list_delete_item (& expected_strings , & list , 4 );
512+
513+ t_string_list_clear (& expected_strings , 0 );
514+ t_string_list_clear (& list , 0 );
515+ }
0 commit comments