6 BEGIN { $| = 1; print "1..19\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;
22 import Time::HiRes 'gettimeofday' if $have_gettimeofday;
23 import Time::HiRes 'usleep' if $have_usleep;
24 import Time::HiRes 'ualarm' if $have_ualarm;
29 map { print "ok $_ (skipped)\n" } @_;
33 my ($n, $result, @info) = @_;
39 print "# @info\n" if @info;
43 if (!$have_gettimeofday) {
47 my @one = gettimeofday();
48 ok 2, @one == 2, 'gettimeofday returned ', 0+@one, ' args';
49 ok 3, $one[0] > 850_000_000, "@one too small";
53 my @two = gettimeofday();
54 ok 4, ($two[0] > $one[0] || ($two[0] == $one[0] && $two[1] > $one[1])),
55 "@two is not greater than @one";
57 my $f = Time::HiRes::time;
58 ok 5, $f > 850_000_000, "$f too small";
59 ok 6, $f - $two[0] < 2, "$f - @two >= 2";
71 ok 7, $one == $two || $two == $three, "slept too long, $one $two $three";
73 if (!$have_gettimeofday) {
77 my $f = Time::HiRes::time;
79 my $f2 = Time::HiRes::time;
81 ok 8, $d > 0.4 && $d < 0.8, "slept $d secs $f to $f2";
85 # Two-arg tv_interval() is always available.
87 my $f = tv_interval [5, 100_000], [10, 500_000];
91 if (!$have_gettimeofday) {
95 my $r = [gettimeofday()];
96 my $f = tv_interval $r;
104 my $r = [gettimeofday()];
105 #jTime::HiRes::sleep 0.5;
106 Time::HiRes::sleep( 0.5 );
107 my $f = tv_interval $r;
108 ok 11, $f > 0.4 && $f < 0.8, "slept $f secs";
116 local $SIG{ALRM} = sub { $tick++ };
118 my $one = time; $tick = 0; ualarm(10_000); sleep until $tick;
119 my $two = time; $tick = 0; ualarm(10_000); sleep until $tick;
121 ok 12, $one == $two || $two == $three, "slept too long, $one $two $three";
124 ualarm(10_000, 10_000);
125 sleep until $tick >= 3;
130 # new test: did we even get close?
134 my $tf = Time::HiRes::time();
135 ok 14, (abs($tf - $t) <= 1),
136 "time $t differs from Time::HiRes::time $tf";
139 unless (defined &Time::HiRes::gettimeofday
140 && defined &Time::HiRes::ualarm
141 && defined &Time::HiRes::usleep) {
143 print "ok $_ # skipped\n";
146 use Time::HiRes qw (time alarm sleep);
155 $r = [Time::HiRes::gettimeofday];
157 print Time::HiRes::tv_interval($r), "\nok 16\n";
159 $r = [Time::HiRes::gettimeofday];
165 select (undef, undef, undef, 10);
166 print "# Select returned! $i ", Time::HiRes::tv_interval ($r), "\n";
172 print "# Tick! $i ", Time::HiRes::tv_interval ($r), "\n";
174 $SIG{ALRM} = 'DEFAULT';
179 unless (defined &Time::HiRes::setitimer
180 && defined &Time::HiRes::getitimer
181 && exists &Time::HiRes::ITIMER_VIRTUAL
182 && $Config{d_select}) {
184 print "ok $_ # Skip: no virtual interval timers\n";
187 use Time::HiRes qw (setitimer getitimer ITIMER_VIRTUAL);
190 my $r = [Time::HiRes::gettimeofday];
193 $i ? $i-- : setitimer(ITIMER_VIRTUAL, 0);
194 print "# Tick! $i ", Time::HiRes::tv_interval($r), "\n";
197 print "# setitimer: ", join(" ", setitimer(ITIMER_VIRTUAL, 0.5, 0.4)), "\n";
199 # Assume interval timer granularity of 0.05 seconds. Too bold?
200 print "not " unless abs(getitimer(ITIMER_VIRTUAL) / 0.5) - 1 < 0.1;
203 print "# getitimer: ", join(" ", getitimer(ITIMER_VIRTUAL)), "\n";
205 while (getitimer(ITIMER_VIRTUAL)) {
206 my $j; $j++ for 1..1000; # Can't be unbreakable, must test getitimer().
209 print "# getitimer: ", join(" ", getitimer(ITIMER_VIRTUAL)), "\n";
211 print "not " unless getitimer(ITIMER_VIRTUAL) == 0;
214 $SIG{VTALRM} = 'DEFAULT';