fix codetest failure - ASSERT_ARGS does not have a ; after and
[parrot.git] / t / pmc / resizablefloatarray.t
blob3ef81c17e4d8dab86df7ef991795cdb17bf7d85a
1 #!./parrot
2 # Copyright (C) 2001-2009, Parrot Foundation.
3 # $Id$
5 =head1 NAME
7 t/pmc/resizablefloatarray.t - ResizableFloatArray PMC
9 =head1 SYNOPSIS
11     % prove t/pmc/resizablefloatarray.t
13 =head1 DESCRIPTION
15 Tests C<ResizableFloatArray> PMC. Checks size, sets various elements, including
16 out-of-bounds test. Checks INT and PMC keys.
18 =cut
20 .const int TESTS = 55
21 .const num PRECISION = 1e-6
23 .sub 'test' :main
24     .include 'test_more.pir'
25     .include 'fp_equality.pasm'
27     plan(TESTS)
29     creation()
30     setting_size()
31     negative_size()
32     setting_first_element()
33     setting_second_element()
34     setting_negative_index()
35     getting_negative_index()
36     setting_out_of_bounds()
37     getting_out_of_bounds()
38     set_pmc_get_int()
39     set_int_get_pmc()
40     basic_push()
41     push_many_values()
42     basic_pop()
43     pop_many_values()
44     push_pop()
45     pop_empty()
46     shift_empty()
47     push_float()
48     shift_float()
49     unshift_float()
50     check_interface()
51     get_iter()
52     'clone'()
53 .end
55 .sub 'creation'
56     $P0 = new ['ResizableFloatArray']
57     ok(1, 'creation')
58 .end
60 .sub 'setting_size'
61     $P0 = new ['ResizableFloatArray']
63     $I0 = $P0
64     is($I0, 0, 'size is initially 0')
66     $P0 = 1
67     $I0 = $P0
68     is($I0, 1, 'setting size to 1')
70     $P0 = 5
71     $I0 = $P0
72     is($I0, 5, 'resizing to 5')
74     $P0 = 9
75     $I0 = $P0
76     is($I0, 9, 'resizing to 9')
78     $P0 = 7
79     $I0 = $P0
80     is($I0, 7, 'resizing to 7')
81 .end
83 .sub 'negative_size'
84     $P0 = new ['ResizableFloatArray']
86     push_eh negative_size_handler
87     $P0 = -100
88     pop_eh
89     nok(1, 'setting negative array size')
90     .return()
92   negative_size_handler:
93     pop_eh
94     ok(1, "cannot set negative array size")
95 .end
97 .sub 'setting_first_element'
98     $P0 = new ['ResizableFloatArray']
99     $P0 = 1
101     $P0[0] = -7
102     $I0 = $P0[0]
103     is($I0, -7, 'setting first element from int')
105     $P0[0] = 3.7
106     $N0 = $P0[0]
107     is($N0, 3.7, 'setting first element from number')
109     $P0[0] = "17.2"
110     $S0 = $P0[0]
111     is($S0, "17.2", 'setting first element from string')
112 .end
114 .sub 'setting_second_element'
115     $P0 = new ['ResizableFloatArray']
117     $P0[1] = -7
118     $I0 = $P0[1]
119     is($I0, -7, 'setting second element from int')
121     $P0[1] = 3.7
122     $N0 = $P0[1]
123     is($N0, 3.7, 'setting second element from number')
125     $P0[1] = "17.1"
126     $S0 = $P0[1]
127     is($S0, "17.1", 'setting second element from string')
128 .end
130 .sub 'setting_negative_index'
131     $P0 = new ['ResizableFloatArray']
132     $P0 = 1
134     push_eh setting_negative_index_handler
135     $P0[-1] = -7
136     pop_eh
137     nok(1, 'setting negatively indexed elements')
138     .return ()
140   setting_negative_index_handler:
141     ok(1, 'setting negatively indexed elements')
142 .end
144 .sub 'getting_negative_index'
145     $P0 = new ['ResizableFloatArray']
146     $P0 = 1
148     push_eh getting_negative_index_handler
149     $I0 = $P0[-1]
150     pop_eh
151     nok(1, 'getting negatively indexed elements')
152     .return ()
154   getting_negative_index_handler:
155     ok(1, 'getting negatively indexed elements')
156 .end
158 .sub 'setting_out_of_bounds'
159     $P0 = new ['ResizableFloatArray']
160     $P0 = 1
162     $P0[1] = -7
163     ok(1, 'setting out-of-bounds elements')
164 .end
166 .sub 'getting_out_of_bounds'
167     $P0 = new ['ResizableFloatArray']
168     $P0 = 1
170     $I0 = $P0[1]
171     ok(1, 'getting out-of-bounds elements')
172 .end
174 .sub 'set_pmc_get_int'
175     $P0 = new ['ResizableFloatArray']
176     $P1 = new ['Key']
178     $P1 = 0
179     $P0[$P1] = 25
181     $P1 = 1
182     $P0[$P1] = 2.5
184     $P1 = 2
185     $P0[$P1] = "17.32"
187     $I0 = $P0[0]
188     is($I0, 25, 'Set via PMC keys, access via INTs (1)')
190     $N0 = $P0[1]
191     is($N0, 2.5, 'Set via PMC keys, access via INTs (2)', PRECISION)
193     $S0 = $P0[2]
194     is($S0, "17.32", 'Set via PMC keys, access via INTs (3)')
195 .end
197 .sub 'set_int_get_pmc'
198     $P0 = new ['ResizableFloatArray']
199     $P0 = 1
201     $P0[25] = 125
202     $P0[128] = 10.2
203     $P0[513] = "17.3"
204     $P1 = new ['Integer']
205     $P1 = 123456
206     $P0[1023] = $P1
208     $P2 = new ['Key']
210     $P2 = 25
211     $I0 = $P0[$P2]
212     is($I0, 125, 'Set via INTs, access via PMC Keys (1)')
214     $P2 = 128
215     $N0 = $P0[$P2]
216     is($N0, 10.2, 'Set via INTs, access via PMC Keys (2)', PRECISION)
218     $P2 = 513
219     $S0 = $P0[$P2]
220     is($S0, "17.3", 'Set via INTs, access via PMC Keys (3)')
222     $P2 = 1023
223     $I0 = $P0[$P2]
224     is($I0, 123456, 'Set via INTs, access via PMC Keys (4)')
225 .end
227 .sub 'basic_push'
228     $P0 = new ['ResizableFloatArray']
229     push $P0, 1.0
230     push $P0, 2.0
231     push $P0, 3.0
233     $N0 = $P0[0]
234     is($N0, 1.0, 'basic push (1)', PRECISION)
236     $N0 = $P0[1]
237     is($N0, 2.0, 'basic push (2)', PRECISION)
239     $N0 = $P0[2]
240     is($N0, 3.0, 'basic push (3)', PRECISION)
241 .end
243 .sub 'push_many_values'
244     $P0 = new ['ResizableFloatArray']
246     $I0 = 0
247   push_many_values_fill:
248     $N0 = $I0
249     push $P0, $N0
250     inc $I0
251     if $I0 < 100000 goto push_many_values_fill
253   push_many_values_test:
254     dec $I0
255     $N0 = $I0
256     $N1 = $P0[$I0]
257     .fp_ne($N0, $N1, push_many_values_evil)
258     if $I0 > 0 goto push_many_values_test
260     ok(1, 'push many values')
261     .return ()
263   push_many_values_evil:
264     nok(1, 'push many values is evil')
265 .end
267 .sub 'basic_pop'
268     $P0 = new ['ResizableFloatArray']
269     $P0[0] = 1.0
270     $P0[1] = 2.0
271     $P0[2] = 3.0
273     $N0 = pop $P0
274     is($N0, 3.0, 'basic pop (1)', PRECISION)
276     $N0 = pop $P0
277     is($N0, 2.0, 'basic pop (2)', PRECISION)
279     $N0 = pop $P0
280     is($N0, 1.0, 'basic pop (3)', PRECISION)
281 .end
283 .sub 'pop_many_values'
284     $P0 = new ['ResizableFloatArray']
286     $I0 = 0
287   pop_many_values_fill:
288     $N0 = $I0
289     $P0[$I0] = $N0
290     inc $I0
291     if $I0 < 100000 goto pop_many_values_fill
293   pop_many_values_test:
294     dec $I0
295     $N0 = $I0
296     $N1 = pop $P0
297     .fp_ne($N0, $N1, pop_many_values_evil)
298     if $I0 > 0 goto pop_many_values_test
300     ok(1, 'pop many values')
301     .return ()
303   pop_many_values_evil:
304     nok(1, 'pop many values is evil')
305 .end
307 .sub 'push_pop'
308     $P0 = new ['ResizableFloatArray']
309     push $P0, 1.0
310     push $P0, 2.0
311     push $P0, 3.0
313     $N0 = pop $P0
314     is($N0, 3.0, 'push/pop (1)')
316     $N0 = pop $P0
317     is($N0, 2.0, 'push/pop (2)')
319     $N0 = pop $P0
320     is($N0, 1.0, 'push/pop (3)')
321 .end
323 .sub 'pop_empty'
324     $P0 = new ['ResizableFloatArray']
326     push_eh pop_empty_handler
327     $N0 = pop $P0
328     pop_eh
329     nok(1, 'pop from empty array')
330     .return()
332   pop_empty_handler:
333     pop_eh
334     ok(1, "cannot pop from empty array")
335 .end
337 .sub 'shift_empty'
338     $P0 = new ['ResizableFloatArray']
340     push_eh shift_empty_handler
341     $N0 = shift $P0
342     pop_eh
343     nok(1, 'shift from empty array')
344     .return()
346   shift_empty_handler:
347     pop_eh
348     ok(1, "cannot shift from empty array")
349 .end
351 .sub 'check_interface'
352     $P0 = new ['ResizableFloatArray']
354     $I0 = does $P0, 'scalar'
355     nok($I0, 'ResizableFloatArray does not scalar')
357     $I0 = does $P0, 'array'
358     ok($I0, 'ResizableFloatArray does array')
360     $I0 = does $P0, 'no_interface'
361     nok($I0, 'ResizableFloatArray does not no_interface')
362 .end
364 .sub 'push_float'
365     $P0 = new ['ResizableFloatArray']
366     $P0[9999] = 10000.10000
367     push $P0, 123.123
369     $I0 = elements $P0
370     is($I0, 10001, 'push float: size')
372     $N0 = $P0[10000]
373     is($N0, 123.123, 'push float: test pushed element', PRECISION)
374 .end
376 .sub 'shift_float'
377     $P0 = new ['ResizableFloatArray']
378     $P0[0] = 10.1
379     $P0[1] = 20.2
381     $I0 = elements $P0
382     is($I0, 2, 'shift float: size')
384     $N0 = shift $P0
385     is($N0, 10.1, 'shift float: first element', PRECISION)
387     $N0 = shift $P0
388     is($N0, 20.2, 'shift float: second element', PRECISION)
390     $I0 = elements $P0
391     is($I0, 0, 'shift float: array now empty')
392 .end
394 .sub 'unshift_float'
395     $P0 = new ['ResizableFloatArray']
396     unshift $P0, 10.1
397     unshift $P0, 20.2
399     $I0 = elements $P0
400     is($I0, 2, 'unshift float: size')
402     $N0 = $P0[0]
403     is($N0, 20.2, 'unshift float: first element', PRECISION)
405     $N0 = $P0[1]
406     is($N0, 10.1, 'unshift float: second element', PRECISION)
407 .end
409 .sub 'get_iter'
410     $P0 = new ['ResizableFloatArray']
411     $P0[0] = 1.1
412     $P0[1] = 99.99
413     $P0[2] = -345.001
415     $P1 = iter $P0
417     $N0 = shift $P1
418     is($N0, 1.1, 'get_iter: first element ok', PRECISION)
420     $N0 = shift $P1
421     is($N0, 99.99, 'get_iter: second element ok', PRECISION)
423     $N0 = shift $P1
424     is($N0, -345.001, 'get_iter: third element ok', PRECISION)
426     nok($P1, 'get_iter: iterator emptied')
427 .end
429 .sub 'clone'
430     .local int i
431     $P0 = new ['ResizableFloatArray']
433     $I30 = 3000
434     i = 0
435   clone_fill:
436     unless i < $I30 goto clone_filled
437     $N0 = i + 0.01
438     $P0[i] = $N0
439     inc i
440     goto clone_fill
442   clone_filled:
443     $P1 = clone $P0
444     $I0 = $P0
445     $I1 = $P1
446     is($I0, $I1, 'clones have the same size')
448   clone_iter_loop:
449     dec $I0
450     $N0 = $P1[$I0]
451     $N1 = $I0 + 0.01
452     .fp_ne($N0, $N1, clone_evil)
453     if $I0 > 0 goto clone_iter_loop
455     ok(1, 'clone make a good clone')
456     .return()
458   clone_evil:
459     nok(0, 'clone made an evil clone')
460 .end
462 # Local Variables:
463 #   mode: pir
464 #   fill-column: 100
465 # End:
466 # vim: expandtab shiftwidth=4 ft=pir: