Module grscheller.datastructures.tests.test_dqueue

Expand source code
from grscheller.datastructures.dqueue import Dqueue

class TestStack:
    def test_push_then_pop(self):
        dq = Dqueue()
        pushed = 42; dq.pushL(pushed)
        popped = dq.popL()
        assert pushed == popped
        assert dq.isEmpty()
        pushed = 0; dq.pushL(pushed)
        popped = dq.popR()
        assert pushed == popped == 0
        assert dq.isEmpty()
        pushed = 0; dq.pushR(pushed)
        popped = dq.popL()
        assert pushed == popped
        assert dq.isEmpty()
        pushed = ''; dq.pushR(pushed)
        popped = dq.popR()
        assert pushed == popped
        assert dq.isEmpty()
        dq.pushR('first').pushR('second').pushR('last')
        assert dq.popL() == 'first'
        assert dq.popR() == 'last'
        assert not dq.isEmpty()
        dq.popL()
        assert dq.isEmpty()

    def test_iterators(self):
        data = [1, 2, 3, 4]
        dq = Dqueue(*data)
        data.reverse()
        ii = 0
        for item in reversed(dq):
            assert data[ii] == item
            ii += 1
        assert ii == 4

        data.reverse()
        data.append(42)
        dq.pushR(42)
        ii=0
        for item in dq:
            assert data[ii] == item
            ii += 1
        assert ii == 5

    def test_capacity(self):
        dq = Dqueue(1, 2)
        assert dq.fractionFilled() == 2/4
        dq.pushL(0)
        assert dq.fractionFilled() == 3/4
        dq.pushR(3)
        assert dq.fractionFilled() == 4/4
        dq.pushR(4)
        assert dq.fractionFilled() == 5/8
        assert len(dq) == 5
        assert dq.capacity() == 8
        dq.resize()
        assert dq.fractionFilled() == 5/5
        dq.resize(20)
        assert dq.fractionFilled() == 5/25

    def testequality(self):
        dq1 = Dqueue(1, 2, 3, 'Forty-Two', (7, 11, 'foobar'))
        dq2 = Dqueue(2, 3, 'Forty-Two').pushL(1).pushR((7, 11, 'foobar'))
        assert dq1 == dq2

        tup2 = dq2.popR()
        assert dq1 != dq2

        dq2.pushR((42, 'foofoo'))
        assert dq1 != dq2

        dq1.popR()
        dq1.pushR((42, 'foofoo')).pushR(tup2)
        dq2.pushR(tup2)
        assert dq1 == dq2

        holdA = dq1.popL()
        dq1.resize(42)
        holdB = dq1.popL()
        holdC = dq1.popR()
        dq1.pushL(holdB).pushR(holdC).pushL(holdA).pushL(200)
        dq2.pushL(200)
        assert dq1 == dq2

Classes

class TestStack
Expand source code
class TestStack:
    def test_push_then_pop(self):
        dq = Dqueue()
        pushed = 42; dq.pushL(pushed)
        popped = dq.popL()
        assert pushed == popped
        assert dq.isEmpty()
        pushed = 0; dq.pushL(pushed)
        popped = dq.popR()
        assert pushed == popped == 0
        assert dq.isEmpty()
        pushed = 0; dq.pushR(pushed)
        popped = dq.popL()
        assert pushed == popped
        assert dq.isEmpty()
        pushed = ''; dq.pushR(pushed)
        popped = dq.popR()
        assert pushed == popped
        assert dq.isEmpty()
        dq.pushR('first').pushR('second').pushR('last')
        assert dq.popL() == 'first'
        assert dq.popR() == 'last'
        assert not dq.isEmpty()
        dq.popL()
        assert dq.isEmpty()

    def test_iterators(self):
        data = [1, 2, 3, 4]
        dq = Dqueue(*data)
        data.reverse()
        ii = 0
        for item in reversed(dq):
            assert data[ii] == item
            ii += 1
        assert ii == 4

        data.reverse()
        data.append(42)
        dq.pushR(42)
        ii=0
        for item in dq:
            assert data[ii] == item
            ii += 1
        assert ii == 5

    def test_capacity(self):
        dq = Dqueue(1, 2)
        assert dq.fractionFilled() == 2/4
        dq.pushL(0)
        assert dq.fractionFilled() == 3/4
        dq.pushR(3)
        assert dq.fractionFilled() == 4/4
        dq.pushR(4)
        assert dq.fractionFilled() == 5/8
        assert len(dq) == 5
        assert dq.capacity() == 8
        dq.resize()
        assert dq.fractionFilled() == 5/5
        dq.resize(20)
        assert dq.fractionFilled() == 5/25

    def testequality(self):
        dq1 = Dqueue(1, 2, 3, 'Forty-Two', (7, 11, 'foobar'))
        dq2 = Dqueue(2, 3, 'Forty-Two').pushL(1).pushR((7, 11, 'foobar'))
        assert dq1 == dq2

        tup2 = dq2.popR()
        assert dq1 != dq2

        dq2.pushR((42, 'foofoo'))
        assert dq1 != dq2

        dq1.popR()
        dq1.pushR((42, 'foofoo')).pushR(tup2)
        dq2.pushR(tup2)
        assert dq1 == dq2

        holdA = dq1.popL()
        dq1.resize(42)
        holdB = dq1.popL()
        holdC = dq1.popR()
        dq1.pushL(holdB).pushR(holdC).pushL(holdA).pushL(200)
        dq2.pushL(200)
        assert dq1 == dq2

Methods

def test_capacity(self)
Expand source code
def test_capacity(self):
    dq = Dqueue(1, 2)
    assert dq.fractionFilled() == 2/4
    dq.pushL(0)
    assert dq.fractionFilled() == 3/4
    dq.pushR(3)
    assert dq.fractionFilled() == 4/4
    dq.pushR(4)
    assert dq.fractionFilled() == 5/8
    assert len(dq) == 5
    assert dq.capacity() == 8
    dq.resize()
    assert dq.fractionFilled() == 5/5
    dq.resize(20)
    assert dq.fractionFilled() == 5/25
def test_iterators(self)
Expand source code
def test_iterators(self):
    data = [1, 2, 3, 4]
    dq = Dqueue(*data)
    data.reverse()
    ii = 0
    for item in reversed(dq):
        assert data[ii] == item
        ii += 1
    assert ii == 4

    data.reverse()
    data.append(42)
    dq.pushR(42)
    ii=0
    for item in dq:
        assert data[ii] == item
        ii += 1
    assert ii == 5
def test_push_then_pop(self)
Expand source code
def test_push_then_pop(self):
    dq = Dqueue()
    pushed = 42; dq.pushL(pushed)
    popped = dq.popL()
    assert pushed == popped
    assert dq.isEmpty()
    pushed = 0; dq.pushL(pushed)
    popped = dq.popR()
    assert pushed == popped == 0
    assert dq.isEmpty()
    pushed = 0; dq.pushR(pushed)
    popped = dq.popL()
    assert pushed == popped
    assert dq.isEmpty()
    pushed = ''; dq.pushR(pushed)
    popped = dq.popR()
    assert pushed == popped
    assert dq.isEmpty()
    dq.pushR('first').pushR('second').pushR('last')
    assert dq.popL() == 'first'
    assert dq.popR() == 'last'
    assert not dq.isEmpty()
    dq.popL()
    assert dq.isEmpty()
def testequality(self)
Expand source code
def testequality(self):
    dq1 = Dqueue(1, 2, 3, 'Forty-Two', (7, 11, 'foobar'))
    dq2 = Dqueue(2, 3, 'Forty-Two').pushL(1).pushR((7, 11, 'foobar'))
    assert dq1 == dq2

    tup2 = dq2.popR()
    assert dq1 != dq2

    dq2.pushR((42, 'foofoo'))
    assert dq1 != dq2

    dq1.popR()
    dq1.pushR((42, 'foofoo')).pushR(tup2)
    dq2.pushR(tup2)
    assert dq1 == dq2

    holdA = dq1.popL()
    dq1.resize(42)
    holdB = dq1.popL()
    holdC = dq1.popR()
    dq1.pushL(holdB).pushR(holdC).pushL(holdA).pushL(200)
    dq2.pushL(200)
    assert dq1 == dq2