]> git.lizzy.rs Git - rust.git/blob - src/libcoretest/str.rs
doc: remove incomplete sentence
[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 use std::str::from_str;
12
13 #[test]
14 fn test_bool_from_str() {
15     assert_eq!(from_str::<bool>("true"), Some(true));
16     assert_eq!(from_str::<bool>("false"), Some(false));
17     assert_eq!(from_str::<bool>("not even a boolean"), None);
18 }
19
20 fn check_contains_all_substrings(s: &str) {
21     assert!(s.contains(""));
22     for i in range(0, s.len()) {
23         for j in range(i+1, s.len() + 1) {
24             assert!(s.contains(s.slice(i, j)));
25         }
26     }
27 }
28
29 #[test]
30 fn strslice_issue_16589() {
31     assert!("bananas".contains("nana"));
32
33     // prior to the fix for #16589, x.contains("abcdabcd") returned false
34     // test all substrings for good measure
35     check_contains_all_substrings("012345678901234567890123456789bcdabcdabcd");
36 }
37
38 #[test]
39 fn strslice_issue_16878() {
40     assert!(!"1234567ah012345678901ah".contains("hah"));
41     assert!(!"00abc01234567890123456789abc".contains("bcabc"));
42 }
43
44
45 #[test]
46 fn test_strslice_contains() {
47     let x = "There are moments, Jeeves, when one asks oneself, 'Do trousers matter?'";
48     check_contains_all_substrings(x);
49 }
50
51 #[test]
52 fn test_rsplitn_char_iterator() {
53     let data = "\nMäry häd ä little lämb\nLittle lämb\n";
54
55     let mut split: Vec<&str> = data.rsplitn(3, ' ').collect();
56     split.reverse();
57     assert_eq!(split, vec!["\nMäry häd ä", "little", "lämb\nLittle", "lämb\n"]);
58
59     let mut split: Vec<&str> = data.rsplitn(3, |&: c: char| c == ' ').collect();
60     split.reverse();
61     assert_eq!(split, vec!["\nMäry häd ä", "little", "lämb\nLittle", "lämb\n"]);
62
63     // Unicode
64     let mut split: Vec<&str> = data.rsplitn(3, 'ä').collect();
65     split.reverse();
66     assert_eq!(split, vec!["\nMäry häd ", " little l", "mb\nLittle l", "mb\n"]);
67
68     let mut split: Vec<&str> = data.rsplitn(3, |&: c: char| c == 'ä').collect();
69     split.reverse();
70     assert_eq!(split, vec!["\nMäry häd ", " little l", "mb\nLittle l", "mb\n"]);
71 }
72
73 #[test]
74 fn test_split_char_iterator() {
75     let data = "\nMäry häd ä little lämb\nLittle lämb\n";
76
77     let split: Vec<&str> = data.split(' ').collect();
78     assert_eq!( split, vec!["\nMäry", "häd", "ä", "little", "lämb\nLittle", "lämb\n"]);
79
80     let mut rsplit: Vec<&str> = data.split(' ').rev().collect();
81     rsplit.reverse();
82     assert_eq!(rsplit, vec!["\nMäry", "häd", "ä", "little", "lämb\nLittle", "lämb\n"]);
83
84     let split: Vec<&str> = data.split(|&: c: char| c == ' ').collect();
85     assert_eq!( split, vec!["\nMäry", "häd", "ä", "little", "lämb\nLittle", "lämb\n"]);
86
87     let mut rsplit: Vec<&str> = data.split(|&: c: char| c == ' ').rev().collect();
88     rsplit.reverse();
89     assert_eq!(rsplit, vec!["\nMäry", "häd", "ä", "little", "lämb\nLittle", "lämb\n"]);
90
91     // Unicode
92     let split: Vec<&str> = data.split('ä').collect();
93     assert_eq!( split, vec!["\nM", "ry h", "d ", " little l", "mb\nLittle l", "mb\n"]);
94
95     let mut rsplit: Vec<&str> = data.split('ä').rev().collect();
96     rsplit.reverse();
97     assert_eq!(rsplit, vec!["\nM", "ry h", "d ", " little l", "mb\nLittle l", "mb\n"]);
98
99     let split: Vec<&str> = data.split(|&: c: char| c == 'ä').collect();
100     assert_eq!( split, vec!["\nM", "ry h", "d ", " little l", "mb\nLittle l", "mb\n"]);
101
102     let mut rsplit: Vec<&str> = data.split(|&: c: char| c == 'ä').rev().collect();
103     rsplit.reverse();
104     assert_eq!(rsplit, vec!["\nM", "ry h", "d ", " little l", "mb\nLittle l", "mb\n"]);
105 }
106
107 #[test]
108 fn test_rev_split_char_iterator_no_trailing() {
109     let data = "\nMäry häd ä little lämb\nLittle lämb\n";
110
111     let mut split: Vec<&str> = data.split('\n').rev().collect();
112     split.reverse();
113     assert_eq!(split, vec!["", "Märy häd ä little lämb", "Little lämb", ""]);
114
115     let mut split: Vec<&str> = data.split_terminator('\n').rev().collect();
116     split.reverse();
117     assert_eq!(split, vec!["", "Märy häd ä little lämb", "Little lämb"]);
118 }
119
120 #[test]
121 fn test_utf16_code_units() {
122     use unicode::str::Utf16Encoder;
123     assert_eq!(Utf16Encoder::new(vec!['é', '\U0001F4A9'].into_iter()).collect::<Vec<u16>>(),
124                vec![0xE9, 0xD83D, 0xDCA9])
125 }