]> git.lizzy.rs Git - rust.git/blob - src/libcoretest/str.rs
Merge pull request #20510 from tshepang/patch-6
[rust.git] / src / libcoretest / str.rs
1 // Copyright 2014 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
4 //
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
10
11 #[test]
12 fn test_bool_from_str() {
13     assert_eq!("true".parse(), Some(true));
14     assert_eq!("false".parse(), Some(false));
15     assert_eq!("not even a boolean".parse::<bool>(), None);
16 }
17
18 fn check_contains_all_substrings(s: &str) {
19     assert!(s.contains(""));
20     for i in range(0, s.len()) {
21         for j in range(i+1, s.len() + 1) {
22             assert!(s.contains(s.slice(i, j)));
23         }
24     }
25 }
26
27 #[test]
28 fn strslice_issue_16589() {
29     assert!("bananas".contains("nana"));
30
31     // prior to the fix for #16589, x.contains("abcdabcd") returned false
32     // test all substrings for good measure
33     check_contains_all_substrings("012345678901234567890123456789bcdabcdabcd");
34 }
35
36 #[test]
37 fn strslice_issue_16878() {
38     assert!(!"1234567ah012345678901ah".contains("hah"));
39     assert!(!"00abc01234567890123456789abc".contains("bcabc"));
40 }
41
42
43 #[test]
44 fn test_strslice_contains() {
45     let x = "There are moments, Jeeves, when one asks oneself, 'Do trousers matter?'";
46     check_contains_all_substrings(x);
47 }
48
49 #[test]
50 fn test_rsplitn_char_iterator() {
51     let data = "\nMäry häd ä little lämb\nLittle lämb\n";
52
53     let mut split: Vec<&str> = data.rsplitn(3, ' ').collect();
54     split.reverse();
55     assert_eq!(split, vec!["\nMäry häd ä", "little", "lämb\nLittle", "lämb\n"]);
56
57     let mut split: Vec<&str> = data.rsplitn(3, |&: c: char| c == ' ').collect();
58     split.reverse();
59     assert_eq!(split, vec!["\nMäry häd ä", "little", "lämb\nLittle", "lämb\n"]);
60
61     // Unicode
62     let mut split: Vec<&str> = data.rsplitn(3, 'ä').collect();
63     split.reverse();
64     assert_eq!(split, vec!["\nMäry häd ", " little l", "mb\nLittle l", "mb\n"]);
65
66     let mut split: Vec<&str> = data.rsplitn(3, |&: c: char| c == 'ä').collect();
67     split.reverse();
68     assert_eq!(split, vec!["\nMäry häd ", " little l", "mb\nLittle l", "mb\n"]);
69 }
70
71 #[test]
72 fn test_split_char_iterator() {
73     let data = "\nMäry häd ä little lämb\nLittle lämb\n";
74
75     let split: Vec<&str> = data.split(' ').collect();
76     assert_eq!( split, vec!["\nMäry", "häd", "ä", "little", "lämb\nLittle", "lämb\n"]);
77
78     let mut rsplit: Vec<&str> = data.split(' ').rev().collect();
79     rsplit.reverse();
80     assert_eq!(rsplit, vec!["\nMäry", "häd", "ä", "little", "lämb\nLittle", "lämb\n"]);
81
82     let split: Vec<&str> = data.split(|&: c: char| c == ' ').collect();
83     assert_eq!( split, vec!["\nMäry", "häd", "ä", "little", "lämb\nLittle", "lämb\n"]);
84
85     let mut rsplit: Vec<&str> = data.split(|&: c: char| c == ' ').rev().collect();
86     rsplit.reverse();
87     assert_eq!(rsplit, vec!["\nMäry", "häd", "ä", "little", "lämb\nLittle", "lämb\n"]);
88
89     // Unicode
90     let split: Vec<&str> = data.split('ä').collect();
91     assert_eq!( split, vec!["\nM", "ry h", "d ", " little l", "mb\nLittle l", "mb\n"]);
92
93     let mut rsplit: Vec<&str> = data.split('ä').rev().collect();
94     rsplit.reverse();
95     assert_eq!(rsplit, vec!["\nM", "ry h", "d ", " little l", "mb\nLittle l", "mb\n"]);
96
97     let split: Vec<&str> = data.split(|&: c: char| c == 'ä').collect();
98     assert_eq!( split, vec!["\nM", "ry h", "d ", " little l", "mb\nLittle l", "mb\n"]);
99
100     let mut rsplit: Vec<&str> = data.split(|&: c: char| c == 'ä').rev().collect();
101     rsplit.reverse();
102     assert_eq!(rsplit, vec!["\nM", "ry h", "d ", " little l", "mb\nLittle l", "mb\n"]);
103 }
104
105 #[test]
106 fn test_rev_split_char_iterator_no_trailing() {
107     let data = "\nMäry häd ä little lämb\nLittle lämb\n";
108
109     let mut split: Vec<&str> = data.split('\n').rev().collect();
110     split.reverse();
111     assert_eq!(split, vec!["", "Märy häd ä little lämb", "Little lämb", ""]);
112
113     let mut split: Vec<&str> = data.split_terminator('\n').rev().collect();
114     split.reverse();
115     assert_eq!(split, vec!["", "Märy häd ä little lämb", "Little lämb"]);
116 }
117
118 #[test]
119 fn test_utf16_code_units() {
120     use unicode::str::Utf16Encoder;
121     assert_eq!(Utf16Encoder::new(vec!['é', '\u{1F4A9}'].into_iter()).collect::<Vec<u16>>(),
122                vec![0xE9, 0xD83D, 0xDCA9])
123 }