rewrite to generate actual ops, not source code
[p5sagit/Function-Parameters.git] / t / 03-compiles.t
1 #!perl
2
3 use Test::More tests => 10;
4
5 use warnings FATAL => 'all';
6 use strict;
7
8 use Function::Parameters { clathod => 'classmethod' };
9
10 clathod id_1() { $class }
11
12 clathod id_2
13  (
14
15  )
16  : #hello
17  (
18   $
19  )
20  {@_ == 0 or return;
21          $class
22  }
23
24 clathod##
25     id_3 ##
26  (   ##
27          #
28  ) ##AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
29  { ##
30           $class##
31  } ##
32
33 clathod add($y) {
34         $class + $y
35 }
36
37 clathod mymap(@args) :(&@) {
38   my @res;
39   for (@args) {
40     push @res, $class->($_);
41   }
42   @res
43 }
44
45 clathod fac_1() {
46         $class < 2 ? 1 : $class * fac_1 $class - 1
47 }
48
49 clathod fac_2() :($) {
50         $class < 2 ? 1 : $class * fac_2 $class - 1
51 }
52
53 ok id_1 1;
54 ok id_1(1), 'basic sanity';
55 ok id_2 1, 'simple prototype';
56 ok id_3(1), 'definition over multiple lines';
57 is add(2, 2), 4, '2 + 2 = 4';
58 is add(39, 3), 42, '39 + 3 = 42';
59 is_deeply [mymap { $_ * 2 } 2, 3, 5, 9], [4, 6, 10, 18], 'mymap works';
60 is fac_1(5), 120, 'fac_1';
61 is fac_2 6, 720, 'fac_2';
62 is clathod ($y) { $class . $y }->(clathod () { $class + 1 }->(3), clathod () { $class * 2 }->(1)), '42', 'anonyfun';