diff options
| author | Ticki <Ticki@users.noreply.github.com> | 2016-01-12 14:35:04 +0100 |
|---|---|---|
| committer | Ticki <Ticki@users.noreply.github.com> | 2016-01-16 09:12:09 +0100 |
| commit | d026977f25e4626e1219395f173a14d40f81de3b (patch) | |
| tree | 379031a93d2034be7ef60fbdf7ee3e57ba0dd32f /src/libcore | |
| parent | 15a5e02486bf1217511549d01c858ea0ec315905 (diff) | |
| download | rust-d026977f25e4626e1219395f173a14d40f81de3b.tar.gz rust-d026977f25e4626e1219395f173a14d40f81de3b.zip | |
Make style more uniform, add tests for specialization of .last(), move tests to libcoretest
Remove unused import Fold nth() method into the match expr
Diffstat (limited to 'src/libcore')
| -rw-r--r-- | src/libcore/char.rs | 101 |
1 files changed, 28 insertions, 73 deletions
diff --git a/src/libcore/char.rs b/src/libcore/char.rs index 61f9fa7a2b6..e3915a701c9 100644 --- a/src/libcore/char.rs +++ b/src/libcore/char.rs @@ -540,91 +540,46 @@ impl Iterator for EscapeDefault { fn count(self) -> usize { match self.state { - EscapeDefaultState::Char(_) => 1, + EscapeDefaultState::Char(_) => 1, EscapeDefaultState::Unicode(iter) => iter.count(), - EscapeDefaultState::Done => 0, - EscapeDefaultState::Backslash(_) => 2, + EscapeDefaultState::Done => 0, + EscapeDefaultState::Backslash(_) => 2, } } fn nth(&mut self, n: usize) -> Option<char> { - let ch = match self.state { - EscapeDefaultState::Backslash(c) => c, - EscapeDefaultState::Char(c) => c, - EscapeDefaultState::Done => return None, - EscapeDefaultState::Unicode(ref mut i) => return i.nth(n), - }; - - let start = if let Some(x) = self.get_offset() { - x - } else { - return None; - }; - let idx = start + n; - - // Update state - self.state = match idx { - 0 => EscapeDefaultState::Char(ch), - _ => EscapeDefaultState::Done, - }; + match self.state { + EscapeDefaultState::Backslash(c) if n == 0 => { + self.state = EscapeDefaultState::Char(c); + Some('\\') + }, + EscapeDefaultState::Backslash(c) if n == 1 => { + self.state = EscapeDefaultState::Done; + Some(c) + }, + EscapeDefaultState::Backslash(_) => { + self.state = EscapeDefaultState::Done; + None + }, + EscapeDefaultState::Char(c) => { + self.state = EscapeDefaultState::Done; - match idx { - 0 => Some('\\'), - 1 => Some(ch), - _ => None, + if n == 0 { + Some(c) + } else { + None + } + }, + EscapeDefaultState::Done => return None, + EscapeDefaultState::Unicode(ref mut i) => return i.nth(n), } } fn last(self) -> Option<char> { match self.state { - EscapeDefaultState::Unicode(iter) => iter.last(), - EscapeDefaultState::Done => None, + EscapeDefaultState::Unicode(iter) => iter.last(), + EscapeDefaultState::Done => None, EscapeDefaultState::Backslash(c) | EscapeDefaultState::Char(c) => Some(c), } } } - -#[test] -fn ed_iterator_specializations() { - use super::EscapeDefault; - - // Check counting - assert_eq!('\n'.escape_default().count(), 2); - assert_eq!('c'.escape_default().count(), 1); - assert_eq!(' '.escape_default().count(), 1); - assert_eq!('\\'.escape_default().count(), 2); - assert_eq!('\''.escape_default().count(), 2); - - // Check nth - - // Check that OoB is handled correctly - assert_eq!('\n'.escape_default().nth(2), None); - assert_eq!('c'.escape_default().nth(1), None); - assert_eq!(' '.escape_default().nth(1), None); - assert_eq!('\\'.escape_default().nth(2), None); - assert_eq!('\''.escape_default().nth(2), None); - - // Check the first char - assert_eq!('\n'.escape_default().nth(0), Some('\\')); - assert_eq!('c'.escape_default().nth(0), Some('c')); - assert_eq!(' '.escape_default().nth(0), Some(' ')); - assert_eq!('\\'.escape_default().nth(0), Some('\\')); - assert_eq!('\''.escape_default().nth(0), Some('\\')); - - // Check the second char - assert_eq!('\n'.escape_default().nth(1), Some('n')); - assert_eq!('\\'.escape_default().nth(1), Some('\\')); - assert_eq!('\''.escape_default().nth(1), Some('\'')); -} - - -impl EscapeDefault { - fn get_offset(&self) -> Option<usize> { - match self.state { - EscapeDefaultState::Backslash(_) => Some(0), - EscapeDefaultState::Char(_) => Some(1), - EscapeDefaultState::Done => None, - EscapeDefaultState::Unicode(_) => None, - } - } -} |
