more examples
[gitmo/Moose-Autobox.git] / t / 006_y_combinator.t
CommitLineData
bb5a920e 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
6use Test::More tests => 3;
7use Test::Exception;
8
9BEGIN {
10 use_ok('Moose::Autobox');
11}
12
13use Moose::Autobox;
14
15# we need a control in the experiment
16sub fact {
17 my $n = shift;
18 return 1 if $n < 2;
19 return $n * fact($n - 1);
20}
21
22*fact2 = sub {
23 my $f = shift;
24 sub {
25 my $n = shift;
26 return 1 if $n < 2;
27 return $n * $f->($n - 1);
28 }
29}->y;
30
31*fact3 = sub {
32 my $f = shift;
33 sub {
34 my $n = shift;
35 return 1 if $n < 2;
36 return $n * ($f->($f))->($n - 1);
37 }
38}->u;
39
40is(fact(10), fact2(10), '... our factorials match');
41is(fact(10), fact3()->(10), '... our factorials match');
42