@@ -302,3 +302,32 @@ fn eu_iterator_specializations() {
302
302
check ( '\u{12340}' ) ;
303
303
check ( '\u{10FFFF}' ) ;
304
304
}
305
+
306
+ #[ test]
307
+ fn test_decode_utf8 ( ) {
308
+ use core:: char:: * ;
309
+ use core:: iter:: FromIterator ;
310
+
311
+ for & ( str, bs) in [ ( "" , & [ ] as & [ u8 ] ) ,
312
+ ( "A" , & [ 0x41u8 ] as & [ u8 ] ) ,
313
+ ( "�" , & [ 0xC1u8 , 0x81u8 ] as & [ u8 ] ) ,
314
+ ( "♥" , & [ 0xE2u8 , 0x99u8 , 0xA5u8 ] ) ,
315
+ ( "♥A" , & [ 0xE2u8 , 0x99u8 , 0xA5u8 , 0x41u8 ] as & [ u8 ] ) ,
316
+ ( "�" , & [ 0xE2u8 , 0x99u8 ] as & [ u8 ] ) ,
317
+ ( "�A" , & [ 0xE2u8 , 0x99u8 , 0x41u8 ] as & [ u8 ] ) ,
318
+ ( "�" , & [ 0xC0u8 ] as & [ u8 ] ) ,
319
+ ( "�A" , & [ 0xC0u8 , 0x41u8 ] as & [ u8 ] ) ,
320
+ ( "�" , & [ 0x80u8 ] as & [ u8 ] ) ,
321
+ ( "�A" , & [ 0x80u8 , 0x41u8 ] as & [ u8 ] ) ,
322
+ ( "�" , & [ 0xFEu8 ] as & [ u8 ] ) ,
323
+ ( "�A" , & [ 0xFEu8 , 0x41u8 ] as & [ u8 ] ) ,
324
+ ( "�" , & [ 0xFFu8 ] as & [ u8 ] ) ,
325
+ ( "�A" , & [ 0xFFu8 , 0x41u8 ] as & [ u8 ] ) ] . into_iter ( ) {
326
+ assert ! ( Iterator :: eq( str . chars( ) ,
327
+ decode_utf8( bs. into_iter( ) . map( |& b|b) )
328
+ . map( |r_b| r_b. unwrap_or( '\u{FFFD}' ) ) ) ,
329
+ "chars = {}, bytes = {:?}, decoded = {:?}" , str , bs,
330
+ Vec :: from_iter( decode_utf8( bs. into_iter( ) . map( |& b|b) )
331
+ . map( |r_b| r_b. unwrap_or( '\u{FFFD}' ) ) ) ) ;
332
+ }
333
+ }
0 commit comments