It can be intuitive to implement check all using some sort of iterator/enumerable-based all combinator: assemble all the variable sets that support the predicates in the check and then check if all of those sets cause the expressions in the check to evaluate to true.
However, this implementation would be wrong, because the all combinator evaluates true on empty collections, and if there are no variables that support the predicates in the check, it should fail.
It would be nice if the sample tests included a test in which a biscuit should fail authorisation because it contains a check all for which there is no supporting set of facts.
It can be intuitive to implement
check allusing some sort of iterator/enumerable-basedallcombinator: assemble all the variable sets that support the predicates in the check and then check if all of those sets cause the expressions in the check to evaluate to true.However, this implementation would be wrong, because the
allcombinator evaluates true on empty collections, and if there are no variables that support the predicates in the check, it should fail.It would be nice if the sample tests included a test in which a biscuit should fail authorisation because it contains a
check allfor which there is no supporting set of facts.