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