about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorroot <root@localhost>2014-07-18 00:59:09 +0200
committerroot <root@localhost>2014-07-18 00:59:09 +0200
commit9e59c7626381eff9ee9110091b68a079b8a5b7d8 (patch)
treed581d239dbebfa1c5626b0da97563ab6c58d8b2c /src
parent42357d772b8a3a1ce4395deeac0a5cf1f66e951d (diff)
Add more tests for str Chars iterator
Test iterating (decoding) every codepoint.
Diffstat (limited to 'src')
-rw-r--r--src/libcollections/str.rs25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/libcollections/str.rs b/src/libcollections/str.rs
index f1bb3b40804..b0c8f17eecc 100644
--- a/src/libcollections/str.rs
+++ b/src/libcollections/str.rs
@@ -808,6 +808,7 @@ impl OwnedStr for String {
 #[cfg(test)]
 mod tests {
     use std::iter::AdditiveIterator;
+    use std::iter::range;
     use std::default::Default;
     use std::char::Char;
     use std::clone::Clone;
@@ -1611,6 +1612,30 @@ mod tests {
     }
 
     #[test]
+    fn test_chars_decoding() {
+        let mut bytes = [0u8, ..4];
+        for c in range(0u32, 0x110000).filter_map(|c| ::core::char::from_u32(c)) {
+            let len = c.encode_utf8(bytes);
+            let s = ::core::str::from_utf8(bytes.slice_to(len)).unwrap();
+            if Some(c) != s.chars().next() {
+                fail!("character {:x}={} does not decode correctly", c as u32, c);
+            }
+        }
+    }
+
+    #[test]
+    fn test_chars_rev_decoding() {
+        let mut bytes = [0u8, ..4];
+        for c in range(0u32, 0x110000).filter_map(|c| ::core::char::from_u32(c)) {
+            let len = c.encode_utf8(bytes);
+            let s = ::core::str::from_utf8(bytes.slice_to(len)).unwrap();
+            if Some(c) != s.chars().rev().next() {
+                fail!("character {:x}={} does not decode correctly", c as u32, c);
+            }
+        }
+    }
+
+    #[test]
     fn test_iterator_clone() {
         let s = "ศไทย中华Việt Nam";
         let mut it = s.chars();