File: 05_foreach_hash.t

package info (click to toggle)
libanyevent-tools-perl 0.12-1.1
  • links: PTS
  • area: main
  • in suites: bookworm, bullseye, forky, trixie
  • size: 128 kB
  • sloc: perl: 1,532; makefile: 22
file content (117 lines) | stat: -rw-r--r-- 2,912 bytes parent folder | download | duplicates (3)
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#!/usr/bin/perl

use warnings;
use strict;
use utf8;
use open qw(:std :utf8);
use lib qw(lib ../lib);

use Test::More tests    => 16;
use Encode qw(decode encode);
use Time::HiRes qw(time);


BEGIN {
    # Подготовка объекта тестирования для работы с utf8
    my $builder = Test::More->builder;
    binmode $builder->output,         ":utf8";
    binmode $builder->failure_output, ":utf8";
    binmode $builder->todo_output,    ":utf8";

    use_ok 'AnyEvent';
    use_ok 'AnyEvent::Tools', ':foreach';
}

{
    my $cv = condvar AnyEvent;
    my %res;
    my $called = 0;

    my %hash = map {($_ => 100 + $_)  } 0 .. 9;
    my $first = (keys %hash)[0];
    my $last  = (keys %hash)[-1];

    async_for \%hash,
        sub {
            my ($g, $key, $value, $first, $last) = @_;
            $res{$key} = {
                value   => $value,
                first   => $first,
                last    => $last,
                called  => $called++
            };
        },
        sub {
            $cv->send;
        };

    $cv->recv;

    ok keys(%res) == 10, "All array elements were processed";
    ok grep({ $res{$_}{value} == 100 + $_  } keys %res) == 10,
        "All values are correct";

    ok 1 == grep({$res{$_}{first}} 0 .. 9),
        "First element was detected";
    ok 1 == grep({$res{$_}{last}} 0 .. 9),
        "Last element was detected";

    ok $res{$first}{first}, "First element was detected properly";
    ok $res{$last}{last}, "Last element was detected properly";

    my $seq_ok = 1;
    $called = 0;
    for (keys %hash) {
        $seq_ok = 0 unless $res{$_}{called} == $called;
        $called++;
    }

    ok $seq_ok, "The sequence order is right";
}

{
    my $cv = condvar AnyEvent;
    my %res;
    my $called = 0;

    my %hash = map {($_ => 100 + $_)  } 0 .. 9;
    my $first = (keys %hash)[-1];
    my $last  = (keys %hash)[0];

    async_rfor \%hash,
        sub {
            my ($g, $key, $value, $first, $last) = @_;
            $res{$key} = {
                value   => $value,
                first   => $first,
                last    => $last,
                called  => $called++
            };
        },
        sub {
            $cv->send;
        };

    $cv->recv;

    ok keys(%res) == 10, "All array elements were processed";
    ok grep({ $res{$_}{value} == 100 + $_  } keys %res) == 10,
        "All values are correct";

    ok 1 == grep({$res{$_}{first}} 0 .. 9),
        "First element was detected";
    ok 1 == grep({$res{$_}{last}} 0 .. 9),
        "Last element was detected";

    ok $res{$first}{first}, "First element was detected properly";
    ok $res{$last}{last}, "Last element was detected properly";

    my $seq_ok = 1;
    $called = 0;
    for (reverse keys %hash) {
        $seq_ok = 0 unless $res{$_}{called} == $called;
        $called++;
    }

    ok $seq_ok, "The sequence order is right";
}