python/dist/src/Lib/test test_deque.py,1.5,1.6
Update of /cvsroot/python/python/dist/src/Lib/test In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24444/Lib/test Modified Files: test_deque.py Log Message: Improvements to collections.deque(): * Add doctests for the examples in the library reference. * Add two methods, left() and right(), modeled after deques in C++ STL. * Apply the new method to asynchat.py. * Add comparison operators to make deques more substitutable for lists. * Replace the LookupErrors with IndexErrors to more closely match lists. Index: test_deque.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/test/test_deque.py,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** test_deque.py 8 Feb 2004 04:05:26 -0000 1.5 --- test_deque.py 29 Feb 2004 02:15:56 -0000 1.6 *************** *** 29,32 **** --- 29,49 ---- self.assertEqual(list(d), range(50, 150)) + def test_comparisons(self): + d = deque('xabc'); d.popleft() + for e in [d, deque('abc'), deque('ab'), deque(), list(d)]: + self.assertEqual(d==e, type(d)==type(e) and list(d)==list(e)) + self.assertEqual(d!=e, not(type(d)==type(e) and list(d)==list(e))) + + args = map(deque, ('', 'a', 'b', 'ab', 'ba', 'abc', 'xba', 'xabc', 'cba')) + for x in args: + for y in args: + self.assertEqual(x == y, list(x) == list(y), (x,y)) + self.assertEqual(x != y, list(x) != list(y), (x,y)) + self.assertEqual(x < y, list(x) < list(y), (x,y)) + self.assertEqual(x <= y, list(x) <= list(y), (x,y)) + self.assertEqual(x > y, list(x) > list(y), (x,y)) + self.assertEqual(x >= y, list(x) >= list(y), (x,y)) + self.assertEqual(cmp(x,y), cmp(list(x),list(y)), (x,y)) + def test_extend(self): d = deque('a') *************** *** 41,44 **** --- 58,69 ---- self.assertEqual(list(d), list(reversed('abcd'))) + def test_leftright(self): + d = deque('superman') + self.assertEqual(d.left(), 's') + self.assertEqual(d.right(), 'n') + d = deque() + self.assertRaises(IndexError, d.left) + self.assertRaises(IndexError, d.right) + def test_rotate(self): s = tuple('abcde') *************** *** 94,98 **** d.pop() self.assertEqual(len(d), 0) ! self.assertRaises(LookupError, d.pop) self.assertEqual(len(d), 0) d.append('c') --- 119,123 ---- d.pop() self.assertEqual(len(d), 0) ! self.assertRaises(IndexError, d.pop) self.assertEqual(len(d), 0) d.append('c') *************** *** 105,110 **** def test_underflow(self): d = deque() ! self.assertRaises(LookupError, d.pop) ! self.assertRaises(LookupError, d.popleft) def test_clear(self): --- 130,135 ---- def test_underflow(self): d = deque() ! self.assertRaises(IndexError, d.pop) ! self.assertRaises(IndexError, d.popleft) def test_clear(self): *************** *** 375,378 **** --- 400,460 ---- #============================================================================== + libreftest = """ + Example from the Library Reference: Doc/lib/libcollections.tex + + >>> from collections import deque + >>> d = deque('ghi') # make a new deque with three items + >>> for elem in d: # iterate over the deque's elements + ... print elem.upper() + G + H + I + >>> d.append('j') # add a new entry to the right side + >>> d.appendleft('f') # add a new entry to the left side + >>> d # show the representation of the deque + deque(['f', 'g', 'h', 'i', 'j']) + >>> d.pop() # return and remove the rightmost item + 'j' + >>> d.popleft() # return and remove the leftmost item + 'f' + >>> list(d) # list the contents of the deque + ['g', 'h', 'i'] + >>> d.left() # peek at leftmost item + 'g' + >>> d.right() # peek at rightmost item + 'i' + >>> list(reversed(d)) # list the contents of a deque in reverse + ['i', 'h', 'g'] + >>> 'h' in d # search the deque + True + >>> d.extend('jkl') # add multiple elements at once + >>> d + deque(['g', 'h', 'i', 'j', 'k', 'l']) + >>> d.rotate(1) # right rotation + >>> d + deque(['l', 'g', 'h', 'i', 'j', 'k']) + >>> d.rotate(-1) # left rotation + >>> d + deque(['g', 'h', 'i', 'j', 'k', 'l']) + >>> deque(reversed(d)) # make a new deque in reverse order + deque(['l', 'k', 'j', 'i', 'h', 'g']) + >>> d.clear() # empty the deque + >>> d.pop() # cannot pop from an empty deque + Traceback (most recent call last): + File "<pyshell#6>", line 1, in -toplevel- + d.pop() + IndexError: pop from an empty deque + + >>> d.extendleft('abc') # extendleft() reverses the input order + >>> d + deque(['c', 'b', 'a']) + + """ + + + #============================================================================== + + __test__ = {'libreftest' : libreftest} + def test_main(verbose=None): import sys *************** *** 395,398 **** --- 477,484 ---- counts[i] = sys.gettotalrefcount() print counts + + # doctests + from test import test_deque + test_support.run_doctest(test_deque, verbose) if __name__ == "__main__":
participants (1)
-
rhettingerīŧ users.sourceforge.net