Use crate utils
This commit is contained in:
parent
5d5eedd567
commit
c02f84a476
3 changed files with 2 additions and 88 deletions
|
|
@ -1,3 +1,2 @@
|
||||||
pub mod myers;
|
pub mod myers;
|
||||||
pub mod raw_operation;
|
pub mod raw_operation;
|
||||||
mod utils;
|
|
||||||
|
|
|
||||||
|
|
@ -25,9 +25,10 @@ use std::time::Instant;
|
||||||
use std::vec;
|
use std::vec;
|
||||||
|
|
||||||
use crate::tokenizer::token::Token;
|
use crate::tokenizer::token::Token;
|
||||||
|
use crate::utils::common_prefix_len::common_prefix_len;
|
||||||
|
use crate::utils::common_suffix_len::common_suffix_len;
|
||||||
|
|
||||||
use super::raw_operation::RawOperation;
|
use super::raw_operation::RawOperation;
|
||||||
use super::utils::{common_prefix_len, common_suffix_len};
|
|
||||||
|
|
||||||
/// Myers' diff algorithm.
|
/// Myers' diff algorithm.
|
||||||
///
|
///
|
||||||
|
|
|
||||||
|
|
@ -1,86 +0,0 @@
|
||||||
use std::ops::{Index, Range};
|
|
||||||
|
|
||||||
/// Given two lookups and ranges calculates the length of the common prefix.
|
|
||||||
/// Copied from https://github.com/mitsuhiko/similar/blob/7e15c44de11a1cd61e1149189929e189ef977fd8/src/algorithms/utils.rs
|
|
||||||
pub fn common_prefix_len<Old, New>(
|
|
||||||
old: &Old,
|
|
||||||
old_range: Range<usize>,
|
|
||||||
new: &New,
|
|
||||||
new_range: Range<usize>,
|
|
||||||
) -> usize
|
|
||||||
where
|
|
||||||
Old: Index<usize> + ?Sized,
|
|
||||||
New: Index<usize> + ?Sized,
|
|
||||||
New::Output: PartialEq<Old::Output>,
|
|
||||||
{
|
|
||||||
new_range
|
|
||||||
.zip(old_range)
|
|
||||||
.take_while(|x| new[x.0] == old[x.1])
|
|
||||||
.count()
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Given two lookups and ranges calculates the length of common suffix.
|
|
||||||
/// Copied from https://github.com/mitsuhiko/similar/blob/7e15c44de11a1cd61e1149189929e189ef977fd8/src/algorithms/utils.rs
|
|
||||||
pub fn common_suffix_len<Old, New>(
|
|
||||||
old: &Old,
|
|
||||||
old_range: Range<usize>,
|
|
||||||
new: &New,
|
|
||||||
new_range: Range<usize>,
|
|
||||||
) -> usize
|
|
||||||
where
|
|
||||||
Old: Index<usize> + ?Sized,
|
|
||||||
New: Index<usize> + ?Sized,
|
|
||||||
New::Output: PartialEq<Old::Output>,
|
|
||||||
{
|
|
||||||
new_range
|
|
||||||
.rev()
|
|
||||||
.zip(old_range.rev())
|
|
||||||
.take_while(|x| new[x.0] == old[x.1])
|
|
||||||
.count()
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(test)]
|
|
||||||
mod tests {
|
|
||||||
use super::*;
|
|
||||||
use pretty_assertions::assert_eq;
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_common_prefix_len() {
|
|
||||||
assert_eq!(
|
|
||||||
common_prefix_len("".as_bytes(), 0..0, "".as_bytes(), 0..0),
|
|
||||||
0
|
|
||||||
);
|
|
||||||
assert_eq!(
|
|
||||||
common_prefix_len("foobarbaz".as_bytes(), 0..9, "foobarblah".as_bytes(), 0..10),
|
|
||||||
7
|
|
||||||
);
|
|
||||||
assert_eq!(
|
|
||||||
common_prefix_len("foobarbaz".as_bytes(), 0..9, "blablabla".as_bytes(), 0..9),
|
|
||||||
0
|
|
||||||
);
|
|
||||||
assert_eq!(
|
|
||||||
common_prefix_len("foobarbaz".as_bytes(), 3..9, "foobarblah".as_bytes(), 3..10),
|
|
||||||
4
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_common_suffix_len() {
|
|
||||||
assert_eq!(
|
|
||||||
common_suffix_len("".as_bytes(), 0..0, "".as_bytes(), 0..0),
|
|
||||||
0
|
|
||||||
);
|
|
||||||
assert_eq!(
|
|
||||||
common_suffix_len("1234".as_bytes(), 0..4, "X0001234".as_bytes(), 0..8),
|
|
||||||
4
|
|
||||||
);
|
|
||||||
assert_eq!(
|
|
||||||
common_suffix_len("1234".as_bytes(), 0..4, "Xxxx".as_bytes(), 0..4),
|
|
||||||
0
|
|
||||||
);
|
|
||||||
assert_eq!(
|
|
||||||
common_suffix_len("1234".as_bytes(), 2..4, "01234".as_bytes(), 2..5),
|
|
||||||
2
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue