@@ -721,6 +721,67 @@ subroutine test_to_upper_long(error)
721
721
end do
722
722
end subroutine
723
723
724
+ !
725
+ ! This test reproduces the true/false table found at
726
+ ! https://en.cppreference.com/w/cpp/string/byte
727
+ !
728
+ subroutine test_ascii_table
729
+ integer :: i, j
730
+ logical :: table(15 ,12 )
731
+
732
+ ! loop through functions
733
+ do i = 1 , 12
734
+ table(1 ,i) = all ([(validate(j,i), j= 0 ,8 )])
735
+ table(2 ,i) = validate(9 ,i)
736
+ table(3 ,i) = all ([(validate(j,i), j= 10 ,13 )])
737
+ table(4 ,i) = all ([(validate(j,i), j= 14 ,31 )])
738
+ table(5 ,i) = validate(32 ,i)
739
+ table(6 ,i) = all ([(validate(j,i), j= 33 ,47 )])
740
+ table(7 ,i) = all ([(validate(j,i), j= 48 ,57 )])
741
+ table(8 ,i) = all ([(validate(j,i), j= 58 ,64 )])
742
+ table(9 ,i) = all ([(validate(j,i), j= 65 ,70 )])
743
+ table(10 ,i) = all ([(validate(j,i), j= 71 ,90 )])
744
+ table(11 ,i) = all ([(validate(j,i), j= 91 ,96 )])
745
+ table(12 ,i) = all ([(validate(j,i), j= 97 ,102 )])
746
+ table(13 ,i) = all ([(validate(j,i), j= 103 ,122 )])
747
+ table(14 ,i) = all ([(validate(j,i), j= 123 ,126 )])
748
+ table(15 ,i) = validate(127 ,i)
749
+ end do
750
+
751
+ ! output table for verification
752
+ write (* ,' (5X,12(I4))' ) (i,i= 1 ,12 )
753
+ do j = 1 , 15
754
+ write (* ,' (I3,2X,12(L4),2X,I3)' ) j, (table(j,i),i= 1 ,12 ), count (table(j,:))
755
+ end do
756
+ write (* ,' (5X,12(I4))' ) (count (table(:,i)),i= 1 ,12 )
757
+
758
+ contains
759
+
760
+ elemental logical function validate(ascii_code, func)
761
+ integer , intent (in ) :: ascii_code, func
762
+ character (len= 1 ) :: c
763
+
764
+ c = achar (ascii_code)
765
+
766
+ select case (func)
767
+ case (1 ); validate = is_control(c)
768
+ case (2 ); validate = is_printable(c)
769
+ case (3 ); validate = is_white(c)
770
+ case (4 ); validate = is_blank(c)
771
+ case (5 ); validate = is_graphical(c)
772
+ case (6 ); validate = is_punctuation(c)
773
+ case (7 ); validate = is_alphanum(c)
774
+ case (8 ); validate = is_alpha(c)
775
+ case (9 ); validate = is_upper(c)
776
+ case (10 ); validate = is_lower(c)
777
+ case (11 ); validate = is_digit(c)
778
+ case (12 ); validate = is_hex_digit(c)
779
+ case default ; validate = .false.
780
+ end select
781
+ end function validate
782
+
783
+ end subroutine test_ascii_table
784
+
724
785
subroutine test_to_lower_string (error )
725
786
! > Error handling
726
787
type (error_type), allocatable , intent (out ) :: error
0 commit comments