about summary refs log tree commit diff
path: root/src/libcore
diff options
context:
space:
mode:
authorTicki <Ticki@users.noreply.github.com>2016-01-12 14:35:04 +0100
committerTicki <Ticki@users.noreply.github.com>2016-01-16 09:12:09 +0100
commitd026977f25e4626e1219395f173a14d40f81de3b (patch)
tree379031a93d2034be7ef60fbdf7ee3e57ba0dd32f /src/libcore
parent15a5e02486bf1217511549d01c858ea0ec315905 (diff)
downloadrust-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.rs101
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,
-        }
-    }
-}