Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class MealyStateMachine:
- def __init__(self):
- self.state = 'A'
- def march(self):
- if self.state == 'A':
- self.state = 'B'
- return 0
- elif self.state == 'B':
- self.state = 'C'
- return 1
- elif self.state == 'C':
- self.state = 'E'
- return 3
- elif self.state == 'D':
- self.state = 'E'
- return 5
- else:
- return MealyError('march')
- def merge(self):
- if self.state == 'C':
- return 4
- elif self.state == 'E':
- self.state = 'F'
- return 6
- else:
- return MealyError('merge')
- def jump(self):
- if self.state == 'C':
- self.state = 'D'
- return 2
- elif self.state == 'E':
- return 7
- elif self.state == 'F':
- self.state = 'A'
- return 8
- else:
- return MealyError('jump')
- class MealyError(Exception):
- def __init__(self, method_name):
- self.method_name = method_name
- def __str__(self):
- return self.method_name
- def main():
- return MealyStateMachine()
- def test():
- m = main() # A
- try:
- m.merge()
- except MealyError:
- pass
- try:
- m.jump()
- except MealyError:
- pass
- m.march() # B
- try:
- m.merge()
- except MealyError:
- pass
- try:
- m.jump()
- except MealyError:
- pass
- m.march() # E
- try:
- m.march()
- except MealyError:
- pass
- m.merge() # F
- try:
- m.merge()
- except MealyError:
- pass
- try:
- m.march()
- except MealyError:
- pass
- m = main()
- m.march()
- m.march()
- m.jump()
- try:
- m.merge()
- except MealyError:
- pass
- try:
- m.jump()
- except MealyError:
- pass
- m = main()
- assert m.march() == 0
- assert m.march() == 1
- assert m.merge() == 4
- assert m.jump() == 2
- assert m.march() == 5
- assert m.jump() == 7
- assert m.merge() == 6
- assert m.jump() == 8
- m = MealyStateMachine()
- assert m.march() == 0
- assert m.march() == 1
- assert m.merge() == 4
- assert m.march() == 3
- assert m.jump() == 7
- assert m.merge() == 6
- assert m.jump() == 8
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement