本文整理匯總了Golang中github.com/ryanfaerman/fsm.Ruleset.Permitted方法的典型用法代碼示例。如果您正苦於以下問題:Golang Ruleset.Permitted方法的具體用法?Golang Ruleset.Permitted怎麽用?Golang Ruleset.Permitted使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類github.com/ryanfaerman/fsm.Ruleset
的用法示例。
在下文中一共展示了Ruleset.Permitted方法的6個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: TestRulesetParallelGuarding
func TestRulesetParallelGuarding(t *testing.T) {
rules := fsm.Ruleset{}
rules.AddTransition(fsm.T{"pending", "started"})
rules.AddTransition(fsm.T{"started", "finished"})
// Add two failing rules, the slow should be caught first
rules.AddRule(fsm.T{"started", "finished"}, func(subject fsm.Stater, goal fsm.State) bool {
time.Sleep(1 * time.Second)
t.Error("Slow rule should have been short-circuited")
return false
})
rules.AddRule(fsm.T{"started", "finished"}, func(subject fsm.Stater, goal fsm.State) bool {
return false
})
st.Expect(t, rules.Permitted(&Thing{State: "started"}, "finished"), false)
}
示例2: BenchmarkRulesetTransitionInvalid
func BenchmarkRulesetTransitionInvalid(b *testing.B) {
// This should be incredibly fast, since fsm.T{"pending", "finished"}
// doesn't exist in the Ruleset. We expect some small overhead from creating
// the transition to check the internal map, but otherwise, we should be
// bumping up against the speed of a map lookup itself.
rules := fsm.Ruleset{}
rules.AddTransition(fsm.T{"pending", "started"})
rules.AddTransition(fsm.T{"started", "finished"})
some_thing := &Thing{State: "pending"}
b.ResetTimer()
for i := 0; i < b.N; i++ {
rules.Permitted(some_thing, "finished")
}
}
示例3: BenchmarkRulesetTransitionPermitted
func BenchmarkRulesetTransitionPermitted(b *testing.B) {
// Permitted a transaction requires the transition to be valid and all of its
// guards to pass. Since we have to run every guard and there won't be any
// short-circuiting, this should actually be a little bit slower as a result,
// depending on the number of guards that must pass.
rules := fsm.Ruleset{}
rules.AddTransition(fsm.T{"pending", "started"})
rules.AddTransition(fsm.T{"started", "finished"})
some_thing := &Thing{State: "started"}
b.ResetTimer()
for i := 0; i < b.N; i++ {
rules.Permitted(some_thing, "finished")
}
}
示例4: BenchmarkRulesetParallelGuarding
func BenchmarkRulesetParallelGuarding(b *testing.B) {
rules := fsm.Ruleset{}
rules.AddTransition(fsm.T{"pending", "started"})
rules.AddTransition(fsm.T{"started", "finished"})
// Add two failing rules, one very slow and the other terribly fast
rules.AddRule(fsm.T{"started", "finished"}, func(subject fsm.Stater, goal fsm.State) bool {
time.Sleep(1 * time.Second)
return false
})
rules.AddRule(fsm.T{"started", "finished"}, func(subject fsm.Stater, goal fsm.State) bool {
return false
})
b.ResetTimer()
for i := 0; i < b.N; i++ {
rules.Permitted(&Thing{State: "started"}, "finished")
}
}
示例5: BenchmarkRulesetRuleForbids
func BenchmarkRulesetRuleForbids(b *testing.B) {
// Here, we explicity create a transition that is forbidden. This simulates an
// otherwise valid transition that would be denied based on a user role or the like.
// It should be slower than a standard invalid transition, since we have to
// actually execute a function to perform the check. The first guard to
// fail (returning false) will short circuit the execution, getting some some speed.
rules := fsm.Ruleset{}
rules.AddTransition(fsm.T{"pending", "started"})
rules.AddRule(fsm.T{"started", "finished"}, func(subject fsm.Stater, goal fsm.State) bool {
return false
})
some_thing := &Thing{State: "started"}
b.ResetTimer()
for i := 0; i < b.N; i++ {
rules.Permitted(some_thing, "finished")
}
}
示例6: testBasics
func testBasics(rules *fsm.Ruleset, char *Character) {
permission := rules.Permitted(&char.location, "forest")
log.Printf("Do I have energy to go to forest? %t", permission)
log.Print(char.name)
}