[pypy-svn] rev 589 - in pypy/trunk/src/pypy/objspace/std: . test

tismer at codespeak.net tismer at codespeak.net
Tue May 27 17:33:03 CEST 2003


Author: tismer
Date: Tue May 27 17:33:02 2003
New Revision: 589

Modified:
   pypy/trunk/src/pypy/objspace/std/listobject.py
   pypy/trunk/src/pypy/objspace/std/test/test_listobject.py
   pypy/trunk/src/pypy/objspace/std/test/test_tupleobject.py
   pypy/trunk/src/pypy/objspace/std/tupleobject.py
Log:
added right multiplication to tuples and lists (with test)

Modified: pypy/trunk/src/pypy/objspace/std/listobject.py
==============================================================================
--- pypy/trunk/src/pypy/objspace/std/listobject.py	(original)
+++ pypy/trunk/src/pypy/objspace/std/listobject.py	Tue May 27 17:33:02 2003
@@ -75,6 +75,13 @@
 
 StdObjSpace.add.register(list_add, W_ListObject, W_ListObject)
 
+def list_int_mul(space, w_list, w_int):
+    items = w_list.wrappeditems
+    times = w_int.intval
+    return W_ListObject(items * times)
+
+StdObjSpace.mul.register(list_int_mul, W_ListObject, W_IntObject)
+
 def list_eq(space, w_list1, w_list2):
     items1 = w_list1.wrappeditems
     items2 = w_list2.wrappeditems
@@ -90,8 +97,17 @@
 # upto here, lists are nearly identical to tuples.
 # XXX have to add over-allocation!
 
-###def getattr_list(space, w_list, w_attr):
-###    if space.is_true(space.eq(w_attr, space.wrap('append'))):
-###        ...
-###        return W_InstMethObject(w_list, w_builtinfn)
-###    raise FailedToImplement(space.w_AttributeError)
+"""
+static PyMethodDef list_methods[] = {
+	{"append",	(PyCFunction)listappend,  METH_O, append_doc},
+	{"insert",	(PyCFunction)listinsert,  METH_VARARGS, insert_doc},
+	{"extend",      (PyCFunction)listextend,  METH_O, extend_doc},
+	{"pop",		(PyCFunction)listpop, 	  METH_VARARGS, pop_doc},
+	{"remove",	(PyCFunction)listremove,  METH_O, remove_doc},
+	{"index",	(PyCFunction)listindex,   METH_O, index_doc},
+	{"count",	(PyCFunction)listcount,   METH_O, count_doc},
+	{"reverse",	(PyCFunction)listreverse, METH_NOARGS, reverse_doc},
+	{"sort",	(PyCFunction)listsort, 	  METH_VARARGS, sort_doc},
+	{NULL,		NULL}		/* sentinel */
+};
+"""

Modified: pypy/trunk/src/pypy/objspace/std/test/test_listobject.py
==============================================================================
--- pypy/trunk/src/pypy/objspace/std/test/test_listobject.py	(original)
+++ pypy/trunk/src/pypy/objspace/std/test/test_listobject.py	Tue May 27 17:33:02 2003
@@ -1,95 +1,105 @@
-from __future__ import nested_scopes
-import unittest, sys
-import testsupport
-from pypy.interpreter import unittest_w
-from pypy.objspace.std import listobject as tobj
-from pypy.objspace.std.objspace import *
-
-
-class TestW_ListObject(unittest_w.TestCase_w):
-
-    def setUp(self):
-        self.space = StdObjSpace()
-
-    def tearDown(self):
-        pass
-
-    def test_is_true(self):
-        w = self.space.wrap
-        w_list = tobj.W_ListObject([])
-        self.assertEqual(self.space.is_true(w_list), False)
-        w_list = tobj.W_ListObject([w(5)])
-        self.assertEqual(self.space.is_true(w_list), True)
-        w_list = tobj.W_ListObject([w(5), w(3)])
-        self.assertEqual(self.space.is_true(w_list), True)
-
-    def test_len(self):
-        w = self.space.wrap
-        w_list = tobj.W_ListObject([])
-        self.assertEqual_w(self.space.len(w_list), w(0))
-        w_list = tobj.W_ListObject([w(5)])
-        self.assertEqual_w(self.space.len(w_list), w(1))
-        w_list = tobj.W_ListObject([w(5), w(3), w(99)]*111)
-        self.assertEqual_w(self.space.len(w_list), w(333))
-
-    def test_getitem(self):
-        w = self.space.wrap
-        w_list = tobj.W_ListObject([w(5), w(3)])
-        self.assertEqual_w(self.space.getitem(w_list, w(0)), w(5))
-        self.assertEqual_w(self.space.getitem(w_list, w(1)), w(3))
-        self.assertEqual_w(self.space.getitem(w_list, w(-2)), w(5))
-        self.assertEqual_w(self.space.getitem(w_list, w(-1)), w(3))
-        self.assertRaises_w(self.space.w_IndexError,
-                            self.space.getitem, w_list, w(2))
-        self.assertRaises_w(self.space.w_IndexError,
-                            self.space.getitem, w_list, w(42))
-        self.assertRaises_w(self.space.w_IndexError,
-                            self.space.getitem, w_list, w(-3))
-
-    def test_iter(self):
-        w = self.space.wrap
-        w_list = tobj.W_ListObject([w(5), w(3), w(99)])
-        w_iter = self.space.iter(w_list)
-        self.assertEqual_w(self.space.next(w_iter), w(5))
-        self.assertEqual_w(self.space.next(w_iter), w(3))
-        self.assertEqual_w(self.space.next(w_iter), w(99))
-        self.assertRaises(NoValue, self.space.next, w_iter)
-        self.assertRaises(NoValue, self.space.next, w_iter)
-
-    def test_add(self):
-        w = self.space.wrap
-        w_list0 = tobj.W_ListObject([])
-        w_list1 = tobj.W_ListObject([w(5), w(3), w(99)])
-        w_list2 = tobj.W_ListObject([w(-7)] * 111)
-        self.assertEqual_w(self.space.add(w_list1, w_list1),
-                           tobj.W_ListObject([w(5), w(3), w(99),
-                                               w(5), w(3), w(99)]))
-        self.assertEqual_w(self.space.add(w_list1, w_list2),
-                           tobj.W_ListObject([w(5), w(3), w(99)] +
-                                              [w(-7)] * 111))
-        self.assertEqual_w(self.space.add(w_list1, w_list0), w_list1)
-        self.assertEqual_w(self.space.add(w_list0, w_list2), w_list2)
-
-    def test_getslice(self):
-        w = self.space.wrap
-
-        def test1(testlist, start, stop, step, expected):
-            w_slice  = self.space.newslice(w(start), w(stop), w(step))
-            w_list = tobj.W_ListObject([w(i) for i in testlist])
-            w_result = self.space.getitem(w_list, w_slice)
-            self.assertEqual(self.space.unwrap(w_result), expected)
-        
-        for testlist in [[], [5,3,99], list(range(5,555,10))]:
-            for start in [-2, -1, 0, 1, 10]:
-                for end in [-1, 0, 2, 999]:
-                    test1(testlist, start, end, 1, testlist[start:end])
-
-        test1([5,7,1,4], 3, 1, -2,  [4,])
-        test1([5,7,1,4], 3, 0, -2,  [4, 7])
-        test1([5,7,1,4], 3, -1, -2, [])
-        test1([5,7,1,4], -2, 11, 2, [1])
-        test1([5,7,1,4], -3, 11, 2, [7, 4])
-        test1([5,7,1,4], -5, 11, 2, [5, 1])
-
-if __name__ == '__main__':
-    unittest.main()
+from __future__ import nested_scopes
+import unittest, sys
+import testsupport
+from pypy.interpreter import unittest_w
+from pypy.objspace.std import listobject as tobj
+from pypy.objspace.std.objspace import *
+
+
+class TestW_ListObject(unittest_w.TestCase_w):
+
+    def setUp(self):
+        self.space = StdObjSpace()
+
+    def tearDown(self):
+        pass
+
+    def test_is_true(self):
+        w = self.space.wrap
+        w_list = tobj.W_ListObject([])
+        self.assertEqual(self.space.is_true(w_list), False)
+        w_list = tobj.W_ListObject([w(5)])
+        self.assertEqual(self.space.is_true(w_list), True)
+        w_list = tobj.W_ListObject([w(5), w(3)])
+        self.assertEqual(self.space.is_true(w_list), True)
+
+    def test_len(self):
+        w = self.space.wrap
+        w_list = tobj.W_ListObject([])
+        self.assertEqual_w(self.space.len(w_list), w(0))
+        w_list = tobj.W_ListObject([w(5)])
+        self.assertEqual_w(self.space.len(w_list), w(1))
+        w_list = tobj.W_ListObject([w(5), w(3), w(99)]*111)
+        self.assertEqual_w(self.space.len(w_list), w(333))
+
+    def test_mul(self):
+        # only testing right mul at the moment
+        w = self.space.wrap
+        arg = w(2)
+        n = 3
+        w_lis = tobj.W_ListObject([arg])
+        w_lis3 = tobj.W_ListObject([arg]*n)
+        w_res = self.space.mul(w_lis, w(n))
+        self.assertEqual_w(w_lis3, w_res)
+
+    def test_getitem(self):
+        w = self.space.wrap
+        w_list = tobj.W_ListObject([w(5), w(3)])
+        self.assertEqual_w(self.space.getitem(w_list, w(0)), w(5))
+        self.assertEqual_w(self.space.getitem(w_list, w(1)), w(3))
+        self.assertEqual_w(self.space.getitem(w_list, w(-2)), w(5))
+        self.assertEqual_w(self.space.getitem(w_list, w(-1)), w(3))
+        self.assertRaises_w(self.space.w_IndexError,
+                            self.space.getitem, w_list, w(2))
+        self.assertRaises_w(self.space.w_IndexError,
+                            self.space.getitem, w_list, w(42))
+        self.assertRaises_w(self.space.w_IndexError,
+                            self.space.getitem, w_list, w(-3))
+
+    def test_iter(self):
+        w = self.space.wrap
+        w_list = tobj.W_ListObject([w(5), w(3), w(99)])
+        w_iter = self.space.iter(w_list)
+        self.assertEqual_w(self.space.next(w_iter), w(5))
+        self.assertEqual_w(self.space.next(w_iter), w(3))
+        self.assertEqual_w(self.space.next(w_iter), w(99))
+        self.assertRaises(NoValue, self.space.next, w_iter)
+        self.assertRaises(NoValue, self.space.next, w_iter)
+
+    def test_add(self):
+        w = self.space.wrap
+        w_list0 = tobj.W_ListObject([])
+        w_list1 = tobj.W_ListObject([w(5), w(3), w(99)])
+        w_list2 = tobj.W_ListObject([w(-7)] * 111)
+        self.assertEqual_w(self.space.add(w_list1, w_list1),
+                           tobj.W_ListObject([w(5), w(3), w(99),
+                                               w(5), w(3), w(99)]))
+        self.assertEqual_w(self.space.add(w_list1, w_list2),
+                           tobj.W_ListObject([w(5), w(3), w(99)] +
+                                              [w(-7)] * 111))
+        self.assertEqual_w(self.space.add(w_list1, w_list0), w_list1)
+        self.assertEqual_w(self.space.add(w_list0, w_list2), w_list2)
+
+    def test_getslice(self):
+        w = self.space.wrap
+
+        def test1(testlist, start, stop, step, expected):
+            w_slice  = self.space.newslice(w(start), w(stop), w(step))
+            w_list = tobj.W_ListObject([w(i) for i in testlist])
+            w_result = self.space.getitem(w_list, w_slice)
+            self.assertEqual(self.space.unwrap(w_result), expected)
+        
+        for testlist in [[], [5,3,99], list(range(5,555,10))]:
+            for start in [-2, -1, 0, 1, 10]:
+                for end in [-1, 0, 2, 999]:
+                    test1(testlist, start, end, 1, testlist[start:end])
+
+        test1([5,7,1,4], 3, 1, -2,  [4,])
+        test1([5,7,1,4], 3, 0, -2,  [4, 7])
+        test1([5,7,1,4], 3, -1, -2, [])
+        test1([5,7,1,4], -2, 11, 2, [1])
+        test1([5,7,1,4], -3, 11, 2, [7, 4])
+        test1([5,7,1,4], -5, 11, 2, [5, 1])
+
+if __name__ == '__main__':
+    unittest.main()

Modified: pypy/trunk/src/pypy/objspace/std/test/test_tupleobject.py
==============================================================================
--- pypy/trunk/src/pypy/objspace/std/test/test_tupleobject.py	(original)
+++ pypy/trunk/src/pypy/objspace/std/test/test_tupleobject.py	Tue May 27 17:33:02 2003
@@ -70,6 +70,16 @@
         self.assertEqual_w(self.space.add(w_tuple1, w_tuple0), w_tuple1)
         self.assertEqual_w(self.space.add(w_tuple0, w_tuple2), w_tuple2)
 
+    def test_mul(self):
+        # only testing right mul at the moment
+        w = self.space.wrap
+        arg = w(2)
+        n = 3
+        w_tup = tobj.W_TupleObject([arg])
+        w_tup3 = tobj.W_TupleObject([arg]*n)
+        w_res = self.space.mul(w_tup, w(n))
+        self.assertEqual_w(w_tup3, w_res)
+
     def test_getslice(self):
         w = self.space.wrap
 

Modified: pypy/trunk/src/pypy/objspace/std/tupleobject.py
==============================================================================
--- pypy/trunk/src/pypy/objspace/std/tupleobject.py	(original)
+++ pypy/trunk/src/pypy/objspace/std/tupleobject.py	Tue May 27 17:33:02 2003
@@ -71,6 +71,13 @@
 
 StdObjSpace.add.register(tuple_add, W_TupleObject, W_TupleObject)
 
+def tuple_int_mul(space, w_tuple, w_int):
+    items = w_tuple.wrappeditems
+    times = w_int.intval
+    return W_TupleObject(items * times)
+
+StdObjSpace.mul.register(tuple_int_mul, W_TupleObject, W_IntObject)
+
 def tuple_eq(space, w_tuple1, w_tuple2):
     items1 = w_tuple1.wrappeditems
     items2 = w_tuple2.wrappeditems


More information about the Pypy-commit mailing list