blob: f19f143ad91b5fbf5f9acff3db62c094e54bf956 [file] [edit]
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