### 9 releases (4 stable)

1.2.1 | Feb 11, 2022 |
---|---|

1.1.1 | Feb 8, 2022 |

0.3.0 | Feb 7, 2022 |

0.2.2 | Feb 5, 2022 |

0.1.0 | Feb 5, 2022 |

#**677** in Rust patterns

**29** downloads per month

**MIT**license

20KB

327 lines

This crate provides the

enum as an abstraction for `Change`

,
`diff ::`Result

`lcs_diff``::`DiffResult

, and `wu_diff``::`DiffResult

; the `diff_changes``(``)`

, `diff_diff``(``)`

,
`lcs_changes``(``)`

, `lcs_diff``(``)`

, `wu_changes``(``)`

, and `wu_diff``(``)`

functions to calculate or
process diffs between `a`

and `b`

slices via LCS (Longest Common Subsequence) or Wu diff algorithms
into a `Vec``<`Change`>`

, the `patch``(``)`

function to reproduce `b`

from the `a`

slice and
`Vec``<`Change`>`

, and the `insert``(``)`

and `remove``(``)`

functions to enable writing a custom
`changes`

function.`use` `slice_diff_patch``::``*``;`
`let` a `=` `vec!``[``"`one`"``,` `"`TWO`"``,` `"`three`"``,` `"`four`"``]``;`
`let` b `=` `vec!``[``"`zero`"``,` `"`one`"``,` `"`two`"``,` `"`four`"``]``;`
`let` diff `=` `diff_diff``(``&`a`,` `&`b`)``;`
`assert_eq!``(`
diff`,`
`vec!``[`
`Change``::`Insert`(``(``0``,` `"`zero`"``)``)``,`
`Change``::`Remove`(``2``)``,`
`Change``::`Update`(``(``2``,` `"`two`"``)``)``,`
`]``,`
`)``;`
`assert_eq!``(``patch``(``&`a`,` `&`diff`)``,` b`)``;`
`let` lcs `=` `lcs_diff``(``&`a`,` `&`b`)``;`
`assert_eq!``(`
lcs`,`
`vec!``[`
`Change``::`Insert`(``(``0``,` `"`zero`"``)``)``,`
`Change``::`Update`(``(``2``,` `"`two`"``)``)``,`
`Change``::`Remove`(``3``)``,`
`]``,`
`)``;`
`assert_eq!``(``patch``(``&`a`,` `&`lcs`)``,` b`)``;`
`let` wu `=` `wu_diff``(``&`a`,` `&`b`)``;`
`assert_eq!``(`
wu`,`
`vec!``[`
`Change``::`Insert`(``(``0``,` `"`zero`"``)``)``,`
`Change``::`Remove`(``2``)``,`
`Change``::`Update`(``(``2``,` `"`two`"``)``)``,`
`]``,`
`)``;`
`assert_eq!``(``patch``(``&`a`,` `&`wu`)``,` b`)``;`

See also:

- Hunt, James W; Szymanski, Thomas G. (1977). "A fast algorithm for computing longest common subsequences" http://www.cs.ust.hk/mjg_lib/bibs/DPSu/DPSu.Files/HuSz77.pdf
- Wu, Sun; Manber, Udi; Myers, Gene (1989). "An O(NP) Sequence Comparison Algorithm" https://publications.mpi-cbg.de/Wu_1990_6334.pdf
- Department of Mathematics and Computer Science. University of Southern Denmark (January 12, 2017). "The Hunt-Szymanski Algorithm for LCS" https://imada.sdu.dk/~rolf/Edu/DM823/E16/HuntSzymanski.pdf
- diff crate
- lcs-diff crate
- wu-diff crate
- Wikipedia: Hunt–Szymanski algorithm
- Wikipedia: Bitap algorithm
- Practical use case analysis

Changelog:

- 0.1.0: initial
- 0.2.0: add support for diff crate
- 0.2.1: fix readme
- 0.2.2: fix readme
- 0.3.0: derive

on`Clone``Change` - 1.0.0: add

variant on`Update``Change` - 1.1.0: add doc test example
- 1.1.1: fix readme
- 1.2.1: expose

and`remove``(``)`

functions`insert``(``)`

#### Dependencies

~93KB