* src/pmc/scalar.pmc:
[parrot.git] / t / pmc / ref.t
blobd743b025be9a86f552dddc84f7ffc506f23e4d37
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 => 16;
11 =head1 NAME
13 t/pmc/ref.t - Reference PMC
15 =head1 SYNOPSIS
17     % prove t/pmc/ref.t
19 =head1 DESCRIPTION
21 Tests that vtable method delegation works on a C<Ref> PMC.
23 =cut
25 pasm_output_is( <<'CODE', <<'OUTPUT', "new ref" );
26     new P2, .Integer
27     new P1, .Ref, P2
28     print "ok 1\n"
29     end
30 CODE
31 ok 1
32 OUTPUT
34 pasm_output_is( <<'CODE', <<'OUTPUT', "inc ref" );
35     new P2, .Integer
36     new P1, .Ref, P2
37     inc P1
38     print P1
39     print P2
40     print "\n"
41     end
42 CODE
44 OUTPUT
46 pasm_output_is( <<'CODE', <<'OUTPUT', "dec ref" );
47     new P2, .Integer
48         set P2, 2
49     new P1, .Ref, P2
50     dec P1
51     print P1
52     print P2
53     print "\n"
54     end
55 CODE
57 OUTPUT
59 pasm_output_is( <<'CODE', <<'OUTPUT', "deref" );
60     new P2, .Integer
61     new P1, .Ref, P2
62     print "ok 1\n"
63     deref P3, P1
64     typeof S0, P1
65     print S0
66     print "\n"
67     typeof S0, P3
68     print S0
69     print "\n"
70     end
71 CODE
72 ok 1
73 Ref
74 Integer
75 OUTPUT
77 pasm_output_is( <<'CODE', <<'OUTPUT', "setref ref" );
78     new P2, .Integer
79     new P3, .Float
80     set P3, 0.5
81     new P1, .Ref, P2
82     inc P1
83     print P1
84     print "\n"
85     setref P1, P3
86     inc P1
87     print P1
88     print "\n"
89     print P2
90     print "\n"
91     print P3
92     print "\n"
93     end
94 CODE
96 1.5
98 1.5
99 OUTPUT
101 TODO: {
102     local $TODO = 'pending new Ref semantic';
103     pasm_output_is( <<'CODE', <<'OUTPUT', "assign ref" );
104     new P2, .Integer
105     new P3, .Float
106         set P2, 0
107     set P3, 0.5
108     new P1, .Ref, P2
109     assign P1, 1
110     print P1
111     print "\n"
112     assign P1, P3
113     print P1
114     print "\n"
115     print P2
116     print "\n"
117     print P3
118     print "\n"
119     end
120 CODE
125 OUTPUT
128 pasm_output_is( <<'CODE', <<'OUTPUT', "typeof SharedRef" );
129     new P2, .Integer
130     new P1, .SharedRef, P2
131     print "ok 1\n"
132     set P1, 4711
133     print P1
134     print "\n"
135     typeof S0, P1
136     print S0
137     print "\n"
138     set P1, "hello\n"
139     typeof S0, P1
140     print S0
141     print "\n"
142     print P1
143     end
144 CODE
145 ok 1
146 4711
147 Integer
148 String
149 hello
150 OUTPUT
152 pasm_output_like( <<'CODE', <<'OUTPUT', "deref SharedRef" );
153     new P2, .Integer
154     new P1, .SharedRef, P2
155     print "ok 1\n"
156     deref P3, P1
157     print "never\n"
158     end
159 CODE
160 /ok 1
161 deref not allowed/
162 OUTPUT
164 pir_output_is( << 'CODE', << 'OUTPUT', "check whether interface is done" );
166 .sub _main
167     .local pmc pmc1
168     pmc1 = new Array
169     .local pmc pmc2
170     pmc2 = new Ref, pmc1
171     .local pmc pmc3
172     pmc3 = new SharedRef, pmc1
173     .local int bool1
174     does bool1, pmc2, "scalar"
175     print bool1
176     print "\n"
177     does bool1, pmc2, "array"
178     print bool1
179     print "\n"
180     does bool1, pmc2, "no_interface"
181     print bool1
182     print "\n"
183     does bool1, pmc3, "scalar"
184     print bool1
185     print "\n"
186     does bool1, pmc3, "array"
187     print bool1
188     print "\n"
189     does bool1, pmc3, "no_interface"
190     print bool1
191     print "\n"
192     end
193 .end
194 CODE
201 OUTPUT
203 pasm_output_is( <<'CODE', <<'OUTPUT', "set/get int" );
204     new P2, .Integer
205     new P1, .Ref, P2
206         set P1, 10
207         print P2
208         print "\n"
209         set I0, P1
210         print I0
211         print "\n"
212     end
213 CODE
216 OUTPUT
218 pasm_output_is( <<'CODE', <<'OUTPUT', "set/get float" );
219     new P2, .Float
220     new P1, .Ref, P2
221         set P1, 12.5
222         set N0, P2
223         set N1, 12.5
224         eq N0, N1, OK1
225         print "not"
226 OK1:    print "ok 1\n"
227         set N2, P1
228         eq N2, N1, OK2
229         print "not"
230 OK2:    print "ok 2\n"
231     end
232 CODE
233 ok 1
234 ok 2
235 OUTPUT
237 pasm_output_is( <<'CODE', <<'OUTPUT', "push/pop" );
238     new P2, .ResizableIntegerArray
239     new P1, .Ref, P2
240         push P1, 200
241         push P1, -3
242         set I0, P1
243         print I0
244         print "\n"
245         set I0, P2
246         print I0
247         print "\n"
248         pop I1, P1
249         pop I2, P1
250         print I1
251         print "\n"
252         print I2
253         print "\n"
254         set I0, P1
255         print I0
256         print "\n"
257     end
258 CODE
264 OUTPUT
266 pasm_output_is( <<'CODE', <<'OUTPUT', "add ref, ref, ref" );
267     new P2, .Integer
268     new P1, .Ref, P2
269         set P1, 10
270         add P1, P1, P1
271         print P2
272         print "\n"
273     end
274 CODE
276 OUTPUT
278 pasm_output_is( <<'CODE', <<'OUTPUT', "add ref, ref, int" );
279         new P3, .Integer
280     new P2, .Integer
281     new P1, .Ref, P2
282         set P3, 12
283         set P1, 10
284         add P1, P1, P3
285         print P2
286         print "\n"
287     end
288 CODE
290 OUTPUT
292 pasm_output_is( <<'CODE', <<'OUTPUT', "add ref, int, ref" );
293         new P3, .Integer
294     new P2, .Integer
295     new P1, .Ref, P2
296         set P3, 12
297         set P1, 10
298         add P1, P3, P1
299         print P2
300         print "\n"
301     end
302 CODE
304 OUTPUT
306 pasm_output_is( <<'CODE', <<'OUTPUT', "add ref, int, int" );
307         new P3, .Integer
308     new P2, .Integer
309     new P1, .Ref, P2
310         set P3, 12
311         set P1, 10
312         add P1, P3, P3
313         print P2
314         print "\n"
315     end
316 CODE
318 OUTPUT
320 # Local Variables:
321 #   mode: cperl
322 #   cperl-indent-level: 4
323 #   fill-column: 100
324 # End:
325 # vim: expandtab shiftwidth=4: