use Test::More;
use lib "lib";
use lib "blib/lib";
use lib "blib/arch";

use IO::FD;
use IO::FD::Constants;

use feature ":all";
#say @IO::FD::Constants::names;

use Fcntl;

use strict;
use warnings;

plan skip_all => "kqueue not supported on  $^O" if $^O !~ /darwin|bsd/i;

my $kq=IO::FD::kqueue();
ok defined( $kq), "Create a queue";

#Create a pipe with a read fd and a write fd
ok defined IO::FD::pipe(my $read, my $write);

for($read,$write){
	my $flags=IO::FD::fcntl( $_, F_GETFL,0);
	die "Could not set non blocking" unless defined IO::FD::fcntl($_, F_SETFL, $flags|O_NONBLOCK);
}

     #############################################################################
     # struct kevent {                                                           #
     #         uintptr_t       ident;          /* identifier for this event */   #
     #         int16_t         filter;         /* filter for event */            #
     #         uint16_t        flags;          /* general flags */               #
     #         uint32_t        fflags;         /* filter-specific flags */       #
     #         intptr_t        data;           /* filter-specific data */        #
     #         void            *udata;         /* opaque user data identifier */ #
     #         #extensions
     # };                                                                        #
     #############################################################################

	my $struct=pack(KEVENT_PACKER, $read, EVFILT_READ,EV_ADD|EV_ENABLE,0,0,0); 

     	my $results=IO::FD::SV(length($struct) * 10);
	my $ret=IO::FD::kevent($kq, $struct, $results, 0);
	
	
for(1..5){
	IO::FD::syswrite $write, "Hello";
	my $ret=IO::FD::kevent($kq, $struct, $results, undef);
}


IO::FD::close $kq;
done_testing;