fix codetest failure - ASSERT_ARGS does not have a ; after and
[parrot.git] / t / pmc / fixedbooleanarray.t
blobc9a99266a08ed68198018ac2d21d862566fa3954
1 #!./parrot
2 # Copyright (C) 2001-2010, Parrot Foundation.
3 # $Id$
5 =head1 NAME
7 t/pmc/fixedbooleanarray.t - FixedBooleanArray PMC
9 =head1 SYNOPSIS
11     % prove t/pmc/fixedbooleanarray.t
13 =head1 DESCRIPTION
15 Tests C<FixedBooleanArray> PMC. Checks size, sets various elements, including
16 out-of-bounds test. Checks INT and PMC keys.
18 =cut
20 .sub 'test' :main
21     .include 'test_more.pir'
23     plan(41)
25     setting_array_size()
26     resizing_not_allowed()
27     setting_first_element()
28     setting_second_element()
29     setting_out_of_bounds()
30     getting_out_of_bounds()
31     set_pmc_access_int()
32     set_int_access_pmc()
33     interface()
34     truth()
35     pmc_keys_and_values()
36     freeze_thaw()
37     test_clone()
38     get_iter()
39     fill()
40     test_new_style_init()
41     test_invalid_init_tt1509()
42 .end
44 .sub 'setting_array_size'
45     $P0 = new ['FixedBooleanArray']
46     $I0 = $P0
47     is($I0, 0, 'size is initially zero')
49     $P0 = 1
50     $I0 = $P0
51     is($I0, 1, 'size set to 1')
52 .end
54 .sub 'resizing_not_allowed'
55     $P0 = new ['FixedBooleanArray']
57     push_eh resizing_not_allowed_handler
58     $P0 = 1
59     $P0 = 2
60     nok(1, 'resizing should not have succeeded')
61     pop_eh
62     .return()
64   resizing_not_allowed_handler:
65     pop_eh
66     ok(1, 'resizing does not work on a fixed-size array')
67 .end
69 .sub 'setting_first_element'
70     $P0 = new ['FixedBooleanArray']
71     $P0 = 1
73     $P0[0] = -7
74     $I0 = $P0[0]
75     is($I0, 1, 'setting first element to a true int value')
77     $P0[0] = 3.7
78     $N0 = $P0[0]
79     is($N0, 1.0, 'setting first element to a true num value')
81     $P0[0] = "17"
82     $S0 = $P0[0]
83     is($S0, "1", 'setting first element to a true string value')
84 .end
86 .sub 'setting_second_element'
87     $P0 = new ['FixedBooleanArray']
88     $P0 = 2
90     $P0[1] = -7
91     $I0 = $P0[1]
92     is($I0, 1, 'setting second element to a true int value')
94     $P0[1] = 3.7
95     $N0 = $P0[1]
96     is($N0, 1.0, 'setting second element to a true num value')
98     $P0[1] = "17"
99     $S0 = $P0[1]
100     is($S0, "1", 'setting second element to a true string value')
101 .end
103 .sub 'setting_out_of_bounds'
104     $P0 = new ['FixedBooleanArray']
105     $P0 = 1
107     push_eh setting_out_of_bounds_handler
108     $P0[1] = -7
109     pop_eh
110     nok(1, "Setting out-of-bounds element wrongly succeeded")
111     .return()
113   setting_out_of_bounds_handler:
114     pop_eh
115     ok(1, "Setting out-of-bounds element did not succeed")
116 .end
118 .sub 'getting_out_of_bounds'
119     $P0 = new ['FixedBooleanArray']
120     $P0 = 1
122     push_eh getting_out_of_bounds_handler
123     $I0 = $P0[1]
124     pop_eh
125     nok(1, "Getting out-of-bounds element wrongly succeeded")
126     .return()
128   getting_out_of_bounds_handler:
129     pop_eh
130     ok(1, "Getting out-of-bounds element does not succeed")
131 .end
133 .sub 'set_pmc_access_int'
134     $P0 = new ['FixedBooleanArray']
135     $P0 = 3
136     $P1 = new ['Key']
138     $P1 = 0
139     $P0[$P1] = 25
141     $P1 = 1
142     $P0[$P1] = 2.5
144     $P1 = 2
145     $P0[$P1] = "17"
147     $I0 = $P0[0]
148     is($I0, 1, "Set via PMC keys, access via INTs: int value")
150     $N0 = $P0[1]
151     is($N0, 1.0, "Set via PMC keys, access via INTs: num value")
153     $S0 = $P0[0]
154     is($S0, "1", "Set via PMC keys, access via INTs: string value")
155 .end
157 .sub 'set_int_access_pmc'
158     $P0 = new ['FixedBooleanArray']
159     $P0 = 1024
161     $P0[25] = 125
162     $P0[128] = 10.2
163     $P0[513] = "17"
164     $P1 = new ['Integer']
165     $P1 = 123456
166     $P0[1023] = $P1
168     $P2 = new ['Key']
170     $P2 = 25
171     $I0 = $P0[$P2]
172     is($I0, 1, 'Set via INTs, access via PMC Keys: int value')
174     $P2 = 128
175     $N0 = $P0[$P2]
176     is($N0, 1.0, 'Set via INTs, access via PMC Keys: num value')
178     $P2 = 513
179     $S0 = $P0[$P2]
180     is($S0, '1', 'Set via INTs, access via PMC Keys: string value')
182     $P2 = 1023
183     $P3 = $P0[$P2]
184     is($P3, 1, 'Set via INTs, access via PMC Keys: PMC value')
185 .end
187 .sub 'interface'
188     $P0 = new ['FixedBooleanArray']
190     $I0 = does $P0, 'scalar'
191     nok($I0, 'FixedBooleanArray does not scalar')
192     $I0 = does $P0, 'array'
193     ok($I0, 'FixedBooleanArray does array')
194     $I0 = does $P0, 'no_interface'
195     nok($I0, 'FixedBooleanArray does not no_interface')
196 .end
198 .sub 'truth'
199     $P0 = new ['FixedBooleanArray']
201     nok($P0, 'Empty FixedBooleanArray is false')
203     $P0 = 1
204     ok($P0, 'Non-empty FixedBooleanArray is true')
206     $P0[0] = 0
207     ok($P0, 'FixedBooleanArray is true, no matter what its values are')
208 .end
210 .sub 'pmc_keys_and_values'
211     $P0 = new ['FixedBooleanArray']
212     $P0 = 2
214     $P1 = new ['Key']
215     $P1 = 1
216     $P2 = new ['Integer']
217     $P2 = 1
218     $P0[$P1] = $P2
220     $I0 = $P0[$P1]
221     is($I0, 1, 'PMC keys & values')
222 .end
224 .sub 'freeze_thaw'
225     .local pmc fba
226     .local int i
227     .local string s
229     fba = new ['FixedBooleanArray']
230     fba = 17
232     fba[1]  = 1
233     fba[4]  = 1
234     fba[8]  = 1
235     fba[12] = 1
236     fba[15] = 1
238     $S0 = fba
239     is($S0, '01001000100010010', 'FixedBooleanArray before freeze')
240     s = freeze fba
241     fba.'fill'(0)
242     fba = thaw s
243     $S0 = fba
244     is($S0, '01001000100010010', 'FixedBooleanArray after thaw')
245 .end
247 .sub test_clone
248     .local pmc fba1, fba2
249     .local int i
250     .local string s
252     fba1 = new ['FixedBooleanArray']
253     fba1 = 17
255     fba1[1]  = 1
256     fba1[4]  = 1
257     fba1[8]  = 1
258     fba1[12] = 1
259     fba1[15] = 1
261     $S0 = fba1
262     is($S0, '01001000100010010', 'FixedBooleanArray before clone')
263     fba2 = clone fba1
264     $S1 = fba2
265     is($S0, $S1, "clones have the same string representation")
266 .end
268 .sub 'get_iter'
269     $P0 = new ['FixedBooleanArray']
270     $P0 = 3
271     $P0[0] = 1
272     $P0[1] = 0
273     $P0[2] = 1
275     $P1 = iter $P0
276     $I2 = shift $P1
277     is($I2, 1, 'get_iter: first element')
278     $I2 = shift $P1
279     is($I2, 0, 'get_iter: second element')
280     $I2 = shift $P1
281     is($I2, 1, 'get_iter: third element')
283     nok($P1, 'iterator exhausted')
284 .end
286 .sub 'fill'
287     $P0 = new ['FixedBooleanArray']
288     $P0.'fill'(0)
289     ok(1, 'Filling empty array')
291     .local int result, i, size
292     size = 1564
293     $P0 = size
295     # Fresh array is empty.
296     i = 0
297     result = 0
298   initial_false_loop:
299     unless i < size goto initial_false_end
300     $I0 = $P0[i]
301     result = or result, $I0
302     inc i
303     goto initial_false_loop
304   initial_false_end:
305     nok(result, "Fresh array filled with 0")
307     $P0.'fill'(1)
308     i = 0
309     result = 1
310     $I1 = 0
311   fill_true_loop:
312     unless i < size goto fill_true_end
313     $I0 = $P0[i]
314     result = and result, $I0
315     inc i
316     goto fill_true_loop
317   fill_true_end:
318     ok(result, "Fill with 1")
320     $P0.'fill'(0)
321     i = 0
322     result = 0
323     $I1 = 0
324   fill_false_loop:
325     unless i < size goto fill_false_end
326     $I0 = $P0[i]
327     result = or result, $I0
328     inc i
329     goto fill_false_loop
330   fill_false_end:
331     nok(result, "Fill with 0")
333 .end
335 .sub test_new_style_init
336     $P0 = new 'FixedBooleanArray', 10
338     $I0 = $P0
339     is($I0, 10, "New style init creates the correct # of elements")
341     $P0 = new ['FixedBooleanArray'], 10
343     $I0 = $P0
344     is($I0, 10, "New style init creates the correct # of elements for a key constant")
345 .end
347 .sub test_invalid_init_tt1509
348     throws_substring(<<'CODE', 'FixedBooleanArray: Cannot set array size to a negative number (-10)', 'New style init does not dump core for negative array lengths')
349     .sub main
350         $P0 = new ['FixedBooleanArray'], -10
351     .end
352 CODE
354     throws_substring(<<'CODE', 'FixedBooleanArray: Cannot set array size to a negative number (-10)', 'New style init (key constant) does not dump core for negative array lengths')
355     .sub main
356         $P0 = new 'FixedBooleanArray', -10
357     .end
358 CODE
359 .end
361 # Local Variables:
362 #   mode: pir
363 #   fill-column: 100
364 # End:
365 # vim: expandtab shiftwidth=4 ft=pir: