Acme-FSM

 view release on metacpan or  search on metacpan

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

  { switch => sub           {
        my $self = shift @_;
        $self->{root} = [ -$self->{coeff2} / $self->{coeff1} ];
                   return !0 },
    tturn  => [qw| STOP one |]                        },
  st3ac5 =>
  { switch => sub {
        my $self = shift @_;
        $self->{accum} = '-';
        return defined $self->{coeff0} },
    tturn  => [qw|        st4d71 NEXT |],
    fturn  => [qw|        st6936 NEXT |]              } );

@inbase =
([ '',          q|fail|, q|no coeff0|, undef, undef, undef, undef, undef ],
 [ q|t|,           q|fail|,      q|t|, undef, undef, undef, undef, undef ],
 [ q| p|,          q|fail|,      q|p|, undef, undef, undef, undef, undef ],
 [ q|4|,        q|fail|, q|no coeff0|, undef, undef, undef, undef, undef ],
 [ q|9u|,          q|fail|,      q|u|, undef, undef, undef, undef, undef ],
 [ q|5 |,       q|fail|, q|no coeff1|,     5, undef, undef, undef, undef ],
 [ q|52 |,      q|fail|, q|no coeff1|,    52, undef, undef, undef, undef ],
 [ q|-|,        q|fail|, q|no coeff0|, undef, undef, undef, undef, undef ],
 [ q|- |,       q|fail|, q|no coeff0|, undef, undef, undef, undef, undef ],
 [ q|-99 |,     q|fail|, q|no coeff1|,   -99, undef, undef, undef, undef ],
 [ q|2-6 |,        q|fail|,      q|-|, undef, undef, undef, undef, undef ],
 [ q|55- |,        q|fail|,      q|-|, undef, undef, undef, undef, undef ],
 [ q|23 1|,     q|fail|, q|no coeff1|,    23, undef, undef, undef, undef ],
 [ q|11 q|,        q|fail|,      q|q|,    11, undef, undef, undef, undef ],
 [ q|32 0a|,       q|fail|,      q|a|,    32, undef, undef, undef, undef ],
 [ q|58 5 |,    q|fail|, q|no coeff2|,    58,     5, undef, undef, undef ],
 [ q|99 31 |,   q|fail|, q|no coeff2|,    99,    31, undef, undef, undef ],
 [ q|58 -|,     q|fail|, q|no coeff1|,    58, undef, undef, undef, undef ],
 [ q|31 - |,    q|fail|, q|no coeff1|,    31,   '-', undef, undef, undef ],
 [ q|94 -40|,   q|fail|, q|no coeff1|,    94, undef, undef, undef, undef ],
 [ q|98 -51 |,  q|fail|, q|no coeff2|,    98,   -51, undef, undef, undef ],
 [ q|71 4-1 |,     q|fail|,      q|-|,    71, undef, undef, undef, undef ],
 [ q|99 13- |,     q|fail|,      q|-|,    99, undef, undef, undef, undef ],
 [ q|92 70 3|,  q|fail|, q|no coeff2|,    92,    70, undef, undef, undef ],
 [ q|87 7 h |,     q|fail|,      q|h|,    87,     7, undef, undef, undef ],
 [ q|77 68 2m|,    q|fail|,      q|m|,    77,    68, undef, undef, undef ],
 [ q|45 3 -82|, q|fail|, q|no coeff2|,    45,     3, undef, undef, undef ],
 [ q|43 51 1-6 |,  q|fail|,      q|-|,    43,    51, undef, undef, undef ],
 [ q|17 10 0- |,   q|fail|,      q|-|,    17,    10, undef, undef, undef ],
 [ q|0 0 0 |,       q|any|,        '',     0,     0,     0, undef, undef ],
 [ q|0 0 93 |,     q|none|,        '',     0,     0,    93, undef, undef ],
 [ q|0 32 40 |,     q|one|,        '',     0,    32,    40, -1.25, undef ],
 [ q|0 37 0 |,      q|one|,        '',     0,    37,     0,     0, undef ],
 [ q|22 0 0 |,      q|one|,        '',    22,     0,     0,     0, undef ],
 [ q|67 0 63 |,   q|fail|, q|no root|,    67,     0,    63, undef, undef ],
 [ q|37 0 -82 |,    q|two|,        '',    37,  0, -82, -1.48870, 1.48870 ],
 [ q|45 95 1 |,     q|two|,        '',    45,  95, 1, -2.10053, -0.01058 ],
 [ q|95 89 75 1|,  q|fail|,      q|1|,    95,    89,    75, undef, undef ],
 [ q|6 69 17 -|,   q|fail|,      q|-|,     6,    69,    17, undef, undef ],
 [ q|64 92 77 v|,  q|fail|,      q|v|,    64,    92,    77, undef, undef ],
 [ q| -13 21 38 |,  q|two|,        '',   -13, 21,  38, 2.69858, -1.08319 ],
 [ q|  -24  81  84  |, q|two|,     '',   -24,  81, 84, 4.20696, -0.83196 ] );

plan tests => scalar @inbase;

while( my $input = shift @inbase )                          {
    @input = split m{}, $input->[0];
    AFSMTS_wrap;
    is_deeply
    [ $rc->[0], @$bb{qw| fail coeff0 coeff1 coeff2 |},
      (defined $input->[6]                            ?
        abs( $input->[6] - $bb->{root}[0] ) < 0.00001 : undef) ],
    [ @$input[ 1 .. 5 ], (defined $input->[6] ? !0 : undef) ],
      sprintf q|(%s) (%s) (%s:%s) (%s:%s)|,
        $input->[0] // q|(undef)|, $bb->{fail} // q||,
        $bb->{root}[0] // q|(undef)|, $bb->{root}[1] // q|(undef)|,
        $input->[6] // q|(undef)|, $input->[7] // q|(undef)| }

# vim: set filetype=perl



( run in 2.372 seconds using v1.01-cache-2.11-cpan-71847e10f99 )