Advertisement
selebry

10

May 14th, 2023
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.52 KB | None | 0 0
  1. class State:
  2. def __init__(self, scale=None, snap=None, chat=None, crash=None):
  3. self.__scale = scale
  4. self.__snap = snap
  5. self.__chat = chat
  6. self.__crash = crash
  7.  
  8. @property
  9. def scale(self):
  10. return self.__scale
  11.  
  12. @property
  13. def snap(self):
  14. return self.__snap
  15.  
  16. @property
  17. def chat(self):
  18. return self.__chat
  19.  
  20. @property
  21. def crash(self):
  22. return self.__crash
  23.  
  24.  
  25. class Mealy:
  26. def __init__(self):
  27. self.current_state = 'A'
  28. self.branches = {'A': State(scale=['B', 0], snap=['G', 1]),
  29. 'B': State(snap=['C', 2], chat=['D', 3]),
  30. 'C': State(scale=['D', 4]),
  31. 'D': State(scale=['E', 5]),
  32. 'E': State(crash=['F', 6]),
  33. 'F': State(snap=['G', 7]),
  34. 'G': State(scale=['H', 8], snap=['B', 9]),
  35. 'H': State(scale=['H', 10], snap=['A', 11])
  36. }
  37.  
  38. def scale(self):
  39. curr_method = self.branches[self.current_state].scale
  40. if curr_method:
  41. self.current_state = curr_method[0]
  42. return curr_method[1]
  43. raise MealyError('scale')
  44.  
  45. def snap(self):
  46. curr_method = self.branches[self.current_state].snap
  47. if curr_method:
  48. self.current_state = curr_method[0]
  49. return curr_method[1]
  50. raise MealyError('snap')
  51.  
  52. def chat(self):
  53. curr_method = self.branches[self.current_state].chat
  54. if curr_method:
  55. self.current_state = curr_method[0]
  56. return curr_method[1]
  57. raise MealyError('chat')
  58.  
  59. def crash(self):
  60. curr_method = self.branches[self.current_state].crash
  61. if curr_method:
  62. self.current_state = curr_method[0]
  63. return curr_method[1]
  64. raise MealyError('crash')
  65.  
  66.  
  67. class MealyError(Exception):
  68. pass
  69.  
  70.  
  71. def test():
  72. o = main()
  73. assert o.snap() == 1
  74. raises(lambda: o.chat(), MealyError)
  75. raises(lambda: o.crash(), MealyError)
  76. assert o.scale() == 8
  77. raises(lambda: o.chat(), MealyError)
  78. raises(lambda: o.crash(), MealyError)
  79. assert o.snap() == 11
  80. raises(lambda: o.chat(), MealyError)
  81. raises(lambda: o.crash(), MealyError)
  82. assert o.scale() == 0
  83. raises(lambda: o.scale(), MealyError)
  84. raises(lambda: o.crash(), MealyError)
  85. assert o.snap() == 2
  86. raises(lambda: o.snap(), MealyError)
  87. raises(lambda: o.chat(), MealyError)
  88. raises(lambda: o.crash(), MealyError)
  89. assert o.scale() == 4
  90. raises(lambda: o.snap(), MealyError)
  91. raises(lambda: o.chat(), MealyError)
  92. raises(lambda: o.crash(), MealyError)
  93. assert o.scale() == 5
  94. raises(lambda: o.scale(), MealyError)
  95. raises(lambda: o.snap(), MealyError)
  96. raises(lambda: o.chat(), MealyError)
  97. assert o.crash() == 6
  98. raises(lambda: o.scale(), MealyError)
  99. raises(lambda: o.chat(), MealyError)
  100. raises(lambda: o.crash(), MealyError)
  101. assert o.snap() == 7
  102. raises(lambda: o.chat(), MealyError)
  103. raises(lambda: o.crash(), MealyError)
  104. assert o.scale() == 8
  105. raises(lambda: o.chat(), MealyError)
  106. raises(lambda: o.crash(), MealyError)
  107. assert o.scale() == 10
  108. raises(lambda: o.chat(), MealyError)
  109. raises(lambda: o.crash(), MealyError)
  110. assert o.scale() == 10
  111. raises(lambda: o.chat(), MealyError)
  112. raises(lambda: o.crash(), MealyError)
  113. assert o.snap() == 11
  114. raises(lambda: o.chat(), MealyError)
  115. raises(lambda: o.crash(), MealyError)
  116. assert o.snap() == 1
  117. raises(lambda: o.chat(), MealyError)
  118. raises(lambda: o.crash(), MealyError)
  119. assert o.snap() == 9
  120. raises(lambda: o.scale(), MealyError)
  121. raises(lambda: o.crash(), MealyError)
  122. assert o.chat() == 3
  123. raises(lambda: o.chat(), MealyError)
  124. raises(lambda: o.snap(), MealyError)
  125. raises(lambda: o.chat(), MealyError)
  126. assert o.scale() == 5
  127. raises(lambda: o.scale(), MealyError)
  128. raises(lambda: o.snap(), MealyError)
  129. raises(lambda: o.chat(), MealyError)
  130. raises(lambda: o.scale(), MealyError)
  131. assert o.crash() == 6
  132. raises(lambda: o.scale(), MealyError)
  133. raises(lambda: o.chat(), MealyError)
  134. raises(lambda: o.crash(), MealyError)
  135.  
  136.  
  137. def main():
  138. return Mealy()
  139.  
  140.  
  141. def raises(method, error):
  142. output = None
  143. try:
  144. output = method()
  145. except Exception as e:
  146. assert type(e) == error
  147. assert output is None
  148.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement