Skip to content

Commit 5b1635d

Browse files
committed
doublylinkedlist created; test created
1 parent 0e6c852 commit 5b1635d

File tree

2 files changed

+136
-0
lines changed

2 files changed

+136
-0
lines changed

unit3/doublyLinkedList.py

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
import sys
2+
from opus7.container import Container
3+
from opus7.exception import *
4+
5+
6+
class DoublyLinkedList(object):
7+
def __init__(self):
8+
self._head = None
9+
self._tail = None
10+
11+
class Element(object):
12+
def __init__(self, prev, value, next, thelist):
13+
self._prev = prev
14+
self._next = next
15+
self._value = value
16+
self._thelist = thelist
17+
18+
def getPrev(self):
19+
return self._prev
20+
21+
def getNext(self):
22+
return self._next
23+
24+
def getValue(self):
25+
return self._value
26+
27+
prev = property(
28+
fget = lambda self: self.getPrev())
29+
next = property(
30+
fget = lambda self: self.getNext())
31+
value = property(
32+
fget = lambda self: self.getValue())
33+
34+
def insertAfter(self, obj):
35+
pass
36+
37+
def insertBefore(self, obj):
38+
pass
39+
40+
def getHead(self):
41+
return self._head
42+
43+
def getTail(self):
44+
return self._tail
45+
46+
head = property(
47+
fget = lambda self: self.getHead())
48+
49+
tail = property(
50+
fget = lambda self: self.getTail())
51+
52+
def getFirst(self):
53+
if self._head == None:
54+
raise ContainerEmpty
55+
return self._head
56+
57+
def getLast(self):
58+
if self._tail == None:
59+
raise ContainerEmpty
60+
return self._tail
61+
62+
first = property(
63+
fget = lambda self: self.getFirst())
64+
65+
last = property(
66+
fget = lambda self: self.getLast())
67+
68+
def append(self, obj):
69+
tmp = self.Element(self._tail, obj, None, self)
70+
if self._head == None or self._tail == None:
71+
self._head = tmp
72+
self._tail = tmp
73+
else:
74+
self._tail._next = tmp
75+
self._tail = tmp
76+
77+
def prepend(self, obj):
78+
tmp = self.Element(None, obj, self._head, self)
79+
if self._head == None:
80+
self._head = tmp
81+
self._tail = tmp
82+
else:
83+
self._head._prev = tmp
84+
self._head = tmp
85+
86+
def purge(self):
87+
self._head = None
88+
self._tail = None
89+
90+

unit3/test.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import unittest
2+
from doublyLinkedList import DoublyLinkedList
3+
from opus7.exception import *
4+
5+
class TestList(unittest.TestCase):
6+
def setUp(self):
7+
self.l = DoublyLinkedList()
8+
9+
def test_init(self):
10+
self.assertEqual(self.l.head, None)
11+
self.assertEqual(self.l.tail, None)
12+
13+
def test_append(self):
14+
self.l.append(1)
15+
self.assertEqual(self.l.head.value, 1)
16+
self.assertEqual(self.l.tail.value, 1)
17+
self.l.append(2)
18+
self.assertEqual(self.l.head.value, 1)
19+
self.assertEqual(self.l.tail.value, 2)
20+
self.assertEqual(self.l.first.value, 1)
21+
self.assertEqual(self.l.last.value, 2)
22+
23+
def test_prepend(self):
24+
self.l.prepend(1)
25+
self.assertEqual(self.l.head.value, 1)
26+
self.assertEqual(self.l.tail.value, 1)
27+
self.l.prepend(2)
28+
self.assertEqual(self.l.head.value, 2)
29+
self.assertEqual(self.l.tail.value, 1)
30+
self.l.prepend(3)
31+
self.assertEqual(self.l.head.value, 3)
32+
self.assertEqual(self.l.tail.value, 1)
33+
34+
def test_purge(self):
35+
self.l.append(1)
36+
self.l.append(2)
37+
self.l.append(3)
38+
self.assertEqual(self.l.head.value, 1)
39+
self.assertEqual(self.l.tail.value, 3)
40+
self.l.purge()
41+
self.assertEqual(self.l.head, None)
42+
self.assertEqual(self.l.tail, None)
43+
44+
45+
if __name__ == "__main__":
46+
unittest.main()

0 commit comments

Comments
 (0)