~/bend-docscommunity

cases.bend source

cases.bend on the hub · documented module

import Baseimport ./protocol.bend as Pimport ./observe.bend as Oimport ./model.bend as Mimport ./main.bend as Sdef check(+commands: List<&2,P.Command>, +limit: U32) -> Bool:  P.trace_eq(O.run(commands,limit),M.run(commands,limit))def repeat() -> List<&2,P.Command>:  [P.Intern{"a"},P.Intern{"ab"},P.Intern{"a"},P.Find{"ab"},P.Find{"missing"},P.Resolve{0},P.Resolve{1},P.Length{},P.Limit{}]def full() -> List<&2,P.Command>:  [P.Intern{"a"},P.Intern{"b"},P.Intern{"a"},P.Find{"b"},P.Resolve{0},P.Resolve{1},P.Resolve{4294967295},P.Length{},P.Limit{}]def unicode() -> List<&2,P.Command>:  [P.Intern{""},P.Intern{SCon{Chr{0},SNil{}}},P.Intern{"é"},P.Intern{"é"},P.Intern{"🪢"},P.Intern{"é"},P.Find{"é"},P.Resolve{0},P.Resolve{1},P.Resolve{2},P.Resolve{3},P.Resolve{4},P.Resolve{5}]def growth(count: Nat) -> List<&2,P.Command>:  match count:    case 0n: [P.Find{"id1"},P.Resolve{0},P.Resolve{31},P.Resolve{32},P.Resolve{64},P.Resolve{65},P.Resolve{4294967295}]    case 1n+ +p: Con{P.Intern{String.append("id",Nat.show(1n+p))},growth(p)}def all_cases() -> Bool:  Bool.and(check(repeat(),4),Bool.and(check(full(),1),Bool.and(check(unicode(),6),Bool.and(check(full(),0),check(growth(65n),65)))))def alphabet() -> List<&2,P.Command>:  [P.Intern{""},P.Intern{"a"},P.Intern{"ab"},P.Find{""},P.Find{"a"},P.Find{"ab"},P.Resolve{0},P.Resolve{1},P.Resolve{2},P.Resolve{4294967295},P.Length{},P.Limit{}]def enumerate(depth: Nat, +prefix: List<&2,P.Command>, +limit: U32) -> Bool:  match depth:    case 0n: check(List.reverse(&2,P.Command,prefix),limit)    case 1n+ +p:      Bool.and(enumerate(p,Con{P.Intern{""},prefix},limit),Bool.and(enumerate(p,Con{P.Intern{"a"},prefix},limit),Bool.and(enumerate(p,Con{P.Intern{"ab"},prefix},limit),Bool.and(enumerate(p,Con{P.Find{""},prefix},limit),Bool.and(enumerate(p,Con{P.Find{"a"},prefix},limit),Bool.and(enumerate(p,Con{P.Find{"ab"},prefix},limit),Bool.and(enumerate(p,Con{P.Resolve{0},prefix},limit),Bool.and(enumerate(p,Con{P.Resolve{1},prefix},limit),Bool.and(enumerate(p,Con{P.Resolve{2},prefix},limit),Bool.and(enumerate(p,Con{P.Resolve{4294967295},prefix},limit),Bool.and(enumerate(p,Con{P.Length{},prefix},limit),Bool.and(enumerate(p,Con{P.Limit{},prefix},limit),True{}))))))))))))def exhaustive() -> Bool:  Bool.and(enumerate(3n,Nil{},0),Bool.and(enumerate(3n,Nil{},1),Bool.and(enumerate(3n,Nil{},2),enumerate(3n,Nil{},3))))