]>
Commit | Line | Data |
---|---|---|
416331ca XL |
1 | // run-pass |
2 | ||
970d7e83 | 3 | use std::str; |
223e47cc LB |
4 | |
5 | pub fn main() { | |
6 | // Chars of 1, 2, 3, and 4 bytes | |
c30ab7b3 | 7 | let chs: Vec<char> = vec!['e', 'é', '€', '\u{10000}']; |
1a4d82fc JJ |
8 | let s: String = chs.iter().cloned().collect(); |
9 | let schs: Vec<char> = s.chars().collect(); | |
223e47cc | 10 | |
62682a34 SL |
11 | assert_eq!(s.len(), 10); |
12 | assert_eq!(s.chars().count(), 4); | |
13 | assert_eq!(schs.len(), 4); | |
14 | assert_eq!(schs.iter().cloned().collect::<String>(), s); | |
223e47cc | 15 | |
1a4d82fc JJ |
16 | assert!((str::from_utf8(s.as_bytes()).is_ok())); |
17 | // invalid prefix | |
c34b1796 | 18 | assert!((!str::from_utf8(&[0x80]).is_ok())); |
1a4d82fc | 19 | // invalid 2 byte prefix |
c34b1796 AL |
20 | assert!((!str::from_utf8(&[0xc0]).is_ok())); |
21 | assert!((!str::from_utf8(&[0xc0, 0x10]).is_ok())); | |
1a4d82fc | 22 | // invalid 3 byte prefix |
c34b1796 AL |
23 | assert!((!str::from_utf8(&[0xe0]).is_ok())); |
24 | assert!((!str::from_utf8(&[0xe0, 0x10]).is_ok())); | |
25 | assert!((!str::from_utf8(&[0xe0, 0xff, 0x10]).is_ok())); | |
1a4d82fc | 26 | // invalid 4 byte prefix |
c34b1796 AL |
27 | assert!((!str::from_utf8(&[0xf0]).is_ok())); |
28 | assert!((!str::from_utf8(&[0xf0, 0x10]).is_ok())); | |
29 | assert!((!str::from_utf8(&[0xf0, 0xff, 0x10]).is_ok())); | |
30 | assert!((!str::from_utf8(&[0xf0, 0xff, 0xff, 0x10]).is_ok())); | |
223e47cc | 31 | } |