fibonacci.t 829 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #!perl -T
  2. use utf8;
  3. use 5.006;
  4. use strict;
  5. use warnings;
  6. use Test::More;
  7. plan tests => 4;
  8. use Sidef;
  9. my @codes = (<<'EOT1', <<'EOT2', <<'EOT3', <<'EOT4');
  10. func fib((0)) { 0 }
  11. func fib((1)) { 1 }
  12. func fib(n) is cached { fib(n-1) + fib(n-2) }
  13. fib(12)
  14. EOT1
  15. module Fibonacci {
  16. func nth(n) {
  17. n > 1 ? nth(n-2)+nth(n-1) : n
  18. }
  19. }
  20. Fibonacci::nth(12)
  21. EOT2
  22. func fib({.is_neg}) { NaN }
  23. func fib({.is_zero}) { 0 }
  24. func fib({.is_one}) { 1 }
  25. func fib(n) { fib(n-1) + fib(n-2) }
  26. fib(12)
  27. EOT3
  28. func fib (Number n { _ <= 1} = 0) {
  29. return n
  30. }
  31. func fib (Number n) is cached {
  32. fib(n-1) + fib(n-2)
  33. }
  34. fib(12)
  35. EOT4
  36. my $i = 0;
  37. foreach my $code (@codes) {
  38. ++$i;
  39. my $sidef = Sidef->new(name => "fibonacci-$i");
  40. my $result = $sidef->execute_code($code);
  41. is("$result", "144", "fib-$i");
  42. }