* src/mmd.c:
[parrot.git] / t / pmc / multisub.t
blob32886e501a593ad3a58283dd15f3319e156018a5
1 #!./parrot
2 # Copyright (C) 2001-2007, 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     load_bytecode 'library/Test/More.pir'
23     .local pmc exports, curr_namespace, test_namespace
24     curr_namespace = get_namespace
25     test_namespace = get_namespace [ "Test::More" ]
26     exports = split " ", "plan ok is"
27     test_namespace.export_to(curr_namespace, exports)
29     plan( 8 )
31     $P0 = new .MultiSub
32     $I0 = defined $P0
33     ok($I0, "create PMC")
35     $I0 = elements $P0
36     is($I0, 0, "multisubs start empty")
38     $S0 = foo()
39     is($S0, "testing no arg", "no argument variant")
40     $S0 = foo("hello")
41     is($S0, "testing hello", "single string variant")
42     $S0 = foo(5)
43     is($S0, "testing 5", "single int variant")
44     $S0 = foo(42, "goodbye")
45     is($S0, "testing 42, goodbye", "int and string variant")
47     ## Test handling of :flat parameters.
48     $P0 = new .ResizablePMCArray
49     push $P0, 42
50     push $P0, "goodbye"
51     $S0 = foo($P0 :flat)
52     is($S0, "testing 42, goodbye", "Int and String :flat")
53     ## Now try double :flat (regression test for RT#43869).
54     $P1 = new .ResizablePMCArray
55     push $P1, 42
56     $P2 = new .ResizablePMCArray
57     push $P2, "goodbye"
58     $S0 = foo($P1 :flat, $P2 :flat)
59     is($S0, "testing 42, goodbye", "Int and String double :flat")
61 .end
63 .sub foo :multi()
64     .return ('testing no arg')
65 .end
67 .sub foo :multi(string)
68     .param string bar
69     $S0 = "testing " . bar
70     .return ($S0)
71 .end
73 .sub foo :multi(int)
74     .param int bar
75     $S1 = bar
76     $S0 = "testing " . $S1
77     .return ($S0)
78 .end
80 .sub foo :multi(int, string)
81     .param int bar
82     .param string baz
83     $S1 = bar
84     $S0 = "testing " . $S1
85     $S0 .= ", "
86     $S0 .= baz
87     .return ($S0)
88 .end
90 .sub foo :multi(Integer, String)
91     .param pmc bar
92     .param pmc baz
93     $S1 = bar
94     $S2 = baz
95     $S0 = "testing " . $S1
96     $S0 .= ", "
97     $S0 .= $S2
98     .return ($S0)
99 .end
101 # Local Variables:
102 #   mode: pir
103 #   fill-column: 70
104 # End:
105 # vim: expandtab shiftwidth=4: