@@ -235,7 +235,66 @@ mod tests {
235
235
}
236
236
237
237
#[ test]
238
- fn decode_into_slice_doesnt_clobber_existing_prefix_or_suffix ( ) {
238
+ fn decode_slice_doesnt_clobber_existing_prefix_or_suffix ( ) {
239
+ do_decode_slice_doesnt_clobber_existing_prefix_or_suffix ( |e, input, output| {
240
+ e. decode_slice ( input, output) . unwrap ( )
241
+ } )
242
+ }
243
+
244
+ #[ test]
245
+ fn decode_slice_unchecked_doesnt_clobber_existing_prefix_or_suffix ( ) {
246
+ do_decode_slice_doesnt_clobber_existing_prefix_or_suffix ( |e, input, output| {
247
+ e. decode_slice_unchecked ( input, output) . unwrap ( )
248
+ } )
249
+ }
250
+
251
+ #[ test]
252
+ fn decode_engine_estimation_works_for_various_lengths ( ) {
253
+ let engine = GeneralPurpose :: new ( & alphabet:: STANDARD , general_purpose:: NO_PAD ) ;
254
+ for num_prefix_quads in 0 ..100 {
255
+ for suffix in & [ "AA" , "AAA" , "AAAA" ] {
256
+ let mut prefix = "AAAA" . repeat ( num_prefix_quads) ;
257
+ prefix. push_str ( suffix) ;
258
+ // make sure no overflow (and thus a panic) occurs
259
+ let res = engine. decode ( prefix) ;
260
+ assert ! ( res. is_ok( ) ) ;
261
+ }
262
+ }
263
+ }
264
+
265
+ #[ test]
266
+ fn decode_slice_output_length_errors ( ) {
267
+ for num_quads in 1 ..100 {
268
+ let input = "AAAA" . repeat ( num_quads) ;
269
+ let mut vec = vec ! [ 0 ; ( num_quads - 1 ) * 3 ] ;
270
+ assert_eq ! (
271
+ DecodeSliceError :: OutputSliceTooSmall ,
272
+ STANDARD . decode_slice( & input, & mut vec) . unwrap_err( )
273
+ ) ;
274
+ vec. push ( 0 ) ;
275
+ assert_eq ! (
276
+ DecodeSliceError :: OutputSliceTooSmall ,
277
+ STANDARD . decode_slice( & input, & mut vec) . unwrap_err( )
278
+ ) ;
279
+ vec. push ( 0 ) ;
280
+ assert_eq ! (
281
+ DecodeSliceError :: OutputSliceTooSmall ,
282
+ STANDARD . decode_slice( & input, & mut vec) . unwrap_err( )
283
+ ) ;
284
+ vec. push ( 0 ) ;
285
+ // now it works
286
+ assert_eq ! (
287
+ num_quads * 3 ,
288
+ STANDARD . decode_slice( & input, & mut vec) . unwrap( )
289
+ ) ;
290
+ }
291
+ }
292
+
293
+ fn do_decode_slice_doesnt_clobber_existing_prefix_or_suffix <
294
+ F : Fn ( & GeneralPurpose , & [ u8 ] , & mut [ u8 ] ) -> usize ,
295
+ > (
296
+ call_decode : F ,
297
+ ) {
239
298
let mut orig_data = Vec :: new ( ) ;
240
299
let mut encoded_data = String :: new ( ) ;
241
300
let mut decode_buf = Vec :: new ( ) ;
@@ -272,9 +331,8 @@ mod tests {
272
331
let offset = 1000 ;
273
332
274
333
// decode into the non-empty buf
275
- let decode_bytes_written = engine
276
- . decode_slice ( & encoded_data, & mut decode_buf[ offset..] )
277
- . unwrap ( ) ;
334
+ let decode_bytes_written =
335
+ call_decode ( & engine, encoded_data. as_bytes ( ) , & mut decode_buf[ offset..] ) ;
278
336
279
337
assert_eq ! ( orig_data. len( ) , decode_bytes_written) ;
280
338
assert_eq ! (
@@ -288,46 +346,4 @@ mod tests {
288
346
) ;
289
347
}
290
348
}
291
-
292
- #[ test]
293
- fn decode_engine_estimation_works_for_various_lengths ( ) {
294
- let engine = GeneralPurpose :: new ( & alphabet:: STANDARD , general_purpose:: NO_PAD ) ;
295
- for num_prefix_quads in 0 ..100 {
296
- for suffix in & [ "AA" , "AAA" , "AAAA" ] {
297
- let mut prefix = "AAAA" . repeat ( num_prefix_quads) ;
298
- prefix. push_str ( suffix) ;
299
- // make sure no overflow (and thus a panic) occurs
300
- let res = engine. decode ( prefix) ;
301
- assert ! ( res. is_ok( ) ) ;
302
- }
303
- }
304
- }
305
-
306
- #[ test]
307
- fn decode_slice_output_length_errors ( ) {
308
- for num_quads in 1 ..100 {
309
- let input = "AAAA" . repeat ( num_quads) ;
310
- let mut vec = vec ! [ 0 ; ( num_quads - 1 ) * 3 ] ;
311
- assert_eq ! (
312
- DecodeSliceError :: OutputSliceTooSmall ,
313
- STANDARD . decode_slice( & input, & mut vec) . unwrap_err( )
314
- ) ;
315
- vec. push ( 0 ) ;
316
- assert_eq ! (
317
- DecodeSliceError :: OutputSliceTooSmall ,
318
- STANDARD . decode_slice( & input, & mut vec) . unwrap_err( )
319
- ) ;
320
- vec. push ( 0 ) ;
321
- assert_eq ! (
322
- DecodeSliceError :: OutputSliceTooSmall ,
323
- STANDARD . decode_slice( & input, & mut vec) . unwrap_err( )
324
- ) ;
325
- vec. push ( 0 ) ;
326
- // now it works
327
- assert_eq ! (
328
- num_quads * 3 ,
329
- STANDARD . decode_slice( & input, & mut vec) . unwrap( )
330
- ) ;
331
- }
332
- }
333
349
}
0 commit comments