@@ -302,3 +302,32 @@ fn eu_iterator_specializations() {
302302 check ( '\u{12340}' ) ;
303303 check ( '\u{10FFFF}' ) ;
304304}
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