[Python-checkins] python/nondist/sandbox/collections dequemodule.c,
1.4, 1.5 test_deque.py, 1.2, 1.3
rhettinger at projects.sourceforge.net
rhettinger at projects.sourceforge.net
Tue Jan 27 09:41:32 EST 2004
- Previous message: [Python-checkins] python/nondist/sandbox/collections dequemodule.c,
1.3, 1.4 setup.py, 1.1, 1.2 test_deque.py, 1.1,
1.2 timedeque.py, 1.2, 1.3
- Next message: [Python-checkins] python/dist/src/Tools/scripts README,1.14,1.15
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /cvsroot/python/python/nondist/sandbox/collections
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24657
Modified Files:
dequemodule.c test_deque.py
Log Message:
* Change IndexError to LookupError
* Add more tests
Index: dequemodule.c
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/collections/dequemodule.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** dequemodule.c 27 Jan 2004 01:49:25 -0000 1.4
--- dequemodule.c 27 Jan 2004 14:41:30 -0000 1.5
***************
*** 15,19 ****
} block;
! static block *newblock(block *leftlink, block *rightlink){
block *b = PyMem_Malloc(sizeof(block));
if (b == NULL) {
--- 15,19 ----
} block;
! static block *newblock(block *leftlink, block *rightlink) {
block *b = PyMem_Malloc(sizeof(block));
if (b == NULL) {
***************
*** 109,113 ****
if (deque->leftblock == deque->rightblock &&
deque->leftindex > deque->rightindex) {
! PyErr_SetString(PyExc_IndexError, "pop from an emtpy deque");
return NULL;
}
--- 109,113 ----
if (deque->leftblock == deque->rightblock &&
deque->leftindex > deque->rightindex) {
! PyErr_SetString(PyExc_LookupError, "pop from an emtpy deque");
return NULL;
}
***************
*** 136,140 ****
if (deque->leftblock == deque->rightblock &&
deque->leftindex > deque->rightindex) {
! PyErr_SetString(PyExc_IndexError, "pop from an emtpy deque");
return NULL;
}
--- 136,140 ----
if (deque->leftblock == deque->rightblock &&
deque->leftindex > deque->rightindex) {
! PyErr_SetString(PyExc_LookupError, "pop from an emtpy deque");
return NULL;
}
Index: test_deque.py
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/collections/test_deque.py,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** test_deque.py 27 Jan 2004 01:49:25 -0000 1.2
--- test_deque.py 27 Jan 2004 14:41:30 -0000 1.3
***************
*** 10,14 ****
class TestBasic(unittest.TestCase):
! def test_exercise_basics(self):
d = deque(xrange(100))
d.__init__(xrange(100, 200))
--- 10,14 ----
class TestBasic(unittest.TestCase):
! def test_basics(self):
d = deque(xrange(100))
d.__init__(xrange(100, 200))
***************
*** 29,36 ****
self.assertEqual(list(d), range(50, 150))
def test_underflow(self):
d = deque()
! self.assertRaises(IndexError, d.pop) ## XXX should be lookuperror?
! self.assertRaises(IndexError, d.popleft)
def test_clear(self):
--- 29,52 ----
self.assertEqual(list(d), range(50, 150))
+ def test_len(self):
+ d = deque('ab')
+ self.assertEqual(len(d), 2)
+ d.popleft()
+ self.assertEqual(len(d), 1)
+ d.pop()
+ self.assertEqual(len(d), 0)
+ self.assertRaises(LookupError, d.pop)
+ self.assertEqual(len(d), 0)
+ d.append('c')
+ self.assertEqual(len(d), 1)
+ d.appendleft('d')
+ self.assertEqual(len(d), 2)
+ d.clear()
+ self.assertEqual(len(d), 0)
+
def test_underflow(self):
d = deque()
! self.assertRaises(LookupError, d.pop)
! self.assertRaises(LookupError, d.popleft)
def test_clear(self):
***************
*** 153,156 ****
--- 169,306 ----
self.assertEqual(list(d), list(e))
+ def R(seqn):
+ 'Regular generator'
+ for i in seqn:
+ yield i
+
+ class G:
+ 'Sequence using __getitem__'
+ def __init__(self, seqn):
+ self.seqn = seqn
+ def __getitem__(self, i):
+ return self.seqn[i]
+
+ class I:
+ 'Sequence using iterator protocol'
+ def __init__(self, seqn):
+ self.seqn = seqn
+ self.i = 0
+ def __iter__(self):
+ return self
+ def next(self):
+ if self.i >= len(self.seqn): raise StopIteration
+ v = self.seqn[self.i]
+ self.i += 1
+ return v
+
+ class Ig:
+ 'Sequence using iterator protocol defined with a generator'
+ def __init__(self, seqn):
+ self.seqn = seqn
+ self.i = 0
+ def __iter__(self):
+ for val in self.seqn:
+ yield val
+
+ class X:
+ 'Missing __getitem__ and __iter__'
+ def __init__(self, seqn):
+ self.seqn = seqn
+ self.i = 0
+ def next(self):
+ if self.i >= len(self.seqn): raise StopIteration
+ v = self.seqn[self.i]
+ self.i += 1
+ return v
+
+ class N:
+ 'Iterator missing next()'
+ def __init__(self, seqn):
+ self.seqn = seqn
+ self.i = 0
+ def __iter__(self):
+ return self
+
+ class E:
+ 'Test propagation of exceptions'
+ def __init__(self, seqn):
+ self.seqn = seqn
+ self.i = 0
+ def __iter__(self):
+ return self
+ def next(self):
+ 3/0
+
+ class S:
+ 'Test immediate stop'
+ def __init__(self, seqn):
+ pass
+ def __iter__(self):
+ return self
+ def next(self):
+ raise StopIteration
+
+ from itertools import chain, imap
+ def L(seqn):
+ 'Test multiple tiers of iterators'
+ return chain(imap(lambda x:x, R(Ig(G(seqn)))))
+
+
+ class TestVariousIteratorArgs(unittest.TestCase):
+
+ def test_constructor(self):
+ for s in ("123", "", range(1000), ('do', 1.2), xrange(2000,2200,5)):
+ for g in (G, I, Ig, S, L, R):
+ self.assertEqual(list(deque(g(s))), list(g(s)))
+ self.assertRaises(TypeError, deque, X(s))
+ self.assertRaises(TypeError, deque, N(s))
+ self.assertRaises(ZeroDivisionError, deque, E(s))
+
+ class Deque(deque):
+ pass
+
+ class TestSubclass(unittest.TestCase):
+
+ def test_basics(self):
+ d = Deque(xrange(100))
+ d.__init__(xrange(100, 200))
+ for i in xrange(200, 400):
+ d.append(i)
+ for i in reversed(xrange(-200, 0)):
+ d.appendleft(i)
+ self.assertEqual(list(d), range(-200, 400))
+ self.assertEqual(len(d), 600)
+
+ left = [d.popleft() for i in xrange(250)]
+ self.assertEqual(left, range(-200, 50))
+ self.assertEqual(list(d), range(50, 400))
+
+ right = [d.pop() for i in xrange(250)]
+ right.reverse()
+ self.assertEqual(right, range(150, 400))
+ self.assertEqual(list(d), range(50, 150))
+
+ d.clear()
+ self.assertEqual(len(d), 0)
+
+ def test_copy_pickle(self):
+
+ d = Deque('abc')
+
+ e = d.__copy__()
+ self.assertEqual(type(d), type(e))
+ self.assertEqual(list(d), list(e))
+
+ e = Deque(d)
+ self.assertEqual(type(d), type(e))
+ self.assertEqual(list(d), list(e))
+
+ s = pickle.dumps(d)
+ e = pickle.loads(s)
+ self.assertNotEqual(id(d), id(e))
+ self.assertEqual(type(d), type(e))
+ self.assertEqual(list(d), list(e))
+
+
#==============================================================================
***************
*** 160,163 ****
--- 310,315 ----
test_classes = (
TestBasic,
+ TestVariousIteratorArgs,
+ TestSubclass,
)
- Previous message: [Python-checkins] python/nondist/sandbox/collections dequemodule.c,
1.3, 1.4 setup.py, 1.1, 1.2 test_deque.py, 1.1,
1.2 timedeque.py, 1.2, 1.3
- Next message: [Python-checkins] python/dist/src/Tools/scripts README,1.14,1.15
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the Python-checkins
mailing list