1use strict;
2
3BEGIN {
4    require Time::HiRes;
5    unless(&Time::HiRes::d_nanosleep) {
6        require Test::More;
7        Test::More::plan(skip_all => "no nanosleep()");
8    }
9}
10
11use Test::More tests => 4;
12BEGIN { push @INC, '.' }
13use t::Watchdog;
14
15eval { Time::HiRes::nanosleep(-5) };
16like $@, qr/::nanosleep\(-5\): negative time not invented yet/,
17        "negative time error";
18
19my $one = CORE::time;
20Time::HiRes::nanosleep(10_000_000);
21my $two = CORE::time;
22Time::HiRes::nanosleep(10_000_000);
23my $three = CORE::time;
24ok $one == $two || $two == $three
25    or print("# slept too long, $one $two $three\n");
26
27SKIP: {
28    skip "no gettimeofday", 2 unless &Time::HiRes::d_gettimeofday;
29    my $f = Time::HiRes::time();
30    Time::HiRes::nanosleep(500_000_000);
31    my $f2 = Time::HiRes::time();
32    my $d = $f2 - $f;
33    cmp_ok $d, '>', 0.4, "nanosleep for more than 0.4 sec";
34    skip "flapping test - more than 0.9 sec could be necessary...", 1 if $ENV{CI};
35    cmp_ok $d, '<', 0.9 or diag("# slept $d secs $f to $f2\n");
36}
37
381;
39