| ! { dg-do run } |
| ! { dg-options "-funsigned" } |
| ! Test conversions from unsigned to different data types by |
| ! doing some I/O. |
| program main |
| implicit none |
| integer :: vi,i |
| integer, parameter :: n_int = 16, n_real = 8 |
| unsigned(kind=1) :: u1 |
| unsigned(kind=2) :: u2 |
| unsigned(kind=4) :: u4 |
| unsigned(kind=8) :: u8 |
| unsigned :: u |
| integer, dimension(n_int) :: ires |
| real(kind=8), dimension(n_real) :: rres |
| real(kind=8) :: vr |
| complex (kind=8) :: vc |
| data ires /11,12,14,18,21,22,24,28,41,42,44,48,81,82,84,88/ |
| data rres /14., 18., 24., 28., 44., 48., 84., 88./ |
| open (10,status="scratch") |
| |
| write (10,*) int(11u_1,1) |
| write (10,*) int(12u_1,2) |
| write (10,*) int(14u_1,4) |
| write (10,*) int(18u_1,8) |
| |
| write (10,*) int(21u_2,1) |
| write (10,*) int(22u_2,2) |
| write (10,*) int(24u_2,4) |
| write (10,*) int(28u_2,8) |
| |
| write (10,*) int(41u_4,1) |
| write (10,*) int(42u_4,2) |
| write (10,*) int(44u_4,4) |
| write (10,*) int(48u_4,8) |
| |
| write (10,*) int(81u_8,1) |
| write (10,*) int(82u_8,2) |
| write (10,*) int(84u_8,4) |
| write (10,*) int(88u_8,8) |
| |
| rewind 10 |
| do i=1,n_int |
| read (10,*) vi |
| if (vi /= ires(i)) error stop 1 |
| end do |
| |
| rewind 10 |
| u1 = 11u; write (10,*) int(u1,1) |
| u1 = 12u; write (10,*) int(u1,2) |
| u1 = 14u; write (10,*) int(u1,4) |
| u1 = 18u; write (10,*) int(u1,8) |
| |
| u2 = 21u; write (10,*) int(u2,1) |
| u2 = 22u; write (10,*) int(u2,2) |
| u2 = 24u; write (10,*) int(u2,4) |
| u2 = 28u; write (10,*) int(u2,8) |
| |
| u4 = 41u; write (10,*) int(u4,1) |
| u4 = 42u; write (10,*) int(u4,2) |
| u4 = 44u; write (10,*) int(u4,4) |
| u4 = 48u; write (10,*) int(u4,8) |
| |
| u8 = 81u; write (10,*) int(u8,1) |
| u8 = 82u; write (10,*) int(u8,2) |
| u8 = 84u; write (10,*) int(u8,4) |
| u8 = 88u; write (10,*) int(u8,8) |
| |
| rewind 10 |
| do i=1,n_int |
| read (10,*) vi |
| if (vi /= ires(i)) error stop 2 |
| end do |
| |
| rewind 10 |
| write (10,*) real(14u_1,4) |
| write (10,*) real(18u_1,8) |
| write (10,*) real(24u_2,4) |
| write (10,*) real(28u_2,8) |
| write (10,*) real(44u_4,4) |
| write (10,*) real(48u_4,8) |
| write (10,*) real(84u_8,4) |
| write (10,*) real(88u_8,8) |
| |
| rewind 10 |
| do i=1, n_real |
| read (10, *) vr |
| if (vr /= rres(i)) error stop 3 |
| end do |
| |
| rewind 10 |
| u1 = 14u_1; write (10,*) real(u1,4) |
| u1 = 18u_1; write (10,*) real(u1,8) |
| u2 = 24u_2; write (10,*) real(u2,4) |
| u2 = 28u_2; write (10,*) real(u2,8) |
| u4 = 44u_4; write (10,*) real(u4,4) |
| u4 = 48u_4; write (10,*) real(u4,8) |
| u8 = 84u_4; write (10,*) real(u8,4) |
| u8 = 88u_4; write (10,*) real(u8,8) |
| |
| rewind 10 |
| do i=1, n_real |
| read (10, *) vr |
| if (vr /= rres(i)) error stop 4 |
| end do |
| |
| rewind 10 |
| u1 = 14u_1; write (10,*) cmplx(14u_1,u1,kind=4) |
| u1 = 18u_1; write (10,*) cmplx(18u_1,u1,kind=8) |
| u2 = 24u_2; write (10,*) cmplx(24u_2,u2,kind=4) |
| u2 = 28u_2; write (10,*) cmplx(28u_2,u2,kind=8) |
| u4 = 44u_4; write (10,*) cmplx(44u_4,u4,kind=4) |
| u4 = 48u_8; write (10,*) cmplx(48u_4,u4,kind=8) |
| u8 = 84u_8; write (10,*) cmplx(84u_8,u8,kind=4) |
| u8 = 88u_8; write (10,*) cmplx(88u_8,u8,kind=8) |
| |
| rewind 10 |
| do i=1,n_real |
| read (10, *) vc |
| if (real(vc) /= rres(i)) error stop 5 |
| if (aimag(vc) /= rres(i)) error stop 6 |
| end do |
| end program main |