test_uniinv Subroutine

subroutine test_uniinv()

Arguments

None

Contents

Source Code


Variables

Type Visibility Attributes Name Initial
integer, public :: i
integer, public, allocatable :: igoest(:)
integer, public :: imx
integer, public, allocatable :: out(:)
integer, public, allocatable :: xdont(:)

Source Code

subroutine test_uniinv()
integer,allocatable :: xdont(:)
integer,allocatable :: igoest(:)
integer,allocatable :: out(:)
integer :: imx
integer :: i
   xdont=[10,20,30,10,20,30,10,20,30]
   if(allocated(igoest))deallocate(igoest)
   allocate(igoest(size(xdont)))

   call uniinv(xdont,igoest)

   call unit_check('uniinv',all(igoest .eq.  [ 1,2,3,1,2,3,1,2,3 ]) ,'returned indices')
   imx=maxval(igoest)
   call unit_check('unista',imx.eq.3,'unique indices. got',imx,'expected',3)
   if(allocated(out))deallocate(out)
   allocate(out(imx))
   do i=1,imx
           out(igoest(i))=xdont(i)
   enddo
   call unit_check('uniinv',all(out .eq.  [ 10,20,30 ]) ,'sorted unique values')
   call unit_check_done('uniinv',msg='test completed')
end subroutine test_uniinv