@@ -52,6 +52,7 @@ subroutine collect_ascii(testsuite)
5252 new_unittest(" to_lower_long" , test_to_lower_long), &
5353 new_unittest(" to_upper_short" , test_to_upper_short), &
5454 new_unittest(" to_upper_long" , test_to_upper_long), &
55+ new_unittest(" ascii_table" , test_ascii_table), &
5556 new_unittest(" to_upper_string" , test_to_upper_string), &
5657 new_unittest(" to_lower_string" , test_to_lower_string), &
5758 new_unittest(" to_title_string" , test_to_title_string), &
@@ -725,9 +726,9 @@ subroutine test_to_upper_long(error)
725726 ! This test reproduces the true/false table found at
726727 ! https://en.cppreference.com/w/cpp/string/byte
727728 !
728- subroutine test_ascii_table
729+ subroutine ascii_table (table )
730+ logical , intent (out ) :: table(15 ,12 )
729731 integer :: i, j
730- logical :: table(15 ,12 )
731732
732733 ! loop through functions
733734 do i = 1 , 12
@@ -780,6 +781,34 @@ elemental logical function validate(ascii_code, func)
780781 end select
781782 end function validate
782783
784+ end subroutine ascii_table
785+
786+ subroutine test_ascii_table (error )
787+ type (error_type), allocatable , intent (out ) :: error
788+ logical :: arr(15 , 12 )
789+ logical , parameter :: ascii_class_table(15 ,12 ) = transpose (reshape ([ &
790+ ! iscntrl isprint isspace isblank isgraph ispunct isalnum isalpha isupper islower isdigit isxdigit
791+ .true. , .false. , .false. , .false. , .false. , .false. , .false. , .false. , .false. , .false. , .false. , .false. , & ! 0–8
792+ .true. , .false. , .true. , .true. , .false. , .false. , .false. , .false. , .false. , .false. , .false. , .false. , & ! 9
793+ .true. , .false. , .true. , .false. , .false. , .false. , .false. , .false. , .false. , .false. , .false. , .false. , & ! 10–13
794+ .true. , .false. , .false. , .false. , .false. , .false. , .false. , .false. , .false. , .false. , .false. , .false. , & ! 14–31
795+ .false. , .true. , .true. , .true. , .false. , .false. , .false. , .false. , .false. , .false. , .false. , .false. , & ! 32 (space)
796+ .false. , .true. , .false. , .false. , .true. , .true. , .false. , .false. , .false. , .false. , .false. , .false. , & ! 33–47
797+ .false. , .true. , .false. , .false. , .true. , .false. , .true. , .false. , .false. , .false. , .true. , .true. , & ! 48–57
798+ .false. , .true. , .false. , .false. , .true. , .true. , .false. , .false. , .false. , .false. , .false. , .false. , & ! 58–64
799+ .false. , .true. , .false. , .false. , .true. , .false. , .true. , .true. , .true. , .false. , .false. , .true. , & ! 65–70
800+ .false. , .true. , .false. , .false. , .true. , .false. , .true. , .true. , .true. , .false. , .false. , .false. , & ! 71–90
801+ .false. , .true. , .false. , .false. , .true. , .true. , .false. , .false. , .false. , .false. , .false. , .false. , & ! 91–96
802+ .false. , .true. , .false. , .false. , .true. , .false. , .true. , .true. , .false. , .true. , .false. , .true. , & ! 97–102
803+ .false. , .true. , .false. , .false. , .true. , .false. , .true. , .true. , .false. , .true. , .false. , .false. , & ! 103–122
804+ .false. , .true. , .false. , .false. , .true. , .true. , .false. , .false. , .false. , .false. , .false. , .false. , & ! 123–126
805+ .true. , .false. , .false. , .false. , .false. , .false. , .false. , .false. , .false. , .false. , .false. , .false. & ! 127
806+ ], shape= [12 ,15 ]))
807+
808+ call ascii_table(arr)
809+ call check(error, all (arr .eqv. ascii_class_table), " ascii table was not accurately generated" )
810+
811+ if (allocated (error)) return
783812 end subroutine test_ascii_table
784813
785814 subroutine test_to_lower_string (error )
0 commit comments