Acme-FSM

 view release on metacpan or  search on metacpan

t/process/sort.t  view on Meta::CPAN

    tturn  => [qw|          Zaia SAME |],
    fturn  => [qw|          STOP DONE |]       },
  Zaia              =>
  { switch => sub                      {
        my $self = shift @_;
        $self->{mark} = $#input;
                               1, $self },
    tturn => [qw| Riah_Sahiltaahk SAME |]      },
  Riah_Sahiltaahk   =>
  { switch => sub {
        my $self = shift @_;
        $self->{mark} > $self->{base}, $self },
    tturn => [qw|         Do_The_Music SAME |],
    fturn => [qw|            De_Futura SAME |] },
  Do_The_Music      =>
  { switch => sub                        {
        my $self = shift @_;
        ( $input[$self->{mark} - 1] cmp $input[$self->{mark}] ) > 0,
          $self                           },
    tturn => [qw|         Ork_Alarm SAME |],
    fturn => [qw| Maneh_Fur_Da_Zess SAME |]    },
  Ork_Alarm         =>
  { switch => sub                        {
        my $self = shift @_;
        @input[$self->{mark} - 1, $self->{mark}] = @input[$self->{mark},
        $self->{mark} - 1];
                                 1, $self },
    tturn => [qw| Maneh_Fur_Da_Zess SAME |]    },
  Maneh_Fur_Da_Zess =>
  { switch => sub                      {
        my $self = shift @_;
        $self->{mark}--;
        print STDERR qq|@input\n|;
                               1, $self },
    tturn => [qw| Riah_Sahiltaahk SAME |]      },
  De_Futura         =>
  { switch => sub           {
        my $self = shift @_;
        $self->{base}++;
                    1, $self },
    tturn => [qw| Aina SAME |]                 } );

$super = [ ];
@inbase = ( [ @$super ] );
AFSMTS_wrap;
is_deeply \@input, $super, q|empty|;

$super = [qw| Meissa |];
@inbase = ([ @$super ]);
AFSMTS_wrap;
is_deeply \@input, $super, q|one item|;

$super = [qw| Keid Meissa |];
@inbase = ([ @$super ], [ reverse @$super ]);
while( @inbase )                          {
    AFSMTS_wrap;
    is_deeply \@input, $super, q|two items| }

$super = [qw| Atik Keid Meissa |];
@inbase =
( map {; $_, do { my $rc = [ @$_ ]; push @$rc, shift @$rc; $rc }}
  [ @$super ], [ reverse @$super ]);
while( @inbase )                             {
    AFSMTS_wrap;
    is_deeply \@input, $super, q|three items| }

$super =
[qw| Algorab     Ancha     Atik      Azha
     Denebola Keid Meissa Rigil_Kentaurus
     Scheat                          Skat |];
@inbase = ([ @$super ], [ reverse @$super ]);
for ( 2 .. @$super )                          {
    my $base = [ @{$inbase[0]} ];
    push @$base, shift @$base;
    unshift @inbase, $base, [ reverse @$base ] }
while( @inbase )                       {
    AFSMTS_wrap;
# XXX:202501120433:whynot: This is cranky.
    my $backup = defined $inbase[0] ? [ $inbase[0] ] : [[ qw|***qG1k***| ]];
    fail qq|@{$backup->[0]}|                                            unless
      AFSMTS_smartmatch @input, @$super }
pass q|success, you know|;

# vim: set filetype=perl



( run in 0.640 second using v1.01-cache-2.11-cpan-39bf76dae61 )