Make deque.rotate() smarter. Beef-up related tests.

This commit is contained in:
Raymond Hettinger 2004-02-08 04:05:26 +00:00
parent 3b6d025d9b
commit ee33b27ef0
2 changed files with 54 additions and 13 deletions

View file

@ -41,16 +41,50 @@ class TestBasic(unittest.TestCase):
self.assertEqual(list(d), list(reversed('abcd')))
def test_rotate(self):
s = 'abcde'
s = tuple('abcde')
n = len(s)
d = deque(s)
d.rotate(2)
self.assertEqual(''.join(d), 'deabc')
d.rotate(3)
self.assertEqual(''.join(d), s)
d.rotate(-3)
self.assertEqual(''.join(d), 'deabc')
d.rotate(-15)
self.assertEqual(''.join(d), 'deabc')
d.rotate(1) # verify rot(1)
self.assertEqual(''.join(d), 'eabcd')
d = deque(s)
d.rotate(-1) # verify rot(-1)
self.assertEqual(''.join(d), 'bcdea')
d.rotate() # check default to 1
self.assertEqual(tuple(d), s)
for i in xrange(n*3):
d = deque(s)
e = deque(d)
d.rotate(i) # check vs. rot(1) n times
for j in xrange(i):
e.rotate(1)
self.assertEqual(tuple(d), tuple(e))
d.rotate(-i) # check that it works in reverse
self.assertEqual(tuple(d), s)
e.rotate(n-i) # check that it wraps forward
self.assertEqual(tuple(e), s)
for i in xrange(n*3):
d = deque(s)
e = deque(d)
d.rotate(-i)
for j in xrange(i):
e.rotate(-1) # check vs. rot(-1) n times
self.assertEqual(tuple(d), tuple(e))
d.rotate(i) # check that it works in reverse
self.assertEqual(tuple(d), s)
e.rotate(i-n) # check that it wraps backaround
self.assertEqual(tuple(e), s)
d = deque(s)
e = deque(s)
e.rotate(BIG+17) # verify on long series of rotates
dr = d.rotate
for i in xrange(BIG+17):
dr()
self.assertEqual(tuple(d), tuple(e))
def test_len(self):
d = deque('ab')