Acme-FSM
view release on metacpan or search on metacpan
t/state/stop.t view on Meta::CPAN
tturn => [qw| bull bullshit |] } },
[[[qw| offal |], { %common, action => q|offal| }],
[[qw| applesauce |], { %common, action => q|applesauce| }] ] ],
[ q|[F](noise/noise)|,
[qw| pass eignore |],
{ STOP => { switch => \&AFSMTS_F, fturn => [qw| wander folderol |]}},
[[qw| applesauce |], { %common, action => q|applesauce| }] ],
[ q|[U](noise/noise)|,
[qw| pass eignore |],
{ STOP => { switch => \&AFSMTS_U, uturn => [qw| gibber claptrap |]}},
[[qw| applesauce |], { %common, action => q|applesauce| }] ],
[ q|[_](noise/noise)|,
[qw| pass eignore |],
{ STOP =>
{ switch => \&AFSMTS_T, turns => { 1 => [qw| drivel refuse |]}}},
[[qw| applesauce |], { %common, action => q|applesauce| }] ],
[ q|[workload:T](STOP/noise)|,
[qw| pass |],
{ workload =>
{ switch => sub { 1 },
eturn => [qw| STOP offal |],
tturn => [qw| STOP applesauce |] } },
[[[qw| offal |], { %common, action => q|offal| }],
[[qw| applesauce |], { %common, action => q|applesauce| }] ] ],
[ q|[workload:F](STOP/noise)|,
[qw| pass eignore |],
{ workload => { switch => sub { 0 }, fturn => [qw| STOP hogwash |]}},
[[qw| hogwash |], { %common, action => q|hogwash| }] ],
[ q|[workload:U](STOP/noise)|,
[qw| pass eignore |],
{ workload =>
{ switch => sub { undef }, uturn => [qw| STOP garbage |]}},
[[qw| garbage |], { %common, action => q|garbage| }] ],
[ q|[workload:_](STOP/noise)|,
[qw| pass eignore |],
{ workload =>
{ switch => sub { 1 }, turns => { 1 => [qw| STOP refuse |]}}},
[[qw| refuse |], { %common, action => q|refuse| }] ],
[ q|[workload:T](STOP/undef)|,
[qw| |],
{ workload =>
{ switch => sub { 1 },
eturn => [ q|STOP|, undef ],
tturn => [ q|STOP|, undef ] } },
[ qr.\Q{workload}(eturn): action !isa defined .,
qr.\Q{workload}(tturn): action !isa defined . ] ],
[ q|[workload:F](STOP/undef)|,
[qw| eignore |],
{ workload => { switch => sub { 0 }, fturn => [ q|STOP|, undef ]}},
qr.\Q{workload}(fturn): action !isa defined . ],
[ q|[workload:U](STOP/undef)|,
[qw| eignore |],
{ workload => { switch => sub { undef }, uturn => [ q|STOP|, undef ]}},
qr.\Q{workload}(uturn): action !isa defined . ],
[ q|[workload:_](STOP/undef)|,
[qw| eignore |],
{ workload =>
{ switch => sub { 1 }, turns => { 1 => [ q|STOP|, undef ]}}},
qr.\Q{workload}(turn%1): action !isa defined . ] );
plan tests => scalar map {
( '' ) x (2 - grep q|eignore| eq $_, @{$_->[1]}) } @data;
foreach my $item ( @data ) {
$st{$_} = $item->[2]{$_} foreach keys %{$item->[2]};
if( grep q|pass| eq $_, @{$item->[1]} ) {
my $res = grep( q|eignore| eq $_, @{$item->[1]} ) ?
[ undef, $item->[3] ] : $item->[3];
local $TODO = q|should detect|;
AFSMTS_wrap;
AFSMTS_deeply @{$res->[0]}, qq|empty, $item->[0]| unless
grep $_ eq q|eignore|, @{$item->[1]};
AFSMTS_wrap;
AFSMTS_deeply @{$res->[1]}, qq|full, $item->[0]| }
else {
my $res = ref $item->[3] eq q|ARRAY| ?
$item->[3] : [ $item->[3], $item->[3] ];
AFSMTS_wrap;
is_deeply [ $@ =~ $res->[0], scalar @input ], [ !0, 1 ],
AFSMTS_croakson qq|empty, $item->[0]| unless
grep $_ eq q|eignore|, @{$item->[1]};
AFSMTS_wrap;
is_deeply [ $@ =~ $res->[1], scalar @input ], [ !0, 0 ],
AFSMTS_croakson qq|full, $item->[0]| }
@input = @inbase }
# vim: set filetype=perl
( run in 1.224 second using v1.01-cache-2.11-cpan-39bf76dae61 )