1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
6use Test::More;
7
8use IO::Handle;
9
10use Future::IO;
11
12plan skip_all => "Cannot select() on pipes on Windows" if $^O eq "MSWin32";
13
14# sleep + sysread IO ready
15{
16   pipe my ( $rd, $wr ) or die "Cannot pipe() - $!";
17
18   $wr->autoflush();
19   $wr->print( "BYTES" );
20
21   my $f = Future->needs_any(
22      Future::IO->sysread( $rd, 5 ),
23      Future::IO->sleep( 2 ),
24   );
25
26   is( scalar $f->get, "BYTES", 'Future::IO ->sleep ->sysread concurrently yields bytes' );
27}
28
29# sleep + sysread timeout
30{
31   pipe my ( $rd, $wr ) or die "Cannot pipe() - $!";
32
33   my $f = Future->needs_any(
34      Future::IO->sysread( $rd, 5 ),
35      Future::IO->sleep( 0.2 )->then_done( "timeout" ),
36   );
37
38   is( scalar $f->get, "timeout", 'Future::IO ->sleep ->sysread concurrently yields timeout' );
39}
40
41done_testing;
42