========
Examples
========

-------------------------
Creating a simple machine
-------------------------

.. testcode::

    from automaton import machines
    m = machines.FiniteMachine()
    m.add_state('up')
    m.add_state('down')
    m.add_transition('down', 'up', 'jump')
    m.add_transition('up', 'down', 'fall')
    m.default_start_state = 'down'
    print(m.pformat())

**Expected output:**

.. testoutput::

    +---------+-------+------+----------+---------+
    |  Start  | Event | End  | On Enter | On Exit |
    +---------+-------+------+----------+---------+
    | down[^] |  jump |  up  |    .     |    .    |
    |    up   |  fall | down |    .     |    .    |
    +---------+-------+------+----------+---------+

------------------------------
Transitioning a simple machine
------------------------------

.. testcode::

    m.initialize()
    m.process_event('jump')
    print(m.pformat())
    print(m.current_state)
    print(m.terminated)
    m.process_event('fall')
    print(m.pformat())
    print(m.current_state)

**Expected output:**

.. testoutput::

    +---------+-------+------+----------+---------+
    |  Start  | Event | End  | On Enter | On Exit |
    +---------+-------+------+----------+---------+
    | down[^] |  jump |  up  |    .     |    .    |
    |   @up   |  fall | down |    .     |    .    |
    +---------+-------+------+----------+---------+
    up
    False
    +----------+-------+------+----------+---------+
    |  Start   | Event | End  | On Enter | On Exit |
    +----------+-------+------+----------+---------+
    | @down[^] |  jump |  up  |    .     |    .    |
    |    up    |  fall | down |    .     |    .    |
    +----------+-------+------+----------+---------+
    down
    False