6 BEGIN { $| = 1; print "1..25\n"; }
8 END {print "not ok 1\n" unless $loaded;}
10 use Time::HiRes qw(tv_interval);
18 my $have_gettimeofday = defined &Time::HiRes::gettimeofday;
19 my $have_usleep = defined &Time::HiRes::usleep;
20 my $have_ualarm = defined &Time::HiRes::ualarm;
21 my $have_time = defined &Time::HiRes::time;
23 import Time::HiRes 'gettimeofday' if $have_gettimeofday;
24 import Time::HiRes 'usleep' if $have_usleep;
25 import Time::HiRes 'ualarm' if $have_ualarm;
30 map { print "ok $_ (skipped)\n" } @_;
34 my ($n, $result, @info) = @_;
40 print "# @info\n" if @info;
44 if (!$have_gettimeofday) {
48 my @one = gettimeofday();
49 ok 2, @one == 2, 'gettimeofday returned ', 0+@one, ' args';
50 ok 3, $one[0] > 850_000_000, "@one too small";
54 my @two = gettimeofday();
55 ok 4, ($two[0] > $one[0] || ($two[0] == $one[0] && $two[1] > $one[1])),
56 "@two is not greater than @one";
58 my $f = Time::HiRes::time();
59 ok 5, $f > 850_000_000, "$f too small";
60 ok 6, $f - $two[0] < 2, "$f - @two >= 2";
72 ok 7, $one == $two || $two == $three, "slept too long, $one $two $three";
74 if (!$have_gettimeofday) {
78 my $f = Time::HiRes::time();
80 my $f2 = Time::HiRes::time();
82 ok 8, $d > 0.4 && $d < 0.8, "slept $d secs $f to $f2";
86 # Two-arg tv_interval() is always available.
88 my $f = tv_interval [5, 100_000], [10, 500_000];
89 ok 9, abs($f - 5.4) < 0.001, $f;
92 if (!$have_gettimeofday) {
96 my $r = [gettimeofday()];
97 my $f = tv_interval $r;
101 if (!$have_usleep || !$have_gettimeofday) {
105 my $r = [gettimeofday()];
106 #jTime::HiRes::sleep 0.5;
107 Time::HiRes::sleep( 0.5 );
108 my $f = tv_interval $r;
109 ok 11, $f > 0.4 && $f < 0.8, "slept $f secs";
117 local $SIG{ALRM} = sub { $tick++ };
119 my $one = time; $tick = 0; ualarm(10_000); sleep until $tick;
120 my $two = time; $tick = 0; ualarm(10_000); sleep until $tick;
122 ok 12, $one == $two || $two == $three, "slept too long, $one $two $three";
125 ualarm(10_000, 10_000);
126 sleep until $tick >= 3;
131 # new test: did we even get close?
137 for my $i (1 .. 20) {
139 $tf = Time::HiRes::time();
141 last if (($t2 - $t1) <= 1) && $t1 <= $tf;
143 ok 14, (($t1 <= $tf) && ($tf <= $t2)),
144 "Time::HiRes::time $tf not bracketed by [$t1, $t2]";
148 unless (defined &Time::HiRes::gettimeofday
149 && defined &Time::HiRes::ualarm
150 && defined &Time::HiRes::usleep) {
152 print "ok $_ # skipped\n";
155 use Time::HiRes qw (time alarm sleep);
164 $r = [Time::HiRes::gettimeofday()];
166 print Time::HiRes::tv_interval($r), "\nok 16\n";
168 $r = [Time::HiRes::gettimeofday()];
174 select (undef, undef, undef, 10);
175 print "# Select returned! $i ", Time::HiRes::tv_interval ($r), "\n";
181 print "# Tick! $i ", Time::HiRes::tv_interval ($r), "\n";
183 $SIG{ALRM} = 'DEFAULT';
188 unless (defined &Time::HiRes::setitimer
189 && defined &Time::HiRes::getitimer
190 && exists &Time::HiRes::ITIMER_VIRTUAL
191 && $Config{d_select}) {
193 print "ok $_ # Skip: no virtual interval timers\n";
196 use Time::HiRes qw (setitimer getitimer ITIMER_VIRTUAL);
199 my $r = [Time::HiRes::gettimeofday()];
202 $i ? $i-- : setitimer(ITIMER_VIRTUAL, 0);
203 print "# Tick! $i ", Time::HiRes::tv_interval($r), "\n";
206 print "# setitimer: ", join(" ", setitimer(ITIMER_VIRTUAL, 0.5, 0.4)), "\n";
208 # Assume interval timer granularity of 0.05 seconds. Too bold?
209 print "not " unless abs(getitimer(ITIMER_VIRTUAL) / 0.5) - 1 < 0.1;
212 print "# getitimer: ", join(" ", getitimer(ITIMER_VIRTUAL)), "\n";
214 while (getitimer(ITIMER_VIRTUAL)) {
215 my $j; $j++ for 1..1000; # Can't be unbreakable, must test getitimer().
218 print "# getitimer: ", join(" ", getitimer(ITIMER_VIRTUAL)), "\n";
220 print "not " unless getitimer(ITIMER_VIRTUAL) == 0;
223 $SIG{VTALRM} = 'DEFAULT';
226 $a = abs(sleep(1.5) / 1.5 - 1.0);
227 print $a < 0.1 ? "ok 20 # $a\n" : "not ok 20 # $a\n";
229 $a = abs(usleep(1_500_000) / 1_500_000 - 1.0);
230 print $a < 0.1 ? "ok 21 # $a\n" : "not ok 21 # $a\n";
233 print $@ =~ /::sleep\(-1\): negative time not invented yet/ ?
234 "ok 22\n" : "not ok 22\n";
237 print $@ =~ /::usleep\(-2\): negative time not invented yet/ ?
238 "ok 23\n" : "not ok 23\n";
241 print $@ =~ /::alarm\(-3, 0\): negative time not invented yet/ ?
242 "ok 24\n" : "not ok 24\n";
245 print $@ =~ /::ualarm\(-4, 0\): negative time not invented yet/ ?
246 "ok 25\n" : "not ok 25\n";