@@ -44,11 +44,6 @@ use std::io;
4444/// assert_eq!("base64: YXNkZg==", &buf);
4545/// ```
4646///
47- /// # Panics
48- ///
49- /// Calling `write()` (or related methods) or `finish()` after `finish()` has completed without
50- /// error is invalid and will panic.
51- ///
5247/// # Performance
5348///
5449/// Because it has to validate that the base64 is UTF-8, it is about 80% as fast as writing plain
@@ -144,6 +139,7 @@ mod tests {
144139 engine:: Engine , tests:: random_engine, write:: encoder_string_writer:: EncoderStringWriter ,
145140 } ;
146141 use rand:: Rng ;
142+ use std:: cmp;
147143 use std:: io:: Write ;
148144
149145 #[ test]
@@ -158,9 +154,8 @@ mod tests {
158154 orig_data. clear ( ) ;
159155 normal_encoded. clear ( ) ;
160156
161- for _ in 0 ..size {
162- orig_data. push ( rng. gen ( ) ) ;
163- }
157+ orig_data. resize ( size, 0 ) ;
158+ rng. fill ( & mut orig_data[ ..] ) ;
164159
165160 let engine = random_engine ( & mut rng) ;
166161 engine. encode_string ( & orig_data, & mut normal_encoded) ;
@@ -172,6 +167,40 @@ mod tests {
172167
173168 let stream_encoded = stream_encoder. into_inner ( ) ;
174169
170+ assert_eq ! ( normal_encoded, stream_encoded) ;
171+ }
172+ }
173+ #[ test]
174+ fn incremental_writes ( ) {
175+ let mut rng = rand:: thread_rng ( ) ;
176+ let mut orig_data = Vec :: < u8 > :: new ( ) ;
177+ let mut normal_encoded = String :: new ( ) ;
178+
179+ let size = 5_000 ;
180+
181+ for _ in 0 ..size {
182+ orig_data. clear ( ) ;
183+ normal_encoded. clear ( ) ;
184+
185+ orig_data. resize ( size, 0 ) ;
186+ rng. fill ( & mut orig_data[ ..] ) ;
187+
188+ let engine = random_engine ( & mut rng) ;
189+ engine. encode_string ( & orig_data, & mut normal_encoded) ;
190+
191+ let mut stream_encoder = EncoderStringWriter :: new ( & engine) ;
192+ // write small nibbles of data
193+ let mut offset = 0 ;
194+ while offset < size {
195+ let nibble_size = cmp:: min ( rng. gen_range ( 0 ..=64 ) , size - offset) ;
196+ let len = stream_encoder
197+ . write ( & orig_data[ offset..offset + nibble_size] )
198+ . unwrap ( ) ;
199+ offset += len;
200+ }
201+
202+ let stream_encoded = stream_encoder. into_inner ( ) ;
203+
175204 assert_eq ! ( normal_encoded, stream_encoded) ;
176205 }
177206 }
0 commit comments