1#!./perl
2
3select(STDERR); $| = 1;
4select(STDOUT); $| = 1;
5
6print "1..12\n";
7
8use IO::Handle;
9use IO::Poll qw(/POLL/);
10
11my $poll = IO::Poll->new();
12
13my $stdout = \*STDOUT;
14my $dupout = IO::Handle->new_from_fd(fileno($stdout),"w");
15
16$poll->mask($stdout => POLLOUT);
17
18print "not "
19	unless $poll->mask($stdout) == POLLOUT;
20print "ok 1\n";
21
22$poll->mask($dupout => POLLPRI);
23
24print "not "
25	unless $poll->mask($dupout) == POLLPRI;
26print "ok 2\n";
27
28$poll->poll(0.1);
29
30if ($^O eq 'MSWin32' || $^O eq 'NetWare' || $^O eq 'VMS' || $^O eq 'beos') {
31print "ok 3 # skipped, doesn't work on non-socket fds\n";
32print "ok 4 # skipped, doesn't work on non-socket fds\n";
33}
34else {
35print "not "
36	unless $poll->events($stdout) == POLLOUT;
37print "ok 3\n";
38
39print "not "
40	if $poll->events($dupout);
41print "ok 4\n";
42}
43
44my @h = $poll->handles;
45print "not "
46	unless @h == 2;
47print "ok 5\n";
48
49$poll->remove($stdout);
50
51@h = $poll->handles;
52
53print "not "
54	unless @h == 1;
55print "ok 6\n";
56
57print "not "
58	if $poll->mask($stdout);
59print "ok 7\n";
60
61$poll->poll(0.1);
62
63print "not "
64	if $poll->events($stdout);
65print "ok 8\n";
66
67$poll->remove($dupout);
68print "not "
69    if $poll->handles;
70print "ok 9\n";
71
72my $stdin = \*STDIN;
73$poll->mask($stdin => POLLIN);
74$poll->remove($stdin);
75close STDIN;
76print "not "
77    if $poll->poll(0.1);
78print "ok 10\n";
79
80my $wait = IO::Poll->new;
81my $now = time;
82my $zero = $wait->poll(2);
83my $diff = time - $now;
84print "not " if !defined($zero) or $zero;
85print "ok 11\n";
86print "not " unless $diff >= 2;
87print "ok 12\n";
88