fix codetest failure - ASSERT_ARGS does not have a ; after and
[parrot.git] / t / library / range.t
blob60e1ba08009673f872af7953397aa406a6613e3a
1 #!./parrot
2 # Copyright (C) 2007-2008, Parrot Foundation.
3 # $Id$
5 =head1 NAME
7 t/library/range.t
9 =head1 SYNOPSIS
11     % prove t/library/range.t
13 =head1 DESCRIPTION
15 Tests the Range class.
17 =cut
19 .sub main :main
20     .include 'test_more.pir'
21     load_bytecode 'Range.pbc'
23     plan(78)
25     # XXX Convert this to the PDD15 way of creating an object
26     # at the same time you specify the attributes...
28     test_1() # 5 tests
29     test_2() # 5 tests
30     test_3() # 5 tests
31     test_4() # 5 tests
32     test_5() # 5 tests
33     test_6() # 5 tests
34     test_7() # 5 tests
35     test_8() # 6 tests
36     test_9() # 6 tests
37     test_10() # 7 tests
38     test_11() # 7 tests
39     test_12() # 7 tests
40     test_13() # 5 tests
41     test_14() # 5 tests
42 .end
44 .sub 'test_1'
45     .local string test_desc
46     test_desc = "1..3, shift until exhausted"
48     $P0 = new 'Range'
49     $P1 = new 'Integer'
50     $P1 = 1
51     setattribute $P0, 'from', $P1
52     $P1 = new 'Integer'
53     $P1 = 3
54     setattribute $P0, 'to', $P1
55     ok(1, test_desc)
56     $I0 = $P0.'shift'()
57     is($I0, 1, '1 - 1st')
58     $I0 = $P0.'shift'()
59     is($I0, 2, '1 - 2nd')
60     $I0 = $P0.'shift'()
61     is($I0, 3, '1 - 3rd')
63     push_eh catch
64       $I0 = $P0.'shift'()
65       ok(0,'1 - exhausted')
66       goto finally
67     pop_eh
69 catch:
70     # XXX should have more thorough exception check
71     ok(1,'1 - exhausted')
73 finally:
74     .return()
75 .end
78 .sub 'test_2'
79     .local string test_desc
80     test_desc = "-1..3:by(2), shift until exhausted"
81     $P0 = new 'Range'
82     $P1 = new 'Integer'
83     $P1 = -1
84     setattribute $P0, 'from', $P1
85     $P1 = new 'Integer'
86     $P1 = 3
87     setattribute $P0, 'to', $P1
88     $P1 = new 'Integer'
89     $P1 = 2
90     setattribute $P0, 'by', $P1
92     ok(1, test_desc)
93     $I0 = $P0.'shift'()
94     is($I0, -1, '2 - 1st')
95     $I0 = $P0.'shift'()
96     is($I0, 1, '2 - 2nd')
97     $I0 = $P0.'shift'()
98     is($I0, 3, '2 - 3rd')
100     push_eh catch
101       $I0 = $P0.'shift'()
102       ok(0,'2 - exhausted')
103       goto finally
104     pop_eh
106 catch:
107     # XXX should have more thorough exception check
108     ok(1,'2 - exhausted')
110 finally:
111     .return()
112 .end
114 .sub 'test_3'
115     .local string test_desc
116     test_desc = "-1..4:by(2), shift until exhausted"
117     $P0 = new 'Range'
118     $P1 = new 'Integer'
119     $P1 = -1
120     setattribute $P0, 'from', $P1
121     $P1 = new 'Integer'
122     $P1 = 4
123     setattribute $P0, 'to', $P1
124     $P1 = new 'Integer'
125     $P1 = 2
126     setattribute $P0, 'by', $P1
128     ok(1, test_desc)
129     $I0 = $P0.'shift'()
130     is($I0, -1, '3 - 1st')
131     $I0 = $P0.'shift'()
132     is($I0, 1, '3 - 2nd')
133     $I0 = $P0.'shift'()
134     is($I0, 3, '3 - 3rd')
136     push_eh catch
137       $I0 = $P0.'shift'()
138       ok(0,'3 - exhausted')
139       goto finally
140     pop_eh
142 catch:
143     # XXX should have more thorough exception check
144     ok(1,'3 - exhausted')
146 finally:
147     .return()
148 .end
150 .sub 'test_4'
151     .local string test_desc
152     test_desc = "1..3, pop until exhausted"
154     $P0 = new 'Range'
155     $P1 = new 'Integer'
156     $P1 = 1
157     setattribute $P0, 'from', $P1
158     $P1 = new 'Integer'
159     $P1 = 3
160     setattribute $P0, 'to', $P1
161     ok(1, test_desc)
162     $I0 = $P0.'pop'()
163     is($I0, 3, '4 - 1st')
164     $I0 = $P0.'pop'()
165     is($I0, 2, '4 - 2nd')
166     $I0 = $P0.'pop'()
167     is($I0, 1, '4 - 3rd')
169     push_eh catch
170       $I0 = $P0.'pop'()
171       ok(0,'4 - exhausted')
172       goto finally
173     pop_eh
175 catch:
176     # XXX should have more thorough exception check
177     ok(1,'4 - exhausted')
179 finally:
180     .return()
181 .end
183 .sub 'test_5'
184     .local string test_desc
185     test_desc = "-1..3:by(2), pop until exhausted"
186     $P0 = new 'Range'
187     $P1 = new 'Integer'
188     $P1 = -1
189     setattribute $P0, 'from', $P1
190     $P1 = new 'Integer'
191     $P1 = 3
192     setattribute $P0, 'to', $P1
193     $P1 = new 'Integer'
194     $P1 = 2
195     setattribute $P0, 'by', $P1
197     ok(1, test_desc)
198     $I0 = $P0.'pop'()
199     is($I0, 3, '5 - 1st')
200     $I0 = $P0.'pop'()
201     is($I0, 1, '5 - 2nd')
202     $I0 = $P0.'pop'()
203     is($I0, -1, '5 - 3rd')
205     push_eh catch
206       $I0 = $P0.'pop'()
207       ok(0,'5 - exhausted')
208       goto finally
209     pop_eh
211 catch:
212     # XXX should have more thorough exception check
213     ok(1,'5 - exhausted')
215 finally:
216     .return()
217 .end
219 .sub 'test_6'
220     .local string test_desc
221     test_desc = "-1..4:by(2), pop until exhausted"
222     $P0 = new 'Range'
223     $P1 = new 'Integer'
224     $P1 = -1
225     setattribute $P0, 'from', $P1
226     $P1 = new 'Integer'
227     $P1 = 4
228     setattribute $P0, 'to', $P1
229     $P1 = new 'Integer'
230     $P1 = 2
231     setattribute $P0, 'by', $P1
233     ok(1, test_desc)
234     $I0 = $P0.'pop'()
235     is($I0, 4, '6 - 1st')
236     $I0 = $P0.'pop'()
237     is($I0, 2, '6 - 2nd')
238     $I0 = $P0.'pop'()
239     is($I0, 0, '6 - 3rd')
241     push_eh catch
242       $I0 = $P0.'pop'()
243       ok(0,'6 - exhausted')
244       goto finally
245     pop_eh
247 catch:
248     # XXX should have more thorough exception check
249     ok(1,'6 - exhausted')
251 finally:
252     .return()
253 .end
255 .sub 'test_7'
256     .local string test_desc
257     test_desc = "1..42.5, shift & pop"
258     $P0 = new 'Range'
259     $P1 = new 'Integer'
260     $P1 = 1
261     setattribute $P0, 'from', $P1
262     $P1 = new 'Integer'
263     $P1 = 42.5
264     setattribute $P0, 'to', $P1
266     ok(1, test_desc)
267     $N0 = $P0.'shift'()
268     is($N0, 1, '7 - 1st')
269     $N0 = $P0.'pop'()
270     is($N0, 42.5, '7 - last')
272     $N0 = $P0.'get_from'()
273     is($N0, 2, '7 - from')
275     $N0 = $P0.'get_to'()
276     is($N0, 41.5, '7 - to')
278 finally:
279     .return()
280 .end
282 .sub 'test_8'
283     .local string test_desc
284     test_desc = "1..3, reverse, shift until exhausted"
286     $P0 = new 'Range'
287     $P1 = new 'Integer'
288     $P1 = 1
289     setattribute $P0, 'from', $P1
290     $P1 = new 'Integer'
291     $P1 = 3
292     setattribute $P0, 'to', $P1
293     ok(1, test_desc)
295     $P0.'reverse'()
296     ok(1, '8 - reversed')
298     $I0 = $P0.'shift'()
299     is($I0, 3, '8 - 1st')
300     $I0 = $P0.'shift'()
301     is($I0, 2, '8 - 2nd')
302     $I0 = $P0.'shift'()
303     is($I0, 1, '8 - 3rd')
305     push_eh catch
306       $I0 = $P0.'shift'()
307       ok(0,'8 - exhausted')
308       goto finally
309     pop_eh
311 catch:
312     # XXX should have more thorough exception check
313     ok(1,'8 - exhausted')
315 finally:
316     .return()
317 .end
319 .sub 'test_9'
320     .local string test_desc
321     test_desc = "1..3, reverse, pop until exhausted"
323     $P0 = new 'Range'
324     $P1 = new 'Integer'
325     $P1 = 1
326     setattribute $P0, 'from', $P1
327     $P1 = new 'Integer'
328     $P1 = 3
329     setattribute $P0, 'to', $P1
330     ok(1, test_desc)
332     $P0.'reverse'()
333     ok(1, '9 - reversed')
335     $I0 = $P0.'pop'()
336     is($I0, 1, '9 - 1st')
337     $I0 = $P0.'pop'()
338     is($I0, 2, '9 - 2nd')
339     $I0 = $P0.'pop'()
340     is($I0, 3, '9 - 3rd')
342     push_eh catch
343       $I0 = $P0.'pop'()
344       ok(0,'9 - exhausted')
345       goto finally
346     pop_eh
348 catch:
349     # XXX should have more thorough exception check
350     ok(1,'9 - exhausted')
352 finally:
353     .return()
354 .end
356 .sub 'test_10'
357     .local string test_desc
358     test_desc = "1..3, get attributes..."
360     $P0 = new 'Range'
361     $P1 = new 'Integer'
362     $P1 = 1
363     setattribute $P0, 'from', $P1
364     $P1 = new 'Integer'
365     $P1 = 3
366     setattribute $P0, 'to', $P1
367     ok(1, test_desc)
369     $I0 = $P0.'get_from'()
370     is($I0, 1, '10 - from')
371     $I0 = $P0.'get_to'()
372     is($I0, 3, '10 - to')
373     $I0 = $P0.'get_min'()
374     is($I0, 1, '10 - min')
375     $I0 = $P0.'get_max'()
376     is($I0, 3, '10 - max')
377     $P0 = $P0.'get_minmax'()
378     $I0 = $P0[0]
379     is($I0, 1, '10 - min of minmax')
380     $I0 = $P0[1]
381     is($I0, 3, '10 - max of minmax')
383 finally:
384     .return()
385 .end
387 .sub 'test_11'
388     .local string test_desc
389     test_desc = "3..1:by(-1), get attributes"
391     $P0 = new 'Range'
392     $P1 = new 'Integer'
393     $P1 = 3
394     setattribute $P0, 'from', $P1
395     $P1 = new 'Integer'
396     $P1 = 1
397     setattribute $P0, 'to', $P1
398     $P1 = new 'Integer'
399     $P1 = -1
400     setattribute $P0, 'by', $P1
401     ok(1, test_desc)
403     $I0 = $P0.'get_from'()
404     is($I0, 3, '11 - from')
405     $I0 = $P0.'get_to'()
406     is($I0, 1, '11 - to')
407     $I0 = $P0.'get_min'()
408     is($I0, 1, '11 - min')
409     $I0 = $P0.'get_max'()
410     is($I0, 3, '11 - max')
411     $P0 = $P0.'get_minmax'()
412     $I0 = $P0[0]
413     is($I0, 1, '11 - min of minmax')
414     $I0 = $P0[1]
415     is($I0, 3, '11 - max of minmax')
417 finally:
418     .return()
419 .end
421 .sub 'test_12'
422     .local string test_desc
423     test_desc = "1..3, reverse, get attributes"
425     $P0 = new 'Range'
426     $P1 = new 'Integer'
427     $P1 = 1
428     setattribute $P0, 'from', $P1
429     $P1 = new 'Integer'
430     $P1 = 3
431     setattribute $P0, 'to', $P1
432     $P0.'reverse'()
433     ok(1, test_desc)
435     $I0 = $P0.'get_from'()
436     is($I0, 3, '11 - from')
437     $I0 = $P0.'get_to'()
438     is($I0, 1, '11 - to')
439     $I0 = $P0.'get_min'()
440     is($I0, 1, '11 - min')
441     $I0 = $P0.'get_max'()
442     is($I0, 3, '11 - max')
443     $P0 = $P0.'get_minmax'()
444     $I0 = $P0[0]
445     is($I0, 1, '11 - min of minmax')
446     $I0 = $P0[1]
447     is($I0, 3, '11 - max of minmax')
449 finally:
450     .return()
451 .end
453 .sub 'test_13'
454     .local string test_desc
455     test_desc = "1..4, vtable shift, all varieties"
457     $P0 = new 'Range'
458     $P1 = new 'Integer'
459     $P1 = 1
460     setattribute $P0, 'from', $P1
461     $P1 = new 'Integer'
462     $P1 = 4
463     setattribute $P0, 'to', $P1
464     ok(1, test_desc)
466     $P1 = shift $P0
467     is($P1, 1, '13 - 1st')
468     $I0 = shift $P0
469     is($I0, 2, '13 - 2nd')
470     $N0 = shift $P0
471     is($N0, 3.0, '13 - 3rd')
472     $S0 = shift $P0
473     is($S0, "4", '13 - 4th')
475 finally:
476     .return()
477 .end
479 .sub 'test_14'
480     .local string test_desc
481     test_desc = "1..4, vtable pop, all varieties"
483     $P0 = new 'Range'
484     $P1 = new 'Integer'
485     $P1 = 1
486     setattribute $P0, 'from', $P1
487     $P1 = new 'Integer'
488     $P1 = 4
489     setattribute $P0, 'to', $P1
490     ok(1, test_desc)
492     $P1 = pop $P0
493     is($P1, 4, '14 - 1st')
494     $I0 = pop $P0
495     is($I0, 3, '14 - 2nd')
496     $N0 = pop $P0
497     is($N0, 2.0, '14 - 3rd')
498     $S0 = pop $P0
499     is($S0, "1", '14 - 4th')
501 finally:
502     .return()
503 .end
505 # Local Variables:
506 #   mode: pir
507 #   fill-column: 100
508 # End:
509 # vim: expandtab shiftwidth=4 ft=pir: