pmc: convert Fixed*Array and Resizable*Array internal_exceptions to real_exceptions
[parrot.git] / t / pmc / fixedintegerarray.t
blob4c2992bf962d563a8fb0bb5e9a58c4c4cfdf87e1
1 #! perl
2 # Copyright: 2001-2005 The Perl Foundation.  All Rights Reserved.
3 # $Id$
5 use strict;
6 use warnings;
7 use lib qw( . lib ../lib ../../lib );
8 use Test::More;
9 use Parrot::Test tests => 12;
11 =head1 NAME
13 t/pmc/fixedintegerarray.t - FixedIntegerArray PMC
15 =head1 SYNOPSIS
17         % prove t/pmc/FixedIntegerArray.t
19 =head1 DESCRIPTION
21 Tests C<FixedIntegerArray> PMC. Checks size, sets various elements, including
22 out-of-bounds test. Checks INT and PMC keys.
24 =cut
26 my $fp_equality_macro = <<'ENDOFMACRO';
27 .macro fp_eq (  J, K, L )
28         save    N0
29         save    N1
30         save    N2
32         set     N0, .J
33         set     N1, .K
34         sub     N2, N1,N0
35         abs     N2, N2
36         gt      N2, 0.000001, .$FPEQNOK
38         restore N2
39         restore N1
40         restore N0
41         branch  .L
42 .local $FPEQNOK:
43         restore N2
44         restore N1
45         restore N0
46 .endm
47 .macro fp_ne(   J,K,L)
48         save    N0
49         save    N1
50         save    N2
52         set     N0, .J
53         set     N1, .K
54         sub     N2, N1,N0
55         abs     N2, N2
56         lt      N2, 0.000001, .$FPNENOK
58         restore N2
59         restore N1
60         restore N0
61         branch  .L
62 .local $FPNENOK:
63         restore N2
64         restore N1
65         restore N0
66 .endm
67 ENDOFMACRO
69 pasm_output_is(<<'CODE', <<'OUTPUT', "Setting array size");
70         new P0,.FixedIntegerArray
72         set I0,P0
73         eq I0,0,OK_1
74         print "not "
75 OK_1:   print "ok 1\n"
77         set P0,1
78         set I0,P0
79         eq I0,1,OK_2
80         print "not "
81 OK_2:   print "ok 2\n"
83         end
84 CODE
85 ok 1
86 ok 2
87 OUTPUT
89 pasm_output_like(<<'CODE', <<'OUTPUT', "Resetting array size (and getting an exception)");
90         new P0, .FixedIntegerArray
92         set I0,P0
93         set P0,1
94         set P0,2
95         print "Should have gotten an exception\n "
98         end
99 CODE
100 /FixedIntegerArray: Can't resize!
101 current instr\.:/
102 OUTPUT
103 #VIM's syntax highlighter needs this line
105 pasm_output_is(<<'CODE', <<'OUTPUT', "Setting first element");
106         new P0, .FixedIntegerArray
107         set P0, 1
109         set P0[0],-7
110         set I0,P0[0]
111         eq I0,-7,OK_1
112         print "not "
113 OK_1:   print "ok 1\n"
115         set P0[0],3.7
116         set N0,P0[0]
117         eq N0,3.0,OK_2
118         print "not "
119 OK_2:   print "ok 2\n"
121         set P0[0],"17"
122         set S0,P0[0]
123         eq S0,"17",OK_3
124         print "not "
125 OK_3:   print "ok 3\n"
127         end
128 CODE
129 ok 1
130 ok 2
131 ok 3
132 OUTPUT
134 pasm_output_is(<<'CODE', <<'OUTPUT', "Setting second element");
135         new P0, .FixedIntegerArray
136         set P0, 2
138         set P0[1], -7
139         set I0, P0[1]
140         eq I0,-7,OK_1
141         print "not "
142 OK_1:   print "ok 1\n"
144         set P0[1], 3.7
145         set N0, P0[1]
146         eq N0,3.0,OK_2
147         print "not "
148 OK_2:   print "ok 2\n"
150         set P0[1],"17"
151         set S0, P0[1]
152         eq S0,"17",OK_3
153         print "not "
154 OK_3:   print "ok 3\n"
156         end
157 CODE
158 ok 1
159 ok 2
160 ok 3
161 OUTPUT
164 pasm_output_like(<<'CODE', <<'OUTPUT', "Setting out-of-bounds elements");
165         new P0, .FixedIntegerArray
166         set P0, 1
168         set P0[1], -7
170         end
171 CODE
172 /FixedIntegerArray: index out of bounds!
173 current instr\.:/
174 OUTPUT
176 pasm_output_like(<<'CODE', <<'OUTPUT', "Getting out-of-bounds elements");
177         new P0, .FixedIntegerArray
178         set P0, 1
180         set I0, P0[1]
181         end
182 CODE
183 /FixedIntegerArray: index out of bounds!
184 current instr\.:/
185 OUTPUT
187 pasm_output_like(<<'CODE', <<'OUTPUT', "Getting out-of-bounds elements, I");
188         new P0, .FixedIntegerArray
189         set P0, 1
190         set I1, 1
191         set I0, P0[I1]
192         end
193 CODE
194 /FixedIntegerArray: index out of bounds!
195 current instr\.:/
196 OUTPUT
198 pasm_output_like(<<'CODE', <<'OUTPUT', "Getting out-of-bounds elements, -I");
199         new P0, .FixedIntegerArray
200         set P0, 1
201         set I1, -1
202         set I0, P0[I1]
203         end
204 CODE
205 /FixedIntegerArray: index out of bounds!
206 current instr\.:/
207 OUTPUT
210 pasm_output_is(<<"CODE", <<'OUTPUT', "Set via PMC keys, access via INTs");
211 @{[ $fp_equality_macro ]}
212      new P0, .FixedIntegerArray
213      set P0, 3
214      new P1, .Key
216      set P1, 0
217      set P0[P1], 25
219      set P1, 1
220      set P0[P1], 2.5
222      set P1, 2
223      set P0[P1], "17"
225      set I0, P0[0]
226      eq I0, 25, OK1
227      print "not "
228 OK1: print "ok 1\\n"
230      set N0, P0[1]
231      .fp_eq(N0, 2.0, OK2)
232      print "not "
233 OK2: print "ok 2\\n"
235      set S0, P0[2]
236      eq S0, "17", OK3
237      print "not "
238 OK3: print "ok 3\\n"
240      end
241 CODE
242 ok 1
243 ok 2
244 ok 3
245 OUTPUT
247 pasm_output_is(<<"CODE", <<'OUTPUT', "Set via INTs, access via PMC Keys");
248 @{[ $fp_equality_macro ]}
249      new P0, .FixedIntegerArray
250      set P0, 1024
252      set P0[25], 125
253      set P0[128], 10.2
254      set P0[513], "17"
255      new P1, .Integer
256      set P1, 123456
257      set P0[1023], P1
259      new P2, .Key
260      set P2, 25
261      set I0, P0[P2]
262      eq I0, 125, OK1
263      print "not "
264 OK1: print "ok 1\\n"
266      set P2, 128
267      set N0, P0[P2]
268      .fp_eq(N0, 10.0, OK2)
269      print "not "
270 OK2: print "ok 2\\n"
272      set P2, 513
273      set S0, P0[P2]
274      eq S0, "17", OK3
275      print "not "
276 OK3: print "ok 3\\n"
278      set P2, 1023
279      set P3, P0[P2]
280      set I1, P3
281      eq I1, 123456, OK4
282      print "not "
283 OK4: print "ok 4\\n"
285      end
286 CODE
287 ok 1
288 ok 2
289 ok 3
290 ok 4
291 OUTPUT
293 pir_output_is(<< 'CODE', << 'OUTPUT', "check whether interface is done");
295 .sub _main
296     .local pmc pmc1
297     pmc1 = new FixedIntegerArray
298     .local int bool1
299     does bool1, pmc1, "scalar"
300     print bool1
301     print "\n"
302     does bool1, pmc1, "array"
303     print bool1
304     print "\n"
305     does bool1, pmc1, "no_interface"
306     print bool1
307     print "\n"
308     end
309 .end
310 CODE
314 OUTPUT
316 pasm_output_is(<<'CODE', <<'OUTPUT', "new_p_i_s");
317     new P0, .FixedIntegerArray, "(1, 17,42,0,77,0b111,    0Xff)"
318     set I0, P0
319     print I0
320     print "\n"
321     set I1, 0
322 loop:
323     set I2, P0[I1]
324     print I2
325     print "\n"
326     inc I1
327     lt I1, I0, loop
328     print "ok\n"
329     end
330 CODE
340 OUTPUT