Skip to content

Commit a94c6a6

Browse files
oSoMoNsylvestre
authored andcommitted
Normal diff: compact ranges of lines where possible (fixes #10)
1 parent c28973c commit a94c6a6

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed

src/normal_diff.rs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,28 @@ pub fn diff(expected: &[u8], actual: &[u8]) -> Vec<u8> {
136136
line_number_actual - 1
137137
)
138138
.unwrap(),
139+
(1, 1) => writeln!(
140+
&mut output,
141+
"{}c{}",
142+
line_number_expected, line_number_actual
143+
)
144+
.unwrap(),
145+
(1, _) => writeln!(
146+
&mut output,
147+
"{}c{},{}",
148+
line_number_expected,
149+
line_number_actual,
150+
actual_count + line_number_actual - 1
151+
)
152+
.unwrap(),
153+
(_, 1) => writeln!(
154+
&mut output,
155+
"{},{}c{}",
156+
line_number_expected,
157+
expected_count + line_number_expected - 1,
158+
line_number_actual
159+
)
160+
.unwrap(),
139161
_ => writeln!(
140162
&mut output,
141163
"{},{}c{},{}",
@@ -173,6 +195,18 @@ pub fn diff(expected: &[u8], actual: &[u8]) -> Vec<u8> {
173195
mod tests {
174196
use super::*;
175197
use pretty_assertions::assert_eq;
198+
199+
#[test]
200+
fn test_basic() {
201+
let mut a = Vec::new();
202+
a.write_all(b"a\n").unwrap();
203+
let mut b = Vec::new();
204+
b.write_all(b"b\n").unwrap();
205+
let diff = diff(&a, &b);
206+
let expected = b"1c1\n< a\n---\n> b\n".to_vec();
207+
assert_eq!(diff, expected);
208+
}
209+
176210
#[test]
177211
fn test_permutations() {
178212
let target = "target/normal-diff/";

0 commit comments

Comments
 (0)