ackermann_function.t 602 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. #!perl -T
  2. use utf8;
  3. use 5.006;
  4. use strict;
  5. use warnings;
  6. use Test::More;
  7. plan tests => 2;
  8. use Sidef;
  9. my @codes = (<<'EOT1', <<'EOT2');
  10. func A(m, n) {
  11. m == 0 ? (n + 1)
  12. : (n == 0 ? (A(m - 1, 1))
  13. : (A(m - 1, A(m, n - 1))));
  14. };
  15. A(3, 2)
  16. EOT1
  17. func A((0), n) { n + 1 }
  18. func A(m, (0)) { A(m - 1, 1) }
  19. func A(m, n) is cached { A(m-1, A(m, n-1)) }
  20. A(3, 2)
  21. EOT2
  22. my $i = 0;
  23. foreach my $code (@codes) {
  24. ++$i;
  25. my $sidef = Sidef->new(name => "ackermann-$i");
  26. my $result = $sidef->execute_code($code);
  27. is("$result", "29", "ack-$i");
  28. }