autotest Subroutine

public subroutine autotest()

Arguments

None

Description

Procedure for autotesting the library functionalities.

Calls

proc~~autotest~~CallsGraph proc~autotest autotest proc~b64_init b64_init proc~autotest->proc~b64_init interface~b64_decode b64_decode proc~autotest->interface~b64_decode interface~str str proc~autotest->interface~str interface~b64_encode b64_encode proc~autotest->interface~b64_encode proc~b64_decode_i2 b64_decode_I2 interface~b64_decode->proc~b64_decode_i2 proc~b64_decode_string b64_decode_string interface~b64_decode->proc~b64_decode_string proc~b64_decode_i1_a b64_decode_I1_a interface~b64_decode->proc~b64_decode_i1_a proc~b64_decode_i4 b64_decode_I4 interface~b64_decode->proc~b64_decode_i4 proc~b64_decode_i4_a b64_decode_I4_a interface~b64_decode->proc~b64_decode_i4_a proc~b64_decode_i8 b64_decode_I8 interface~b64_decode->proc~b64_decode_i8 proc~b64_decode_string_a b64_decode_string_a interface~b64_decode->proc~b64_decode_string_a proc~b64_decode_r4 b64_decode_R4 interface~b64_decode->proc~b64_decode_r4 proc~b64_decode_r4_a b64_decode_R4_a interface~b64_decode->proc~b64_decode_r4_a proc~b64_decode_r8 b64_decode_R8 interface~b64_decode->proc~b64_decode_r8 proc~b64_decode_r8_a b64_decode_R8_a interface~b64_decode->proc~b64_decode_r8_a proc~b64_decode_i8_a b64_decode_I8_a interface~b64_decode->proc~b64_decode_i8_a proc~b64_decode_i2_a b64_decode_I2_a interface~b64_decode->proc~b64_decode_i2_a proc~b64_decode_i1 b64_decode_I1 interface~b64_decode->proc~b64_decode_i1 proc~strf_i1p strf_I1P interface~str->proc~strf_i1p proc~str_r4p str_R4P interface~str->proc~str_r4p proc~str_a_i1p str_a_I1P interface~str->proc~str_a_i1p proc~str_i8p str_I8P interface~str->proc~str_i8p proc~str_i2p str_I2P interface~str->proc~str_i2p proc~strf_i2p strf_I2P interface~str->proc~strf_i2p proc~str_i1p str_I1P interface~str->proc~str_i1p proc~str_a_r8p str_a_R8P interface~str->proc~str_a_r8p proc~strf_i4p strf_I4P interface~str->proc~strf_i4p proc~str_i4p str_I4P interface~str->proc~str_i4p proc~strf_i8p strf_I8P interface~str->proc~strf_i8p proc~str_a_i2p str_a_I2P interface~str->proc~str_a_i2p proc~str_a_i4p str_a_I4P interface~str->proc~str_a_i4p proc~strf_r4p strf_R4P interface~str->proc~strf_r4p proc~strf_r8p strf_R8P interface~str->proc~strf_r8p proc~str_a_r4p str_a_R4P interface~str->proc~str_a_r4p proc~str_a_i8p str_a_I8P interface~str->proc~str_a_i8p proc~str_r8p str_R8P interface~str->proc~str_r8p proc~str_bol str_bol interface~str->proc~str_bol proc~b64_encode_i8 b64_encode_I8 interface~b64_encode->proc~b64_encode_i8 proc~b64_encode_r4_a b64_encode_R4_a interface~b64_encode->proc~b64_encode_r4_a proc~b64_encode_i1_a b64_encode_I1_a interface~b64_encode->proc~b64_encode_i1_a proc~b64_encode_r8_a b64_encode_R8_a interface~b64_encode->proc~b64_encode_r8_a proc~b64_encode_r8 b64_encode_R8 interface~b64_encode->proc~b64_encode_r8 proc~b64_encode_i4 b64_encode_I4 interface~b64_encode->proc~b64_encode_i4 proc~b64_encode_i4_a b64_encode_I4_a interface~b64_encode->proc~b64_encode_i4_a proc~b64_encode_i2_a b64_encode_I2_a interface~b64_encode->proc~b64_encode_i2_a proc~b64_encode_i1 b64_encode_I1 interface~b64_encode->proc~b64_encode_i1 proc~b64_encode_i8_a b64_encode_I8_a interface~b64_encode->proc~b64_encode_i8_a proc~b64_encode_i2 b64_encode_I2 interface~b64_encode->proc~b64_encode_i2 proc~b64_encode_string b64_encode_string interface~b64_encode->proc~b64_encode_string proc~b64_encode_string_a b64_encode_string_a interface~b64_encode->proc~b64_encode_string_a proc~b64_encode_r4 b64_encode_R4 interface~b64_encode->proc~b64_encode_r4 proc~decode_bits decode_bits proc~b64_decode_i2->proc~decode_bits proc~b64_decode_string->proc~decode_bits interface~byte_size byte_size proc~b64_decode_string->interface~byte_size proc~b64_decode_i1_a->proc~decode_bits proc~b64_decode_i4->proc~decode_bits proc~b64_decode_i4_a->proc~decode_bits proc~b64_decode_i8->proc~decode_bits proc~b64_decode_string_a->proc~decode_bits proc~b64_decode_string_a->interface~byte_size proc~b64_decode_r4->proc~decode_bits proc~b64_decode_r4_a->proc~decode_bits proc~b64_decode_r8->proc~decode_bits proc~b64_decode_r8_a->proc~decode_bits proc~b64_decode_i8_a->proc~decode_bits proc~b64_decode_i2_a->proc~decode_bits proc~b64_decode_i1->proc~decode_bits proc~byte_size_i8p byte_size_I8P interface~byte_size->proc~byte_size_i8p proc~byte_size_i4p byte_size_I4P interface~byte_size->proc~byte_size_i4p proc~byte_size_chr byte_size_chr interface~byte_size->proc~byte_size_chr proc~byte_size_r4p byte_size_R4P interface~byte_size->proc~byte_size_r4p proc~byte_size_r8p byte_size_R8P interface~byte_size->proc~byte_size_r8p proc~byte_size_i2p byte_size_I2P interface~byte_size->proc~byte_size_i2p proc~byte_size_i1p byte_size_I1P interface~byte_size->proc~byte_size_i1p proc~compact_real_string compact_real_string proc~str_r4p->proc~compact_real_string proc~str_a_i1p->proc~str_i1p proc~str_a_r8p->proc~str_r8p proc~str_a_i2p->proc~str_i2p proc~str_a_i4p->proc~str_i4p proc~str_a_r4p->proc~str_r4p proc~str_a_i8p->proc~str_i8p proc~str_r8p->proc~compact_real_string proc~encode_bits encode_bits proc~b64_encode_i8->proc~encode_bits proc~b64_encode_r4_a->proc~encode_bits proc~b64_encode_i1_a->proc~encode_bits proc~b64_encode_r8_a->proc~encode_bits proc~b64_encode_r8->proc~encode_bits proc~b64_encode_i4->proc~encode_bits proc~b64_encode_i4_a->proc~encode_bits proc~b64_encode_i2_a->proc~encode_bits proc~b64_encode_i1->proc~encode_bits proc~b64_encode_i8_a->proc~encode_bits proc~b64_encode_i2->proc~encode_bits proc~b64_encode_string->interface~byte_size proc~b64_encode_string->proc~encode_bits proc~b64_encode_string_a->interface~byte_size proc~b64_encode_string_a->proc~encode_bits proc~b64_encode_r4->proc~encode_bits
Help

Variables

TypeVisibility AttributesNameInitial
character(len=:), public, allocatable:: code64

Base64 code.

logical, public :: ok

Flag for checking the result of encoding/decoding.

real(kind=R8P), public :: scalar_R8

Decoded scalar.

real(kind=R4P), public :: scalar_R4

Decoded scalar.

integer(kind=I8P), public :: scalar_I8

Decoded scalar.

integer(kind=I4P), public :: scalar_I4

Decoded scalar.

integer(kind=I2P), public :: scalar_I2

Decoded scalar.

integer(kind=I1P), public :: scalar_I1

Decoded scalar.

real(kind=R8P), public :: array_R8(1:2)

Decoded array.

real(kind=R4P), public :: array_R4(1:2)

Decoded array.

integer(kind=I8P), public :: array_I8(1:4)

Decoded array.

integer(kind=I4P), public :: array_I4(1:2)

Decoded array.

integer(kind=I2P), public :: array_I2(1:2)

Decoded array.

integer(kind=I1P), public :: array_I1(1:2)

Decoded array.

character(len=5), public :: array_s(1:2)

Decoded array.


Source Code

  subroutine autotest()
  !---------------------------------------------------------------------------------------------------------------------------------
  !< Procedure for autotesting the library functionalities.
  !<
  !< @note Into the *src* directory there is a small python script (*validation.py*) that can be used to validate the library
  !< correctness by a comparison with other widely used tools such as the python builtin module *struct*.
  !---------------------------------------------------------------------------------------------------------------------------------
  character(len=:), allocatable :: code64        !< Base64 code.
  logical                       :: ok            !< Flag for checking the result of encoding/decoding.
#ifdef r16p
  real(R16P)                    :: scalar_R16    !< Decoded scalar.
#endif
  real(R8P)                     :: scalar_R8     !< Decoded scalar.
  real(R4P)                     :: scalar_R4     !< Decoded scalar.
  integer(I8P)                  :: scalar_I8     !< Decoded scalar.
  integer(I4P)                  :: scalar_I4     !< Decoded scalar.
  integer(I2P)                  :: scalar_I2     !< Decoded scalar.
  integer(I1P)                  :: scalar_I1     !< Decoded scalar.
  real(R8P)                     :: array_R8(1:2) !< Decoded array.
  real(R4P)                     :: array_R4(1:2) !< Decoded array.
  integer(I8P)                  :: array_I8(1:4) !< Decoded array.
  integer(I4P)                  :: array_I4(1:2) !< Decoded array.
  integer(I2P)                  :: array_I2(1:2) !< Decoded array.
  integer(I1P)                  :: array_I1(1:2) !< Decoded array.
  character(5)                  :: array_s(1:2)  !< Decoded array.
  !---------------------------------------------------------------------------------------------------------------------------------

  !---------------------------------------------------------------------------------------------------------------------------------
  call b64_Init

  print "(A)", 'Encoders'

  print "(A)", 'Scalars'

#ifdef r16p
  call b64_encode(n=134.231_R16P,code=code64)
  ok = code64=='CKwcWmTHYEA='
  print "(A)", '+ Code of '//trim(str(n=134.231_R16P))//': "'//code64//'"'
  print "(A,1X,L1)", '  Expected code: "'//'CKwcWmTHYEA='//'", Is it correct?',ok
  if (.not.ok) stop
#endif

  call b64_encode(n=1._R8P,code=code64)
  ok = code64=='AAAAAAAA8D8='
  print "(A)", '+ Code of '//trim(str(n=1._R8P))//': "'//code64//'"'
  print "(A,1X,L1)", '  Expected code: "'//'AAAAAAAA8D8='//'", Is it correct?',ok
  if (.not.ok) stop

  call b64_encode(n=0._R4P,code=code64)
  ok = code64=='AAAAAA=='
  print "(A)", '+ Code of '//trim(str(n=0._R4P))//': "'//code64//'"'
  print "(A,1X,L1)", '  Expected code: "'//'AAAAAA=='//'", Is it correct?',ok
  if (.not.ok) stop

  call b64_encode(n=23_I8P,code=code64)
  ok = code64=='FwAAAAAAAAA='
  print "(A)", '+ Code of '//trim(str(n=23_I8P))//': "'//code64//'"'
  print "(A,1X,L1)", '  Expected code: "'//'FwAAAAAAAAA='//'", Is it correct?',ok
  if (.not.ok) stop

  call b64_encode(n=2023_I4P,code=code64)
  ok = code64=='5wcAAA=='
  print "(A)", '+ Code of '//trim(str(n=2023_I4P))//': "'//code64//'"'
  print "(A,1X,L1)", '  Expected code: "'//'5wcAAA=='//'", Is it correct?',ok
  if (.not.ok) stop

  call b64_encode(n=-203_I2P,code=code64)
  ok = code64=='Nf8='
  print "(A)", '+ Code of '//trim(str(n=-203_I2P))//': "'//code64//'"'
  print "(A,1X,L1)", '  Expected code: "'//'Nf8='//'", Is it correct?',ok
  if (.not.ok) stop

  call b64_encode(n=120_I1P,code=code64)
  ok = code64=='eA=='
  print "(A)", '+ Code of '//trim(str(n=120_I1P))//': "'//code64//'"'
  print "(A,1X,L1)", '  Expected code: "'//'eA=='//'", Is it correct?',ok
  if (.not.ok) stop

  call b64_encode(s='hello',code=code64)
  ok = code64=='aGVsbG8='
  print "(A)", '+ Code of hello: "'//code64//'"'
  print "(A,1X,L1)", '  Expected code: "'//'aGVsbG8='//'", Is it correct?',ok
  if (.not.ok) stop

  print "(A)", 'Arrays'

#ifdef r16p
  call b64_encode(n=[121._R16P,2.32_R16P],code=code64)
  ok = code64=='AAAAAABAXkCPwvUoXI8CQA=='
  print "(A)", '+ Code of '//trim(str(n=[121._R16P,2.32_R16P], delimiters=['[',']']))//': "'//code64//'"'
  print "(A,1X,L1)", '  Expected code: "'//'AAAAAABAXkCPwvUoXI8CQA=='//'", Is it correct?',ok
  if (.not.ok) stop
#endif

  call b64_encode(n=[1._R8P,2._R8P],code=code64)
  ok = code64=='AAAAAAAA8D8AAAAAAAAAQA=='
  print "(A)", '+ Code of '//trim(str(n=[1._R8P,2._R8P], delimiters=['[',']']))//': "'//code64//'"'
  print "(A,1X,L1)", '  Expected code: "'//'AAAAAAAA8D8AAAAAAAAAQA=='//'", Is it correct?',ok
  if (.not.ok) stop

  call b64_encode(n=[0._R4P,-32.12_R4P],code=code64)
  ok = code64=='AAAAAOF6AMI='
  print "(A)", '+ Code of '//trim(str(n=[0._R4P,-32.12_R4P], delimiters=['[',']']))//': "'//code64//'"'
  print "(A,1X,L1)", '  Expected code: "'//'AAAAAOF6AMI='//'", Is it correct?',ok
  if (.not.ok) stop

  call b64_encode(n=[23_I8P,324_I8P,25456656_I8P,2_I8P],code=code64)
  ok = code64=='FwAAAAAAAABEAQAAAAAAABBwhAEAAAAAAgAAAAAAAAA='
  print "(A)", '+ Code of '//trim(str(n=[23_I8P,324_I8P,25456656_I8P,2_I8P], delimiters=['[',']']))//': "'//code64//'"'
  print "(A,1X,L1)", '  Expected code: "'//'FwAAAAAAAABEAQAAAAAAABBwhAEAAAAAAgAAAAAAAAA='//'", Is it correct?',ok
  if (.not.ok) stop

  call b64_encode(n=[2023_I4P,-24_I4P],code=code64)
  ok = code64=='5wcAAOj///8='
  print "(A)", '+ Code of '//trim(str(n=[2023_I4P,-24_I4P], delimiters=['[',']']))//': "'//code64//'"'
  print "(A,1X,L1)", '  Expected code: "'//'5wcAAOj///8='//'", Is it correct?',ok
  if (.not.ok) stop

  call b64_encode(n=[-203_I2P,-10_I2P],code=code64)
  ok = code64=='Nf/2/w=='
  print "(A)", '+ Code of '//trim(str(n=[-203_I2P,-10_I2P], delimiters=['[',']']))//': "'//code64//'"'
  print "(A,1X,L1)", '  Expected code: "'//'Nf/2/w=='//'", Is it correct?',ok
  if (.not.ok) stop

  call b64_encode(n=[120_I1P,-1_I1P],code=code64)
  ok = code64=='eP8='
  print "(A)", '+ Code of '//trim(str(n=[120_I1P,-1_I1P], delimiters=['[',']']))//': "'//code64//'"'
  print "(A,1X,L1)", '  Expected code: "'//'eP8='//'", Is it correct?',ok
  if (.not.ok) stop

  call b64_encode(s=['hello','world'],code=code64)
  ok = code64=='aGVsbG93b3JsZA=='
  print "(A)", '+ Code of [hello,world]: "'//code64//'"'
  print "(A,1X,L1)", '  Expected code: "'//'aGVsbG93b3JsZA=='//'", Is it correct?',ok
  if (.not.ok) stop

  print "(A)", 'Decoders'

  print "(A)", 'Scalars'

  call b64_decode(code='AAAAAAAA8D8=',n=scalar_R8)
  ok = str(n=scalar_R8)==str(n=1._R8P)
  print "(A)", '+ Decode of '//'AAAAAAAA8D8='//': "'//trim(str(n=scalar_R8))//'"'
  print "(A,1X,L1)", '  Expected value: "'//trim(str(n=1._R8P))//'", Is it correct?',ok
  if (.not.ok) stop

  call b64_decode(code='AAAAAA==',n=scalar_R4)
  ok = str(n=scalar_R4)==str(n=0._R4P)
  print "(A)", '+ Decode of '//'AAAAAA=='//': "'//trim(str(n=scalar_R4))//'"'
  print "(A,1X,L1)", '  Expected value: "'//trim(str(n=0._R4P))//'", Is it correct?',ok
  if (.not.ok) stop

  call b64_decode(code='FwAAAAAAAAA=',n=scalar_I8)
  ok = str(n=scalar_I8)==str(n=23_I8P)
  print "(A)", '+ Decode of '//'FwAAAAAAAAA='//': "'//trim(str(n=scalar_I8))//'"'
  print "(A,1X,L1)", '  Expected value: "'//trim(str(n=23_I8P))//'", Is it correct?',ok
  if (.not.ok) stop

  call b64_decode(code='5wcAAA==',n=scalar_I4)
  ok = str(n=scalar_I4)==str(n=2023_I4P)
  print "(A)", '+ Decode of '//'5wcAAA=='//': "'//trim(str(n=scalar_I4))//'"'
  print "(A,1X,L1)", '  Expected value: "'//trim(str(n=2023_I4P))//'", Is it correct?',ok
  if (.not.ok) stop

  call b64_decode(code='Nf8=',n=scalar_I2)
  ok = str(n=scalar_I2)==str(n=-203_I2P)
  print "(A)", '+ Decode of '//'Nf8='//': "'//trim(str(n=scalar_I2))//'"'
  print "(A,1X,L1)", '  Expected value: "'//trim(str(n=-203_I2P))//'", Is it correct?',ok
  if (.not.ok) stop

  call b64_decode(code='eA==',n=scalar_I1)
  ok = str(n=scalar_I1)==str(n=120_I1P)
  print "(A)", '+ Decode of '//'eA=='//': "'//trim(str(n=scalar_I1))//'"'
  print "(A,1X,L1)", '  Expected value: "'//trim(str(n=120_I1P))//'", Is it correct?',ok
  if (.not.ok) stop

  code64 = repeat(' ',5)
  call b64_decode(code='aGVsbG8=',s=code64)
  ok = 'hello'==code64
  print "(A)", '+ Decode of '//'aGVsbG8='//': "'//code64//'"'
  print "(A,1X,L1)", '  Expected value: "hello", Is it correct?',ok
  if (.not.ok) stop

  print "(A)", 'Arrays'

  call b64_decode(code='AAAAAAAA8D8AAAAAAAAAQA==',n=array_R8)
  ok = str(n=array_R8)==str(n=[1._R8P,2._R8P])
  print "(A)", '+ Decode of '//'AAAAAAAA8D8AAAAAAAAAQA=='//': "'//trim(str(n=array_R8, delimiters=['[',']']))//'"'
  print "(A,1X,L1)", '  Expected value: "'//trim(str(n=[1._R8P,2._R8P], delimiters=['[',']']))//'", Is it correct?',ok
  if (.not.ok) stop

  call b64_decode(code='AAAAAOF6AMI=',n=array_R4)
  ok = str(n=array_R4)==str(n=[0._R4P,-32.12_R4P])
  print "(A)", '+ Decode of '//'AAAAAOF6AMI='//': "'//trim(str(n=array_R4, delimiters=['[',']']))//'"'
  print "(A,1X,L1)", '  Expected value: "'//trim(str(n=[0._R4P,-32.12_R4P], delimiters=['[',']']))//'", Is it correct?',ok
  if (.not.ok) stop

  ! ok = test_decode_array(code=, input=) ; if (.not.ok) stop
  call b64_decode(code='FwAAAAAAAABEAQAAAAAAABBwhAEAAAAAAgAAAAAAAAA=',n=array_I8)
  ok = str(n=array_I8)==str(n=[23_I8P,324_I8P,25456656_I8P,2_I8P])
  print "(A)", '+ Decode of '//'FwAAAAAAAABEAQAAAAAAABBwhAEAAAAAAgAAAAAAAAA='//': "'//&
    trim(str(n=array_I8, delimiters=['[',']']))//'"'
  print "(A,1X,L1)", '  Expected value: "'//trim(str(n=[23_I8P,324_I8P,25456656_I8P,2_I8P], delimiters=['[',']']))//&
    '", Is it correct?',ok
  if (.not.ok) stop

  call b64_decode(code='5wcAAOj///8=',n=array_I4)
  ok = str(n=array_I4)==str(n=[2023_I4P,-24_I4P])
  print "(A)", '+ Decode of '//'5wcAAOj///8='//': "'//trim(str(n=array_I4, delimiters=['[',']']))//'"'
  print "(A,1X,L1)", '  Expected value: "'//trim(str(n=[2023_I4P,-24_I4P], delimiters=['[',']']))//'", Is it correct?',ok
  if (.not.ok) stop

  call b64_decode(code='Nf/2/w==',n=array_I2)
  ok = str(n=array_I2)==str(n=[-203_I2P,-10_I2P])
  print "(A)", '+ Decode of '//'Nf/2/w=='//': "'//trim(str(n=array_I2, delimiters=['[',']']))//'"'
  print "(A,1X,L1)", '  Expected value: "'//trim(str(n=[-203_I2P,-10_I2P], delimiters=['[',']']))//'", Is it correct?',ok
  if (.not.ok) stop

  call b64_decode(code='eP8=',n=array_I1)
  ok = str(n=array_I1)==str(n=[120_I1P,-1_I1P])
  print "(A)", '+ Decode of '//'eP8='//': "'//trim(str(n=array_I1, delimiters=['[',']']))//'"'
  print "(A,1X,L1)", '  Expected value: "'//trim(str(n=[120_I1P,-1_I1P], delimiters=['[',']']))//'", Is it correct?',ok
  if (.not.ok) stop

  call b64_decode(code='aGVsbG93b3JsZA==',s=array_s)
  ok = array_s(1)//array_s(2)=='helloworld'
  print "(A)", '+ Decode of '//'aGVsbG93b3JsZA=='//': "'//array_s(1)//array_s(2)//'"'
  print "(A,1X,L1)", '  Expected value: "helloworld", Is it correct?',ok
  if (.not.ok) stop
  return
  !---------------------------------------------------------------------------------------------------------------------------------
  endsubroutine autotest