File: array_04_transfer.f90

package info (click to toggle)
lfortran 0.58.0-3
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 54,508 kB
  • sloc: cpp: 162,179; f90: 68,251; python: 17,476; ansic: 6,278; yacc: 2,334; sh: 1,317; fortran: 892; makefile: 34; javascript: 15
file content (36 lines) | stat: -rw-r--r-- 1,582 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
module array_04_transfer_mod
    use, intrinsic :: iso_fortran_env, only: int32, int64, real32, int8
    implicit none
    integer(int32), parameter :: sc_constsub = int(z'deadbeef', int32)
    integer(int32), parameter :: int32_arr(2) = [sc_constsub, sc_constsub]
    real(real32),  parameter :: real32_arr(2) = [real(1.23, real32), real(4.56, real32)]
    integer(int64), parameter :: int32_int64 = transfer(int32_arr, 0_int64)
    integer(int64), parameter :: real32_int64 = transfer(real32_arr, 0_int64)
    integer(int64), parameter :: real32_int32 = transfer(real32_arr, 0_int32)
end module
program array_04_transfer
    use array_04_transfer_mod
    implicit none
    real :: value(5) = [1.1, 1.2, 1.3, 1.4, 1.5]
    integer(int8) :: key(16) = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]
    integer :: val(5)
    val = transfer(value, val, 1 * size(value))
    print * , val
    if (all(val /= [1066192077, 1067030938, 1067869798, 1068708659, 1069547520])) error stop
    if (real32_int32 /= 1067282596) error stop
    if (real32_int64 /= 4652758847580893348_8) error stop
    if (int32_int64 /= -2401053088876216593_8) error stop
    call test_sub(key)

contains 
    subroutine test_sub(key)
        integer(int64), save :: bend = 1 
        integer(int8), intent(in), target :: key(0:)
        integer(int64) :: buf(0:1)
        buf(0:2*bend-1) = transfer( key(0:16_8*bend-1_8), 0_int64, 2*bend )
        print *, buf
        !! TODO: fix incorrect bug value
        ! if (any(buf /= [578437695752307201_8, 1157159078456920585_8])) error stop
    end subroutine

end program