def validate
bend-edit-distance@0.2.2.0 · src/Reconstruction.bend:231
import bend-edit-distance@0.2.2.0/src/Reconstruction.bend as Reconstruction
import Base
import bend-edit-distance@0.2.2.0/EdlibTypes.bend as E
231
232
233
234
235def validate(operations: List<&2, E.Operation>, query: String, target: String,
236 +pairs: List<&2, E.EqualityPair>, +expected: Nat, cost: Nat) -> Bool:
237 match operations query target:
238 case Nil{} SNil{} SNil{}:
239 Nat.is_eq(cost, expected)
240 case E.Match{} <> tail SCon{q, qt} SCon{t, tt}:
241 Bool.and(E.equal(pairs, q, t), validate(tail, qt, tt, pairs, expected, cost))
242 case E.Mismatch{} <> tail SCon{q, qt} SCon{t, tt}:
243 Bool.and(Bool.not(E.equal(pairs, q, t)), validate(tail, qt, tt, pairs, expected, 1n+cost))
244 case E.Insert{} <> tail SCon{_, qt} _:
245 validate(tail, qt, target, pairs, expected, 1n+cost)
246 case E.Delete{} <> tail _ SCon{_, tt}:
247 validate(tail, query, tt, pairs, expected, 1n+cost)
248 case _ _ _:
249 False{}