@@ -4,7 +4,7 @@ module test_string_functions
44 use stdlib_error, only : check
55 use stdlib_string_type, only : string_type, assignment (= ), operator (==), &
66 to_lower, to_upper, to_title, to_sentence, reverse
7- use stdlib_strings, only: slice, find, replace_all
7+ use stdlib_strings, only: slice, find, replace_all, count
88 use stdlib_optval, only: optval
99 use stdlib_ascii, only : to_string
1010 implicit none
@@ -378,6 +378,49 @@ subroutine test_replace_all
378378
379379 end subroutine test_replace_all
380380
381+ subroutine test_count
382+ type (string_type) :: test_string_1, test_string_2, test_pattern_1, test_pattern_2
383+ test_string_1 = " DNA sequence: AGAGAGAGTCCTGTCGAGA"
384+ test_string_2 = " DNA sequence: GTCCTGTCCTGTCAGA"
385+ test_pattern_1 = " AGA"
386+ test_pattern_2 = " GTCCTGTC"
387+
388+ ! all 2 as string_type
389+ call check(all (count ([test_string_1, test_string_2], test_pattern_1) == [4 , 1 ]), &
390+ & ' count: all 2 as string_type, test case 1' )
391+ call check(all (count (test_string_1, [test_pattern_1, test_pattern_2], .false. ) == [3 , 1 ]), &
392+ & ' count: all 2 as string_type, test case 2' )
393+ call check(count (test_string_2, test_pattern_1, .false. ) == 1 , &
394+ & ' count: all 2 as string_type, test case 3' )
395+ call check(all (count ([test_string_2, test_string_2, test_string_1], [test_pattern_2, &
396+ & test_pattern_2, test_pattern_1], [.true. , .false. , .false. ]) == [2 , 1 , 3 ]), &
397+ & ' count: all 2 as string_type, test case 4' )
398+ call check(all (count ([[test_string_1, test_string_2], [test_string_1, test_string_2]], [[test_pattern_1, &
399+ & test_pattern_2], [test_pattern_2, test_pattern_1]], .true. ) == [[4 , 2 ], [1 , 1 ]]), &
400+ & ' count: all 2 as string_type, test case 5' )
401+
402+ ! 1 string_type and 1 character scalar
403+ call check(all (count (test_string_1, [" AGA" , " GTC" ], [.true. , .false. ]) == [4 , 2 ]), &
404+ & ' count: 1 string_type and 1 character scalar, test case 1' )
405+ call check(all (count ([test_string_1, test_string_2], [" CTC" , " GTC" ], [.true. , .false. ]) &
406+ & == [0 , 3 ]), ' count: 1 string_type and 1 character scalar, test case 2' )
407+ call check(all (count ([" AGAGAGAGTCCTGTCGAGA" , " AGAGAGAGTCCTGTCGAGA" ], test_pattern_1, &
408+ & [.false. , .true. ]) == [3 , 4 ]), &
409+ & ' count: 1 string_type and 1 character scalar, test case 3' )
410+ call check(count (test_string_1, " GAG" ) == 4 , &
411+ & ' count: 1 string_type and 1 character scalar, test case 4' )
412+ call check(count (" DNA sequence: GTCCTGTCCTGTCAGA" , test_pattern_2, .false. ) == 1 , &
413+ & ' count: 1 string_type and 1 character scalar, test case 5' )
414+
415+ ! all 2 character scalar
416+ call check(all (count (" " , [" mango" , " trees" ], .true. ) == [0 , 0 ]), &
417+ & ' count: all 2 character scalar, test case 1' )
418+ call check(count (" " , " " , .true. ) == 0 , ' count: all 2 character scalar, test case 2' )
419+ call check(all (count ([" mango" , " trees" ], " " , .true. ) == [0 , 0 ]), &
420+ & ' count: all 2 character scalar, test case 3' )
421+
422+ end subroutine test_count
423+
381424end module test_string_functions
382425
383426
@@ -394,5 +437,6 @@ program tester
394437 call test_slice_gen
395438 call test_find
396439 call test_replace_all
440+ call test_count
397441
398442end program tester
0 commit comments