The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use Test::More tests => 6;
use POSIX;

use IO::Vectored;


{
  eval {
    syswritev(STDOUT);
  };

  my $err = $@;
  like($err, qr/need more arguments/, "too few arguments detected");
}


{
  my @vector = ('Q') x (IO::Vectored::IOV_MAX + 1);

  eval {
    syswritev(STDOUT, @vector);
  };

  my $err = $@;
  like($err, qr/too many arguments/, "too many arguments detected");
}


{
  eval {
    syswritev(STDOUT, 1);
  };

  my $err = $@;
  like($err, qr/non-string/, "non-string object detected");
}


{
  eval {
    sysreadv(STDIN, "this is a constant/read-only string");
  };

  my $err = $@;
  like($err, qr/Can't modify/, "constant/read-only string detected");
}


{
  pipe(my $r, my $w) || die "pipe: $!";
  close($w);

  eval {
    syswritev($w, "hello");
  };

  my $err = $@;
  like($err, qr/closed or invalid/, "closed file handle detected");
}


{
  pipe(my $r, my $w) || die "pipe: $!";
  POSIX::close(fileno($w));

  is(syswritev($w, "hello"), undef, "undef from closed file descriptor");
}