This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
PATCH: [perl #125892] qr/(?[ ]) regression with '!'
[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
1ae3d757 10require './test.pl';
729c079f 11
74416803
TC
12skip_all("Win32 miniperl has no socket select")
13 if $^O eq "MSWin32" && is_miniperl();
14
90eaaf02 15plan (15);
729c079f
NC
16
17my $blank = "";
18eval {select undef, $blank, $blank, 0};
8075d46e 19is ($@, "", 'select undef $blank $blank 0');
729c079f 20eval {select $blank, undef, $blank, 0};
8075d46e 21is ($@, "", 'select $blank undef $blank 0');
729c079f 22eval {select $blank, $blank, undef, 0};
8075d46e 23is ($@, "", 'select $blank $blank undef 0');
729c079f
NC
24
25eval {select "", $blank, $blank, 0};
8075d46e 26is ($@, "", 'select "" $blank $blank 0');
729c079f 27eval {select $blank, "", $blank, 0};
8075d46e 28is ($@, "", 'select $blank "" $blank 0');
729c079f 29eval {select $blank, $blank, "", 0};
8075d46e 30is ($@, "", 'select $blank $blank "" 0');
15547071 31
ba3062ae
FC
32# Test with read-only copy-on-write empty string
33my($rocow) = keys%{{""=>undef}};
34Internals::SvREADONLY($rocow,1);
35eval {select $rocow, $blank, $blank, 0};
36is ($@, "", 'select $rocow $blank $blank 0');
37eval {select $blank, $rocow, $blank, 0};
38is ($@, "", 'select $blank $rocow $blank 0');
39eval {select $blank, $blank, $rocow, 0};
40is ($@, "", 'select $blank $blank $rocow 0');
41
15547071 42eval {select "a", $blank, $blank, 0};
8075d46e
DM
43like ($@, qr/^Modification of a read-only value attempted/,
44 'select "a" $blank $blank 0');
15547071 45eval {select $blank, "a", $blank, 0};
8075d46e
DM
46like ($@, qr/^Modification of a read-only value attempted/,
47 'select $blank "a" $blank 0');
15547071 48eval {select $blank, $blank, "a", 0};
8075d46e
DM
49like ($@, qr/^Modification of a read-only value attempted/,
50 'select $blank $blank "a" 0');
e4d771f5 51
b3d9788e 52my $sleep = 3;
0ebb4f02
JD
53# Actual sleep time on Windows may be rounded down to an integral
54# multiple of the system clock tick interval. Clock tick interval
55# is configurable, but usually about 15.625 milliseconds.
b3d9788e
DM
56# time() however (if we haven;t loaded Time::HiRes), doesn't return
57# fractional values, so the observed delay may be 1 second short.
58#
59# There is also a report that old linux kernels may return 0.5ms early:
60# <20110520081714.GC17549@mars.tony.develop-help.com>.
61#
0ebb4f02 62
b3d9788e
DM
63my $under = $hires ? 0.1 : 1;
64
65my $t0 = time;
e4d771f5 66select(undef, undef, undef, $sleep);
b3d9788e
DM
67my $t1 = time;
68my $diff = $t1-$t0;
69ok($diff >= $sleep-$under, "select(u,u,u,\$sleep): at least $sleep seconds have passed");
70note("diff=$diff under=$under");
e4d771f5
JD
71
72my $empty = "";
73vec($empty,0,1) = 0;
b3d9788e 74$t0 = time;
e4d771f5 75select($empty, undef, undef, $sleep);
b3d9788e
DM
76$t1 = time;
77$diff = $t1-$t0;
78ok($diff >= $sleep-$under, "select(\$e,u,u,\$sleep): at least $sleep seconds have passed");
79note("diff=$diff under=$under");
90eaaf02
EB
80
81# [perl #120102] CORE::select ignoring timeout var's magic
82
83{
84 package RT120102;
85
86 my $count = 0;
87
88 sub TIESCALAR { bless [] }
89 sub FETCH { $count++; 0.1 }
90
91 my $sleep;
92
93 tie $sleep, 'RT120102';
94 select (undef, undef, undef, $sleep);
95 ::is($count, 1, 'RT120102');
96}