tagged release 0.6.4
[parrot.git] / t / pmc / multisub.t
blobee6eb23b654d3d675bcbc4701775fcf2865b1682
1 #!./parrot
2 # Copyright (C) 2001-2008, The Perl Foundation.
3 # $Id$
5 =head1 NAME
7 t/pmc/multisub.t - Multi Sub PMCs
9 =head1 SYNOPSIS
11     % prove t/pmc/multisub.t
13 =head1 DESCRIPTION
15 Tests the creation and invocation of Perl6 multi subs.
17 =cut
20 .sub main :main
21     .include 'include/test_more.pir'
23     plan( 8 )
25     $P0 = new 'MultiSub'
26     $I0 = defined $P0
27     ok($I0, "create PMC")
29     $I0 = elements $P0
30     is($I0, 0, "multisubs start empty")
32     $S0 = foo()
33     is($S0, "testing no arg", "no argument variant")
34     $S0 = foo("hello")
35     is($S0, "testing hello", "single string variant")
36     $S0 = foo(5)
37     is($S0, "testing 5", "single int variant")
38     $S0 = foo(42, "goodbye")
39     is($S0, "testing 42, goodbye", "int and string variant")
41     ## Test handling of :flat parameters.
42     $P0 = new 'ResizablePMCArray'
43     push $P0, 42
44     push $P0, "goodbye"
45     $S0 = foo($P0 :flat)
46     is($S0, "testing 42, goodbye", "Int and String :flat")
47     ## Now try double :flat (regression test for RT#43869).
48     $P1 = new 'ResizablePMCArray'
49     push $P1, 42
50     $P2 = new 'ResizablePMCArray'
51     push $P2, "goodbye"
52     $S0 = foo($P1 :flat, $P2 :flat)
53     is($S0, "testing 42, goodbye", "Int and String double :flat")
55 .end
57 .sub foo :multi()
58     .return ('testing no arg')
59 .end
61 .sub foo :multi(string)
62     .param string bar
63     $S0 = "testing " . bar
64     .return ($S0)
65 .end
67 .sub foo :multi(int)
68     .param int bar
69     $S1 = bar
70     $S0 = "testing " . $S1
71     .return ($S0)
72 .end
74 .sub foo :multi(int, string)
75     .param int bar
76     .param string baz
77     $S1 = bar
78     $S0 = "testing " . $S1
79     $S0 .= ", "
80     $S0 .= baz
81     .return ($S0)
82 .end
84 .sub foo :multi(Integer, String)
85     .param pmc bar
86     .param pmc baz
87     $S1 = bar
88     $S2 = baz
89     $S0 = "testing " . $S1
90     $S0 .= ", "
91     $S0 .= $S2
92     .return ($S0)
93 .end
95 # Local Variables:
96 #   mode: pir
97 #   fill-column: 100
98 # End:
99 # vim: expandtab shiftwidth=4 ft=pir: