Optimize is_utf8
Manually unroll the multibyte loops, and optimize for the single byte chars.
This commit is contained in:
parent
179637304a
commit
5aee5a11e3
2 changed files with 27 additions and 8 deletions
|
|
@ -27,9 +27,20 @@ pub fn main() {
|
|||
assert!(s.char_at(1u) == 'é');
|
||||
|
||||
assert!((str::is_utf8(s.as_bytes())));
|
||||
// invalid prefix
|
||||
assert!((!str::is_utf8(~[0x80_u8])));
|
||||
// invalid 2 byte prefix
|
||||
assert!((!str::is_utf8(~[0xc0_u8])));
|
||||
assert!((!str::is_utf8(~[0xc0_u8, 0x10_u8])));
|
||||
// invalid 3 byte prefix
|
||||
assert!((!str::is_utf8(~[0xe0_u8])));
|
||||
assert!((!str::is_utf8(~[0xe0_u8, 0x10_u8])));
|
||||
assert!((!str::is_utf8(~[0xe0_u8, 0xff_u8, 0x10_u8])));
|
||||
// invalid 4 byte prefix
|
||||
assert!((!str::is_utf8(~[0xf0_u8])));
|
||||
assert!((!str::is_utf8(~[0xf0_u8, 0x10_u8])));
|
||||
assert!((!str::is_utf8(~[0xf0_u8, 0xff_u8, 0x10_u8])));
|
||||
assert!((!str::is_utf8(~[0xf0_u8, 0xff_u8, 0xff_u8, 0x10_u8])));
|
||||
|
||||
let mut stack = ~"a×c€";
|
||||
assert_eq!(stack.pop_char(), '€');
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue