go get github.com/hyeonjae/fsm
package main
import "github.com/hyeonjae/fsm"
func main() {
s1 := fsm.State{State: "s1"}
s2 := fsm.State{State: "s2"}
s3 := fsm.State{State: "s3"}
a1 := fsm.Action{Action: "a"}
a2 := fsm.Action{Action: "b"}
t1 := fsm.Transition{
Tuple: fsm.StateActionTuple{State: s1, Action: a1},
State: s2,
}
t2 := fsm.Transition{
Tuple: fsm.StateActionTuple{State: s1, Action: a2},
State: s1,
}
t3 := fsm.Transition{
Tuple: fsm.StateActionTuple{State: s2, Action: a1},
State: s1,
}
t4 := fsm.Transition{
Tuple: fsm.StateActionTuple{State: s2, Action: a2},
State: s3,
}
builder := fsm.Builder().
States([]fsm.State{s1, s2, s3}).
Actions([]fsm.Action{a1, a2}).
Start(s1).
Accepts([]fsm.State{s3}).
Transitions([]fsm.Transition{t1, t2, t3, t4})
statemachine := fsm.New(builder)
statemachine.Start()
statemachine.Transit(a1)
statemachine.Transit(a1)
statemachine.Transit(a1)
statemachine.Transit(a2)
statemachine.Current() // s3
statemachine.Accepted() // true
}
$ go test ./...
ok github.com/hyeonjae/fsm 0.758s