program demo_swap
use M_sort, only : swap
integer :: iarray(2)=[10,20]
real :: rarray(2)=[11.11,22.22]
doubleprecision :: darray(2)=[1234.56789d0,9876.54321d0]
complex :: carray(2)=[(1234,56789),(9876,54321)]
logical :: larray(2)=[.true.,.false.]
character(len=16) :: string(2)=["First string ","The other string"]
integer :: one(13)=1
integer :: two(13)=2
integer :: one2(3,3)=1
integer :: two2(3,3)=2
print *, "integers before swap", iarray
call swap (iarray(1), iarray(2))
print *, "integers after swap ", iarray
print *, "reals before swap", rarray
call swap (rarray(1), rarray(2))
print *, "reals after swap ", rarray
print *, "doubles before swap", darray
call swap (darray(1), darray(2))
print *, "doubles after swap ", darray
print *, "complexes before swap", carray
call swap (carray(1), carray(2))
print *, "complexes after swap ", carray
print *, "logicals before swap", larray
call swap (larray(1), larray(2))
print *, "logicals after swap ", larray
print *, "strings before swap", string
call swap (string(1), string(2))
print *, "strings after swap ", string
write(*,*)'swap two vectors'
write(*,'("one before: ",*(i0,:","))') one
write(*,'("two before: ",*(i0,:","))') two
call swap(one,two)
write(*,'("one after: ",*(i0,:","))') one
write(*,'("two after: ",*(i0,:","))') two
write(*,*)'given these arrays initially each time '
one2=1
two2=2
call printarrays()
write(*,*)'swap two rows'
one2=1
two2=2
call swap(one2(2,:),two2(3,:))
call printarrays()
write(*,*)'swap two columns'
one2=1
two2=2
call swap(one2(:,2),two2(:,2))
call printarrays()
write(*,*)'swap two arrays with same number of elements'
one2=1
two2=2
call swap(one2,two2)
call printarrays()
contains
subroutine printarrays()
integer :: i
do i=1,size(one2(1,:))
write(*,'(*(i0,:","))') one2(i,:)
enddo
write(*,*)
do i=1,size(two2(1,:))
write(*,'(*(i0,:","))') two2(i,:)
enddo
end subroutine printarrays
end program demo_swap