Advertisement
yasi04

Maks_11

Jun 3rd, 2024
305
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.03 KB | None | 0 0
  1. class MealyError(Exception):
  2.     pass
  3.  
  4.  
  5. class StateMachine:
  6.     def __init__(self):
  7.         self.state = 'A'
  8.  
  9.     def carve(self):
  10.         if self.state == 'A':
  11.             self.state = 'B'
  12.             return 0
  13.         if self.state == 'C':
  14.             self.state = 'E'
  15.             return 4
  16.         if self.state == 'F':
  17.             self.state = 'G'
  18.             return 8
  19.         raise MealyError('carve')
  20.  
  21.     def log(self):
  22.         if self.state == 'B':
  23.             self.state = 'C'
  24.             return 1
  25.         if self.state == 'C':
  26.             self.state = 'G'
  27.             return 5
  28.         raise MealyError('log')
  29.  
  30.     def draw(self):
  31.         if self.state == 'C':
  32.             self.state = 'A'
  33.             return 3
  34.         raise MealyError('draw')
  35.  
  36.     def pan(self):
  37.         if self.state == 'C':
  38.             self.state = 'D'
  39.             return 2
  40.         if self.state == 'D':
  41.             self.state = 'E'
  42.             return 6
  43.         if self.state == 'E':
  44.             self.state = 'F'
  45.             return 7
  46.         if self.state == 'G':
  47.             return 9
  48.         raise MealyError('pan')
  49.  
  50.  
  51. def main():
  52.     return StateMachine()
  53.  
  54.  
  55. def raises(function, error):
  56.     output = None
  57.     try:
  58.         output = function()
  59.     except Exception as e:
  60.         assert type(e) == error
  61.     assert output is None
  62.  
  63.  
  64. def test():
  65.     o = main()
  66.     assert o.carve() == 0
  67.     assert o.log() == 1
  68.     assert o.draw() == 3
  69.     assert o.carve() == 0
  70.     assert o.log() == 1
  71.     assert o.log() == 5
  72.     assert o.pan() == 9
  73.     o = main()
  74.     assert o.carve() == 0
  75.     assert o.log() == 1
  76.     assert o.pan() == 2
  77.     assert o.pan() == 6
  78.     assert o.pan() == 7
  79.     assert o.carve() == 8
  80.     o = main()
  81.     assert o.carve() == 0
  82.     assert o.log() == 1
  83.     assert o.carve() == 4
  84.     assert o.pan() == 7
  85.     assert o.carve() == 8
  86.     raises(lambda: o.carve(), MealyError)
  87.     raises(lambda: o.log(), MealyError)
  88.     raises(lambda: o.draw(), MealyError)
  89.     o.state = 'R'
  90.     raises(lambda: o.pan(), MealyError)
  91.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement