Somehow these didn't get updated when I moved queue to structures.

This commit is contained in:
Jeremy Fincher 2003-04-22 11:13:03 +00:00
parent 25daf96a9c
commit 8fa7c95067
3 changed files with 246 additions and 169 deletions

View File

@ -30,6 +30,7 @@
### ###
from fix import * from fix import *
from structures import queue, MaxLengthQueue
import copy import copy
import time import time

View File

@ -35,175 +35,6 @@ from test import *
import pickle import pickle
class QueueTest(unittest.TestCase):
def testGetitem(self):
q = queue()
n = 10
for i in xrange(n):
q.enqueue(i)
for i in xrange(n):
self.assertEqual(q[i], i)
for i in xrange(n, 0, -1):
self.assertEqual(q[-i], n-i)
self.assertRaises(IndexError, q.__getitem__, -(n+1))
self.assertRaises(IndexError, q.__getitem__, n)
#self.assertEqual(q[3:7], queue([3, 4, 5, 6]))
def testSetitem(self):
q1 = queue()
for i in xrange(10):
q1.enqueue(i)
q2 = eval(repr(q1))
for (i, elt) in enumerate(q2):
q2[i] = elt*2
self.assertEqual([x*2 for x in q1], list(q2))
def testNonzero(self):
q = queue()
self.failIf(q, 'queue not zero after initialization')
q.enqueue(1)
self.failUnless(q, 'queue zero after adding element')
q.dequeue()
self.failIf(q, 'queue not zero after dequeue of only element')
def testLen(self):
q = queue()
self.assertEqual(0, len(q), 'queue len not 0 after initialization')
q.enqueue(1)
self.assertEqual(1, len(q), 'queue len not 1 after enqueue')
q.enqueue(2)
self.assertEqual(2, len(q), 'queue len not 2 after enqueue')
q.dequeue()
self.assertEqual(1, len(q), 'queue len not 1 after dequeue')
q.dequeue()
self.assertEqual(0, len(q), 'queue len not 0 after dequeue')
for i in range(10):
L = range(i)
q = queue(L)
self.assertEqual(len(q), i)
def testEq(self):
q1 = queue()
q2 = queue()
self.failUnless(q1 == q1, 'queue not equal to itself')
self.failUnless(q2 == q2, 'queue not equal to itself')
self.failUnless(q1 == q2, 'initialized queues not equal')
q1.enqueue(1)
self.failUnless(q1 == q1, 'queue not equal to itself')
self.failUnless(q2 == q2, 'queue not equal to itself')
q2.enqueue(1)
self.failUnless(q1 == q1, 'queue not equal to itself')
self.failUnless(q2 == q2, 'queue not equal to itself')
self.failUnless(q1 == q2, 'queues not equal after identical enqueue')
q1.dequeue()
self.failUnless(q1 == q1, 'queue not equal to itself')
self.failUnless(q2 == q2, 'queue not equal to itself')
self.failIf(q1 == q2, 'queues equal after one dequeue')
q2.dequeue()
self.failUnless(q1 == q2, 'queues not equal after both are dequeued')
self.failUnless(q1 == q1, 'queue not equal to itself')
self.failUnless(q2 == q2, 'queue not equal to itself')
def testInit(self):
self.assertEqual(len(queue()), 0, 'queue len not 0 after init')
q = queue()
q.enqueue(1)
q.enqueue(2)
q.enqueue(3)
self.assertEqual(queue((1, 2, 3)),q, 'init not equivalent to enqueues')
q = queue((1, 2, 3))
self.assertEqual(q.dequeue(), 1, 'values not returned in proper order')
self.assertEqual(q.dequeue(), 2, 'values not returned in proper order')
self.assertEqual(q.dequeue(), 3, 'values not returned in proper order')
def testRepr(self):
q = queue()
q.enqueue(1)
self.assertEqual(q, eval(repr(q)), 'repr doesn\'t eval to same queue')
q.enqueue('foo')
self.assertEqual(q, eval(repr(q)), 'repr doesn\'t eval to same queue')
q.enqueue(None)
self.assertEqual(q, eval(repr(q)), 'repr doesn\'t eval to same queue')
q.enqueue(1.0)
self.assertEqual(q, eval(repr(q)), 'repr doesn\'t eval to same queue')
q.enqueue([])
self.assertEqual(q, eval(repr(q)), 'repr doesn\'t eval to same queue')
q.enqueue(())
self.assertEqual(q, eval(repr(q)), 'repr doesn\'t eval to same queue')
q.enqueue([1])
self.assertEqual(q, eval(repr(q)), 'repr doesn\'t eval to same queue')
q.enqueue((1,))
self.assertEqual(q, eval(repr(q)), 'repr doesn\'t eval to same queue')
def testEnqueueDequeue(self):
q = queue()
self.assertRaises(IndexError, q.dequeue)
q.enqueue(1)
self.assertEqual(q.dequeue(), 1,
'first dequeue didn\'t return same as first enqueue')
q.enqueue(1)
q.enqueue(2)
q.enqueue(3)
self.assertEqual(q.dequeue(), 1)
self.assertEqual(q.dequeue(), 2)
self.assertEqual(q.dequeue(), 3)
def testPeek(self):
q = queue()
self.assertRaises(IndexError, q.peek)
q.enqueue(1)
self.assertEqual(q.peek(), 1, 'peek didn\'t return first enqueue')
q.enqueue(2)
self.assertEqual(q.peek(), 1, 'peek didn\'t return first enqueue')
q.dequeue()
self.assertEqual(q.peek(), 2, 'peek didn\'t return second enqueue')
q.dequeue()
self.assertRaises(IndexError, q.peek)
def testContains(self):
q = queue()
self.failIf(1 in q, 'empty queue cannot have elements')
q.enqueue(1)
self.failUnless(1 in q, 'recent enqueued element not in q')
q.enqueue(2)
self.failUnless(1 in q, 'original enqueued element not in q')
self.failUnless(2 in q, 'second enqueued element not in q')
q.dequeue()
self.failIf(1 in q, 'dequeued element in q')
self.failUnless(2 in q, 'not dequeued element not in q')
q.dequeue()
self.failIf(2 in q, 'dequeued element in q')
def testIter(self):
q1 = queue((1, 2, 3))
q2 = queue()
for i in q1:
q2.enqueue(i)
self.assertEqual(q1, q2, 'iterate didn\'t return all elements')
for _ in queue():
self.fail('no elements should be in empty queue')
def testPickleCopy(self):
q = queue(range(10))
self.assertEqual(q, pickle.loads(pickle.dumps(q)))
class MaxLengthQueueTestCase(unittest.TestCase):
def testMaxLength(self):
q = MaxLengthQueue(3)
q.enqueue(1)
self.assertEqual(len(q), 1)
q.enqueue(2)
self.assertEqual(len(q), 2)
q.enqueue(3)
self.assertEqual(len(q), 3)
q.enqueue(4)
self.assertEqual(len(q), 3)
self.assertEqual(q.peek(), 2)
q.enqueue(5)
self.assertEqual(len(q), 3)
self.assertEqual(q[0], 3)
class FunctionsTest(unittest.TestCase): class FunctionsTest(unittest.TestCase):
def testCatch(self): def testCatch(self):
def f(): def f():

View File

@ -31,6 +31,8 @@
from test import * from test import *
import pickle
from structures import * from structures import *
class RingBufferTestCase(unittest.TestCase): class RingBufferTestCase(unittest.TestCase):
@ -87,11 +89,33 @@ class RingBufferTestCase(unittest.TestCase):
b = RingBuffer(len(L), L) b = RingBuffer(len(L), L)
for i in range(len(b)): for i in range(len(b)):
self.assertEqual(L[i], b[i]) self.assertEqual(L[i], b[i])
for i in range(len(b)):
self.assertEqual(L[-i], b[-i])
for i in range(len(b)): for i in range(len(b)):
b.append(i) b.append(i)
for i in range(len(b)): for i in range(len(b)):
self.assertEqual(L[i], b[i]) self.assertEqual(L[i], b[i])
def testSliceGetitem(self):
L = range(10)
b = RingBuffer(len(L), L)
for i in range(len(b)):
self.assertEqual(L[:i], b[:i])
self.assertEqual(L[i:], b[i:])
self.assertEqual(L[i:len(b)-i], b[i:len(b)-i])
self.assertEqual(L[:-i], b[:-i])
self.assertEqual(L[-i:], b[-i:])
self.assertEqual(L[i:-i], b[i:-i])
for i in range(len(b)):
b.append(i)
for i in range(len(b)):
self.assertEqual(L[:i], b[:i])
self.assertEqual(L[i:], b[i:])
self.assertEqual(L[i:len(b)-i], b[i:len(b)-i])
self.assertEqual(L[:-i], b[:-i])
self.assertEqual(L[-i:], b[-i:])
self.assertEqual(L[i:-i], b[i:-i])
def testSetitem(self): def testSetitem(self):
L = range(10) L = range(10)
b = RingBuffer(len(L), [0]*len(L)) b = RingBuffer(len(L), [0]*len(L))
@ -106,6 +130,17 @@ class RingBufferTestCase(unittest.TestCase):
for i in range(len(b)): for i in range(len(b)):
self.assertEqual(b[i], i) self.assertEqual(b[i], i)
def testSliceSetitem(self):
L = range(10)
b = RingBuffer(len(L), [0]*len(L))
self.assertRaises(ValueError, b.__setitem__, slice(0, 10), [])
b[2:4] = L[2:4]
self.assertEquals(b[2:4], L[2:4])
for i in range(len(b)):
b.append(0)
b[2:4] = L[2:4]
self.assertEquals(b[2:4], L[2:4])
def testExtend(self): def testExtend(self):
b = RingBuffer(3, range(3)) b = RingBuffer(3, range(3))
self.assertEqual(list(b), range(3)) self.assertEqual(list(b), range(3))
@ -127,3 +162,213 @@ class RingBufferTestCase(unittest.TestCase):
self.assertEqual(repr(b), 'RingBuffer(3, [3, 4, 5])') self.assertEqual(repr(b), 'RingBuffer(3, [3, 4, 5])')
b.append(6) b.append(6)
self.assertEqual(repr(b), 'RingBuffer(3, [4, 5, 6])') self.assertEqual(repr(b), 'RingBuffer(3, [4, 5, 6])')
def testPickleCopy(self):
b = RingBuffer(10, range(10))
self.assertEqual(pickle.loads(pickle.dumps(b)), b)
def testEq(self):
b = RingBuffer(3, range(3))
self.failIf(b == range(3))
b1 = RingBuffer(3)
self.failIf(b == b1)
b1.append(0)
self.failIf(b == b1)
b1.append(1)
self.failIf(b == b1)
b1.append(2)
self.failUnless(b == b1)
b = RingBuffer(100, range(10))
b1 = RingBuffer(10, range(10))
self.failIf(b == b1)
def testIter(self):
b = RingBuffer(3, range(3))
L = []
for elt in b:
L.append(elt)
self.assertEqual(L, range(3))
for elt in range(3):
b.append(elt)
del L[:]
for elt in b:
L.append(elt)
self.assertEqual(L, range(3))
class QueueTest(unittest.TestCase):
def testGetitem(self):
q = queue()
n = 10
for i in xrange(n):
q.enqueue(i)
for i in xrange(n):
self.assertEqual(q[i], i)
for i in xrange(n, 0, -1):
self.assertEqual(q[-i], n-i)
self.assertRaises(IndexError, q.__getitem__, -(n+1))
self.assertRaises(IndexError, q.__getitem__, n)
#self.assertEqual(q[3:7], queue([3, 4, 5, 6]))
def testSetitem(self):
q1 = queue()
for i in xrange(10):
q1.enqueue(i)
q2 = eval(repr(q1))
for (i, elt) in enumerate(q2):
q2[i] = elt*2
self.assertEqual([x*2 for x in q1], list(q2))
def testNonzero(self):
q = queue()
self.failIf(q, 'queue not zero after initialization')
q.enqueue(1)
self.failUnless(q, 'queue zero after adding element')
q.dequeue()
self.failIf(q, 'queue not zero after dequeue of only element')
def testLen(self):
q = queue()
self.assertEqual(0, len(q), 'queue len not 0 after initialization')
q.enqueue(1)
self.assertEqual(1, len(q), 'queue len not 1 after enqueue')
q.enqueue(2)
self.assertEqual(2, len(q), 'queue len not 2 after enqueue')
q.dequeue()
self.assertEqual(1, len(q), 'queue len not 1 after dequeue')
q.dequeue()
self.assertEqual(0, len(q), 'queue len not 0 after dequeue')
for i in range(10):
L = range(i)
q = queue(L)
self.assertEqual(len(q), i)
def testEq(self):
q1 = queue()
q2 = queue()
self.failUnless(q1 == q1, 'queue not equal to itself')
self.failUnless(q2 == q2, 'queue not equal to itself')
self.failUnless(q1 == q2, 'initialized queues not equal')
q1.enqueue(1)
self.failUnless(q1 == q1, 'queue not equal to itself')
self.failUnless(q2 == q2, 'queue not equal to itself')
q2.enqueue(1)
self.failUnless(q1 == q1, 'queue not equal to itself')
self.failUnless(q2 == q2, 'queue not equal to itself')
self.failUnless(q1 == q2, 'queues not equal after identical enqueue')
q1.dequeue()
self.failUnless(q1 == q1, 'queue not equal to itself')
self.failUnless(q2 == q2, 'queue not equal to itself')
self.failIf(q1 == q2, 'queues equal after one dequeue')
q2.dequeue()
self.failUnless(q1 == q2, 'queues not equal after both are dequeued')
self.failUnless(q1 == q1, 'queue not equal to itself')
self.failUnless(q2 == q2, 'queue not equal to itself')
def testInit(self):
self.assertEqual(len(queue()), 0, 'queue len not 0 after init')
q = queue()
q.enqueue(1)
q.enqueue(2)
q.enqueue(3)
self.assertEqual(queue((1, 2, 3)),q, 'init not equivalent to enqueues')
q = queue((1, 2, 3))
self.assertEqual(q.dequeue(), 1, 'values not returned in proper order')
self.assertEqual(q.dequeue(), 2, 'values not returned in proper order')
self.assertEqual(q.dequeue(), 3, 'values not returned in proper order')
def testRepr(self):
q = queue()
q.enqueue(1)
self.assertEqual(q, eval(repr(q)), 'repr doesn\'t eval to same queue')
q.enqueue('foo')
self.assertEqual(q, eval(repr(q)), 'repr doesn\'t eval to same queue')
q.enqueue(None)
self.assertEqual(q, eval(repr(q)), 'repr doesn\'t eval to same queue')
q.enqueue(1.0)
self.assertEqual(q, eval(repr(q)), 'repr doesn\'t eval to same queue')
q.enqueue([])
self.assertEqual(q, eval(repr(q)), 'repr doesn\'t eval to same queue')
q.enqueue(())
self.assertEqual(q, eval(repr(q)), 'repr doesn\'t eval to same queue')
q.enqueue([1])
self.assertEqual(q, eval(repr(q)), 'repr doesn\'t eval to same queue')
q.enqueue((1,))
self.assertEqual(q, eval(repr(q)), 'repr doesn\'t eval to same queue')
def testEnqueueDequeue(self):
q = queue()
self.assertRaises(IndexError, q.dequeue)
q.enqueue(1)
self.assertEqual(q.dequeue(), 1,
'first dequeue didn\'t return same as first enqueue')
q.enqueue(1)
q.enqueue(2)
q.enqueue(3)
self.assertEqual(q.dequeue(), 1)
self.assertEqual(q.dequeue(), 2)
self.assertEqual(q.dequeue(), 3)
def testPeek(self):
q = queue()
self.assertRaises(IndexError, q.peek)
q.enqueue(1)
self.assertEqual(q.peek(), 1, 'peek didn\'t return first enqueue')
q.enqueue(2)
self.assertEqual(q.peek(), 1, 'peek didn\'t return first enqueue')
q.dequeue()
self.assertEqual(q.peek(), 2, 'peek didn\'t return second enqueue')
q.dequeue()
self.assertRaises(IndexError, q.peek)
def testContains(self):
q = queue()
self.failIf(1 in q, 'empty queue cannot have elements')
q.enqueue(1)
self.failUnless(1 in q, 'recent enqueued element not in q')
q.enqueue(2)
self.failUnless(1 in q, 'original enqueued element not in q')
self.failUnless(2 in q, 'second enqueued element not in q')
q.dequeue()
self.failIf(1 in q, 'dequeued element in q')
self.failUnless(2 in q, 'not dequeued element not in q')
q.dequeue()
self.failIf(2 in q, 'dequeued element in q')
def testIter(self):
q1 = queue((1, 2, 3))
q2 = queue()
for i in q1:
q2.enqueue(i)
self.assertEqual(q1, q2, 'iterate didn\'t return all elements')
for _ in queue():
self.fail('no elements should be in empty queue')
def testPickleCopy(self):
q = queue(range(10))
self.assertEqual(q, pickle.loads(pickle.dumps(q)))
class MaxLengthQueueTestCase(unittest.TestCase):
def testInit(self):
q = MaxLengthQueue(3, (1, 2, 3))
self.assertEqual(list(q), [1, 2, 3])
self.assertRaises(TypeError, MaxLengthQueue, 3, 1, 2, 3)
def testMaxLength(self):
q = MaxLengthQueue(3)
q.enqueue(1)
self.assertEqual(len(q), 1)
q.enqueue(2)
self.assertEqual(len(q), 2)
q.enqueue(3)
self.assertEqual(len(q), 3)
q.enqueue(4)
self.assertEqual(len(q), 3)
self.assertEqual(q.peek(), 2)
q.enqueue(5)
self.assertEqual(len(q), 3)
self.assertEqual(q[0], 3)