| import Lean.Util.Diff | |
| open Lean.Diff | |
| /-! | |
| # Tests for diff | |
| Tests for various parts of the diffing system | |
| -/ | |
| /-! | |
| ## Prefix and Suffix Matching | |
| These tests check that the prefix and suffix matching operations on subarrays used by diff perform | |
| as expected. | |
| -/ | |
| def Ex.abc' := #['a', 'b', 'c'] | |
| def Ex.abc := abc'.toSubarray | |
| def Ex.abcde : Subarray Char := #['a','b','c','d','e'].toSubarray | |
| def Ex.bcde : Subarray Char := #['b','c','d','e'].toSubarray | |
| /-- info: (#['a', 'b', 'c'], #[].toSubarray, #['d', 'e'].toSubarray) -/ | |
| #guard_msgs in | |
| #eval matchPrefix Ex.abc Ex.abcde | |
| /-- info: (#['a', 'b', 'c'], #['d', 'e'].toSubarray, #[].toSubarray) -/ | |
| #guard_msgs in | |
| #eval matchPrefix Ex.abcde Ex.abc | |
| /-- info: (#[], #['a', 'b', 'c'].toSubarray, #['b', 'c', 'd', 'e'].toSubarray) -/ | |
| #guard_msgs in | |
| #eval matchPrefix Ex.abc Ex.bcde | |
| /-- info: (#[], #["A"].toSubarray, #["B"].toSubarray) -/ | |
| #guard_msgs in | |
| #eval matchPrefix #["A"].toSubarray #["B"].toSubarray | |
| /-- info: (#["D", "E", "F"], #["G"].toSubarray, #[].toSubarray) -/ | |
| #guard_msgs in | |
| #eval matchPrefix #["D", "E", "F", "G"].toSubarray #["D", "E", "F"].toSubarray | |
| /-- info: (#["A", "A"], #["B"].toSubarray, #["X"].toSubarray) -/ | |
| #guard_msgs in | |
| #eval matchPrefix #["A", "A", "B"].toSubarray #["A", "A", "X"].toSubarray | |
| def Ex.xyzabc : Subarray Char := #['x', 'y', 'z', 'a', 'b', 'c'].toSubarray | |
| def Ex.xyzab : Subarray Char := #['x', 'y', 'z', 'a', 'b'].toSubarray | |
| /-- info: (#[].toSubarray, #['x', 'y', 'z'].toSubarray, #['a', 'b', 'c']) -/ | |
| #guard_msgs in | |
| #eval matchSuffix Ex.abc Ex.xyzabc | |
| /-- info: (#['a', 'b', 'c'].toSubarray, #['x', 'y', 'z', 'a', 'b'].toSubarray, #[]) -/ | |
| #guard_msgs in | |
| #eval matchSuffix Ex.abc Ex.xyzab | |
| /-- info: (#['a'].toSubarray, #[].toSubarray, #['b']) -/ | |
| #guard_msgs in | |
| #eval matchSuffix #['a', 'b'].toSubarray #['b'].toSubarray | |
| /-! | |
| ## Least Common Subsequence | |
| These tests find least common subsequences. | |
| -/ | |
| /-- info: #[] -/ | |
| #guard_msgs in | |
| #eval lcs (α := Nat) (#[].toSubarray) (#[].toSubarray) | |
| /-- info: #[] -/ | |
| #guard_msgs in | |
| #eval lcs (#[1].toSubarray) (#[].toSubarray) | |
| /-- info: #[1] -/ | |
| #guard_msgs in | |
| #eval lcs (#[1].toSubarray) (#[1].toSubarray) | |
| /-- info: #[1, 3] -/ | |
| #guard_msgs in | |
| #eval lcs (#[1,3].toSubarray) (#[1,2,3].toSubarray) | |
| /-- info: #["A", "A"] -/ | |
| #guard_msgs in | |
| #eval lcs ("A,A,B".split (·==',') |>.toStringArray).toSubarray ("A,A,X".split (·==',') |>.toStringArray).toSubarray | |
| /-- info: #["A", "D", "E", "F"] -/ | |
| #guard_msgs in | |
| #eval lcs ("A,C,D,E,F,G".split (·==',') |>.toStringArray).toSubarray ("A,Y,Z,D,E,F".split (·==',') |>.toStringArray).toSubarray | |
| /-- info: #["A", "A", "D", "E", "F"] -/ | |
| #guard_msgs in | |
| #eval lcs ("A,A,B,C,D,E,F,G".split (·==',') |>.toStringArray).toSubarray ("A,A,X,Y,Z,D,E,F".split (·==',') |>.toStringArray).toSubarray |