This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Reimplement $[ as a module
[perl5.git] / t / op / sselect.t
CommitLineData
729c079f
NC
1#!./perl
2
b3d9788e 3my $hires;
729c079f
NC
4BEGIN {
5 chdir 't' if -d 't';
6 @INC = ('.', '../lib');
b3d9788e 7 $hires = eval 'use Time::HiResx "time"; 1';
729c079f
NC
8}
9
10require 'test.pl';
11
e4d771f5 12plan (11);
729c079f
NC
13
14my $blank = "";
15eval {select undef, $blank, $blank, 0};
8075d46e 16is ($@, "", 'select undef $blank $blank 0');
729c079f 17eval {select $blank, undef, $blank, 0};
8075d46e 18is ($@, "", 'select $blank undef $blank 0');
729c079f 19eval {select $blank, $blank, undef, 0};
8075d46e 20is ($@, "", 'select $blank $blank undef 0');
729c079f
NC
21
22eval {select "", $blank, $blank, 0};
8075d46e 23is ($@, "", 'select "" $blank $blank 0');
729c079f 24eval {select $blank, "", $blank, 0};
8075d46e 25is ($@, "", 'select $blank "" $blank 0');
729c079f 26eval {select $blank, $blank, "", 0};
8075d46e 27is ($@, "", 'select $blank $blank "" 0');
15547071
GA
28
29eval {select "a", $blank, $blank, 0};
8075d46e
DM
30like ($@, qr/^Modification of a read-only value attempted/,
31 'select "a" $blank $blank 0');
15547071 32eval {select $blank, "a", $blank, 0};
8075d46e
DM
33like ($@, qr/^Modification of a read-only value attempted/,
34 'select $blank "a" $blank 0');
15547071 35eval {select $blank, $blank, "a", 0};
8075d46e
DM
36like ($@, qr/^Modification of a read-only value attempted/,
37 'select $blank $blank "a" 0');
e4d771f5 38
b3d9788e 39my $sleep = 3;
0ebb4f02
JD
40# Actual sleep time on Windows may be rounded down to an integral
41# multiple of the system clock tick interval. Clock tick interval
42# is configurable, but usually about 15.625 milliseconds.
b3d9788e
DM
43# time() however (if we haven;t loaded Time::HiRes), doesn't return
44# fractional values, so the observed delay may be 1 second short.
45#
46# There is also a report that old linux kernels may return 0.5ms early:
47# <20110520081714.GC17549@mars.tony.develop-help.com>.
48#
0ebb4f02 49
b3d9788e
DM
50my $under = $hires ? 0.1 : 1;
51
52my $t0 = time;
e4d771f5 53select(undef, undef, undef, $sleep);
b3d9788e
DM
54my $t1 = time;
55my $diff = $t1-$t0;
56ok($diff >= $sleep-$under, "select(u,u,u,\$sleep): at least $sleep seconds have passed");
57note("diff=$diff under=$under");
e4d771f5
JD
58
59my $empty = "";
60vec($empty,0,1) = 0;
b3d9788e 61$t0 = time;
e4d771f5 62select($empty, undef, undef, $sleep);
b3d9788e
DM
63$t1 = time;
64$diff = $t1-$t0;
65ok($diff >= $sleep-$under, "select(\$e,u,u,\$sleep): at least $sleep seconds have passed");
66note("diff=$diff under=$under");