1 """LacOperon symbolic simulation using [Python] --[yong27], 2005-03-27
2 """
3 import unittest, sys
4
5 class LacOperon:
6 ID = 0
7 isBindOperator = True
8 isBindCap = False
9 def __init__(self, feed):
10 self.feed = feed
11 self.check()
12 self.ID = LacOperon.ID
13 LacOperon.ID+=1
14
15 def check(self):
16 if self.feed.lactose > 0:
17 self.isBindOperator = False
18 if self.feed.glucose == 0:
19 self.isBindCap = True
20
21 def update(self):
22 if self.feed.isBottom():
23 raise AssertionError, "Die"
24 if self.feed.glucose > 0:
25 self.feed.glucose -=1
26 elif self.getProtein() =='lactase':
27 self.feed.lactose -=1
28 self.check()
29
30 def getProtein(self):
31 if not self.isBindOperator and self.isBindCap:
32 return "lactase"
33
34 def __repr__(self):
35 return '%i : glucose %i, lactose %i, proteins %s'%(
36 self.ID, self.feed.glucose, self.feed.lactose,
37 self.getProtein())
38
39 class Feed:
40 def __init__(self, **substrates):
41 self.glucose = substrates['glucose']
42 self.lactose = substrates['lactose']
43 def isBottom(self):
44 return self.glucose == 0 and self.lactose == 0
45
46 class Simulator:
47 def __init__(self):
48 self.players = list()
49 def addPlayer(self, player):
50 self.players.append(player)
51
52 def iterate(self, n):
53 for each in range(n):
54 for player in self.players:
55 print player
56 player.update()
57
58
59 class FeedTest(unittest.TestCase):
60 def testGetGlucose(self):
61 f = Feed(glucose=10,lactose=10)
62 self.assertEquals(10 , f.glucose)
63
64 class LacOperonTest(unittest.TestCase):
65 def testOnlyGlucose(self):
66 lo = LacOperon(Feed(glucose=10, lactose=0))
67 self.assertEquals(None, lo.getProtein())
68
69 def testOnlyLactose(self):
70 lo = LacOperon(Feed(glucose=0, lactose=10))
71 self.assertEquals('lactase', lo.getProtein())
72
73 def testGlucoseLactose(self):
74 lo = LacOperon(Feed(glucose=10, lactose=10))
75 self.assertEquals(None, lo.getProtein())
76
77 def testUpdate(self):
78 lo = LacOperon(Feed(glucose=2, lactose=2))
79 lo.update()
80 self.assertEquals(1, lo.feed.glucose)
81 self.assertEquals(2, lo.feed.lactose)
82 lo.update()
83 self.assertEquals(0, lo.feed.glucose)
84 self.assertEquals(2, lo.feed.lactose)
85 lo.update()
86 self.assertEquals(0, lo.feed.glucose)
87 self.assertEquals(1, lo.feed.lactose)
88 lo.update()
89 self.assertEquals(0, lo.feed.glucose)
90 self.assertEquals(0, lo.feed.lactose)
91 self.assertRaises(AssertionError, lo.update)
92
93
94 def simulate():
95 s = Simulator()
96 l1 = LacOperon(Feed(glucose=10, lactose=10))
97 l2 = LacOperon(Feed(glucose=15, lactose=5))
98 s.addPlayer(l1)
99 s.addPlayer(l2)
100 try:
101 s.iterate(30)
102 except AssertionError:
103 print 'die.'
104 sys.exit()
105
106 if __name__=='__main__':
107
108 simulate()