Skip to content

Commit

Permalink
Implement DoubleEndedIterator for To{Lower,Upper}case
Browse files Browse the repository at this point in the history
  • Loading branch information
KamilaBorowska committed Apr 19, 2019
1 parent fb5ed48 commit 89d2e51
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 0 deletions.
34 changes: 34 additions & 0 deletions src/libcore/char/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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<char> {
self.0.next_back()
}
}

#[stable(feature = "fused", since = "1.26.0")]
impl FusedIterator for ToLowercase {}

Expand Down Expand Up @@ -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<char> {
self.0.next_back()
}
}

#[stable(feature = "fused", since = "1.26.0")]
impl FusedIterator for ToUppercase {}

Expand Down Expand Up @@ -481,6 +495,26 @@ impl Iterator for CaseMappingIter {
}
}

impl DoubleEndedIterator for CaseMappingIter {
fn next_back(&mut self) -> Option<char> {
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 {
Expand Down
2 changes: 2 additions & 0 deletions src/libcore/tests/char.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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");
Expand Down Expand Up @@ -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");
Expand Down

0 comments on commit 89d2e51

Please sign in to comment.