tagged release 0.6.4
[parrot.git] / t / pmc / delegate.t
blob4aaab2258519cc5ad5f9de1127bcb9ef0896d885
1 #! perl
2 # Copyright (C) 2001-2005, The Perl Foundation.
3 # $Id$
5 use strict;
6 use warnings;
7 use lib qw( . lib ../lib ../../lib );
8 use Test::More;
9 use Parrot::Test tests => 9;
11 =head1 NAME
13 t/pmc/delegate.t - Method Delegation
15 =head1 SYNOPSIS
17     % prove t/pmc/delegate.t
19 =head1 DESCRIPTION
21 Tests method delegation.
23 =cut
25 # basic functionality - setting and getting types
27 pasm_output_is( <<'CODE', <<'OUTPUT', "delegate set_integer_native" );
28     new P0, 'delegate'
29     set P0, 42
30     end
31 .namespace ["delegate"]
32 .pcc_sub :vtable set_integer_native:
33     get_params "0,0", P2, I5
34     # need a private store to keep state - we dont have that yet
35     # for now check param passing
36     print I5
37     print "\n"
38     # just return
39     returncc
40 CODE
42 OUTPUT
44 pasm_output_is( <<'CODE', <<'OUTPUT', "delegate get_integer" );
45     new P0, 'delegate'
46     set I0, P0
47     print I0
48     print "\n"
49     end
50 .namespace ["delegate"]
51 .pcc_sub :vtable get_integer:
52     get_params "0", P2
53     set I5, 42
54     set_returns "0", I5
55     returncc
56 CODE
58 OUTPUT
60 pasm_output_is( <<'CODE', <<'OUTPUT', "delegate set_string_native" );
61     new P0, 'delegate'
62     set P0, "fortytwo"
63     end
64 .namespace ["delegate"]
65 .pcc_sub :vtable set_string_native:
66     get_params "0,0", P2, S5
67     print S5
68     print "\n"
69     returncc
70 CODE
71 fortytwo
72 OUTPUT
74 pasm_output_is( <<'CODE', <<'OUTPUT', "delegate get_string" );
75     new P0, 'delegate'
76     set S0, P0
77     print S0
78     print "\n"
79     end
80 .namespace ["delegate"]
81 .pcc_sub :vtable get_string:
82     get_params "0", P2
83     set S5, "fortytwo"
84     set_returns "0", S5
85     returncc
86 CODE
87 fortytwo
88 OUTPUT
90 pasm_output_is( <<'CODE', <<'OUTPUT', "delegate set_number_native" );
91     new P0, 'delegate'
92     set P0, 47.11
93     end
94 .namespace ["delegate"]
95 .pcc_sub :vtable set_number_native:
96     get_params "0,0", P2,N5
97     print N5
98     print "\n"
99     returncc
100 CODE
101 47.110000
102 OUTPUT
104 pasm_output_is( <<'CODE', <<'OUTPUT', "delegate get_number" );
105     new P0, 'delegate'
106     set N0, P0
107     print N0
108     print "\n"
109     end
110 .namespace ["delegate"]
111 .pcc_sub :vtable get_number:
112     get_params "0", P2
113     set N5, 47.11
114     set_returns "0", N5
115     returncc
116 CODE
117 47.110000
118 OUTPUT
120 pasm_output_is( <<'CODE', <<'OUTPUT', "delegate assign_pmc" );
121     new P0, 'delegate'
122     new P1, 'Integer'
123     set P1, 42
124     assign P0, P1
125     end
126 .namespace ["delegate"]
127 .pcc_sub :vtable assign_pmc:
128     get_params "0,0", P2, P5
129     print P5
130     print "\n"
131     # just return
132     returncc
133 CODE
135 OUTPUT
137 # math
138 pir_output_is( <<'CODE', <<'OUTPUT', "delegate add_p_p_i" );
139 .sub main
140     new P0, 'delegate'
141     set P0, 1
142     new P2, 'Integer'
143     add P2, P0, 1
144     print P2    # yeah 1+1 = 3
145     print "\n"
146     end
147 .end
148 .namespace ["delegate"]
149 .sub set_integer_native :vtable :method
150     .param int i
151     # just return
152     print i
153     print "\n"
154     returncc
155 .end
156 .sub __add :multi(pmc, int)
157     .param pmc l
158     .param int r
159     .param pmc d
160     print r
161     print "\n"
162     d = new 'Integer'
163     d =  3
164     .return(d)
165 .end
166 CODE
170 OUTPUT
172 # math
173 pir_output_is( <<'CODE', <<'OUTPUT', "delegate add_p_p_p" );
174 .sub main
175     new P0, 'delegate'
176     set P0, 1
177     new P1, 'Integer'
178     set P1, 1
179     new P2, 'Integer'
180     set P2, 777
181     add P2, P0, P1
182     print P2    # yeah 1+1 = 3
183     print "\n"
184     end
185 .end
186 .namespace ["delegate"]
187 .sub set_integer_native :vtable :method
188     .param int i
189     # cant keep state yet
190     # just print arg and return
191     print i
192     print "\n"
193 .end
194 .sub __add :multi(delegate, pmc)
195     .param pmc l
196     .param pmc r
197     .param pmc d
198     print "in __add\n"
199     print l
200     print "\n"
201     print r
202     print "\n"
203     print d
204     print "\n"
205     d = 3
206     .return (d)
207 .end
208 .sub get_string :vtable :method
209     .return("one")
210 .end
211 CODE
213 in __add
218 OUTPUT
220 # Local Variables:
221 #   mode: cperl
222 #   cperl-indent-level: 4
223 #   fill-column: 100
224 # End:
225 # vim: expandtab shiftwidth=4: