develooper Front page | perl.cvs.parrot | Postings from January 2009

[svn:parrot] r35327 - in trunk: src/pmc t/pmc

From:
cotto
Date:
January 9, 2009 18:29
Subject:
[svn:parrot] r35327 - in trunk: src/pmc t/pmc
Message ID:
20090110022904.BCA5CCB9F9@x12.develooper.com
Author: cotto
Date: Fri Jan  9 18:29:01 2009
New Revision: 35327

Modified:
   trunk/src/pmc/resizablestringarray.pmc
   trunk/t/pmc/resizablestringarray.t

Log:
[pmc] add push, pop, shift and unshift methods (plus tests) to ResizableStringArray
patch courtesy of GeJ++


Modified: trunk/src/pmc/resizablestringarray.pmc
==============================================================================
--- trunk/src/pmc/resizablestringarray.pmc	(original)
+++ trunk/src/pmc/resizablestringarray.pmc	Fri Jan  9 18:29:01 2009
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2008, The Perl Foundation.
+Copyright (C) 2001-2009, The Perl Foundation.
 $Id$
 
 =head1 NAME
@@ -605,6 +605,50 @@
             VTABLE_set_pmc_keyed_int(INTERP, SELF, i + offset,
                 VTABLE_get_pmc_keyed_int(INTERP, value, i));
     }
+
+/*
+
+=item METHOD PMC* shift()
+
+=item METHOD PMC* pop()
+
+Method forms to remove and return a PMC from the beginning or
+end of the array.
+
+=cut
+
+*/
+
+    METHOD PMC* shift() {
+        PMC *value = VTABLE_shift_pmc(INTERP, SELF);
+        RETURN(PMC *value);
+    }
+
+    METHOD PMC* pop() {
+        PMC *value = VTABLE_pop_pmc(INTERP, SELF);
+        RETURN(PMC *value);
+    }
+
+/*
+
+=item METHOD unshift(PMC* value)
+
+=item METHOD push(PMC* value)
+
+Method forms to add a PMC to the beginning or end of the array.
+
+=cut
+
+*/
+
+    METHOD unshift(PMC* value) {
+        VTABLE_unshift_pmc(INTERP, SELF, value);
+    }
+
+    METHOD push(PMC* value) {
+        VTABLE_push_pmc(INTERP, SELF, value);
+    }
+
 }
 
 /*

Modified: trunk/t/pmc/resizablestringarray.t
==============================================================================
--- trunk/t/pmc/resizablestringarray.t	(original)
+++ trunk/t/pmc/resizablestringarray.t	Fri Jan  9 18:29:01 2009
@@ -1,5 +1,5 @@
 #!./parrot
-# Copyright (C) 2001-2008, The Perl Foundation.
+# Copyright (C) 2001-2009, The Perl Foundation.
 # $Id$
 
 =head1 NAME
@@ -20,10 +20,10 @@
 
 
 .sub main :main
-    .include 'include/test_more.pir'
+    .include 'test_more.pir'
 
     # set a test plan
-    plan(184)
+    plan(258)
 
     'size/resize'()
     'clone'()
@@ -63,6 +63,26 @@
     'sparse'()
 
     'splice'()
+
+    method_push_pmc()
+    method_push_string()
+    method_push_integer()
+    method_push_float()
+
+    method_pop_pmc()
+    method_pop_string()
+    method_pop_integer()
+    method_pop_float()
+
+    method_shift_pmc()
+    method_shift_string()
+    method_shift_integer()
+    method_shift_float()
+
+    method_unshift_pmc()
+    method_unshift_string()
+    method_unshift_integer()
+    method_unshift_float()
 .end
 
 #
@@ -1285,6 +1305,427 @@
     like(message, 'illegal\ type\ for\ splice', "splice with a different type")
 .end
 
+#
+# test pushing PMCs onto the array
+#
+.sub method_push_pmc
+    .local pmc array
+    array = new 'ResizableStringArray'
+
+    array = 0
+    $P0 = new 'String'
+    $P0 = "one"
+    array.'push'($P0)
+    $I0 = elements array
+    $S0 = array[0]
+    is($I0, 1,     "method_push_pmc - elements")
+    is($S0, "one", "method_push_pmc - value")
+
+    $P0 = new 'String'
+    $P0 = "two"
+    array.'push'($P0)
+    $I0 = elements array
+    $S0 = array[1]
+    is($I0, 2,     "method_push_pmc (grow) - elements")
+    is($S0, "two", "method_push_pmc (grow) - value")
+
+    array = 1
+    array.'push'('three')
+    $I0 = elements array
+    $S0 = array[1]
+    is($I0, 2,       "method_push_pmc (shrink, grow) - elements")
+    is($S0, "three", "method_push_pmc (shrink, grow) - value")
+.end
+
+
+#
+# test pushing STRINGs onto the array
+#
+.sub method_push_string
+    .local pmc array
+    array = new 'ResizableStringArray'
+
+    array = 0
+    array.'push'("one")
+    $I0 = elements array
+    $S0 = array[0]
+    is($I0, 1,     "method_push_string - elements")
+    is($S0, "one", "method_push_string - value")
+
+    array.'push'("two")
+    $I0 = elements array
+    $S0 = array[1]
+    is($I0, 2,     "method_push_string (grow) - elements")
+    is($S0, "two", "method_push_string (grow) - value")
+
+    array = 1
+    array.'push'("three")
+    $I0 = elements array
+    $S0 = array[1]
+    is($I0, 2,       "method_push_string (shrink, grow) - elements")
+    is($S0, "three", "method_push_string (shrink, grow) - value")
+.end
+
+
+#
+# test pushing INTVALs onto the array
+#
+.sub method_push_integer
+    .local pmc array
+    array = new 'ResizableStringArray'
+
+    array = 0
+    array.'push'(1)
+    $I0 = elements array
+    $S0 = array[0]
+    is($I0, 1,   "method_push_integer - elements")
+    is($S0, "1", "method_push_integer - value")
+
+    array.'push'(2)
+    $I0 = elements array
+    $S0 = array[1]
+    is($I0, 2,   "method_push_integer (grow) - elements")
+    is($S0, "2", "method_push_integer (grow) - value")
+
+    array = 1
+    array.'push'(3)
+    $I0 = elements array
+    $S0 = array[1]
+    is($I0, 2,   "method_push_integer (shrink, grow) - elements")
+    is($S0, "3", "method_push_integer (shrink, grow) - value")
+.end
+
+
+#
+# test pushing FLOATs onto the array
+#
+.sub method_push_float
+    .local pmc array
+    array = new 'ResizableStringArray'
+
+    array = 0
+    array.'push'(1.1)
+    $I0 = elements array
+    $S0 = array[0]
+    is($I0, 1,     "method_push_float - elements")
+    is($S0, "1.1", "method_push_float - value")
+
+    array.'push'(2.2)
+    $I0 = elements array
+    $S0 = array[1]
+    is($I0, 2,     "method_push_float (grow) - elements")
+    is($S0, "2.2", "method_push_float (grow) - value")
+
+    array = 1
+    array.'push'(3.3)
+    $I0 = elements array
+    $S0 = array[1]
+    is($I0, 2,     "method_push_float (shrink, grow) - elements")
+    is($S0, "3.3", "method_push_float (shrink, grow) - value")
+.end
+
+
+.sub method_pop_pmc
+    .local pmc array
+    array = new 'ResizableStringArray'
+
+    array[1] = "foo"
+    $P0 = array.'pop'()
+    $I0 = elements array
+    $S0 = typeof $P0
+    $S1 = $P0
+    is($I0, 1,        "method_pop_pmc - elements")
+    is($S0, 'String', "method_pop_pmc - type")
+    is($S1, 'foo',    "method_pop_pmc - value")
+
+    array = 0
+    push_eh exception
+      $P0 = array.'pop'()
+    pop_eh
+    ok(0, "method_pop_pmc - exception")
+    .return()
+
+exception:
+    ok(1, "method_pop_pmc - exception")
+    .return()
+.end
+
+.sub method_pop_string
+    .local pmc array
+    array = new 'ResizableStringArray'
+
+    array[1] = "foo"
+    $S0 = array.'pop'()
+    $I0 = elements array
+    is($I0, 1,     "method_pop_string - elements")
+    is($S0, 'foo', "method_pop_string - value")
+
+    array = 0
+    push_eh exception
+      $S0 = array.'pop'()
+    pop_eh
+    ok(0, "method_pop_string - exception")
+    .return()
+
+exception:
+    ok(1, "method_pop_string - exception")
+    .return()
+.end
+
+.sub method_pop_integer
+    .local pmc array
+    array = new 'ResizableStringArray'
+
+    array[1] = "2"
+    $I1 = array.'pop'()
+    $I0 = elements array
+    is($I0, 1, "method_pop_integer - elements")
+    is($I1, 2, "method_pop_integer - value")
+
+    array = 0
+    push_eh exception
+      $I0 = array.'pop'()
+    pop_eh
+    ok(0, "method_pop_integer - exception")
+    .return()
+
+exception:
+    ok(1, "method_pop_integer - exception")
+    .return()
+.end
+
+.sub method_pop_float
+    .local pmc array
+    array = new 'ResizableStringArray'
+
+    array[1] = "2.2"
+    $N0 = array.'pop'()
+    $I0 = elements array
+    is($I0, 1,   "method_pop_float - elements")
+    is($N0, 2.2, "method_pop_float - value")
+
+    array = 0
+    push_eh exception
+      $N0 = array.'pop'()
+    pop_eh
+    ok(0, "method_pop_float - exception")
+    .return()
+
+exception:
+    ok(1, "method_pop_float - exception")
+    .return()
+.end
+
+.sub method_shift_pmc
+    .local pmc array
+    array = new 'ResizableStringArray'
+
+    array[0] = "foo"
+    array[1] = "bar"
+    $P0 = array.'shift'()
+    $I0 = elements array
+    $S0 = typeof $P0
+    $S1 = $P0
+    is($I0, 1,        "method_shift_pmc - elements")
+    is($S0, 'String', "method_shift_pmc - type")
+    is($S1, 'foo',    "method_shift_pmc - value")
+
+    array = 0
+    push_eh exception
+      $P0 = array.'shift'()
+    pop_eh
+    ok(0, "method_shift_pmc - exception")
+    .return()
+
+exception:
+    ok(1, "method_shift_pmc - exception")
+    .return()
+.end
+
+.sub method_shift_string
+    .local pmc array
+    array = new 'ResizableStringArray'
+
+    array[0] = "foo"
+    array[1] = "bar"
+    $S0 = array.'shift'()
+    $I0 = elements array
+    is($I0, 1,        "method_shift_string - elements")
+    is($S0, 'foo',    "method_shift_string - value")
+
+    array = 0
+    push_eh exception
+      $S0 = array.'shift'()
+    pop_eh
+    ok(0, "method_shift_string - exception")
+    .return()
+
+exception:
+    ok(1, "method_shift_string - exception")
+    .return()
+.end
+
+.sub method_shift_integer
+    .local pmc array
+    array = new 'ResizableStringArray'
+
+    array[0] = "2"
+    array[1] = "3"
+    $I1 = array.'shift'()
+    $I0 = elements array
+    is($I0, 1, "method_shift_integer - elements")
+    is($I1, 2, "method_shift_integer - value")
+
+    array = 0
+    push_eh exception
+      $I0 = array.'shift'()
+    pop_eh
+    ok(0, "method_shift_integer - exception")
+    .return()
+
+exception:
+    ok(1, "method_shift_integer - exception")
+    .return()
+.end
+
+.sub method_shift_float
+    .local pmc array
+    array = new 'ResizableStringArray'
+
+    array[0] = "2.2"
+    array[1] = "3.3"
+    $N0 = array.'shift'()
+    $I0 = elements array
+    is($I0, 1,   "method_shift_float - elements")
+    is($N0, 2.2, "method_shift_float - value")
+
+    array = 0
+    push_eh exception
+      $N0 = array.'shift'()
+    pop_eh
+    ok(0, "method_shift_float - exception")
+    .return()
+
+exception:
+    ok(1, "method_shift_float - exception")
+    .return()
+.end
+
+.sub method_unshift_pmc
+    .local pmc array
+    array = new 'ResizableStringArray'
+
+    array = 0
+    $P0 = new 'String'
+    $P0 = "one"
+    array.'unshift'($P0)
+    $I0 = elements array
+    $S0 = array[0]
+    is($I0, 1,     "method_unshift_pmc - elements")
+    is($S0, "one", "method_unshift_pmc - value")
+
+    $P0 = new 'String'
+    $P0 = "two"
+    array.'unshift'($P0)
+    $I0 = elements array
+    $S0 = array[0]
+    is($I0, 2,     "method_unshift_pmc (grow) - elements")
+    is($S0, "two", "method_unshift_pmc (grow) - value")
+
+    array = 1
+    array.'unshift'("three")
+    $I0 = elements array
+    $S0 = array[0]
+    is($I0, 2,       "method_unshift_pmc (shrink, grow) - elements")
+    is($S0, "three", "method_unshift_pmc (shrink, grow) - value")
+.end
+
+
+#
+# test unshifting STRINGs onto the array
+#
+.sub method_unshift_string
+    .local pmc array
+    array = new 'ResizableStringArray'
+
+    array = 0
+    array.'unshift'("one")
+    $I0 = elements array
+    $S0 = array[0]
+    is($I0, 1,     "method_unshift_string - elements")
+    is($S0, "one", "method_unshift_string - value")
+
+    array.'unshift'("two")
+    $I0 = elements array
+    $S0 = array[0]
+    is($I0, 2,     "method_unshift_string (grow) - elements")
+    is($S0, "two", "method_unshift_string (grow) - value")
+
+    array = 1
+    array.'unshift'("three")
+    $I0 = elements array
+    $S0 = array[0]
+    is($I0, 2,       "method_unshift_string (shrink, grow) - elements")
+    is($S0, "three", "method_unshift_string (shrink, grow) - value")
+.end
+
+
+#
+# test unshifting INTVALs onto the array
+#
+.sub method_unshift_integer
+    .local pmc array
+    array = new 'ResizableStringArray'
+
+    array = 0
+    array.'unshift'(1)
+    $I0 = elements array
+    $S0 = array[0]
+    is($I0, 1,   "method_unshift_integer - elements")
+    is($S0, "1", "method_unshift_integer - value")
+
+    array.'unshift'(2)
+    $I0 = elements array
+    $S0 = array[0]
+    is($I0, 2,   "method_unshift_integer (grow) - elements")
+    is($S0, "2", "method_unshift_integer (grow) - value")
+
+    array = 1
+    array.'unshift'(3)
+    $I0 = elements array
+    $S0 = array[0]
+    is($I0, 2,   "method_unshift_integer (shrink, grow) - elements")
+    is($S0, "3", "method_unshift_integer (shrink, grow) - value")
+.end
+
+
+#
+# test unshifting FLOATs onto the array
+#
+.sub method_unshift_float
+    .local pmc array
+    array = new 'ResizableStringArray'
+
+    array = 0
+    array.'unshift'(1.1)
+    $I0 = elements array
+    $S0 = array[0]
+    is($I0, 1,     "method_unshift_float - elements")
+    is($S0, "1.1", "method_unshift_float - value")
+
+    array.'unshift'(2.2)
+    $I0 = elements array
+    $S0 = array[0]
+    is($I0, 2,     "method_unshift_float (grow) - elements")
+    is($S0, "2.2", "method_unshift_float (grow) - value")
+
+    array = 1
+    array.'unshift'(3.3)
+    $I0 = elements array
+    $S0 = array[0]
+    is($I0, 2,     "method_unshift_float (shrink, grow) - elements")
+    is($S0, "3.3", "method_unshift_float (shrink, grow) - value")
+.end
 
 # Local Variables:
 #   mode: pir



nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About