@@ -5,31 +5,31 @@ use std::io::Write;
55pub enum DiffLine {
66 Context ( Vec < u8 > ) ,
77 Expected ( Vec < u8 > ) ,
8- Resulting ( Vec < u8 > ) ,
8+ Actual ( Vec < u8 > ) ,
99 MissingNL ,
1010}
1111
1212#[ derive( Debug , PartialEq ) ]
1313struct Mismatch {
14- pub line_number : u32 ,
15- pub line_number_resulting : u32 ,
14+ pub line_number_expected : u32 ,
15+ pub line_number_actual : u32 ,
1616 pub lines : Vec < DiffLine > ,
1717}
1818
1919impl Mismatch {
20- fn new ( line_number : u32 , line_number_resulting : u32 ) -> Mismatch {
20+ fn new ( line_number_expected : u32 , line_number_actual : u32 ) -> Mismatch {
2121 Mismatch {
22- line_number ,
23- line_number_resulting ,
22+ line_number_expected ,
23+ line_number_actual ,
2424 lines : Vec :: new ( ) ,
2525 }
2626 }
2727}
2828
2929// Produces a diff between the expected output and actual output.
3030fn make_diff ( expected : & [ u8 ] , actual : & [ u8 ] , context_size : usize ) -> Vec < Mismatch > {
31- let mut line_number = 1 ;
32- let mut line_number_resulting = 1 ;
31+ let mut line_number_expected = 1 ;
32+ let mut line_number_actual = 1 ;
3333 let mut context_queue: VecDeque < & [ u8 ] > = VecDeque :: with_capacity ( context_size) ;
3434 let mut lines_since_mismatch = context_size + 1 ;
3535 let mut results = Vec :: new ( ) ;
@@ -57,8 +57,8 @@ fn make_diff(expected: &[u8], actual: &[u8], context_size: usize) -> Vec<Mismatc
5757 if lines_since_mismatch >= context_size && lines_since_mismatch > 0 {
5858 results. push ( mismatch) ;
5959 mismatch = Mismatch :: new (
60- line_number - context_queue. len ( ) as u32 ,
61- line_number_resulting - context_queue. len ( ) as u32 ,
60+ line_number_expected - context_queue. len ( ) as u32 ,
61+ line_number_actual - context_queue. len ( ) as u32 ,
6262 ) ;
6363 }
6464
@@ -69,33 +69,33 @@ fn make_diff(expected: &[u8], actual: &[u8], context_size: usize) -> Vec<Mismatc
6969 if mismatch. lines . last ( ) == Some ( & DiffLine :: MissingNL ) {
7070 mismatch. lines . pop ( ) ;
7171 match mismatch. lines . pop ( ) {
72- Some ( DiffLine :: Resulting ( res) ) => {
73- // We have to make sure that Resulting (the + lines)
72+ Some ( DiffLine :: Actual ( res) ) => {
73+ // We have to make sure that Actual (the + lines)
7474 // always come after Expected (the - lines)
7575 mismatch. lines . push ( DiffLine :: Expected ( str. to_vec ( ) ) ) ;
76- if line_number > expected_lines_count {
76+ if line_number_expected > expected_lines_count {
7777 mismatch. lines . push ( DiffLine :: MissingNL )
7878 }
79- mismatch. lines . push ( DiffLine :: Resulting ( res) ) ;
79+ mismatch. lines . push ( DiffLine :: Actual ( res) ) ;
8080 mismatch. lines . push ( DiffLine :: MissingNL ) ;
8181 }
8282 _ => unreachable ! ( "unterminated Left and Common lines shouldn't be followed by more Left lines" ) ,
8383 }
8484 } else {
8585 mismatch. lines . push ( DiffLine :: Expected ( str. to_vec ( ) ) ) ;
86- if line_number > expected_lines_count {
86+ if line_number_expected > expected_lines_count {
8787 mismatch. lines . push ( DiffLine :: MissingNL )
8888 }
8989 }
90- line_number += 1 ;
90+ line_number_expected += 1 ;
9191 lines_since_mismatch = 0 ;
9292 }
9393 diff:: Result :: Right ( str) => {
9494 if lines_since_mismatch >= context_size && lines_since_mismatch > 0 {
9595 results. push ( mismatch) ;
9696 mismatch = Mismatch :: new (
97- line_number - context_queue. len ( ) as u32 ,
98- line_number_resulting - context_queue. len ( ) as u32 ,
97+ line_number_expected - context_queue. len ( ) as u32 ,
98+ line_number_actual - context_queue. len ( ) as u32 ,
9999 ) ;
100100 }
101101
@@ -104,46 +104,46 @@ fn make_diff(expected: &[u8], actual: &[u8], context_size: usize) -> Vec<Mismatc
104104 mismatch. lines . push ( DiffLine :: Context ( line. to_vec ( ) ) ) ;
105105 }
106106
107- mismatch. lines . push ( DiffLine :: Resulting ( str. to_vec ( ) ) ) ;
108- if line_number_resulting > actual_lines_count {
107+ mismatch. lines . push ( DiffLine :: Actual ( str. to_vec ( ) ) ) ;
108+ if line_number_actual > actual_lines_count {
109109 mismatch. lines . push ( DiffLine :: MissingNL )
110110 }
111- line_number_resulting += 1 ;
111+ line_number_actual += 1 ;
112112 lines_since_mismatch = 0 ;
113113 }
114114 diff:: Result :: Both ( str, _) => {
115- if ( line_number_resulting > actual_lines_count)
116- || ( line_number > expected_lines_count)
115+ if ( line_number_actual > actual_lines_count)
116+ || ( line_number_expected > expected_lines_count)
117117 {
118118 // if one of them is missing a newline and the other isn't, then they don't actually match
119119 if lines_since_mismatch >= context_size
120120 && lines_since_mismatch > 0
121- && ( line_number_resulting > actual_lines_count)
122- != ( line_number > expected_lines_count)
121+ && ( line_number_actual > actual_lines_count)
122+ != ( line_number_expected > expected_lines_count)
123123 {
124124 results. push ( mismatch) ;
125125 mismatch = Mismatch :: new (
126- line_number - context_queue. len ( ) as u32 ,
127- line_number_resulting - context_queue. len ( ) as u32 ,
126+ line_number_expected - context_queue. len ( ) as u32 ,
127+ line_number_actual - context_queue. len ( ) as u32 ,
128128 ) ;
129129 }
130130 while let Some ( line) = context_queue. pop_front ( ) {
131131 assert ! ( mismatch. lines. last( ) != Some ( & DiffLine :: MissingNL ) ) ;
132132 mismatch. lines . push ( DiffLine :: Context ( line. to_vec ( ) ) ) ;
133133 }
134134 lines_since_mismatch = 0 ;
135- if line_number_resulting > actual_lines_count
136- && line_number > expected_lines_count
135+ if line_number_actual > actual_lines_count
136+ && line_number_expected > expected_lines_count
137137 {
138138 mismatch. lines . push ( DiffLine :: Context ( str. to_vec ( ) ) ) ;
139139 mismatch. lines . push ( DiffLine :: MissingNL ) ;
140- } else if line_number > expected_lines_count {
140+ } else if line_number_expected > expected_lines_count {
141141 mismatch. lines . push ( DiffLine :: Expected ( str. to_vec ( ) ) ) ;
142142 mismatch. lines . push ( DiffLine :: MissingNL ) ;
143- mismatch. lines . push ( DiffLine :: Resulting ( str. to_vec ( ) ) ) ;
144- } else if line_number_resulting > actual_lines_count {
143+ mismatch. lines . push ( DiffLine :: Actual ( str. to_vec ( ) ) ) ;
144+ } else if line_number_actual > actual_lines_count {
145145 mismatch. lines . push ( DiffLine :: Expected ( str. to_vec ( ) ) ) ;
146- mismatch. lines . push ( DiffLine :: Resulting ( str. to_vec ( ) ) ) ;
146+ mismatch. lines . push ( DiffLine :: Actual ( str. to_vec ( ) ) ) ;
147147 mismatch. lines . push ( DiffLine :: MissingNL ) ;
148148 }
149149 } else {
@@ -158,8 +158,8 @@ fn make_diff(expected: &[u8], actual: &[u8], context_size: usize) -> Vec<Mismatc
158158 lines_since_mismatch += 1 ;
159159 }
160160
161- line_number += 1 ;
162- line_number_resulting += 1 ;
161+ line_number_expected += 1 ;
162+ line_number_actual += 1 ;
163163 }
164164 }
165165 }
@@ -171,27 +171,33 @@ fn make_diff(expected: &[u8], actual: &[u8], context_size: usize) -> Vec<Mismatc
171171 let mut mismatch = Mismatch :: new ( expected_lines. len ( ) as u32 , actual_lines. len ( ) as u32 ) ;
172172 // empty diff and only expected lines has a missing line at end
173173 if expected_lines_count != expected_lines. len ( ) as u32 {
174- mismatch
175- . lines
176- . push ( DiffLine :: Expected ( expected_lines. pop ( ) . expect ( "if expected is totally empty, then `expected_lines_count == expected_lines.len()`" ) . to_vec ( ) ) ) ;
174+ mismatch. lines . push ( DiffLine :: Expected (
175+ expected_lines
176+ . pop ( )
177+ . expect ( "can't be empty; produced by split()" )
178+ . to_vec ( ) ,
179+ ) ) ;
177180 mismatch. lines . push ( DiffLine :: MissingNL ) ;
178- mismatch. lines . push ( DiffLine :: Resulting (
181+ mismatch. lines . push ( DiffLine :: Actual (
179182 actual_lines
180183 . pop ( )
181- . expect ( "if expect is not empty and actual is, then `results.len() != 0` " )
184+ . expect ( "can't be empty; produced by split() " )
182185 . to_vec ( ) ,
183186 ) ) ;
184187 results. push ( mismatch) ;
185188 } else if actual_lines_count != actual_lines. len ( ) as u32 {
186189 mismatch. lines . push ( DiffLine :: Expected (
187190 expected_lines
188191 . pop ( )
189- . expect ( "if expect is not empty and actual is, then `results.len() != 0`" )
192+ . expect ( "can't be empty; produced by split()" )
193+ . to_vec ( ) ,
194+ ) ) ;
195+ mismatch. lines . push ( DiffLine :: Actual (
196+ actual_lines
197+ . pop ( )
198+ . expect ( "can't be empty; produced by split()" )
190199 . to_vec ( ) ,
191200 ) ) ;
192- mismatch
193- . lines
194- . push ( DiffLine :: Resulting ( actual_lines. pop ( ) . expect ( "if actual is totally empty, then `actual_lines_count == actual_lines.len()`" ) . to_vec ( ) ) ) ;
195201 mismatch. lines . push ( DiffLine :: MissingNL ) ;
196202 results. push ( mismatch) ;
197203 }
@@ -214,29 +220,29 @@ pub fn diff(
214220 return Vec :: new ( ) ;
215221 } ;
216222 for result in diff_results {
217- let line_number = result. line_number ;
218- let line_number_resulting = result. line_number_resulting ;
223+ let line_number_expected = result. line_number_expected ;
224+ let line_number_actual = result. line_number_actual ;
219225 let mut expected_count = 0 ;
220- let mut resulting_count = 0 ;
226+ let mut actual_count = 0 ;
221227 for line in & result. lines {
222228 match line {
223229 DiffLine :: Expected ( _) => {
224230 expected_count += 1 ;
225231 }
226232 DiffLine :: Context ( _) => {
227233 expected_count += 1 ;
228- resulting_count += 1 ;
234+ actual_count += 1 ;
229235 }
230- DiffLine :: Resulting ( _) => {
231- resulting_count += 1 ;
236+ DiffLine :: Actual ( _) => {
237+ actual_count += 1 ;
232238 }
233239 DiffLine :: MissingNL => { }
234240 }
235241 }
236242 writeln ! (
237243 output,
238244 "@@ -{},{} +{},{} @@" ,
239- line_number , expected_count, line_number_resulting , resulting_count
245+ line_number_expected , expected_count, line_number_actual , actual_count
240246 )
241247 . expect ( "write to Vec is infallible" ) ;
242248 for line in result. lines {
@@ -251,7 +257,7 @@ pub fn diff(
251257 output. write_all ( & c) . expect ( "write to Vec is infallible" ) ;
252258 writeln ! ( output) . unwrap ( ) ;
253259 }
254- DiffLine :: Resulting ( r) => {
260+ DiffLine :: Actual ( r) => {
255261 write ! ( output, "+" , ) . expect ( "write to Vec is infallible" ) ;
256262 output. write_all ( & r) . expect ( "write to Vec is infallible" ) ;
257263 writeln ! ( output) . unwrap ( ) ;
0 commit comments