Advertisement
MinusD

Untitled

Mar 20th, 2023
649
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.38 KB | None | 0 0
  1. class MealyStateMachine:
  2.     def __init__(self):
  3.         self.state = 'A'
  4.  
  5.     def march(self):
  6.         if self.state == 'A':
  7.             self.state = 'B'
  8.             return 0
  9.         elif self.state == 'B':
  10.             self.state = 'C'
  11.             return 1
  12.         elif self.state == 'C':
  13.             self.state = 'E'
  14.             return 3
  15.         elif self.state == 'D':
  16.             self.state = 'E'
  17.             return 5
  18.         else:
  19.             return MealyError('march')
  20.  
  21.     def merge(self):
  22.         if self.state == 'C':
  23.             return 4
  24.         elif self.state == 'E':
  25.             self.state = 'F'
  26.             return 6
  27.         else:
  28.             return MealyError('merge')
  29.  
  30.     def jump(self):
  31.         if self.state == 'C':
  32.             self.state = 'D'
  33.             return 2
  34.         elif self.state == 'E':
  35.             return 7
  36.         elif self.state == 'F':
  37.             self.state = 'A'
  38.             return 8
  39.         else:
  40.             return MealyError('jump')
  41.  
  42.  
  43. class MealyError(Exception):
  44.     def __init__(self, method_name):
  45.         self.method_name = method_name
  46.  
  47.     def __str__(self):
  48.         return self.method_name
  49.  
  50.  
  51. def main():
  52.     return MealyStateMachine()
  53.  
  54.  
  55. def test():
  56.     m = main()  # A
  57.     try:
  58.         m.merge()
  59.     except MealyError:
  60.         pass
  61.     try:
  62.         m.jump()
  63.     except MealyError:
  64.         pass
  65.     m.march()  # B
  66.     try:
  67.         m.merge()
  68.     except MealyError:
  69.         pass
  70.     try:
  71.         m.jump()
  72.     except MealyError:
  73.         pass
  74.     m.march()  # E
  75.     try:
  76.         m.march()
  77.     except MealyError:
  78.         pass
  79.     m.merge()  # F
  80.     try:
  81.         m.merge()
  82.     except MealyError:
  83.         pass
  84.     try:
  85.         m.march()
  86.     except MealyError:
  87.         pass
  88.     m = main()
  89.     m.march()
  90.     m.march()
  91.     m.jump()
  92.     try:
  93.         m.merge()
  94.     except MealyError:
  95.         pass
  96.     try:
  97.         m.jump()
  98.     except MealyError:
  99.         pass
  100.     m = main()
  101.     assert m.march() == 0
  102.     assert m.march() == 1
  103.     assert m.merge() == 4
  104.     assert m.jump() == 2
  105.     assert m.march() == 5
  106.     assert m.jump() == 7
  107.     assert m.merge() == 6
  108.     assert m.jump() == 8
  109.     m = MealyStateMachine()
  110.     assert m.march() == 0
  111.     assert m.march() == 1
  112.     assert m.merge() == 4
  113.     assert m.march() == 3
  114.     assert m.jump() == 7
  115.     assert m.merge() == 6
  116.     assert m.jump() == 8
  117.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement