fix codetest failure - ASSERT_ARGS does not have a ; after and
[parrot.git] / t / pmc / resizablestringarray.t
blob4a52c313502cb2ca57f01ecdd0ad2f66006ca050
1 #!./parrot
2 # Copyright (C) 2001-2009, Parrot Foundation.
3 # $Id$
5 =head1 NAME
7 t/pmc/resizablestringarray.t - testing the ResizableStringArray PMC
9 =head1 SYNOPSIS
11     % prove t/pmc/resizablestringarray.t
13 =head1 DESCRIPTION
15 Tests C<ResizableStringArray> PMC. Checks size, sets various elements, including
16 out-of-bounds test. Checks INT and PMC keys.
18 =cut
22 .sub main :main
23     .include 'test_more.pir'
25     # set a test plan
26     plan(263)
28     'size/resize'()
29     'clone'()
31     'set_pmc_keyed'()
32     'set_string_keyed'()
33     'set_integer_keyed'()
34     'set_number_keyed'()
36     'get_pmc_keyed'()
37     'get_string_keyed'()
38     'get_integer_keyed'()
39     'get_number_keyed'()
41     'delete_keyed'()
43     'push_pmc'()
44     'push_string'()
45     'push_integer'()
46     'push_float'()
48     'pop_pmc'()
49     'pop_string'()
50     'pop_integer'()
51     'pop_float'()
53     'shift_pmc'()
54     'shift_string'()
55     'shift_integer'()
56     'shift_float'()
58     'unshift_pmc'()
59     'unshift_string'()
60     'unshift_integer'()
61     'unshift_float'()
63     'unshift_string_resize_threshold'()
65     'does'()
66 #    'get_string'()
67     'sparse'()
69     'splice'()
71     method_push_pmc()
72     method_push_string()
73     method_push_integer()
74     method_push_float()
76     method_pop_pmc()
77     method_pop_string()
78     method_pop_integer()
79     method_pop_float()
81     method_shift_pmc()
82     method_shift_string()
83     method_shift_integer()
84     method_shift_float()
86     method_unshift_pmc()
87     method_unshift_string()
88     method_unshift_integer()
89     method_unshift_float()
90 .end
93 # test the sizing and resizing of the array (including init to 0)
94 # this tests the following vtable functions:
95 #  - elements
96 #  - init
97 #  - get_integer_native
98 #  - set_integer_native
100 .sub 'size/resize'
101     .local pmc array
102     array = new ['ResizableStringArray']
104     $I0 = array
105     $I1 = elements array
106     is($I0, 0, "initial array size (get_int)")
107     is($I1, 0, "initial array size (elements)")
109     array = 1
110     $I0 = array
111     $I1 = elements array
112     is($I0, 1, "array resize to 1 (get_int)")
113     is($I1, 1, "array resize to 1 (elements)")
115     array = 5
116     $I0 = array
117     $I1 = elements array
118     is($I0, 5, "array resize to 5 (get_int)")
119     is($I1, 5, "array resize to 5 (elements)")
121     array = 9
122     $I0 = array
123     $I1 = elements array
124     is($I0, 9, "array resize to 9 (get_int)")
125     is($I1, 9, "array resize to 9 (elements)")
127     array = 7
128     $I0 = array
129     $I1 = elements array
130     is($I0, 7, "array resize to 7 (get_int)")
131     is($I1, 7, "array resize to 7 (elements)")
133     push_eh neg_exception
134       array = -3
135     pop_eh
136     ok(0, "array resize to -3")
137     goto still_ok
139 neg_exception:
140     ok(1, "array resize to -3")
142 still_ok:
143     $I0 = array
144     $I1 = elements array
145     is($I0, 7, "array resize to -3 (get_int)")
146     is($I1, 7, "array resize to -3 (elements)")
147 .end
150 # test setting different elements of the array with PMCs
152 .sub 'set_pmc_keyed'
153     .local pmc array, elem
154     array = new ['ResizableStringArray']
155     elem  = new ['Integer']
157     array = 1
159     elem = 5
160     array[0] = elem
161     $S0 = array[0]
162     is($S0, "5", "set_pmc_keyed_int")
164     elem = 7
165     array["0"] = elem
166     $S0 = array[0]
167     is($S0, "7", "set_pmc_keyed")
169     array = 3
171     elem = 4
172     array[-2] = elem
173     $S0 = array[1]
174     is($S0, "4", "set_pmc_keyed_int (negative)")
176     elem = 9
177     array["-3"] = elem
178     $S0 = array[0]
179     is($S0, "9", "set_pmc_keyed (negative)")
181     array = 3
182     elem  = 8
183     array[4] = elem
184     $I0 = elements array
185     $S0 = array[4]
186     is($I0, 5,   "set_pmc_keyed_int (out of bounds - length)")
187     is($S0, "8", "set_pmc_keyed_int (out of bounds)")
189     array = 3
190     elem  = 11
191     array["4"] = elem
192     $I0 = elements array
193     $S0 = array[4]
194     is($I0, 5,    "set_pmc_keyed (out of bounds - length)")
195     is($S0, "11", "set_pmc_keyed (out of bounds)")
197     push_eh set_pmc_keyed_int_exception
198       array[-10] = elem
199     pop_eh
200     ok(0, "set_pmc_keyed_int (negative, out of bounds)")
201     goto set_pmc_keyed
203 set_pmc_keyed_int_exception:
204     ok(1, "set_pmc_keyed_int (negative, out of bounds)")
206 set_pmc_keyed:
207     push_eh set_pmc_keyed_exception
208         array["-10"] = elem
209     pop_eh
210     ok(0, "set_pmc_keyed (negative, out of bounds)")
211     goto done
213 set_pmc_keyed_exception:
214     ok(1, "set_pmc_keyed (negative, out of bounds)")
216 done:
217     .return()
218 .end
221 # test getting different elements as PMCs
223 .sub 'get_pmc_keyed'
224     .local pmc array
225     array = new ['ResizableStringArray']
226     array = 1
227     array[0] = "first"
228     array[1] = "second"
229     array[2] = "third"
230     array[3] = "fourth"
232     $P0 = array[0]
233     $S0 = typeof $P0
234     is($S0, 'String', "get_pmc_keyed_int - type")
235     is($P0, 'first',  "get_pmc_keyed_int - value")
237     # get_pmc_keyed
238     $P0 = array['1']
239     $S0 = typeof $P0
240     is($S0, 'String', "get_pmc_keyed - type")
241     is($P0, 'second', "get_pmc_keyed - value")
243     # get_pmc_keyed_int (negative)
244     $P0 = array[-1]
245     $S0 = typeof $P0
246     is($S0, 'String', "get_pmc_keyed_int (negative) - type")
247     is($P0, 'fourth', "get_pmc_keyed_int (negative) - value")
249     # get_pmc_keyed (negative)
250     $P0 = array['-2']
251     $S0 = typeof $P0
252     is($S0, 'String', "get_pmc_keyed (negative) - type")
253     is($P0, 'third',  "get_pmc_keyed (negative) - value")
255     array = 1
256     $P0 = array[2]
257     $S0 = typeof $P0
258     is($S0, 'String', "get_pmc_keyed_int (out of bounds) - type")
259     is($P0, '',      "get_pmc_keyed_int (out of bounds) - value")
261     array = 1
262     $P0 = array["2"]
263     $S0 = typeof $P0
264     is($S0, 'String', "get_pmc_keyed (out of bounds) - type")
265     is($P0, '',      "get_pmc_keyed (out of bounds) - value")
267     push_eh get_pmc_keyed_int_exception
268       $P0 = array[-10]
269     pop_eh
270     ok(0, "get_pmc_keyed_int (negative, out of bounds)")
271     goto get_pmc_keyed
273 get_pmc_keyed_int_exception:
274     ok(1, "get_pmc_keyed_int (negative, out of bounds)")
276 get_pmc_keyed:
277     push_eh get_pmc_keyed_exception
278         $P0 = array["-10"]
279     pop_eh
280     ok(0, "get_pmc_keyed (negative, out of bounds)")
281     goto done
283 get_pmc_keyed_exception:
284     ok(1, "get_pmc_keyed (negative, out of bounds)")
286 done:
287     .return()
288 .end
291 # test setting different elements of the array with STRINGs
293 .sub 'set_string_keyed'
294     .local pmc    array
295     .local string elem
296     array = new ['ResizableStringArray']
298     array = 1
300     elem = "5"
301     array[0] = elem
302     $S0 = array[0]
303     is($S0, "5", "set_string_keyed_int")
305     elem = "7"
306     array["0"] = elem
307     $S0 = array[0]
308     is($S0, "7", "set_string_keyed")
310     array = 3
312     elem = "4"
313     array[-2] = elem
314     $S0 = array[1]
315     is($S0, "4", "set_string_keyed_int (negative)")
317     elem = "9"
318     array["-3"] = elem
319     $S0 = array[0]
320     is($S0, "9", "set_string_keyed (negative)")
322     array = 3
323     elem  = "8"
324     array[4] = elem
325     $I0 = elements array
326     $S0 = array[4]
327     is($I0, 5,   "set_string_keyed_int (out of bounds - length)")
328     is($S0, "8", "set_string_keyed_int (out of bounds)")
330     array = 3
331     elem  = "11"
332     array["4"] = elem
333     $I0 = elements array
334     $S0 = array[4]
335     is($I0, 5,    "set_string_keyed (out of bounds - length)")
336     is($S0, "11", "set_string_keyed (out of bounds)")
338     push_eh set_pmc_keyed_int_exception
339       array[-10] = elem
340     pop_eh
341     ok(0, "set_string_keyed_int (negative, out of bounds)")
342     goto set_pmc_keyed
344 set_pmc_keyed_int_exception:
345     ok(1, "set_string_keyed_int (negative, out of bounds)")
347 set_pmc_keyed:
348     push_eh set_pmc_keyed_exception
349         array["-10"] = elem
350     pop_eh
351     ok(0, "set_string_keyed (negative, out of bounds)")
352     goto done
354 set_pmc_keyed_exception:
355     ok(1, "set_string_keyed (negative, out of bounds)")
357 done:
358     .return()
359 .end
362 # test getting different elements as STRINGs
364 .sub 'get_string_keyed'
365     .local pmc array
366     array = new ['ResizableStringArray']
367     array = 1
368     array[0] = "first"
369     array[1] = "second"
370     array[2] = "third"
371     array[3] = "fourth"
373     $S0 = array[0]
374     is($S0, 'first', "get_string_keyed_int")
376     $S0 = array['1']
377     is($S0, 'second', "get_string_keyed")
379     $S0 = array[-1]
380     is($S0, 'fourth', "get_string_keyed_int (negative)")
382     $S0 = array['-2']
383     is($S0, 'third', "get_string_keyed (negative)")
385     array = 1
386     $S0 = array[2]
387     is($S0, '', "get_string_keyed_int (out of bounds)")
389     array = 1
390     $S0 = array["2"]
391     is($S0, '', "get_string_keyed (out of bounds)")
393     push_eh get_string_keyed_int_exception
394       $S0 = array[-10]
395     pop_eh
396     ok(0, "get_string_keyed_int (negative, out of bounds)")
397     goto get_string_keyed
399 get_string_keyed_int_exception:
400     ok(1, "get_string_keyed_int (negative, out of bounds)")
402 get_string_keyed:
403     push_eh get_string_keyed_exception
404         $S0 = array["-10"]
405     pop_eh
406     ok(0, "get_string_keyed (negative, out of bounds)")
407     goto done
409 get_string_keyed_exception:
410     ok(1, "get_string_keyed (negative, out of bounds)")
412 done:
413     .return()
414 .end
417 # test setting different elements of the array with INTVALs
419 .sub 'set_integer_keyed'
420     .local pmc array
421     .local int elem
422     array = new ['ResizableStringArray']
424     array = 1
426     elem = 5
427     array[0] = elem
428     $S0 = array[0]
429     is($S0, "5", "set_integer_keyed_int")
431     elem = 7
432     array["0"] = elem
433     $S0 = array[0]
434     is($S0, "7", "set_integer_keyed")
436     array = 3
438     elem = 4
439     array[-2] = elem
440     $S0 = array[1]
441     is($S0, "4", "set_integer_keyed_int (negative)")
443     elem = 9
444     array["-3"] = elem
445     $S0 = array[0]
446     is($S0, "9", "set_integer_keyed (negative)")
448     array = 3
449     elem  = 8
450     array[4] = elem
451     $I0 = elements array
452     $S0 = array[4]
453     is($I0, 5,   "set_integer_keyed_int (out of bounds - length)")
454     is($S0, "8", "set_integer_keyed_int (out of bounds)")
456     array = 3
457     elem  = 11
458     array["4"] = elem
459     $I0 = elements array
460     $S0 = array[4]
461     is($I0, 5,    "set_integer_keyed (out of bounds - length)")
462     is($S0, "11", "set_integer_keyed (out of bounds)")
464     push_eh set_pmc_keyed_int_exception
465       array[-10] = elem
466     pop_eh
467     ok(0, "set_integer_keyed_int (negative, out of bounds)")
468     goto set_pmc_keyed
470 set_pmc_keyed_int_exception:
471     ok(1, "set_integer_keyed_int (negative, out of bounds)")
473 set_pmc_keyed:
474     push_eh set_pmc_keyed_exception
475       array["-10"] = elem
476     pop_eh
477     ok(0, "set_integer_keyed (negative, out of bounds)")
478     goto done
480 set_pmc_keyed_exception:
481     ok(1, "set_integer_keyed (negative, out of bounds)")
483 done:
484     .return()
485 .end
488 # test getting different elements as INTVALs
490 .sub 'get_integer_keyed'
491     .local pmc array
492     array = new ['ResizableStringArray']
493     array = 1
494     array[0] = "1"
495     array[1] = "2"
496     array[2] = "3"
497     array[3] = "4"
499     $I0 = array[0]
500     is($I0, 1, "get_integer_keyed_int")
502     $I0 = array['1']
503     is($I0, 2, "get_integer_keyed")
505     $I0 = array[-1]
506     is($I0, 4, "get_integer_keyed_int (negative)")
508     $I0 = array['-2']
509     is($I0, 3, "get_integer_keyed (negative)")
511     array = 1
512     $I0 = array[2]
513     is($I0, 0, "get_integer_keyed_int (out of bounds)")
515     array = 1
516     $I0 = array["2"]
517     is($I0, 0, "get_integer_keyed (out of bounds)")
519     push_eh get_integer_keyed_int_exception
520       $I0 = array[-10]
521     pop_eh
522     ok(0, "get_integer_keyed_int (negative, out of bounds)")
523     goto get_integer_keyed
525 get_integer_keyed_int_exception:
526     ok(1, "get_integer_keyed_int (negative, out of bounds)")
528 get_integer_keyed:
529     push_eh get_integer_keyed_exception
530         $I0 = array["-10"]
531     pop_eh
532     ok(0, "get_integer_keyed (negative, out of bounds)")
533     goto done
535 get_integer_keyed_exception:
536     ok(1, "get_integer_keyed (negative, out of bounds)")
538 done:
539     .return()
540 .end
543 # test setting different elements of the array with FLOATs
545 .sub 'set_number_keyed'
546     .local pmc   array
547     .local num elem
548     array = new ['ResizableStringArray']
550     array = 1
552     elem = 5.1
553     array[0] = elem
554     $S0 = array[0]
555     is($S0, "5.1", "set_number_keyed_int")
557     elem = 7.2
558     array["0"] = elem
559     $S0 = array[0]
560     is($S0, "7.2", "set_number_keyed")
562     array = 3
564     elem = 4.3
565     array[-2] = elem
566     $S0 = array[1]
567     is($S0, "4.3", "set_number_keyed_int (negative)")
569     elem = 9.4
570     array["-3"] = elem
571     $S0 = array[0]
572     is($S0, "9.4", "set_number_keyed (negative)")
574     array = 3
575     elem  = 8.5
576     array[4] = elem
577     $I0 = elements array
578     $S0 = array[4]
579     is($I0, 5,     "set_number_keyed_int (out of bounds - length)")
580     is($S0, "8.5", "set_number_keyed_int (out of bounds)")
582     array = 3
583     elem  = 11.6
584     array["4"] = elem
585     $I0 = elements array
586     $S0 = array[4]
587     is($I0, 5,      "set_number_keyed (out of bounds - length)")
588     is($S0, "11.6", "set_number_keyed (out of bounds)")
590     push_eh set_pmc_keyed_int_exception
591       array[-10] = elem
592     pop_eh
593     ok(0, "set_number_keyed_int (negative, out of bounds)")
594     goto set_pmc_keyed
596 set_pmc_keyed_int_exception:
597     ok(1, "set_number_keyed_int (negative, out of bounds)")
599 set_pmc_keyed:
600     push_eh set_pmc_keyed_exception
601         array["-10"] = elem
602     pop_eh
603     ok(0, "set_number_keyed (negative, out of bounds)")
604     goto done
606 set_pmc_keyed_exception:
607     ok(1, "set_number_keyed (negative, out of bounds)")
609 done:
610     .return()
611 .end
614 # test getting different elements as FLOATs
616 .sub 'get_number_keyed'
617     .local pmc array
618     array = new ['ResizableStringArray']
619     array = 1
620     array[0] = "1.1"
621     array[1] = "2.2"
622     array[2] = "3.3"
623     array[3] = "4.4"
625     $N0 = array[0]
626     is($N0, 1.1, "get_number_keyed_int")
628     $N0 = array['1']
629     is($N0, 2.2, "get_number_keyed")
631     $N0 = array[-1]
632     is($N0, 4.4, "get_number_keyed_int (negative)")
634     $N0 = array['-2']
635     is($N0, 3.3, "get_number_keyed (negative)")
637     array = 1
638     $N0 = array[2]
639     is($N0, 0.0, "get_number_keyed_int (out of bounds)")
641     array = 1
642     $N0 = array["2"]
643     is($N0, 0.0, "get_number_keyed (out of bounds)")
645     push_eh get_number_keyed_int_exception
646       $N0 = array[-10]
647     pop_eh
648     ok(0, "get_number_keyed_int (negative, out of bounds)")
649     goto get_number_keyed
651 get_number_keyed_int_exception:
652     ok(1, "get_number_keyed_int (negative, out of bounds)")
654 get_number_keyed:
655     push_eh get_number_keyed_exception
656         $S0 = array["-10"]
657     pop_eh
658     ok(0, "get_number_keyed (negative, out of bounds)")
659     goto done
661 get_number_keyed_exception:
662     ok(1, "get_number_keyed (negative, out of bounds)")
664 done:
665     .return()
666 .end
669 # test delete_keyed
671 .sub 'delete_keyed'
672     .local pmc array
673     array = new ['ResizableStringArray']
674     array[0] = "one"
675     array[1] = "two"
676     array[2] = "three"
677     $P0 = new ['Integer']
678     $P0 = 1
679     delete array[$P0]
680     $I0 = elements array
681     $S0 = array[1]
682     is($I0, 2,       "delete_keyed - elements")
683     is($S0, "three", "delete_keyed - value")
684 .end
687 # test pushing PMCs onto the array
689 .sub 'push_pmc'
690     .local pmc array
691     array = new ['ResizableStringArray']
693     .local pmc array
694     array = new ['ResizableStringArray']
696     array = 0
697     $P0 = new ['String']
698     $P0 = "one"
699     push array, $P0
700     $I0 = elements array
701     $S0 = array[0]
702     is($I0, 1,     "push_pmc - elements")
703     is($S0, "one", "push_pmc - value")
705     $P0 = new ['String']
706     $P0 = "two"
707     push array, $P0
708     $I0 = elements array
709     $S0 = array[1]
710     is($I0, 2,     "push_pmc (grow) - elements")
711     is($S0, "two", "push_pmc (grow) - value")
713     array = 1
714     push array, "three"
715     $I0 = elements array
716     $S0 = array[1]
717     is($I0, 2,       "push_pmc (shrink, grow) - elements")
718     is($S0, "three", "push_pmc (shrink, grow) - value")
719 .end
723 # test pushing STRINGs onto the array
725 .sub 'push_string'
726     .local pmc array
727     array = new ['ResizableStringArray']
729     array = 0
730     push array, "one"
731     $I0 = elements array
732     $S0 = array[0]
733     is($I0, 1,     "push_string - elements")
734     is($S0, "one", "push_string - value")
736     push array, "two"
737     $I0 = elements array
738     $S0 = array[1]
739     is($I0, 2,     "push_string (grow) - elements")
740     is($S0, "two", "push_string (grow) - value")
742     array = 1
743     push array, "three"
744     $I0 = elements array
745     $S0 = array[1]
746     is($I0, 2,       "push_string (shrink, grow) - elements")
747     is($S0, "three", "push_string (shrink, grow) - value")
748 .end
752 # test pushing INTVALs onto the array
754 .sub 'push_integer'
755     .local pmc array
756     array = new ['ResizableStringArray']
758     array = 0
759     push array, 1
760     $I0 = elements array
761     $S0 = array[0]
762     is($I0, 1,   "push_integer - elements")
763     is($S0, "1", "push_integer - value")
765     push array, 2
766     $I0 = elements array
767     $S0 = array[1]
768     is($I0, 2,   "push_integer (grow) - elements")
769     is($S0, "2", "push_integer (grow) - value")
771     array = 1
772     push array, 3
773     $I0 = elements array
774     $S0 = array[1]
775     is($I0, 2,   "push_integer (shrink, grow) - elements")
776     is($S0, "3", "push_integer (shrink, grow) - value")
777 .end
781 # test pushing FLOATs onto the array
783 .sub 'push_float'
784     .local pmc array
785     array = new ['ResizableStringArray']
787     array = 0
788     push array, 1.1
789     $I0 = elements array
790     $S0 = array[0]
791     is($I0, 1,     "push_float - elements")
792     is($S0, "1.1", "push_float - value")
794     push array, 2.2
795     $I0 = elements array
796     $S0 = array[1]
797     is($I0, 2,     "push_float (grow) - elements")
798     is($S0, "2.2", "push_float (grow) - value")
800     array = 1
801     push array, 3.3
802     $I0 = elements array
803     $S0 = array[1]
804     is($I0, 2,     "push_float (shrink, grow) - elements")
805     is($S0, "3.3", "push_float (shrink, grow) - value")
806 .end
808 .sub 'pop_pmc'
809     .local pmc array
810     array = new ['ResizableStringArray']
812     array[1] = "foo"
813     $P0 = pop array
814     $I0 = elements array
815     $S0 = typeof $P0
816     $S1 = $P0
817     is($I0, 1,        "pop_pmc - elements")
818     is($S0, 'String', "pop_pmc - type")
819     is($S1, 'foo',    "pop_pmc - value")
821     array = 0
822     push_eh exception
823       $P0 = pop array
824     pop_eh
825     ok(0, "pop_pmc - exception")
826     .return()
828 exception:
829     ok(1, "pop_pmc - exception")
830     .return()
831 .end
833 .sub 'pop_string'
834     .local pmc array
835     array = new ['ResizableStringArray']
837     array[1] = "foo"
838     $S0 = pop array
839     $I0 = elements array
840     is($I0, 1,        "pop_string - elements")
841     is($S0, 'foo',    "pop_string - value")
843     array = 0
844     push_eh exception
845       $S0 = pop array
846     pop_eh
847     ok(0, "pop_string - exception")
848     .return()
850 exception:
851     ok(1, "pop_string - exception")
852     .return()
853 .end
855 .sub 'pop_integer'
856     .local pmc array
857     array = new ['ResizableStringArray']
859     array[1] = "2"
860     $I1 = pop array
861     $I0 = elements array
862     is($I0, 1, "pop_integer - elements")
863     is($I1, 2, "pop_integer - value")
865     array = 0
866     push_eh exception
867       $I0 = pop array
868     pop_eh
869     ok(0, "pop_integer - exception")
870     .return()
872 exception:
873     ok(1, "pop_integer - exception")
874     .return()
875 .end
877 .sub 'pop_float'
878     .local pmc array
879     array = new ['ResizableStringArray']
881     array[1] = "2.2"
882     $N0 = pop array
883     $I0 = elements array
884     is($I0, 1,   "pop_float - elements")
885     is($N0, 2.2, "pop_float - value")
887     array = 0
888     push_eh exception
889       $N0 = pop array
890     pop_eh
891     ok(0, "pop_float - exception")
892     .return()
894 exception:
895     ok(1, "pop_float - exception")
896     .return()
897 .end
899 .sub 'shift_pmc'
900     .local pmc array
901     array = new ['ResizableStringArray']
903     array[0] = "foo"
904     array[1] = "bar"
905     $P0 = shift array
906     $I0 = elements array
907     $S0 = typeof $P0
908     $S1 = $P0
909     is($I0, 1,        "shift_pmc - elements")
910     is($S0, 'String', "shift_pmc - type")
911     is($S1, 'foo',    "shift_pmc - value")
913     array = 0
914     push_eh exception
915       $P0 = shift array
916     pop_eh
917     ok(0, "shift_pmc - exception")
918     .return()
920 exception:
921     ok(1, "shift_pmc - exception")
922     .return()
923 .end
925 .sub 'shift_string'
926     .local pmc array
927     array = new ['ResizableStringArray']
929     array[0] = "foo"
930     array[1] = "bar"
931     $S0 = shift array
932     $I0 = elements array
933     is($I0, 1,        "shift_string - elements")
934     is($S0, 'foo',    "shift_string - value")
936     array = 0
937     push_eh exception
938       $S0 = shift array
939     pop_eh
940     ok(0, "shift_string - exception")
941     .return()
943 exception:
944     ok(1, "shift_string - exception")
945     .return()
946 .end
948 .sub 'shift_integer'
949     .local pmc array
950     array = new ['ResizableStringArray']
952     array[0] = "2"
953     array[1] = "3"
954     $I1 = shift array
955     $I0 = elements array
956     is($I0, 1, "shift_integer - elements")
957     is($I1, 2, "shift_integer - value")
959     array = 0
960     push_eh exception
961       $I0 = shift array
962     pop_eh
963     ok(0, "shift_integer - exception")
964     .return()
966 exception:
967     ok(1, "shift_integer - exception")
968     .return()
969 .end
971 .sub 'shift_float'
972     .local pmc array
973     array = new ['ResizableStringArray']
975     array[0] = "2.2"
976     array[1] = "3.3"
977     $N0 = shift array
978     $I0 = elements array
979     is($I0, 1,   "shift_float - elements")
980     is($N0, 2.2, "shift_float - value")
982     array = 0
983     push_eh exception
984       $N0 = shift array
985     pop_eh
986     ok(0, "shift_float - exception")
987     .return()
989 exception:
990     ok(1, "shift_float - exception")
991     .return()
992 .end
995 # test unshifting PMCs onto the array
997 .sub 'unshift_pmc'
998     .local pmc array
999     array = new ['ResizableStringArray']
1001     array = 0
1002     $P0 = new ['String']
1003     $P0 = "one"
1004     unshift array, $P0
1005     $I0 = elements array
1006     $S0 = array[0]
1007     is($I0, 1,     "unshift_pmc - elements")
1008     is($S0, "one", "unshift_pmc - value")
1010     $P0 = new ['String']
1011     $P0 = "two"
1012     unshift array, $P0
1013     $I0 = elements array
1014     $S0 = array[0]
1015     is($I0, 2,     "unshift_pmc (grow) - elements")
1016     is($S0, "two", "unshift_pmc (grow) - value")
1018     array = 1
1019     unshift array, "three"
1020     $I0 = elements array
1021     $S0 = array[0]
1022     is($I0, 2,       "unshift_pmc (shrink, grow) - elements")
1023     is($S0, "three", "unshift_pmc (shrink, grow) - value")
1024 .end
1028 # test unshifting STRINGs onto the array
1030 .sub 'unshift_string'
1031     .local pmc array
1032     array = new ['ResizableStringArray']
1034     array = 0
1035     unshift array, "one"
1036     $I0 = elements array
1037     $S0 = array[0]
1038     is($I0, 1,     "unshift_string - elements")
1039     is($S0, "one", "unshift_string - value")
1041     unshift array, "two"
1042     $I0 = elements array
1043     $S0 = array[0]
1044     is($I0, 2,     "unshift_string (grow) - elements")
1045     is($S0, "two", "unshift_string (grow) - value")
1047     array = 1
1048     unshift array, "three"
1049     $I0 = elements array
1050     $S0 = array[0]
1051     is($I0, 2,       "unshift_string (shrink, grow) - elements")
1052     is($S0, "three", "unshift_string (shrink, grow) - value")
1053 .end
1057 # Test unshifting STRINGs onto an array
1058 # that is at the default resize_threshold(8).
1059 # Trac ticket# 256
1061 .sub 'unshift_string_resize_threshold'
1062     .local pmc rsarray
1063     rsarray = new ['ResizableStringArray']
1065     push rsarray, "1"
1066     push rsarray, "2"
1067     push rsarray, "3"
1068     push rsarray, "4"
1069     push rsarray, "5"
1070     push rsarray, "6"
1071     push rsarray, "7"
1072     push rsarray, "8"
1073 # rsarray is now:  1  2  3  4  5  6  7  8
1075 # This unshift will cause a resize larger than the
1076 # initial resize_threshold (8), triggering the bug.
1077     unshift rsarray, "0"
1079 # rsarray should now be   : 0  1  2  3  4  5  6  7  8
1080 # The bug causes it to be : 0  2  3  4  5  6  7  8  ""
1082     $S0 = rsarray[0]
1083     $S1 = rsarray[1]
1084     $S2 = rsarray[2]
1085     $S3 = rsarray[3]
1086     $S4 = rsarray[4]
1087     $S5 = rsarray[5]
1088     $S6 = rsarray[6]
1089     $S7 = rsarray[7]
1090     $S8 = rsarray[8]
1092     $S9  = $S0
1093     $S9 .= $S1
1094     $S9 .= $S2
1095     $S9 .= $S3
1096     $S9 .= $S4
1097     $S9 .= $S5
1098     $S9 .= $S6
1099     $S9 .= $S7
1100     $S9 .= $S8
1102     is( $S9, "012345678", 'Unshift prepends at array instead of overlaying' )
1103 .end
1107 # test unshifting INTVALs onto the array
1109 .sub 'unshift_integer'
1110     .local pmc array
1111     array = new ['ResizableStringArray']
1113     # unshift_string
1114     array = 0
1115     unshift array, 1
1116     $I0 = elements array
1117     $S0 = array[0]
1118     is($I0, 1,   "unshift_integer - elements")
1119     is($S0, "1", "unshift_integer - value")
1121     unshift array, 2
1122     $I0 = elements array
1123     $S0 = array[0]
1124     is($I0, 2,   "unshift_integer (grow) - elements")
1125     is($S0, "2", "unshift_integer (grow) - value")
1127     array = 1
1128     unshift array, 3
1129     $I0 = elements array
1130     $S0 = array[0]
1131     is($I0, 2,   "unshift_integer (shrink, grow) - elements")
1132     is($S0, "3", "unshift_integer (shrink, grow) - value")
1133 .end
1137 # test unshifting FLOATs onto the array
1139 .sub 'unshift_float'
1140     .local pmc array
1141     array = new ['ResizableStringArray']
1143     array = 0
1144     unshift array, 1.1
1145     $I0 = elements array
1146     $S0 = array[0]
1147     is($I0, 1,     "unshift_float - elements")
1148     is($S0, "1.1", "unshift_float - value")
1150     unshift array, 2.2
1151     $I0 = elements array
1152     $S0 = array[0]
1153     is($I0, 2,     "unshift_float (grow) - elements")
1154     is($S0, "2.2", "unshift_float (grow) - value")
1156     array = 1
1157     unshift array, 3.3
1158     $I0 = elements array
1159     $S0 = array[0]
1160     is($I0, 2,     "unshift_float (shrink, grow) - elements")
1161     is($S0, "3.3", "unshift_float (shrink, grow) - value")
1162 .end
1165 # test clone
1167 .sub 'clone'
1168     .local pmc array
1169     array = new ['ResizableStringArray']
1170     array = 3
1171     array[0] = 1
1172     array[1] = 3.2
1173     array[2] = "boo"
1175     .local pmc cloned
1176     cloned = clone array
1178     $I0 = elements cloned
1179     is($I0, 3, 'cloned array - size')
1181     $S0 = typeof cloned
1182     is($S0, 'ResizableStringArray', 'cloned array - type')
1184     is_deeply(cloned, array, 'cloned array - deep comparison')
1185 .end
1187 .sub 'get_string'
1188     .local pmc array
1189     array = new ['ResizablePMCArray']
1190     array[0] = "foo"
1191     array[1] = "bar"
1192     array[2] = "baz"
1194     $S0 = array
1195     is($S0, 3, "get_string")
1196 .end
1198 .sub 'does'
1199     .local pmc array
1200     array = new ['ResizableStringArray']
1202     $I0 = does array, 'array'
1203     is($I0, 1, "does array")
1205     $I0 = does array, 'scalar'
1206     is($I0, 0, "doesn't do scalar")
1207 .end
1210 # a test with a sparse array. this converted from PASM from the original
1211 # ResizableStringArray tests.
1213 .sub sparse
1214     .local pmc array
1215     array = new ['ResizableStringArray']
1217     $I10 = 110000
1218     $I0  = 1
1219 lp1:
1220     $I1 = $I0 + 5
1221     $I9 = $I1 % 2
1223     $S9 = $I9
1224     array[$I0] = $S9
1226     $I3 = $I1 + $I0
1227     $I9 = $I3 % 2
1229     $S9 = $I9
1230     push array, $S9
1232     $I0 = shl $I0, 1
1233     inc $I0
1234     if $I0 <= $I10 goto lp1
1236     $I0 = 1
1237 lp2:
1238     $I1 = $I0 + 5
1239     $I9 = $I1 % 2
1241     $S2 = array[$I0]
1242     $I2 = $S2
1243     if $I2 != $I9 goto err_1
1245     $I3 = $I1 + $I0
1246     $I9 = $I3 % 2
1248     $I4 = $I0 + 1
1249     $S4 = array[$I4]
1250     $I4 = $S4
1251     if $I9 != $I4 goto err_1
1253     $I0 = shl $I0, 1
1254     inc $I0
1255     if $I0 <= $I10 goto lp2
1256     ok(1, "sparse 1")
1258     # now repeat and fill some holes
1259 two:
1260     $I0 = 777
1261 lp3:
1262     $I1 = $I0 + 5
1263     $I9 = $I1 % 2
1264     $S9 = $I9
1265     array[$I0] = $S9
1267     $I0 += 666
1268     if $I0 <= $I10 goto lp3
1270     $I0 = 777
1271 lp4:
1272     $I1 = $I0 + 5
1273     $I9 = $I1 % 2
1274     $S2 = array[$I0]
1275     $I2 = $S2
1276     if $I2 != $I9 goto err_2
1278     $I0 += 666
1279     if $I0 <= $I10 goto lp4
1280     ok(1, "sparse 2")
1281     .return()
1283 err_1:
1284     ok(0, "sparse 1")
1285     goto two
1287 err_2:
1288     ok(0, "sparse 2")
1289     .return()
1290 .end
1296 .sub 'splice'
1297     $P1 = new ['ResizableStringArray']
1298     $P1 = 3
1299     $P1[0] = '1'
1300     $P1[1] = '2'
1301     $P1[2] = '3'
1302     $P2 = new ['ResizableStringArray']
1303     $P2 = 1
1304     $P2[0] = 'A'
1305     splice $P1, $P2, 0, 2
1306     $S0 = join "", $P1
1307     is($S0, "A3", "splice replace")
1309     $P1 = new ['ResizableStringArray']
1310     $P1 = 3
1311     $P1[0] = '1'
1312     $P1[1] = '2'
1313     $P1[2] = '3'
1314     $P2 = new ['ResizableStringArray']
1315     $P2 = 1
1316     $P2[0] = 'A'
1317     splice $P1, $P2, 1, 2
1318     $S0 = join "", $P1
1319     is($S0, "1A", "splice replace")
1321 .macro SpliceMadeEasy(code, out, testing)
1322     $P1 = new ['ResizableStringArray']
1323     $P1[0] = "1"
1324     $P1[1] = "2"
1325     $P1[2] = "3"
1326     $P1[3] = "4"
1327     $P1[4] = "5"
1328     $P2 = new ['ResizableStringArray']
1329     $P2[0] = 'A'
1330     $P2[1] = 'B'
1331     $P2[2] = 'C'
1332     $P2[3] = 'D'
1333     $P2[4] = 'E'
1334 .code
1335     $S0 = join "", $P1
1336     is($S0, .out, .testing)
1337 .endm
1339     .SpliceMadeEasy({ splice $P1, $P2, 0, 5 }, "ABCDE", "splice, complete replace")
1340     .SpliceMadeEasy({ splice $P1, $P2, 5, 0 }, "12345ABCDE", "splice, append")
1341     .SpliceMadeEasy({ splice $P1, $P2, 4, 0 }, "1234ABCDE5", "splice, insert before last element")
1342     .SpliceMadeEasy({ splice $P1, $P2, 3, 0 }, "123ABCDE45", "splice, append-in-middle")
1343     .SpliceMadeEasy({ splice $P1, $P2, 0, 2 }, "ABCDE345", "splice, replace at beginning")
1344     .SpliceMadeEasy({ splice $P1, $P2, 2, 2 }, "12ABCDE5", "splice, replace in middle")
1345     .SpliceMadeEasy({ splice $P1, $P2, 3, 2 }, "123ABCDE", "splice, replace at end")
1346     .SpliceMadeEasy({ splice $P1, $P2, -3, 2 }, "12ABCDE5", "splice, replace in middle start from end")
1347     .SpliceMadeEasy({
1348         $P2 = new ['ResizableStringArray']
1349         splice $P1, $P2, 2, 2
1350     }, "125", "splice, empty replacement")
1351     .SpliceMadeEasy({
1352         $P2 = new ['ResizableStringArray']
1353         $P2[0] = "A"
1354         splice $P1, $P2, 2, 1
1355     }, "12A45", "splice, equal size replacement")
1357     $P1 = new ['ResizableStringArray']
1358     $P1[0] = "1"
1359     $P2 = new ['ResizableStringArray']
1360     $P2[0] = 'A'
1361     $I0 = 0
1362     push_eh handle_negtoobig
1363     splice $P1, $P2, -10, 1
1364     goto after_negtoobig
1365 handle_negtoobig:
1366     inc $I0
1367 after_negtoobig:
1368     pop_eh
1369     is($I0, 1, 'splice, negative offset too long throws')
1371     $P1 = new ['ResizableStringArray']
1372     $P1[0] = "1"
1373     $P1[1] = "2"
1374     $P1[2] = "3"
1375     $P1[3] = "4"
1376     $P1[4] = "5"
1377     $P2 = new ['ResizablePMCArray']
1378     $P2[0] = 'A'
1379     $P2[1] = 'B'
1380     $P2[2] = 'C'
1381     $P2[3] = 'D'
1382     $P2[4] = 'E'
1384     push_eh bad_type
1385     splice $P1, $P2, 1, 0
1386     pop_eh
1387     goto still_ok
1389     .local pmc exception
1390     .local string message
1391 bad_type:
1392     pop_eh
1393     .get_results (exception)
1394     message = exception
1395 still_ok:
1396     message = substr message, 22, 23
1397     is(message, 'illegal type for splice', "splice with a different type")
1398 .end
1401 # test pushing PMCs onto the array
1403 .sub method_push_pmc
1404     .local pmc array
1405     array = new ['ResizableStringArray']
1407     array = 0
1408     $P0 = new ['String']
1409     $P0 = "one"
1410     array.'push'($P0)
1411     $I0 = elements array
1412     $S0 = array[0]
1413     is($I0, 1,     "method_push_pmc - elements")
1414     is($S0, "one", "method_push_pmc - value")
1416     $P0 = new ['String']
1417     $P0 = "two"
1418     array.'push'($P0)
1419     $I0 = elements array
1420     $S0 = array[1]
1421     is($I0, 2,     "method_push_pmc (grow) - elements")
1422     is($S0, "two", "method_push_pmc (grow) - value")
1424     array = 1
1425     array.'push'('three')
1426     $I0 = elements array
1427     $S0 = array[1]
1428     is($I0, 2,       "method_push_pmc (shrink, grow) - elements")
1429     is($S0, "three", "method_push_pmc (shrink, grow) - value")
1430 .end
1434 # test pushing STRINGs onto the array
1436 .sub method_push_string
1437     .local pmc array
1438     array = new ['ResizableStringArray']
1440     array = 0
1441     array.'push'("one")
1442     $I0 = elements array
1443     $S0 = array[0]
1444     is($I0, 1,     "method_push_string - elements")
1445     is($S0, "one", "method_push_string - value")
1447     array.'push'("two")
1448     $I0 = elements array
1449     $S0 = array[1]
1450     is($I0, 2,     "method_push_string (grow) - elements")
1451     is($S0, "two", "method_push_string (grow) - value")
1453     array = 1
1454     array.'push'("three")
1455     $I0 = elements array
1456     $S0 = array[1]
1457     is($I0, 2,       "method_push_string (shrink, grow) - elements")
1458     is($S0, "three", "method_push_string (shrink, grow) - value")
1459 .end
1463 # test pushing INTVALs onto the array
1465 .sub method_push_integer
1466     .local pmc array
1467     array = new ['ResizableStringArray']
1469     array = 0
1470     array.'push'(1)
1471     $I0 = elements array
1472     $S0 = array[0]
1473     is($I0, 1,   "method_push_integer - elements")
1474     is($S0, "1", "method_push_integer - value")
1476     array.'push'(2)
1477     $I0 = elements array
1478     $S0 = array[1]
1479     is($I0, 2,   "method_push_integer (grow) - elements")
1480     is($S0, "2", "method_push_integer (grow) - value")
1482     array = 1
1483     array.'push'(3)
1484     $I0 = elements array
1485     $S0 = array[1]
1486     is($I0, 2,   "method_push_integer (shrink, grow) - elements")
1487     is($S0, "3", "method_push_integer (shrink, grow) - value")
1488 .end
1492 # test pushing FLOATs onto the array
1494 .sub method_push_float
1495     .local pmc array
1496     array = new ['ResizableStringArray']
1498     array = 0
1499     array.'push'(1.1)
1500     $I0 = elements array
1501     $S0 = array[0]
1502     is($I0, 1,     "method_push_float - elements")
1503     is($S0, "1.1", "method_push_float - value")
1505     array.'push'(2.2)
1506     $I0 = elements array
1507     $S0 = array[1]
1508     is($I0, 2,     "method_push_float (grow) - elements")
1509     is($S0, "2.2", "method_push_float (grow) - value")
1511     array = 1
1512     array.'push'(3.3)
1513     $I0 = elements array
1514     $S0 = array[1]
1515     is($I0, 2,     "method_push_float (shrink, grow) - elements")
1516     is($S0, "3.3", "method_push_float (shrink, grow) - value")
1517 .end
1520 .sub method_pop_pmc
1521     .local pmc array
1522     array = new ['ResizableStringArray']
1524     array[1] = "foo"
1525     $P0 = array.'pop'()
1526     $I0 = elements array
1527     $S0 = typeof $P0
1528     $S1 = $P0
1529     is($I0, 1,        "method_pop_pmc - elements")
1530     is($S0, 'String', "method_pop_pmc - type")
1531     is($S1, 'foo',    "method_pop_pmc - value")
1533     array = 0
1534     push_eh exception
1535       $P0 = array.'pop'()
1536     pop_eh
1537     ok(0, "method_pop_pmc - exception")
1538     .return()
1540 exception:
1541     ok(1, "method_pop_pmc - exception")
1542     .return()
1543 .end
1545 .sub method_pop_string
1546     .local pmc array
1547     array = new ['ResizableStringArray']
1549     array[1] = "foo"
1550     $S0 = array.'pop'()
1551     $I0 = elements array
1552     is($I0, 1,     "method_pop_string - elements")
1553     is($S0, 'foo', "method_pop_string - value")
1555     array = 0
1556     push_eh exception
1557       $S0 = array.'pop'()
1558     pop_eh
1559     ok(0, "method_pop_string - exception")
1560     .return()
1562 exception:
1563     ok(1, "method_pop_string - exception")
1564     .return()
1565 .end
1567 .sub method_pop_integer
1568     .local pmc array
1569     array = new ['ResizableStringArray']
1571     array[1] = "2"
1572     $I1 = array.'pop'()
1573     $I0 = elements array
1574     is($I0, 1, "method_pop_integer - elements")
1575     is($I1, 2, "method_pop_integer - value")
1577     array = 0
1578     push_eh exception
1579       $I0 = array.'pop'()
1580     pop_eh
1581     ok(0, "method_pop_integer - exception")
1582     .return()
1584 exception:
1585     ok(1, "method_pop_integer - exception")
1586     .return()
1587 .end
1589 .sub method_pop_float
1590     .local pmc array
1591     array = new ['ResizableStringArray']
1593     array[1] = "2.2"
1594     $N0 = array.'pop'()
1595     $I0 = elements array
1596     is($I0, 1,   "method_pop_float - elements")
1597     is($N0, 2.2, "method_pop_float - value")
1599     array = 0
1600     push_eh exception
1601       $N0 = array.'pop'()
1602     pop_eh
1603     ok(0, "method_pop_float - exception")
1604     .return()
1606 exception:
1607     ok(1, "method_pop_float - exception")
1608     .return()
1609 .end
1611 .sub method_shift_pmc
1612     .local pmc array
1613     array = new ['ResizableStringArray']
1615     array[0] = "foo"
1616     array[1] = "bar"
1617     $P0 = array.'shift'()
1618     $I0 = elements array
1619     $S0 = typeof $P0
1620     $S1 = $P0
1621     is($I0, 1,        "method_shift_pmc - elements")
1622     is($S0, 'String', "method_shift_pmc - type")
1623     is($S1, 'foo',    "method_shift_pmc - value")
1625     array = 0
1626     push_eh exception
1627       $P0 = array.'shift'()
1628     pop_eh
1629     ok(0, "method_shift_pmc - exception")
1630     .return()
1632 exception:
1633     ok(1, "method_shift_pmc - exception")
1634     .return()
1635 .end
1637 .sub method_shift_string
1638     .local pmc array
1639     array = new ['ResizableStringArray']
1641     array[0] = "foo"
1642     array[1] = "bar"
1643     $S0 = array.'shift'()
1644     $I0 = elements array
1645     is($I0, 1,        "method_shift_string - elements")
1646     is($S0, 'foo',    "method_shift_string - value")
1648     array = 0
1649     push_eh exception
1650       $S0 = array.'shift'()
1651     pop_eh
1652     ok(0, "method_shift_string - exception")
1653     .return()
1655 exception:
1656     ok(1, "method_shift_string - exception")
1657     .return()
1658 .end
1660 .sub method_shift_integer
1661     .local pmc array
1662     array = new ['ResizableStringArray']
1664     array[0] = "2"
1665     array[1] = "3"
1666     $I1 = array.'shift'()
1667     $I0 = elements array
1668     is($I0, 1, "method_shift_integer - elements")
1669     is($I1, 2, "method_shift_integer - value")
1671     array = 0
1672     push_eh exception
1673       $I0 = array.'shift'()
1674     pop_eh
1675     ok(0, "method_shift_integer - exception")
1676     .return()
1678 exception:
1679     ok(1, "method_shift_integer - exception")
1680     .return()
1681 .end
1683 .sub method_shift_float
1684     .local pmc array
1685     array = new ['ResizableStringArray']
1687     array[0] = "2.2"
1688     array[1] = "3.3"
1689     $N0 = array.'shift'()
1690     $I0 = elements array
1691     is($I0, 1,   "method_shift_float - elements")
1692     is($N0, 2.2, "method_shift_float - value")
1694     array = 0
1695     push_eh exception
1696       $N0 = array.'shift'()
1697     pop_eh
1698     ok(0, "method_shift_float - exception")
1699     .return()
1701 exception:
1702     ok(1, "method_shift_float - exception")
1703     .return()
1704 .end
1706 .sub method_unshift_pmc
1707     .local pmc array
1708     array = new ['ResizableStringArray']
1710     array = 0
1711     $P0 = new ['String']
1712     $P0 = "one"
1713     array.'unshift'($P0)
1714     $I0 = elements array
1715     $S0 = array[0]
1716     is($I0, 1,     "method_unshift_pmc - elements")
1717     is($S0, "one", "method_unshift_pmc - value")
1719     $P0 = new ['String']
1720     $P0 = "two"
1721     array.'unshift'($P0)
1722     $I0 = elements array
1723     $S0 = array[0]
1724     is($I0, 2,     "method_unshift_pmc (grow) - elements")
1725     is($S0, "two", "method_unshift_pmc (grow) - value")
1727     array = 1
1728     array.'unshift'("three")
1729     $I0 = elements array
1730     $S0 = array[0]
1731     is($I0, 2,       "method_unshift_pmc (shrink, grow) - elements")
1732     is($S0, "three", "method_unshift_pmc (shrink, grow) - value")
1733 .end
1737 # test unshifting STRINGs onto the array
1739 .sub method_unshift_string
1740     .local pmc array
1741     array = new ['ResizableStringArray']
1743     array = 0
1744     array.'unshift'("one")
1745     $I0 = elements array
1746     $S0 = array[0]
1747     is($I0, 1,     "method_unshift_string - elements")
1748     is($S0, "one", "method_unshift_string - value")
1750     array.'unshift'("two")
1751     $I0 = elements array
1752     $S0 = array[0]
1753     is($I0, 2,     "method_unshift_string (grow) - elements")
1754     is($S0, "two", "method_unshift_string (grow) - value")
1756     array = 1
1757     array.'unshift'("three")
1758     $I0 = elements array
1759     $S0 = array[0]
1760     is($I0, 2,       "method_unshift_string (shrink, grow) - elements")
1761     is($S0, "three", "method_unshift_string (shrink, grow) - value")
1762 .end
1766 # test unshifting INTVALs onto the array
1768 .sub method_unshift_integer
1769     .local pmc array
1770     array = new ['ResizableStringArray']
1772     array = 0
1773     array.'unshift'(1)
1774     $I0 = elements array
1775     $S0 = array[0]
1776     is($I0, 1,   "method_unshift_integer - elements")
1777     is($S0, "1", "method_unshift_integer - value")
1779     array.'unshift'(2)
1780     $I0 = elements array
1781     $S0 = array[0]
1782     is($I0, 2,   "method_unshift_integer (grow) - elements")
1783     is($S0, "2", "method_unshift_integer (grow) - value")
1785     array = 1
1786     array.'unshift'(3)
1787     $I0 = elements array
1788     $S0 = array[0]
1789     is($I0, 2,   "method_unshift_integer (shrink, grow) - elements")
1790     is($S0, "3", "method_unshift_integer (shrink, grow) - value")
1791 .end
1795 # test unshifting FLOATs onto the array
1797 .sub method_unshift_float
1798     .local pmc array
1799     array = new ['ResizableStringArray']
1801     array = 0
1802     array.'unshift'(1.1)
1803     $I0 = elements array
1804     $S0 = array[0]
1805     is($I0, 1,     "method_unshift_float - elements")
1806     is($S0, "1.1", "method_unshift_float - value")
1808     array.'unshift'(2.2)
1809     $I0 = elements array
1810     $S0 = array[0]
1811     is($I0, 2,     "method_unshift_float (grow) - elements")
1812     is($S0, "2.2", "method_unshift_float (grow) - value")
1814     array = 1
1815     array.'unshift'(3.3)
1816     $I0 = elements array
1817     $S0 = array[0]
1818     is($I0, 2,     "method_unshift_float (shrink, grow) - elements")
1819     is($S0, "3.3", "method_unshift_float (shrink, grow) - value")
1820 .end
1822 # Local Variables:
1823 #   mode: pir
1824 #   fill-column: 100
1825 # End:
1826 # vim: expandtab shiftwidth=4 ft=pir: