program test_savetxt use stdlib_kinds, only: int32, sp, dp use stdlib_io, only: loadtxt, savetxt use stdlib_error, only: check implicit none character(:), allocatable :: outpath outpath = get_outpath() // "/tmp.dat" call test_iint32(outpath) call test_rsp(outpath) call test_rdp(outpath) call test_csp(outpath) call test_cdp(outpath) contains  function get_outpath() result(outpath)  integer :: ierr  character(256) :: argv  character(:), allocatable :: outpath  call get_command_argument(1, argv, status=ierr)  if (ierr==0) then  outpath = trim(argv)  else  outpath = '.'  endif  end function get_outpath  subroutine test_iint32(outpath)  character(*), intent(in) :: outpath  integer(int32) :: d(3, 2), e(2, 3)  integer(int32), allocatable :: d2(:, :)  d = reshape([1, 2, 3, 4, 5, 6], [3, 2])  call savetxt(outpath, d)  call loadtxt(outpath, d2)  call check(all(shape(d2) == [3, 2]))  call check(all(abs(d-d2) == 0))  e = reshape([1, 2, 3, 4, 5, 6], [2, 3])  call savetxt(outpath, e)  call loadtxt(outpath, d2)  call check(all(shape(d2) == [2, 3]))  call check(all(abs(e-d2) == 0))  end subroutine  subroutine test_rsp(outpath)  character(*), intent(in) :: outpath  real(sp) :: d(3, 2), e(2, 3)  real(sp), allocatable :: d2(:, :)  d = reshape([1, 2, 3, 4, 5, 6], [3, 2])  call savetxt(outpath, d)  call loadtxt(outpath, d2)  call check(all(shape(d2) == [3, 2]))  call check(all(abs(d-d2) < epsilon(1._sp)))  e = reshape([1, 2, 3, 4, 5, 6], [2, 3])  call savetxt(outpath, e)  call loadtxt(outpath, d2)  call check(all(shape(d2) == [2, 3]))  call check(all(abs(e-d2) < epsilon(1._sp)))  end subroutine test_rsp  subroutine test_rdp(outpath)  character(*), intent(in) :: outpath  real(dp) :: d(3, 2), e(2, 3)  real(dp), allocatable :: d2(:, :)  d = reshape([1, 2, 3, 4, 5, 6], [3, 2])  call savetxt(outpath, d)  call loadtxt(outpath, d2)  call check(all(shape(d2) == [3, 2]))  call check(all(abs(d-d2) < epsilon(1._dp)))  e = reshape([1, 2, 3, 4, 5, 6], [2, 3])  call savetxt(outpath, e)  call loadtxt(outpath, d2)  call check(all(shape(d2) == [2, 3]))  call check(all(abs(e-d2) < epsilon(1._dp)))  end subroutine test_rdp  subroutine test_csp(outpath)  character(*), intent(in) :: outpath  complex(sp) :: d(3, 2), e(2, 3)  complex(sp), allocatable :: d2(:, :)  d = cmplx(1, 1,kind=sp)* reshape([1, 2, 3, 4, 5, 6], [3, 2])  call savetxt(outpath, d)  call loadtxt(outpath, d2)  call check(all(shape(d2) == [3, 2]))  call check(all(abs(d-d2) < epsilon(1._sp)))  e = cmplx(1, 1,kind=sp)* reshape([1, 2, 3, 4, 5, 6], [2, 3])  call savetxt(outpath, e)  call loadtxt(outpath, d2)  call check(all(shape(d2) == [2, 3]))  call check(all(abs(e-d2) < epsilon(1._sp)))  end subroutine test_csp  subroutine test_cdp(outpath)  character(*), intent(in) :: outpath  complex(dp) :: d(3, 2), e(2, 3)  complex(dp), allocatable :: d2(:, :)  d = cmplx(1._dp, 1._dp,kind=dp)* reshape([1, 2, 3, 4, 5, 6], [3, 2])  call savetxt(outpath, d)  call loadtxt(outpath, d2)  call check(all(shape(d2) == [3, 2]))  call check(all(abs(d-d2) < epsilon(1._dp)))  e = cmplx(1, 1,kind=dp)* reshape([1, 2, 3, 4, 5, 6], [2, 3])  call savetxt(outpath, e)  call loadtxt(outpath, d2)  call check(all(shape(d2) == [2, 3]))  call check(all(abs(e-d2) < epsilon(1._dp)))  end subroutine test_cdp end program test_savetxt