subroutine test_gen(name)
character(len=*),intent(in) :: name
integer,parameter :: isz=1000
real :: rr(isz)
real(kind=dp) :: dd(isz)
integer :: ii(isz)
character(len=10) :: cc(isz)
integer :: indx(isz)
integer :: i
call unit_check_start(name, '-library orderpack') ! start tests
CALL RANDOM_NUMBER(RR)
rr = rr*huge(0.0)
select case(name)
case('inssor');call inssor(rr)
case('refsor');call refsor(rr)
case('mrgrnk');call mrgrnk(rr,indx); rr=rr(indx)
case('mrgref');call mrgref(rr,indx); rr=rr(indx)
endselect
call unit_check(name,all(rr(1:isz-1) .le. rr(2:isz)),'real test',isz,'values')
CALL RANDOM_NUMBER(RR)
ii = rr*huge(0)
select case(name)
case('inssor');call inssor(ii)
case('refsor');call refsor(ii)
case('mrgrnk');call mrgrnk(ii,indx); ii=ii(indx)
case('mrgref');call mrgref(ii,indx); ii=ii(indx)
endselect
call unit_check(name,all(ii(1:isz-1) .le. ii(2:isz)),'integer test',isz,'values')
CALL RANDOM_NUMBER(DD)
dd = dd*huge(0.0_dp)
select case(name)
case('inssor');call inssor(dd)
case('refsor');call refsor(dd)
case('mrgrnk');call mrgrnk(dd,indx); dd=dd(indx)
case('mrgref');call mrgref(dd,indx); dd=dd(indx)
endselect
call unit_check(name,all(dd(1:isz-1) .le. dd(2:isz)),'double test',isz,'values')
do i=1,isz
cc(i) = random_string('abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ',10)
enddo
select case(name)
case('inssor');call inssor(cc)
case('refsor');call refsor(cc)
case('mrgrnk');call mrgrnk(cc,indx); cc=cc(indx)
case('mrgref');call mrgref(cc,indx); cc=cc(indx)
endselect
call unit_check(name,all(cc(1:isz-1) .le. cc(2:isz)),'string test, random',isz,'values')
call unit_check_done(name,msg='test completed')
end subroutine test_gen