Skip to content

Commit d026977

Browse files
committed
Make style more uniform, add tests for specialization of .last(), move tests to libcoretest
Remove unused import Fold nth() method into the match expr
1 parent 15a5e02 commit d026977

File tree

2 files changed

+68
-73
lines changed

2 files changed

+68
-73
lines changed

Diff for: src/libcore/char.rs

+28-73
Original file line numberDiff line numberDiff line change
@@ -540,91 +540,46 @@ impl Iterator for EscapeDefault {
540540

541541
fn count(self) -> usize {
542542
match self.state {
543-
EscapeDefaultState::Char(_) => 1,
543+
EscapeDefaultState::Char(_) => 1,
544544
EscapeDefaultState::Unicode(iter) => iter.count(),
545-
EscapeDefaultState::Done => 0,
546-
EscapeDefaultState::Backslash(_) => 2,
545+
EscapeDefaultState::Done => 0,
546+
EscapeDefaultState::Backslash(_) => 2,
547547
}
548548
}
549549

550550
fn nth(&mut self, n: usize) -> Option<char> {
551-
let ch = match self.state {
552-
EscapeDefaultState::Backslash(c) => c,
553-
EscapeDefaultState::Char(c) => c,
554-
EscapeDefaultState::Done => return None,
555-
EscapeDefaultState::Unicode(ref mut i) => return i.nth(n),
556-
};
557-
558-
let start = if let Some(x) = self.get_offset() {
559-
x
560-
} else {
561-
return None;
562-
};
563-
let idx = start + n;
564-
565-
// Update state
566-
self.state = match idx {
567-
0 => EscapeDefaultState::Char(ch),
568-
_ => EscapeDefaultState::Done,
569-
};
551+
match self.state {
552+
EscapeDefaultState::Backslash(c) if n == 0 => {
553+
self.state = EscapeDefaultState::Char(c);
554+
Some('\\')
555+
},
556+
EscapeDefaultState::Backslash(c) if n == 1 => {
557+
self.state = EscapeDefaultState::Done;
558+
Some(c)
559+
},
560+
EscapeDefaultState::Backslash(_) => {
561+
self.state = EscapeDefaultState::Done;
562+
None
563+
},
564+
EscapeDefaultState::Char(c) => {
565+
self.state = EscapeDefaultState::Done;
570566

571-
match idx {
572-
0 => Some('\\'),
573-
1 => Some(ch),
574-
_ => None,
567+
if n == 0 {
568+
Some(c)
569+
} else {
570+
None
571+
}
572+
},
573+
EscapeDefaultState::Done => return None,
574+
EscapeDefaultState::Unicode(ref mut i) => return i.nth(n),
575575
}
576576
}
577577

578578
fn last(self) -> Option<char> {
579579
match self.state {
580-
EscapeDefaultState::Unicode(iter) => iter.last(),
581-
EscapeDefaultState::Done => None,
580+
EscapeDefaultState::Unicode(iter) => iter.last(),
581+
EscapeDefaultState::Done => None,
582582
EscapeDefaultState::Backslash(c) | EscapeDefaultState::Char(c) => Some(c),
583583
}
584584
}
585585
}
586-
587-
#[test]
588-
fn ed_iterator_specializations() {
589-
use super::EscapeDefault;
590-
591-
// Check counting
592-
assert_eq!('\n'.escape_default().count(), 2);
593-
assert_eq!('c'.escape_default().count(), 1);
594-
assert_eq!(' '.escape_default().count(), 1);
595-
assert_eq!('\\'.escape_default().count(), 2);
596-
assert_eq!('\''.escape_default().count(), 2);
597-
598-
// Check nth
599-
600-
// Check that OoB is handled correctly
601-
assert_eq!('\n'.escape_default().nth(2), None);
602-
assert_eq!('c'.escape_default().nth(1), None);
603-
assert_eq!(' '.escape_default().nth(1), None);
604-
assert_eq!('\\'.escape_default().nth(2), None);
605-
assert_eq!('\''.escape_default().nth(2), None);
606-
607-
// Check the first char
608-
assert_eq!('\n'.escape_default().nth(0), Some('\\'));
609-
assert_eq!('c'.escape_default().nth(0), Some('c'));
610-
assert_eq!(' '.escape_default().nth(0), Some(' '));
611-
assert_eq!('\\'.escape_default().nth(0), Some('\\'));
612-
assert_eq!('\''.escape_default().nth(0), Some('\\'));
613-
614-
// Check the second char
615-
assert_eq!('\n'.escape_default().nth(1), Some('n'));
616-
assert_eq!('\\'.escape_default().nth(1), Some('\\'));
617-
assert_eq!('\''.escape_default().nth(1), Some('\''));
618-
}
619-
620-
621-
impl EscapeDefault {
622-
fn get_offset(&self) -> Option<usize> {
623-
match self.state {
624-
EscapeDefaultState::Backslash(_) => Some(0),
625-
EscapeDefaultState::Char(_) => Some(1),
626-
EscapeDefaultState::Done => None,
627-
EscapeDefaultState::Unicode(_) => None,
628-
}
629-
}
630-
}

Diff for: src/libcoretest/char.rs

+40
Original file line numberDiff line numberDiff line change
@@ -216,3 +216,43 @@ fn test_decode_utf16() {
216216
check(&[0xD800, 0x41, 0x42], &[Err(0xD800), Ok('A'), Ok('B')]);
217217
check(&[0xD800, 0], &[Err(0xD800), Ok('\0')]);
218218
}
219+
220+
#[test]
221+
fn ed_iterator_specializations() {
222+
// Check counting
223+
assert_eq!('\n'.escape_default().count(), 2);
224+
assert_eq!('c'.escape_default().count(), 1);
225+
assert_eq!(' '.escape_default().count(), 1);
226+
assert_eq!('\\'.escape_default().count(), 2);
227+
assert_eq!('\''.escape_default().count(), 2);
228+
229+
// Check nth
230+
231+
// Check that OoB is handled correctly
232+
assert_eq!('\n'.escape_default().nth(2), None);
233+
assert_eq!('c'.escape_default().nth(1), None);
234+
assert_eq!(' '.escape_default().nth(1), None);
235+
assert_eq!('\\'.escape_default().nth(2), None);
236+
assert_eq!('\''.escape_default().nth(2), None);
237+
238+
// Check the first char
239+
assert_eq!('\n'.escape_default().nth(0), Some('\\'));
240+
assert_eq!('c'.escape_default().nth(0), Some('c'));
241+
assert_eq!(' '.escape_default().nth(0), Some(' '));
242+
assert_eq!('\\'.escape_default().nth(0), Some('\\'));
243+
assert_eq!('\''.escape_default().nth(0), Some('\\'));
244+
245+
// Check the second char
246+
assert_eq!('\n'.escape_default().nth(1), Some('n'));
247+
assert_eq!('\\'.escape_default().nth(1), Some('\\'));
248+
assert_eq!('\''.escape_default().nth(1), Some('\''));
249+
250+
// Check the last char
251+
assert_eq!('\n'.escape_default().last(), Some('n'));
252+
assert_eq!('c'.escape_default().last(), Some('c'));
253+
assert_eq!(' '.escape_default().last(), Some(' '));
254+
assert_eq!('\\'.escape_default().last(), Some('\\'));
255+
assert_eq!('\''.escape_default().last(), Some('\''));
256+
}
257+
258+

0 commit comments

Comments
 (0)