test_strict Program

@(#) unnamed to numbers The default for inums, rnums, … is to convert all unnamed argument values in “unnamed”


Contents

Source Code


Variables

Type Attributes Name Initial
logical, parameter :: F = .false.
logical, parameter :: T = .true.
logical, allocatable :: arr(:)
character(len=*), parameter :: it = '(1x,*(g0,1x))'
character(len=:), allocatable :: whichone

Subroutines

subroutine runit(string)

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: string

subroutine testit(string, test)

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: string
logical, intent(in) :: test

Source Code

program test_strict
!> @(#) unnamed to numbers
!! The default for inums, rnums, ... is to convert all unnamed argument values in "unnamed"
use, intrinsic :: iso_fortran_env, only : stderr=>ERROR_UNIT, stdin=>INPUT_UNIT, stdout=>OUTPUT_UNIT
use M_CLI2,  only : set_args, sget, igets, rgets, dgets, lget, set_mode
implicit none
character(len=*),parameter :: it='(1x,*(g0,1x))'
logical,parameter :: T=.true., F=.false.
character(len=:),allocatable :: whichone
logical,allocatable :: arr(:)
   call set_mode('strict')
   call set_args(' --type run -o F -t F -x F --ox F --xo F --longa:O F --longb:X F')
   whichone=sget('type')
   arr=[lget('o'),lget('t'),lget('x'),lget('ox'),lget('xo'),lget('longa'),lget('longb')]
   select case(whichone)
   case('one')   ; call testit(whichone,.not.any(arr))
   case('two')   ; call testit(whichone,  all(arr))
   case('three') ; call testit(whichone,all(arr.eqv.[T,T,T,F,F,F,F]))
   case('four')  ; call testit(whichone,all(arr.eqv.[F,F,F,T,T,F,F]))
   case('five')  ; call testit(whichone,all(arr.eqv.[T,T,T,F,F,F,F]))
   case('six')   ; call testit(whichone,  all(arr))
   case('run')
      print *,'test_strict: strict mode'
      call runit('--type one ')
      call runit('--type two -ox -t --ox --xo -OX')
      call runit('--type three -tox ')
      call runit('--type four --ox --xo')
      call runit('--type five -t -o -x ')
      call runit('--type six -ox -t --ox --xo --longa --longb')
   case default
      print it,'unknown type'
   end select
contains

subroutine testit(string,test)
character(len=*),intent(in) :: string
logical,intent(in) :: test

   write(*,it,advance='no')arr
   if(test)then
      print it,':strict:',string,'passed'
   else
      print it,':strict:',string,'failed'
      stop 1
   endif

end subroutine testit

subroutine runit(string)
character(len=*),intent(in) :: string
character(len=4096) :: cmd
   call get_command_argument(0,cmd)
   write(stdout,*)'RUN:',trim(cmd)//' '//string
   call execute_command_line(trim(cmd)//' '//string)
end subroutine runit

end program test_strict