5 unless(&Time::HiRes::d_hires_stat) {
7 Test::More::plan(skip_all => "no hi-res stat");
9 if($^O =~ /\A(?:cygwin|MSWin)/) {
11 Test::More::plan(skip_all =>
12 "$^O file timestamps not reliable enough for stat test");
16 use Test::More 0.82 tests => 43;
19 my $limit = 0.25; # 25% is acceptable slosh for testing timers
24 Time::HiRes::sleep(rand(0.1) + 0.1);
28 my($a, $stat, $b) = ("a", [Time::HiRes::stat($$)], "b");
31 is ref($stat), "ARRAY";
32 push @mtime, $stat->[9];
33 ($a, my $lstat, $b) = ("a", [Time::HiRes::lstat($$)], "b");
36 is_deeply $lstat, $stat;
37 Time::HiRes::sleep(rand(0.1) + 0.1);
41 $stat = [Time::HiRes::stat($$)];
42 push @atime, $stat->[8];
43 $lstat = [Time::HiRes::lstat($$)];
44 is_deeply $lstat, $stat;
47 note "mtime = @mtime";
48 note "atime = @atime";
52 for (my $i = 1; $i < @atime; $i++) {
53 if ($atime[$i] >= $atime[$i-1]) {
56 if ($atime[$i] > int($atime[$i])) {
60 for (my $i = 1; $i < @mtime; $i++) {
61 if ($mtime[$i] >= $mtime[$i-1]) {
64 if ($mtime[$i] > int($mtime[$i])) {
68 note "ai = $ai, mi = $mi, ss = $ss";
69 # Need at least 75% of monotonical increase and
70 # 20% of subsecond results. Yes, this is guessing.
72 skip "no subsecond timestamps detected", 1 if $ss == 0;
73 ok $mi/(@mtime-1) >= 0.75 && $ai/(@atime-1) >= 0.75 &&
74 $ss/(@mtime+@atime) >= 0.2;
77 my $targetname = "tgt$$";
78 my $linkname = "link$$";
80 open(X, ">$targetname");
83 eval { symlink $targetname, $linkname or die "can't symlink: $!"; };
84 skip "can't symlink", 7 if $@ ne "";
85 my @tgt_stat = Time::HiRes::stat($targetname);
86 my @tgt_lstat = Time::HiRes::lstat($targetname);
87 my @lnk_stat = Time::HiRes::stat($linkname);
88 my @lnk_lstat = Time::HiRes::lstat($linkname);
89 is scalar(@tgt_stat), 13;
90 is scalar(@tgt_lstat), 13;
91 is scalar(@lnk_stat), 13;
92 is scalar(@lnk_lstat), 13;
93 is_deeply \@tgt_stat, \@tgt_lstat;
94 is_deeply \@tgt_stat, \@lnk_stat;
95 isnt $lnk_lstat[2], $tgt_stat[2];
97 1 while unlink $linkname;
98 1 while unlink $targetname;