about summary refs log tree commit diff
path: root/src/test
diff options
context:
space:
mode:
authorGary Linscott <glinscott@gmail.com>2013-07-10 17:06:16 -0400
committerGary Linscott <glinscott@gmail.com>2013-07-11 14:23:15 -0400
commit5aee5a11e3d4807c6df190e33cc6c4dc81ef7ea3 (patch)
tree7a5607a93faa47e6e9b7e519a13b58ce380d3455 /src/test
parent179637304a5d913a7ea2dc13cffed6e53f342377 (diff)
downloadrust-5aee5a11e3d4807c6df190e33cc6c4dc81ef7ea3.tar.gz
rust-5aee5a11e3d4807c6df190e33cc6c4dc81ef7ea3.zip
Optimize is_utf8
Manually unroll the multibyte loops, and optimize for the single
byte chars.
Diffstat (limited to 'src/test')
-rw-r--r--src/test/run-pass/utf8_chars.rs11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/test/run-pass/utf8_chars.rs b/src/test/run-pass/utf8_chars.rs
index 4364bcc1274..556d7dd521c 100644
--- a/src/test/run-pass/utf8_chars.rs
+++ b/src/test/run-pass/utf8_chars.rs
@@ -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(), '€');