Module grscheller.datastructures.tests.queue_test
Expand source code
# Copyright 2023 Geoffrey R. Scheller
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from grscheller.datastructures.queue import Queue
class TestQueue:
def test_push_then_pop(self):
q = Queue()
pushed = 42; q.push(pushed)
popped = q.pop()
assert pushed == popped
assert len(q) == 0
pushed = 0; q.push(pushed)
popped = q.pop()
assert pushed == popped == 0
assert not q
pushed = 0; q.push(pushed)
popped = q.pop()
assert popped is not None
assert pushed == popped
assert len(q) == 0
pushed = ''; q.push(pushed)
popped = q.pop()
assert pushed == popped
assert len(q) == 0
q.push('first').push('second').push('last')
assert q.pop()== 'first'
assert q.pop()== 'second'
assert q
q.pop()
assert len(q) == 0
def test_pushing_None(self):
q0 = Queue()
q1 = Queue()
q2 = Queue()
q1.push(None)
q2.push(None)
assert q0 == q1 == q2
barNone = (1, 2, None, 3, None, 4)
bar = (1, 2, 3, 4)
q0 = Queue(*barNone)
q1 = Queue(*bar)
assert q0 == q1
for d in q0:
assert d is not None
for d in q1:
assert d is not None
def test_bool_len_peak(self):
q = Queue()
assert not q
q.push(1,2,3)
assert q
assert q.peakNextOut() == 1
assert q.peakLastIn() == 3
assert len(q) == 3
assert q.pop() == 1
assert len(q) == 2
assert q
assert q.pop() == 2
assert len(q) == 1
assert q
assert q.pop() == 3
assert len(q) == 0
assert not q
assert not q.pop()
assert q.pop() == None
assert len(q) == 0
assert not q
assert q.push(42)
assert q.peakNextOut() == 42
assert q.peakLastIn() == 42
assert len(q) == 1
assert q
assert q.pop() == 42
assert not q
assert q.peakNextOut() == None
assert q.peakLastIn() == None
def test_iterators(self):
data = [1, 2, 3, 4]
dq = Queue(*data)
ii = 0
for item in dq:
assert data[ii] == item
ii += 1
assert ii == 4
data.append(5)
dq = Queue(*data)
data.reverse()
ii = 0
for item in reversed(dq):
assert data[ii] == item
ii += 1
assert ii == 5
dq0 = Queue()
for _ in dq0:
assert False
for _ in reversed(dq0):
assert False
data = ()
dq0 = Queue(*data)
for _ in dq0:
assert False
for _ in reversed(dq0):
assert False
def test_capacity(self):
q = Queue(1, 2)
assert q.fractionFilled() == 2/2
q.push(0)
assert q.fractionFilled() == 3/4
q.push(3)
assert q.fractionFilled() == 4/4
q.push(4)
assert q.fractionFilled() == 5/8
assert len(q) == 5
assert q.capacity() == 8
q.resize()
assert q.fractionFilled() == 5/5
q.resize(20)
assert q.fractionFilled() == 5/25
def test_copy_reversed(self):
q1 = Queue(*range(20))
q2 = q1.copy()
assert q1 == q2
assert q1 is not q2
jj = 19
for ii in reversed(q1):
assert jj == ii
jj -= 1
jj = 0
for ii in iter(q1):
assert jj == ii
jj += 1
def test_equality_identity(self):
tup1 = 7, 11, 'foobar'
tup2 = 42, 'foofoo'
q1 = Queue(1, 2, 3, 'Forty-Two', tup1)
q2 = Queue(2, 3, 'Forty-Two').push((7, 11, 'foobar'))
popped = q1.pop()
assert popped == 1
assert q1 == q2
q2.push(tup2)
assert q1 != q2
assert q1 is not q2
q1.push(q1.pop(), q1.pop(), q1.pop())
q2.push(q2.pop(), q2.pop(), q2.pop()).pop()
assert tup2 == q2.peakNextOut()
assert q1 != q2
assert q1.pop() != q2.pop()
assert q1 == q2
q1.pop()
assert q1 != q2
q2.pop()
assert q1 == q2
def test_mapAndFlatMap(self):
q1 = Queue(1,2,3,10)
q2 = q1.copy()
q3 = q2.copy()
assert q1 == q2 == q3
q1_answers = Queue(0,3,8,99)
assert q1.map(lambda x: x*x-1) == q1_answers
q2.flatMap(lambda x: Queue(1, x, x*x+1))
q2_answers = Queue(1, 1, 2, 1, 2, 5, 1, 3, 10, 1, 10, 101)
assert q2 == q2_answers
assert q1 != q2
assert q1 is not q2
q3.mergeMap(lambda x: Queue(*range(2*x, x*x+4)))
q3_answers = Queue(2, 4, 6, 20, 3, 5, 7, 21, 4, 6, 8, 22)
assert q3 == q3_answers
Classes
class TestQueue
-
Expand source code
class TestQueue: def test_push_then_pop(self): q = Queue() pushed = 42; q.push(pushed) popped = q.pop() assert pushed == popped assert len(q) == 0 pushed = 0; q.push(pushed) popped = q.pop() assert pushed == popped == 0 assert not q pushed = 0; q.push(pushed) popped = q.pop() assert popped is not None assert pushed == popped assert len(q) == 0 pushed = ''; q.push(pushed) popped = q.pop() assert pushed == popped assert len(q) == 0 q.push('first').push('second').push('last') assert q.pop()== 'first' assert q.pop()== 'second' assert q q.pop() assert len(q) == 0 def test_pushing_None(self): q0 = Queue() q1 = Queue() q2 = Queue() q1.push(None) q2.push(None) assert q0 == q1 == q2 barNone = (1, 2, None, 3, None, 4) bar = (1, 2, 3, 4) q0 = Queue(*barNone) q1 = Queue(*bar) assert q0 == q1 for d in q0: assert d is not None for d in q1: assert d is not None def test_bool_len_peak(self): q = Queue() assert not q q.push(1,2,3) assert q assert q.peakNextOut() == 1 assert q.peakLastIn() == 3 assert len(q) == 3 assert q.pop() == 1 assert len(q) == 2 assert q assert q.pop() == 2 assert len(q) == 1 assert q assert q.pop() == 3 assert len(q) == 0 assert not q assert not q.pop() assert q.pop() == None assert len(q) == 0 assert not q assert q.push(42) assert q.peakNextOut() == 42 assert q.peakLastIn() == 42 assert len(q) == 1 assert q assert q.pop() == 42 assert not q assert q.peakNextOut() == None assert q.peakLastIn() == None def test_iterators(self): data = [1, 2, 3, 4] dq = Queue(*data) ii = 0 for item in dq: assert data[ii] == item ii += 1 assert ii == 4 data.append(5) dq = Queue(*data) data.reverse() ii = 0 for item in reversed(dq): assert data[ii] == item ii += 1 assert ii == 5 dq0 = Queue() for _ in dq0: assert False for _ in reversed(dq0): assert False data = () dq0 = Queue(*data) for _ in dq0: assert False for _ in reversed(dq0): assert False def test_capacity(self): q = Queue(1, 2) assert q.fractionFilled() == 2/2 q.push(0) assert q.fractionFilled() == 3/4 q.push(3) assert q.fractionFilled() == 4/4 q.push(4) assert q.fractionFilled() == 5/8 assert len(q) == 5 assert q.capacity() == 8 q.resize() assert q.fractionFilled() == 5/5 q.resize(20) assert q.fractionFilled() == 5/25 def test_copy_reversed(self): q1 = Queue(*range(20)) q2 = q1.copy() assert q1 == q2 assert q1 is not q2 jj = 19 for ii in reversed(q1): assert jj == ii jj -= 1 jj = 0 for ii in iter(q1): assert jj == ii jj += 1 def test_equality_identity(self): tup1 = 7, 11, 'foobar' tup2 = 42, 'foofoo' q1 = Queue(1, 2, 3, 'Forty-Two', tup1) q2 = Queue(2, 3, 'Forty-Two').push((7, 11, 'foobar')) popped = q1.pop() assert popped == 1 assert q1 == q2 q2.push(tup2) assert q1 != q2 assert q1 is not q2 q1.push(q1.pop(), q1.pop(), q1.pop()) q2.push(q2.pop(), q2.pop(), q2.pop()).pop() assert tup2 == q2.peakNextOut() assert q1 != q2 assert q1.pop() != q2.pop() assert q1 == q2 q1.pop() assert q1 != q2 q2.pop() assert q1 == q2 def test_mapAndFlatMap(self): q1 = Queue(1,2,3,10) q2 = q1.copy() q3 = q2.copy() assert q1 == q2 == q3 q1_answers = Queue(0,3,8,99) assert q1.map(lambda x: x*x-1) == q1_answers q2.flatMap(lambda x: Queue(1, x, x*x+1)) q2_answers = Queue(1, 1, 2, 1, 2, 5, 1, 3, 10, 1, 10, 101) assert q2 == q2_answers assert q1 != q2 assert q1 is not q2 q3.mergeMap(lambda x: Queue(*range(2*x, x*x+4))) q3_answers = Queue(2, 4, 6, 20, 3, 5, 7, 21, 4, 6, 8, 22) assert q3 == q3_answers
Methods
def test_bool_len_peak(self)
-
Expand source code
def test_bool_len_peak(self): q = Queue() assert not q q.push(1,2,3) assert q assert q.peakNextOut() == 1 assert q.peakLastIn() == 3 assert len(q) == 3 assert q.pop() == 1 assert len(q) == 2 assert q assert q.pop() == 2 assert len(q) == 1 assert q assert q.pop() == 3 assert len(q) == 0 assert not q assert not q.pop() assert q.pop() == None assert len(q) == 0 assert not q assert q.push(42) assert q.peakNextOut() == 42 assert q.peakLastIn() == 42 assert len(q) == 1 assert q assert q.pop() == 42 assert not q assert q.peakNextOut() == None assert q.peakLastIn() == None
def test_capacity(self)
-
Expand source code
def test_capacity(self): q = Queue(1, 2) assert q.fractionFilled() == 2/2 q.push(0) assert q.fractionFilled() == 3/4 q.push(3) assert q.fractionFilled() == 4/4 q.push(4) assert q.fractionFilled() == 5/8 assert len(q) == 5 assert q.capacity() == 8 q.resize() assert q.fractionFilled() == 5/5 q.resize(20) assert q.fractionFilled() == 5/25
def test_copy_reversed(self)
-
Expand source code
def test_copy_reversed(self): q1 = Queue(*range(20)) q2 = q1.copy() assert q1 == q2 assert q1 is not q2 jj = 19 for ii in reversed(q1): assert jj == ii jj -= 1 jj = 0 for ii in iter(q1): assert jj == ii jj += 1
def test_equality_identity(self)
-
Expand source code
def test_equality_identity(self): tup1 = 7, 11, 'foobar' tup2 = 42, 'foofoo' q1 = Queue(1, 2, 3, 'Forty-Two', tup1) q2 = Queue(2, 3, 'Forty-Two').push((7, 11, 'foobar')) popped = q1.pop() assert popped == 1 assert q1 == q2 q2.push(tup2) assert q1 != q2 assert q1 is not q2 q1.push(q1.pop(), q1.pop(), q1.pop()) q2.push(q2.pop(), q2.pop(), q2.pop()).pop() assert tup2 == q2.peakNextOut() assert q1 != q2 assert q1.pop() != q2.pop() assert q1 == q2 q1.pop() assert q1 != q2 q2.pop() assert q1 == q2
def test_iterators(self)
-
Expand source code
def test_iterators(self): data = [1, 2, 3, 4] dq = Queue(*data) ii = 0 for item in dq: assert data[ii] == item ii += 1 assert ii == 4 data.append(5) dq = Queue(*data) data.reverse() ii = 0 for item in reversed(dq): assert data[ii] == item ii += 1 assert ii == 5 dq0 = Queue() for _ in dq0: assert False for _ in reversed(dq0): assert False data = () dq0 = Queue(*data) for _ in dq0: assert False for _ in reversed(dq0): assert False
def test_mapAndFlatMap(self)
-
Expand source code
def test_mapAndFlatMap(self): q1 = Queue(1,2,3,10) q2 = q1.copy() q3 = q2.copy() assert q1 == q2 == q3 q1_answers = Queue(0,3,8,99) assert q1.map(lambda x: x*x-1) == q1_answers q2.flatMap(lambda x: Queue(1, x, x*x+1)) q2_answers = Queue(1, 1, 2, 1, 2, 5, 1, 3, 10, 1, 10, 101) assert q2 == q2_answers assert q1 != q2 assert q1 is not q2 q3.mergeMap(lambda x: Queue(*range(2*x, x*x+4))) q3_answers = Queue(2, 4, 6, 20, 3, 5, 7, 21, 4, 6, 8, 22) assert q3 == q3_answers
def test_push_then_pop(self)
-
Expand source code
def test_push_then_pop(self): q = Queue() pushed = 42; q.push(pushed) popped = q.pop() assert pushed == popped assert len(q) == 0 pushed = 0; q.push(pushed) popped = q.pop() assert pushed == popped == 0 assert not q pushed = 0; q.push(pushed) popped = q.pop() assert popped is not None assert pushed == popped assert len(q) == 0 pushed = ''; q.push(pushed) popped = q.pop() assert pushed == popped assert len(q) == 0 q.push('first').push('second').push('last') assert q.pop()== 'first' assert q.pop()== 'second' assert q q.pop() assert len(q) == 0
def test_pushing_None(self)
-
Expand source code
def test_pushing_None(self): q0 = Queue() q1 = Queue() q2 = Queue() q1.push(None) q2.push(None) assert q0 == q1 == q2 barNone = (1, 2, None, 3, None, 4) bar = (1, 2, 3, 4) q0 = Queue(*barNone) q1 = Queue(*bar) assert q0 == q1 for d in q0: assert d is not None for d in q1: assert d is not None