about summary refs log tree commit diff
path: root/src/libcoretest
diff options
context:
space:
mode:
authorM Farkas-Dyck <mfdyck@google.com>2016-05-27 08:16:27 -0800
committerM Farkas-Dyck <mfdyck@google.com>2016-07-13 17:40:16 -0800
commit837029fec146b4eb7af4dae3f002b00306af00db (patch)
treed7a90d713528de58ee67a2956fead015ec8b0155 /src/libcoretest
parentfe96928d7de991e527a7ed7b88bb30aa965c8a08 (diff)
add core::char::DecodeUtf8
Diffstat (limited to 'src/libcoretest')
-rw-r--r--src/libcoretest/char.rs29
-rw-r--r--src/libcoretest/lib.rs1
2 files changed, 30 insertions, 0 deletions
diff --git a/src/libcoretest/char.rs b/src/libcoretest/char.rs
index 7da876b9459..c8906fed3d2 100644
--- a/src/libcoretest/char.rs
+++ b/src/libcoretest/char.rs
@@ -302,3 +302,32 @@ fn eu_iterator_specializations() {
     check('\u{12340}');
     check('\u{10FFFF}');
 }
+
+#[test]
+fn test_decode_utf8() {
+    use core::char::*;
+    use core::iter::FromIterator;
+
+    for &(str, bs) in [("", &[] as &[u8]),
+                       ("A", &[0x41u8] as &[u8]),
+                       ("�", &[0xC1u8, 0x81u8] as &[u8]),
+                       ("♥", &[0xE2u8, 0x99u8, 0xA5u8]),
+                       ("♥A", &[0xE2u8, 0x99u8, 0xA5u8, 0x41u8] as &[u8]),
+                       ("�", &[0xE2u8, 0x99u8] as &[u8]),
+                       ("�A", &[0xE2u8, 0x99u8, 0x41u8] as &[u8]),
+                       ("�", &[0xC0u8] as &[u8]),
+                       ("�A", &[0xC0u8, 0x41u8] as &[u8]),
+                       ("�", &[0x80u8] as &[u8]),
+                       ("�A", &[0x80u8, 0x41u8] as &[u8]),
+                       ("�", &[0xFEu8] as &[u8]),
+                       ("�A", &[0xFEu8, 0x41u8] as &[u8]),
+                       ("�", &[0xFFu8] as &[u8]),
+                       ("�A", &[0xFFu8, 0x41u8] as &[u8])].into_iter() {
+        assert!(Iterator::eq(str.chars(),
+                             decode_utf8(bs.into_iter().map(|&b|b))
+                                 .map(|r_b| r_b.unwrap_or('\u{FFFD}'))),
+                "chars = {}, bytes = {:?}, decoded = {:?}", str, bs,
+                Vec::from_iter(decode_utf8(bs.into_iter().map(|&b|b))
+                                   .map(|r_b| r_b.unwrap_or('\u{FFFD}'))));
+    }
+}
diff --git a/src/libcoretest/lib.rs b/src/libcoretest/lib.rs
index 88d73df937f..d46dcdb51e8 100644
--- a/src/libcoretest/lib.rs
+++ b/src/libcoretest/lib.rs
@@ -18,6 +18,7 @@
 #![feature(core_private_bignum)]
 #![feature(core_private_diy_float)]
 #![feature(dec2flt)]
+#![feature(decode_utf8)]
 #![feature(fixed_size_array)]
 #![feature(float_extras)]
 #![feature(flt2dec)]