#!perl -T use utf8; use 5.006; use strict; use warnings; use Test::More; plan tests => 4; use Sidef; my @codes = (<<'EOT1', <<'EOT2', <<'EOT3', <<'EOT4'); func fib((0)) { 0 } func fib((1)) { 1 } func fib(n) is cached { fib(n-1) + fib(n-2) } fib(12) EOT1 module Fibonacci { func nth(n) { n > 1 ? nth(n-2)+nth(n-1) : n } } Fibonacci::nth(12) EOT2 func fib({.is_neg}) { NaN } func fib({.is_zero}) { 0 } func fib({.is_one}) { 1 } func fib(n) { fib(n-1) + fib(n-2) } fib(12) EOT3 func fib (Number n { _ <= 1} = 0) { return n } func fib (Number n) is cached { fib(n-1) + fib(n-2) } fib(12) EOT4 my $i = 0; foreach my $code (@codes) { ++$i; my $sidef = Sidef->new(name => "fibonacci-$i"); my $result = $sidef->execute_code($code); is("$result", "144", "fib-$i"); }