diff --git a/src/libcore/char/mod.rs b/src/libcore/char/mod.rs index 6683976642d40..bf95534d07d5b 100644 --- a/src/libcore/char/mod.rs +++ b/src/libcore/char/mod.rs @@ -394,6 +394,13 @@ impl Iterator for ToLowercase { } } +#[stable(feature = "double_ended_case_mapping_iter", since = "1.36.0")] +impl DoubleEndedIterator for ToLowercase { + fn next_back(&mut self) -> Option { + self.0.next_back() + } +} + #[stable(feature = "fused", since = "1.26.0")] impl FusedIterator for ToLowercase {} @@ -422,6 +429,13 @@ impl Iterator for ToUppercase { } } +#[stable(feature = "double_ended_case_mapping_iter", since = "1.36.0")] +impl DoubleEndedIterator for ToUppercase { + fn next_back(&mut self) -> Option { + self.0.next_back() + } +} + #[stable(feature = "fused", since = "1.26.0")] impl FusedIterator for ToUppercase {} @@ -481,6 +495,26 @@ impl Iterator for CaseMappingIter { } } +impl DoubleEndedIterator for CaseMappingIter { + fn next_back(&mut self) -> Option { + match *self { + CaseMappingIter::Three(a, b, c) => { + *self = CaseMappingIter::Two(a, b); + Some(c) + } + CaseMappingIter::Two(a, b) => { + *self = CaseMappingIter::One(a); + Some(b) + } + CaseMappingIter::One(a) => { + *self = CaseMappingIter::Zero; + Some(a) + } + CaseMappingIter::Zero => None, + } + } +} + impl fmt::Display for CaseMappingIter { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { match *self { diff --git a/src/libcore/tests/char.rs b/src/libcore/tests/char.rs index 57e9f4e384e0f..ed49207f7c3cb 100644 --- a/src/libcore/tests/char.rs +++ b/src/libcore/tests/char.rs @@ -81,6 +81,7 @@ fn test_to_lowercase() { let iter: String = c.to_lowercase().collect(); let disp: String = c.to_lowercase().to_string(); assert_eq!(iter, disp); + assert!(iter.chars().rev().eq(c.to_lowercase().rev())); iter } assert_eq!(lower('A'), "a"); @@ -108,6 +109,7 @@ fn test_to_uppercase() { let iter: String = c.to_uppercase().collect(); let disp: String = c.to_uppercase().to_string(); assert_eq!(iter, disp); + assert!(iter.chars().rev().eq(c.to_uppercase().rev())); iter } assert_eq!(upper('a'), "A");