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