[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