stepper: initial passing test

This commit is contained in:
William Banfield
2022-02-18 17:36:18 -05:00
parent cc18f87000
commit 2a24bf1564
+45
View File
@@ -0,0 +1,45 @@
package stepper
import (
"errors"
"github.com/tendermint/tendermint/internal/consensus/types"
)
var (
ErrNoValidTransition = errors.New("no valid transition")
)
type (
Transition func(types.RoundState) types.RoundState
Predicate func(types.RoundState) bool
)
var emptyTransition = func(types.RoundState) types.RoundState { return types.RoundState{} }
type Operation struct {
P Predicate
T Transition
}
type stepper struct {
ops []Operation
}
func New(ops []Operation) stepper {
return stepper{ops: ops}
}
func (s *stepper) Next(state types.RoundState) (types.RoundState, error) {
if t, ok := s.pickTransition(state); ok {
return t(state), nil
}
return types.RoundState{}, ErrNoValidTransition
}
func (s *stepper) pickTransition(state types.RoundState) (Transition, bool) {
for _, op := range s.ops {
return op.T, true
}
return emptyTransition, false
}