@@ -808,6 +808,7 @@ impl OwnedStr for String {
808
808
#[ cfg( test) ]
809
809
mod tests {
810
810
use std:: iter:: AdditiveIterator ;
811
+ use std:: iter:: range;
811
812
use std:: default:: Default ;
812
813
use std:: char:: Char ;
813
814
use std:: clone:: Clone ;
@@ -1610,6 +1611,30 @@ mod tests {
1610
1611
assert_eq ! ( pos, v. len( ) ) ;
1611
1612
}
1612
1613
1614
+ #[ test]
1615
+ fn test_chars_decoding ( ) {
1616
+ let mut bytes = [ 0u8 , ..4 ] ;
1617
+ for c in range ( 0u32 , 0x110000 ) . filter_map ( |c| :: core:: char:: from_u32 ( c) ) {
1618
+ let len = c. encode_utf8 ( bytes) ;
1619
+ let s = :: core:: str:: from_utf8 ( bytes. slice_to ( len) ) . unwrap ( ) ;
1620
+ if Some ( c) != s. chars ( ) . next ( ) {
1621
+ fail ! ( "character {:x}={} does not decode correctly" , c as u32 , c) ;
1622
+ }
1623
+ }
1624
+ }
1625
+
1626
+ #[ test]
1627
+ fn test_chars_rev_decoding ( ) {
1628
+ let mut bytes = [ 0u8 , ..4 ] ;
1629
+ for c in range ( 0u32 , 0x110000 ) . filter_map ( |c| :: core:: char:: from_u32 ( c) ) {
1630
+ let len = c. encode_utf8 ( bytes) ;
1631
+ let s = :: core:: str:: from_utf8 ( bytes. slice_to ( len) ) . unwrap ( ) ;
1632
+ if Some ( c) != s. chars ( ) . rev ( ) . next ( ) {
1633
+ fail ! ( "character {:x}={} does not decode correctly" , c as u32 , c) ;
1634
+ }
1635
+ }
1636
+ }
1637
+
1613
1638
#[ test]
1614
1639
fn test_iterator_clone ( ) {
1615
1640
let s = "ศไทย中华Việt Nam" ;
0 commit comments