Skip to content

Commit 89d2e51

Browse files
committed
Implement DoubleEndedIterator for To{Lower,Upper}case
1 parent fb5ed48 commit 89d2e51

File tree

2 files changed

+36
-0
lines changed

2 files changed

+36
-0
lines changed

src/libcore/char/mod.rs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -394,6 +394,13 @@ impl Iterator for ToLowercase {
394394
}
395395
}
396396

397+
#[stable(feature = "double_ended_case_mapping_iter", since = "1.36.0")]
398+
impl DoubleEndedIterator for ToLowercase {
399+
fn next_back(&mut self) -> Option<char> {
400+
self.0.next_back()
401+
}
402+
}
403+
397404
#[stable(feature = "fused", since = "1.26.0")]
398405
impl FusedIterator for ToLowercase {}
399406

@@ -422,6 +429,13 @@ impl Iterator for ToUppercase {
422429
}
423430
}
424431

432+
#[stable(feature = "double_ended_case_mapping_iter", since = "1.36.0")]
433+
impl DoubleEndedIterator for ToUppercase {
434+
fn next_back(&mut self) -> Option<char> {
435+
self.0.next_back()
436+
}
437+
}
438+
425439
#[stable(feature = "fused", since = "1.26.0")]
426440
impl FusedIterator for ToUppercase {}
427441

@@ -481,6 +495,26 @@ impl Iterator for CaseMappingIter {
481495
}
482496
}
483497

498+
impl DoubleEndedIterator for CaseMappingIter {
499+
fn next_back(&mut self) -> Option<char> {
500+
match *self {
501+
CaseMappingIter::Three(a, b, c) => {
502+
*self = CaseMappingIter::Two(a, b);
503+
Some(c)
504+
}
505+
CaseMappingIter::Two(a, b) => {
506+
*self = CaseMappingIter::One(a);
507+
Some(b)
508+
}
509+
CaseMappingIter::One(a) => {
510+
*self = CaseMappingIter::Zero;
511+
Some(a)
512+
}
513+
CaseMappingIter::Zero => None,
514+
}
515+
}
516+
}
517+
484518
impl fmt::Display for CaseMappingIter {
485519
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
486520
match *self {

src/libcore/tests/char.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ fn test_to_lowercase() {
8181
let iter: String = c.to_lowercase().collect();
8282
let disp: String = c.to_lowercase().to_string();
8383
assert_eq!(iter, disp);
84+
assert!(iter.chars().rev().eq(c.to_lowercase().rev()));
8485
iter
8586
}
8687
assert_eq!(lower('A'), "a");
@@ -108,6 +109,7 @@ fn test_to_uppercase() {
108109
let iter: String = c.to_uppercase().collect();
109110
let disp: String = c.to_uppercase().to_string();
110111
assert_eq!(iter, disp);
112+
assert!(iter.chars().rev().eq(c.to_uppercase().rev()));
111113
iter
112114
}
113115
assert_eq!(upper('a'), "A");

0 commit comments

Comments
 (0)