|
1 | 1 | #![feature(associated_type_bounds, pattern)]
|
2 | 2 |
|
3 |
| -use core::pattern::{Pattern, Searcher, ReverseSearcher}; |
| 3 | +use core::pattern::{Pattern, Searcher, ReverseSearcher, predicate}; |
4 | 4 | use std::borrow::Cow;
|
5 | 5 | use std::ffi::{OsStr, OsString};
|
6 | 6 |
|
@@ -111,6 +111,23 @@ fn do_test_short_flag(valid: bool) {
|
111 | 111 | assert_eq!(Some(&*os("shórt")), arg.strip_prefix('-'));
|
112 | 112 | assert_eq!(Some(&*os("shórt")), arg.strip_prefix("-"));
|
113 | 113 | assert_eq!(None, arg.strip_prefix("--"));
|
| 114 | + |
| 115 | + // A bit awkward but closure can be used to test short options character |
| 116 | + // by character. |
| 117 | + let mut switch = '\0'; |
| 118 | + let mut check_switch = |chr| { |
| 119 | + switch = chr; |
| 120 | + chr == 's' || chr == 'h' |
| 121 | + }; |
| 122 | + assert_eq!( |
| 123 | + Some(&*os("hórt")), |
| 124 | + os("shórt").strip_prefix(predicate(&mut check_switch)) |
| 125 | + ); |
| 126 | + assert_eq!( |
| 127 | + Some(&*os("órt")), |
| 128 | + os("hórt").strip_prefix(predicate(&mut check_switch)) |
| 129 | + ); |
| 130 | + assert_eq!(None, os("órt").strip_prefix(predicate(&mut check_switch))); |
114 | 131 | }
|
115 | 132 |
|
116 | 133 | #[test]
|
@@ -157,15 +174,21 @@ fn test_le() {
|
157 | 174 | #[test]
|
158 | 175 | fn test_find() {
|
159 | 176 | assert_eq!(find("hello", 'l'), Some(2));
|
| 177 | + assert_eq!(find("hello", predicate(|c: char| c == 'o')), Some(4)); |
160 | 178 | assert!(find("hello", 'x').is_none());
|
| 179 | + assert!(find("hello", predicate(|c: char| c == 'x')).is_none()); |
161 | 180 | assert_eq!(find("ประเทศไทย中华Việt Nam", '华'), Some(30));
|
| 181 | + assert_eq!(find("ประเทศไทย中华Việt Nam", predicate(|c: char| c == '华')), Some(30)); |
162 | 182 | }
|
163 | 183 |
|
164 | 184 | #[test]
|
165 | 185 | fn test_rfind() {
|
166 | 186 | assert_eq!(rfind("hello", 'l'), Some(3));
|
| 187 | + assert_eq!(rfind("hello", predicate(|c: char| c == 'o')), Some(4)); |
167 | 188 | assert!(rfind("hello", 'x').is_none());
|
| 189 | + assert!(rfind("hello", predicate(|c: char| c == 'x')).is_none()); |
168 | 190 | assert_eq!(rfind("ประเทศไทย中华Việt Nam", '华'), Some(30));
|
| 191 | + assert_eq!(rfind("ประเทศไทย中华Việt Nam", predicate(|c: char| c == '华')), Some(30)); |
169 | 192 | }
|
170 | 193 |
|
171 | 194 | /*
|
@@ -1832,13 +1855,27 @@ fn test_split_char_iterator() {
|
1832 | 1855 | rsplit.reverse();
|
1833 | 1856 | assert_eq!(rsplit, ["\nMäry", "häd", "ä", "little", "lämb\nLittle", "lämb\n"]);
|
1834 | 1857 |
|
| 1858 | + let split: Vec<&OsStr> = os(data).split(predicate(|c: char| c == ' ')).collect(); |
| 1859 | + assert_eq!(split, ["\nMäry", "häd", "ä", "little", "lämb\nLittle", "lämb\n"]); |
| 1860 | + |
| 1861 | + let mut rsplit: Vec<&OsStr> = os(data).split(predicate(|c: char| c == ' ')).rev().collect(); |
| 1862 | + rsplit.reverse(); |
| 1863 | + assert_eq!(rsplit, ["\nMäry", "häd", "ä", "little", "lämb\nLittle", "lämb\n"]); |
| 1864 | + |
1835 | 1865 | // Unicode
|
1836 | 1866 | let split: Vec<&OsStr> = os(data).split('ä').collect();
|
1837 | 1867 | assert_eq!(split, ["\nM", "ry h", "d ", " little l", "mb\nLittle l", "mb\n"]);
|
1838 | 1868 |
|
1839 | 1869 | let mut rsplit: Vec<&OsStr> = os(data).split('ä').rev().collect();
|
1840 | 1870 | rsplit.reverse();
|
1841 | 1871 | assert_eq!(rsplit, ["\nM", "ry h", "d ", " little l", "mb\nLittle l", "mb\n"]);
|
| 1872 | + |
| 1873 | + let split: Vec<&OsStr> = os(data).split(predicate(|c: char| c == 'ä')).collect(); |
| 1874 | + assert_eq!(split, ["\nM", "ry h", "d ", " little l", "mb\nLittle l", "mb\n"]); |
| 1875 | + |
| 1876 | + let mut rsplit: Vec<&OsStr> = os(data).split(predicate(|c: char| c == 'ä')).rev().collect(); |
| 1877 | + rsplit.reverse(); |
| 1878 | + assert_eq!(rsplit, ["\nM", "ry h", "d ", " little l", "mb\nLittle l", "mb\n"]); |
1842 | 1879 | }
|
1843 | 1880 |
|
1844 | 1881 | #[test]
|
|
0 commit comments