Реализовать конечный автомат Мили в виде класса. Начальным состоянием автомата является A. Методы возвращают числовые значения. На python
Реализовать конечный автомат Мили в виде класса. Начальным состоянием автомата является A. Методы возвращают числовые значения.
Если вызываемый метод не реализован для некоторого состояния, необходимо вызвать пользовательское исключение MealyError. При возникновении исключения должно передаваться имя метода, вызвавшего это исключение.
Реализовать в отдельной функции test автоматическое тестирование автомата Мили на основе покрытия ветвей. Требуемая степень покрытия: 100%. В примерах ниже функция main возвращает объект созданного класса. Далее последовательно вызываются методы полученного объекта.
class MealyError(Exception):
pass
class Mealy(object):
def __init__(self):
self.currentState = 'A'
def play(self):
if self.currentState == 'A':
self.currentState = 'D'
return 1
if self.currentState == 'C':
self.currentState = 'D'
return 3
if self.currentState == 'E':
self.currentState = 'C'
return 6
if self.currentState == 'F':
self.currentState = 'A'
return 7
raise MealyError("play")
def draw(self):
if self.currentState == 'A':
self.currentState = 'B'
return 0
if self.currentState == 'B':
self.currentState = 'C'
return 2
if self.currentState == 'D':
self.currentState = 'E'
return 4
if self.currentState == 'E':
self.currentState = 'F'
return 5
if self.currentState == 'F':
self.currentState = 'C'
return 8
raise MealyError("draw")
def main():
return Mealy()
def raises(method, error):
output = None
try:
output = method()
except Exception as e:
assert type(e) == error
assert output is None
def test():
o = main()
assert o.play() == 1
assert o.draw() == 4
assert o.draw() == 5
assert o.play() == 7
o = main()
assert o.draw() == 0
assert o.draw() == 2
assert o.play() == 3
assert o.draw() == 4
assert o.play() == 6
o = main()
assert o.draw() == 0
assert o.draw() == 2
assert o.play() == 3
assert o.draw() == 4
assert o.draw() == 5
assert o.draw() == 8
raises(lambda: o.draw(), MealyError)
raises(lambda: o.play(), MealyError)

