File: 00-load.t

package info (click to toggle)
libparallel-forkmanager-perl 2.03-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, trixie
  • size: 268 kB
  • sloc: perl: 475; xml: 291; makefile: 2
file content (41 lines) | stat: -rw-r--r-- 995 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
use strict;
use warnings;

use Test::More tests => 4;
use Parallel::ForkManager;
use File::Temp qw(tempdir);

my @numbers = (1 .. 20);

for my $processes ( 1, 3 ) {
    for my $pseudo_block ( 0, 1 ) {
        my $chrono = time;
        is_deeply count($processes,$pseudo_block) => \@numbers,
            "procs: $processes, pseudo-block: $pseudo_block";
        $chrono = time - $chrono;
        diag "time: $chrono seconds";
    };
}


sub count {
    my ($concurrency,$blocking_time) = @_;

    my $dir = tempdir(CLEANUP => 1);

    my $fork = Parallel::ForkManager->new( $concurrency );
    $fork->set_waitpid_blocking_sleep( $blocking_time );

    foreach my $n (@numbers) {
	    my $pid = $fork->start and next;
        open my $fh, '>', "$dir/$n" or die;
        close $fh or die;
	    $fork->finish;
    }
    $fork->wait_all_children;
    opendir my $dh, $dir or die;
    my @results = grep { $_ !~ /\./ } readdir $dh;
    closedir $dh or die;
    return [sort {$a <=> $b} @results];
}