1use nom::AsChar;
4
5pub trait IsChar: AsChar {
9}
10
11impl IsChar for char {
12}
13
14impl<'a> IsChar for &'a char {
15}
16
17macro_rules! is_impl {
19 ($($name:ident)*) => ($(
20 #[inline(always)]
21 pub fn $name<T: IsChar>(item: T) -> bool {
22 item.as_char().$name()
23 }
24 )*);
25}
26
27is_impl! {
28 is_alphabetic
29 is_lowercase
30 is_uppercase
31 is_whitespace
32 is_alphanumeric
33 is_control
34 is_numeric
35 is_ascii
36}
37
38macro_rules! doc {
40 ($x:expr, $item:item) => (
41 #[doc = $x]
42 $item
43 );
44}
45
46pub mod complete {
50 use super::*;
51 use nom::{IResult, Input};
52 use nom::error::{ErrorKind, ParseError};
53
54 macro_rules! parse_impl {
56 ($($name0:ident, $name1:ident, $kind:ident, $callback:ident, $comment:expr)*) => ($(
57 doc!(concat!("Recognizes zero or more ", $comment),
58 #[inline]
59 pub fn $name0<T, Error>(input: T)
60 -> IResult<T, T, Error>
61 where T: Input,
62 <T as Input>::Item: IsChar,
63 Error: ParseError<T>
64 {
65 input.split_at_position_complete(|item| !$callback(item))
66 }
67 );
68
69 doc!(concat!("Recognizes one or more ", $comment),
70 #[inline]
71 pub fn $name1<T, Error>(input: T)
72 -> IResult<T, T, Error>
73 where T: Input,
74 <T as Input>::Item: IsChar,
75 Error: ParseError<T>
76 {
77 input.split_at_position1_complete(|item| !$callback(item), ErrorKind::$kind)
78 }
79 );
80 )*);
81 }
82
83 parse_impl! {
84 alpha0, alpha1, Alpha, is_alphabetic, "lowercase and uppercase alphabetic Unicode characters."
85 lower0, lower1, Alpha, is_lowercase, "lowercase alphabetic Unicode characters."
86 upper0, upper1, Alpha, is_uppercase, "lowercase alphabetic Unicode characters."
87 space0, space1, Space, is_whitespace, "whitespace Unicode characters."
88 alphanumeric0, alphanumeric1, AlphaNumeric, is_alphanumeric, "alphabetic and numeric Unicode characters."
89 control0, control1, TakeWhile1, is_control, "control Unicode characters."
90 digit0, digit1, Digit, is_numeric, "numeric Unicode characters."
91 ascii0, ascii1, TakeWhile1, is_ascii, "ASCII characters."
92 }
93}
94
95pub mod streaming {
99 use super::*;
100 use nom::{IResult, Input};
101 use nom::error::{ErrorKind, ParseError};
102
103 macro_rules! parse_impl {
105 ($($name0:ident, $name1:ident, $kind:ident, $callback:ident, $comment:expr)*) => ($(
106 doc!(concat!("Recognizes zero or more ", $comment),
107 #[inline]
108 pub fn $name0<T, Error>(input: T)
109 -> IResult<T, T, Error>
110 where T: Input,
111 <T as Input>::Item: IsChar,
112 Error: ParseError<T>
113 {
114 input.split_at_position(|item| !$callback(item))
115 }
116 );
117
118 doc!(concat!("Recognizes one or more ", $comment),
119 #[inline]
120 pub fn $name1<T, Error>(input: T)
121 -> IResult<T, T, Error>
122 where T: Input,
123 <T as Input>::Item: IsChar,
124 Error: ParseError<T>
125 {
126 input.split_at_position1(|item| !$callback(item), ErrorKind::$kind)
127 }
128 );
129 )*);
130 }
131
132 parse_impl! {
133 alpha0, alpha1, Alpha, is_alphabetic, "lowercase and uppercase alphabetic Unicode characters."
134 lower0, lower1, Alpha, is_lowercase, "lowercase alphabetic Unicode characters."
135 upper0, upper1, Alpha, is_uppercase, "lowercase alphabetic Unicode characters."
136 space0, space1, Space, is_whitespace, "whitespace Unicode characters."
137 alphanumeric0, alphanumeric1, AlphaNumeric, is_alphanumeric, "alphabetic and numeric Unicode characters."
138 control0, control1, TakeWhile1, is_control, "control Unicode characters."
139 digit0, digit1, Digit, is_numeric, "numeric Unicode characters."
140 ascii0, ascii1, TakeWhile1, is_ascii, "ASCII characters."
141 }
142}
143
144#[cfg(test)]
148mod tests {
149 use std::num::NonZeroUsize;
150 use nom::{IResult, Input, AsChar};
151 use nom::error::Error as NError;
152 use nom::error::ErrorKind;
153 use nom::Err::{Error, Incomplete};
154 use nom::Needed::Size;
155 use super::*;
156
157 fn call<T, F>(f: F, input: T)
159 -> IResult<T, T>
160 where T: Input,
161 <T as Input>::Item: AsChar,
162 F: Fn(T) -> IResult<T, T>
163 {
164 f(input)
165 }
166
167 fn run_tests<'a, F>(f: &F, tests: &[(&'a str, IResult<&'a str, &'a str>)])
168 where F: Fn(&'a str) -> IResult<&'a str, &'a str>
169 {
170 for test in tests.iter() {
171 assert_eq!(call(f, test.0), test.1);
172 }
173 }
174
175 #[test]
178 fn alpha0_complete_test() {
179 run_tests(&complete::alpha0, &[
180 ("latin", Ok(("", "latin"))),
181 ("latin123", Ok(("123", "latin"))),
182 ("LATIN", Ok(("", "LATIN"))),
183 ("LATIN123", Ok(("123", "LATIN"))),
184 ("123", Ok(("123", ""))),
185 ("erfüllen", Ok(("", "erfüllen"))),
186 ("erfüllen123", Ok(("123", "erfüllen"))),
187 ("조선글", Ok(("", "조선글"))),
188 ("조선글123", Ok(("123", "조선글"))),
189 (" \t\n\x08", Ok((" \t\n\x08", ""))),
190 ("\u{200b}", Ok(("\u{200b}", ""))),
191 ("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", Ok(("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", ""))),
192 ("\x00\x01\x02\u{80}", Ok(("\x00\x01\x02\u{80}", ""))),
193 ("\u{94}\u{100}", Ok(("\u{94}\u{100}", ""))),
194 ("", Ok(("", "")))
195 ]);
196 }
197
198 #[test]
199 fn alpha1_complete_test() {
200 run_tests(&complete::alpha1, &[
201 ("latin", Ok(("", "latin"))),
202 ("latin123", Ok(("123", "latin"))),
203 ("LATIN", Ok(("", "LATIN"))),
204 ("LATIN123", Ok(("123", "LATIN"))),
205 ("123", Err(Error(NError::new("123", ErrorKind::Alpha)))),
206 ("erfüllen", Ok(("", "erfüllen"))),
207 ("erfüllen123", Ok(("123", "erfüllen"))),
208 ("조선글", Ok(("", "조선글"))),
209 ("조선글123", Ok(("123", "조선글"))),
210 (" \t\n\x08", Err(Error(NError::new(" \t\n\x08", ErrorKind::Alpha)))),
211 ("\u{200b}", Err(Error(NError::new("\u{200b}", ErrorKind::Alpha)))),
212 ("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", Err(Error(NError::new("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", ErrorKind::Alpha)))),
213 ("\x00\x01\x02\u{80}", Err(Error(NError::new("\x00\x01\x02\u{80}", ErrorKind::Alpha)))),
214 ("\u{94}\u{100}", Err(Error(NError::new("\u{94}\u{100}", ErrorKind::Alpha)))),
215 ("", Err(Error(NError::new("", ErrorKind::Alpha))))
216 ]);
217 }
218
219 #[test]
220 fn lower0_complete_test() {
221 run_tests(&complete::lower0, &[
222 ("latin", Ok(("", "latin"))),
223 ("latin123", Ok(("123", "latin"))),
224 ("LATIN", Ok(("LATIN", ""))),
225 ("LATIN123", Ok(("LATIN123", ""))),
226 ("123", Ok(("123", ""))),
227 ("erfüllen", Ok(("", "erfüllen"))),
228 ("erfüllen123", Ok(("123", "erfüllen"))),
229 ("조선글", Ok(("조선글", ""))),
230 ("조선글123", Ok(("조선글123", ""))),
231 (" \t\n\x08", Ok((" \t\n\x08", ""))),
232 ("\u{200b}", Ok(("\u{200b}", ""))),
233 ("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", Ok(("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", ""))),
234 ("\x00\x01\x02\u{80}", Ok(("\x00\x01\x02\u{80}", ""))),
235 ("\u{94}\u{100}", Ok(("\u{94}\u{100}", ""))),
236 ("", Ok(("", "")))
237 ]);
238 }
239
240 #[test]
241 fn lower1_complete_test() {
242 run_tests(&complete::lower1, &[
243 ("latin", Ok(("", "latin"))),
244 ("latin123", Ok(("123", "latin"))),
245 ("LATIN", Err(Error(NError::new("LATIN", ErrorKind::Alpha)))),
246 ("LATIN123", Err(Error(NError::new("LATIN123", ErrorKind::Alpha)))),
247 ("123", Err(Error(NError::new("123", ErrorKind::Alpha)))),
248 ("erfüllen", Ok(("", "erfüllen"))),
249 ("erfüllen123", Ok(("123", "erfüllen"))),
250 ("조선글", Err(Error(NError::new("조선글", ErrorKind::Alpha)))),
251 ("조선글123", Err(Error(NError::new("조선글123", ErrorKind::Alpha)))),
252 (" \t\n\x08", Err(Error(NError::new(" \t\n\x08", ErrorKind::Alpha)))),
253 ("\u{200b}", Err(Error(NError::new("\u{200b}", ErrorKind::Alpha)))),
254 ("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", Err(Error(NError::new("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", ErrorKind::Alpha)))),
255 ("\x00\x01\x02\u{80}", Err(Error(NError::new("\x00\x01\x02\u{80}", ErrorKind::Alpha)))),
256 ("\u{94}\u{100}", Err(Error(NError::new("\u{94}\u{100}", ErrorKind::Alpha)))),
257 ("", Err(Error(NError::new("", ErrorKind::Alpha))))
258 ]);
259 }
260
261 #[test]
262 fn upper0_complete_test() {
263 run_tests(&complete::upper0, &[
264 ("latin", Ok(("latin", ""))),
265 ("latin123", Ok(("latin123", ""))),
266 ("LATIN", Ok(("", "LATIN"))),
267 ("LATIN123", Ok(("123", "LATIN"))),
268 ("123", Ok(("123", ""))),
269 ("erfüllen", Ok(("erfüllen", ""))),
270 ("erfüllen123", Ok(("erfüllen123", ""))),
271 ("조선글", Ok(("조선글", ""))),
272 ("조선글123", Ok(("조선글123", ""))),
273 (" \t\n\x08", Ok((" \t\n\x08", ""))),
274 ("\u{200b}", Ok(("\u{200b}", ""))),
275 ("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", Ok(("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", ""))),
276 ("\x00\x01\x02\u{80}", Ok(("\x00\x01\x02\u{80}", ""))),
277 ("\u{94}\u{100}", Ok(("\u{94}\u{100}", ""))),
278 ("", Ok(("", "")))
279 ]);
280 }
281
282 #[test]
283 fn upper1_complete_test() {
284 run_tests(&complete::upper1, &[
285 ("latin", Err(Error(NError::new("latin", ErrorKind::Alpha)))),
286 ("latin123", Err(Error(NError::new("latin123", ErrorKind::Alpha)))),
287 ("LATIN", Ok(("", "LATIN"))),
288 ("LATIN123", Ok(("123", "LATIN"))),
289 ("123", Err(Error(NError::new("123", ErrorKind::Alpha)))),
290 ("erfüllen", Err(Error(NError::new("erfüllen", ErrorKind::Alpha)))),
291 ("erfüllen123", Err(Error(NError::new("erfüllen123", ErrorKind::Alpha)))),
292 ("조선글", Err(Error(NError::new("조선글", ErrorKind::Alpha)))),
293 ("조선글123", Err(Error(NError::new("조선글123", ErrorKind::Alpha)))),
294 (" \t\n\x08", Err(Error(NError::new(" \t\n\x08", ErrorKind::Alpha)))),
295 ("\u{200b}", Err(Error(NError::new("\u{200b}", ErrorKind::Alpha)))),
296 ("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", Err(Error(NError::new("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", ErrorKind::Alpha)))),
297 ("\x00\x01\x02\u{80}", Err(Error(NError::new("\x00\x01\x02\u{80}", ErrorKind::Alpha)))),
298 ("\u{94}\u{100}", Err(Error(NError::new("\u{94}\u{100}", ErrorKind::Alpha)))),
299 ("", Err(Error(NError::new("", ErrorKind::Alpha))))
300 ]);
301 }
302
303 #[test]
304 fn space0_complete_test() {
305 run_tests(&complete::space0, &[
306 ("latin", Ok(("latin", ""))),
307 ("latin123", Ok(("latin123", ""))),
308 ("LATIN", Ok(("LATIN", ""))),
309 ("LATIN123", Ok(("LATIN123", ""))),
310 ("123", Ok(("123", ""))),
311 ("erfüllen", Ok(("erfüllen", ""))),
312 ("erfüllen123", Ok(("erfüllen123", ""))),
313 ("조선글", Ok(("조선글", ""))),
314 ("조선글123", Ok(("조선글123", ""))),
315 (" \t\n\x08", Ok(("\x08", " \t\n"))),
316 ("\u{200b}", Ok(("\u{200b}", ""))),
317 ("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", Ok(("\u{200b}", "\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}"))),
318 ("\x00\x01\x02\u{80}", Ok(("\x00\x01\x02\u{80}", ""))),
319 ("\u{94}\u{100}", Ok(("\u{94}\u{100}", ""))),
320 ("", Ok(("", "")))
321 ]);
322 }
323
324 #[test]
325 fn space1_complete_test() {
326 run_tests(&complete::space1, &[
327 ("latin", Err(Error(NError::new("latin", ErrorKind::Space)))),
328 ("latin123", Err(Error(NError::new("latin123", ErrorKind::Space)))),
329 ("LATIN", Err(Error(NError::new("LATIN", ErrorKind::Space)))),
330 ("LATIN123", Err(Error(NError::new("LATIN123", ErrorKind::Space)))),
331 ("123", Err(Error(NError::new("123", ErrorKind::Space)))),
332 ("erfüllen", Err(Error(NError::new("erfüllen", ErrorKind::Space)))),
333 ("erfüllen123", Err(Error(NError::new("erfüllen123", ErrorKind::Space)))),
334 ("조선글", Err(Error(NError::new("조선글", ErrorKind::Space)))),
335 ("조선글123", Err(Error(NError::new("조선글123", ErrorKind::Space)))),
336 (" \t\n\x08", Ok(("\x08", " \t\n"))),
337 ("\u{200b}", Err(Error(NError::new("\u{200b}", ErrorKind::Space)))),
338 ("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", Ok(("\u{200b}", "\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}"))),
339 ("\x00\x01\x02\u{80}", Err(Error(NError::new("\x00\x01\x02\u{80}", ErrorKind::Space)))),
340 ("\u{94}\u{100}", Err(Error(NError::new("\u{94}\u{100}", ErrorKind::Space)))),
341 ("", Err(Error(NError::new("", ErrorKind::Space))))
342 ]);
343 }
344
345 #[test]
346 fn alphanumeric0_complete_test() {
347 run_tests(&complete::alphanumeric0, &[
348 ("latin", Ok(("", "latin"))),
349 ("latin123", Ok(("", "latin123"))),
350 ("LATIN", Ok(("", "LATIN"))),
351 ("LATIN123", Ok(("", "LATIN123"))),
352 ("123", Ok(("", "123"))),
353 ("erfüllen", Ok(("", "erfüllen"))),
354 ("erfüllen123", Ok(("", "erfüllen123"))),
355 ("조선글", Ok(("", "조선글"))),
356 ("조선글123", Ok(("", "조선글123"))),
357 (" \t\n\x08", Ok((" \t\n\x08", ""))),
358 ("\u{200b}", Ok(("\u{200b}", ""))),
359 ("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", Ok(("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", ""))),
360 ("\x00\x01\x02\u{80}", Ok(("\x00\x01\x02\u{80}", ""))),
361 ("\u{94}\u{100}", Ok(("\u{94}\u{100}", ""))),
362 ("", Ok(("", "")))
363 ]);
364 }
365
366 #[test]
367 fn alphanumeric1_complete_test() {
368 run_tests(&complete::alphanumeric1, &[
369 ("latin", Ok(("", "latin"))),
370 ("latin123", Ok(("", "latin123"))),
371 ("LATIN", Ok(("", "LATIN"))),
372 ("LATIN123", Ok(("", "LATIN123"))),
373 ("123", Ok(("", "123"))),
374 ("erfüllen", Ok(("", "erfüllen"))),
375 ("erfüllen123", Ok(("", "erfüllen123"))),
376 ("조선글", Ok(("", "조선글"))),
377 ("조선글123", Ok(("", "조선글123"))),
378 (" \t\n\x08", Err(Error(NError::new(" \t\n\x08", ErrorKind::AlphaNumeric)))),
379 ("\u{200b}", Err(Error(NError::new("\u{200b}", ErrorKind::AlphaNumeric)))),
380 ("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", Err(Error(NError::new("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", ErrorKind::AlphaNumeric)))),
381 ("\x00\x01\x02\u{80}", Err(Error(NError::new("\x00\x01\x02\u{80}", ErrorKind::AlphaNumeric)))),
382 ("\u{94}\u{100}", Err(Error(NError::new("\u{94}\u{100}", ErrorKind::AlphaNumeric)))),
383 ("", Err(Error(NError::new("", ErrorKind::AlphaNumeric))))
384 ]);
385 }
386
387 #[test]
388 fn control0_complete_test() {
389 run_tests(&complete::control0, &[
390 ("latin", Ok(("latin", ""))),
391 ("latin123", Ok(("latin123", ""))),
392 ("LATIN", Ok(("LATIN", ""))),
393 ("LATIN123", Ok(("LATIN123", ""))),
394 ("123", Ok(("123", ""))),
395 ("erfüllen", Ok(("erfüllen", ""))),
396 ("erfüllen123", Ok(("erfüllen123", ""))),
397 ("조선글", Ok(("조선글", ""))),
398 ("조선글123", Ok(("조선글123", ""))),
399 (" \t\n\x08", Ok((" \t\n\x08", ""))),
400 ("\u{200b}", Ok(("\u{200b}", ""))),
401 ("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", Ok(("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", ""))),
402 ("\x00\x01\x02\u{80}", Ok(("", "\x00\x01\x02\u{80}"))),
403 ("\u{94}\u{100}", Ok(("\u{100}", "\u{94}"))),
404 ("", Ok(("", "")))
405 ]);
406 }
407
408 #[test]
409 fn control1_complete_test() {
410 run_tests(&complete::control1, &[
411 ("latin", Err(Error(NError::new("latin", ErrorKind::TakeWhile1)))),
412 ("latin123", Err(Error(NError::new("latin123", ErrorKind::TakeWhile1)))),
413 ("LATIN", Err(Error(NError::new("LATIN", ErrorKind::TakeWhile1)))),
414 ("LATIN123", Err(Error(NError::new("LATIN123", ErrorKind::TakeWhile1)))),
415 ("123", Err(Error(NError::new("123", ErrorKind::TakeWhile1)))),
416 ("erfüllen", Err(Error(NError::new("erfüllen", ErrorKind::TakeWhile1)))),
417 ("erfüllen123", Err(Error(NError::new("erfüllen123", ErrorKind::TakeWhile1)))),
418 ("조선글", Err(Error(NError::new("조선글", ErrorKind::TakeWhile1)))),
419 ("조선글123", Err(Error(NError::new("조선글123", ErrorKind::TakeWhile1)))),
420 (" \t\n\x08", Err(Error(NError::new(" \t\n\x08", ErrorKind::TakeWhile1)))),
421 ("\u{200b}", Err(Error(NError::new("\u{200b}", ErrorKind::TakeWhile1)))),
422 ("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", Err(Error(NError::new("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", ErrorKind::TakeWhile1)))),
423 ("\x00\x01\x02\u{80}", Ok(("", "\x00\x01\x02\u{80}"))),
424 ("\u{94}\u{100}", Ok(("\u{100}", "\u{94}"))),
425 ("", Err(Error(NError::new("", ErrorKind::TakeWhile1))))
426 ]);
427 }
428
429 #[test]
430 fn digit0_complete_test() {
431 run_tests(&complete::digit0, &[
432 ("latin", Ok(("latin", ""))),
433 ("latin123", Ok(("latin123", ""))),
434 ("LATIN", Ok(("LATIN", ""))),
435 ("LATIN123", Ok(("LATIN123", ""))),
436 ("123", Ok(("", "123"))),
437 ("erfüllen", Ok(("erfüllen", ""))),
438 ("erfüllen123", Ok(("erfüllen123", ""))),
439 ("조선글", Ok(("조선글", ""))),
440 ("조선글123", Ok(("조선글123", ""))),
441 (" \t\n\x08", Ok((" \t\n\x08", ""))),
442 ("\u{200b}", Ok(("\u{200b}", ""))),
443 ("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", Ok(("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", ""))),
444 ("\x00\x01\x02\u{80}", Ok(("\x00\x01\x02\u{80}", ""))),
445 ("\u{94}\u{100}", Ok(("\u{94}\u{100}", ""))),
446 ("", Ok(("", "")))
447 ]);
448 }
449
450 #[test]
451 fn digit1_complete_test() {
452 run_tests(&complete::digit1, &[
453 ("latin", Err(Error(NError::new("latin", ErrorKind::Digit)))),
454 ("latin123", Err(Error(NError::new("latin123", ErrorKind::Digit)))),
455 ("LATIN", Err(Error(NError::new("LATIN", ErrorKind::Digit)))),
456 ("LATIN123", Err(Error(NError::new("LATIN123", ErrorKind::Digit)))),
457 ("123", Ok(("", "123"))),
458 ("erfüllen", Err(Error(NError::new("erfüllen", ErrorKind::Digit)))),
459 ("erfüllen123", Err(Error(NError::new("erfüllen123", ErrorKind::Digit)))),
460 ("조선글", Err(Error(NError::new("조선글", ErrorKind::Digit)))),
461 ("조선글123", Err(Error(NError::new("조선글123", ErrorKind::Digit)))),
462 (" \t\n\x08", Err(Error(NError::new(" \t\n\x08", ErrorKind::Digit)))),
463 ("\u{200b}", Err(Error(NError::new("\u{200b}", ErrorKind::Digit)))),
464 ("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", Err(Error(NError::new("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", ErrorKind::Digit)))),
465 ("\x00\x01\x02\u{80}", Err(Error(NError::new("\x00\x01\x02\u{80}", ErrorKind::Digit)))),
466 ("\u{94}\u{100}", Err(Error(NError::new("\u{94}\u{100}", ErrorKind::Digit)))),
467 ("", Err(Error(NError::new("", ErrorKind::Digit))))
468 ]);
469 }
470
471 #[test]
472 fn ascii0_complete_test() {
473 run_tests(&complete::ascii0, &[
474 ("latin", Ok(("", "latin"))),
475 ("latin123", Ok(("", "latin123"))),
476 ("LATIN", Ok(("", "LATIN"))),
477 ("LATIN123", Ok(("", "LATIN123"))),
478 ("123", Ok(("", "123"))),
479 ("erfüllen", Ok(("üllen", "erf"))),
480 ("erfüllen123", Ok(("üllen123", "erf"))),
481 ("조선글", Ok(("조선글", ""))),
482 ("조선글123", Ok(("조선글123", ""))),
483 (" \t\n\x08", Ok(("", " \t\n\x08"))),
484 ("\u{200b}", Ok(("\u{200b}", ""))),
485 ("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", Ok(("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", ""))),
486 ("\x00\x01\x02\u{80}", Ok(("\u{80}", "\x00\x01\x02"))),
487 ("\u{94}\u{100}", Ok(("\u{94}\u{100}", ""))),
488 ("", Ok(("", "")))
489 ]);
490 }
491
492 #[test]
493 fn ascii1_complete_test() {
494 run_tests(&complete::ascii1, &[
495 ("latin", Ok(("", "latin"))),
496 ("latin123", Ok(("", "latin123"))),
497 ("LATIN", Ok(("", "LATIN"))),
498 ("LATIN123", Ok(("", "LATIN123"))),
499 ("123", Ok(("", "123"))),
500 ("erfüllen", Ok(("üllen", "erf"))),
501 ("erfüllen123", Ok(("üllen123", "erf"))),
502 ("조선글", Err(Error(NError::new("조선글", ErrorKind::TakeWhile1)))),
503 ("조선글123", Err(Error(NError::new("조선글123", ErrorKind::TakeWhile1)))),
504 (" \t\n\x08", Ok(("", " \t\n\x08"))),
505 ("\u{200b}", Err(Error(NError::new("\u{200b}", ErrorKind::TakeWhile1)))),
506 ("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", Err(Error(NError::new("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", ErrorKind::TakeWhile1)))),
507 ("\x00\x01\x02\u{80}", Ok(("\u{80}", "\x00\x01\x02"))),
508 ("\u{94}\u{100}", Err(Error(NError::new("\u{94}\u{100}", ErrorKind::TakeWhile1)))),
509 ("", Err(Error(NError::new("", ErrorKind::TakeWhile1))))
510 ]);
511 }
512
513 #[test]
516 fn alpha0_streaming_test() {
517 let one = NonZeroUsize::new(1).unwrap();
518 run_tests(&streaming::alpha0, &[
519 ("latin", Err(Incomplete(Size(one)))),
520 ("latin123", Ok(("123", "latin"))),
521 ("LATIN", Err(Incomplete(Size(one)))),
522 ("LATIN123", Ok(("123", "LATIN"))),
523 ("123", Ok(("123", ""))),
524 ("erfüllen", Err(Incomplete(Size(one)))),
525 ("erfüllen123", Ok(("123", "erfüllen"))),
526 ("조선글", Err(Incomplete(Size(one)))),
527 ("조선글123", Ok(("123", "조선글"))),
528 (" \t\n\x08", Ok((" \t\n\x08", ""))),
529 ("\u{200b}", Ok(("\u{200b}", ""))),
530 ("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", Ok(("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", ""))),
531 ("\x00\x01\x02\u{80}", Ok(("\x00\x01\x02\u{80}", ""))),
532 ("\u{94}\u{100}", Ok(("\u{94}\u{100}", ""))),
533 ("", Err(Incomplete(Size(one))))
534 ]);
535 }
536
537 #[test]
538 fn alpha1_streaming_test() {
539 let one = NonZeroUsize::new(1).unwrap();
540 run_tests(&streaming::alpha1, &[
541 ("latin", Err(Incomplete(Size(one)))),
542 ("latin123", Ok(("123", "latin"))),
543 ("LATIN", Err(Incomplete(Size(one)))),
544 ("LATIN123", Ok(("123", "LATIN"))),
545 ("123", Err(Error(NError::new("123", ErrorKind::Alpha)))),
546 ("erfüllen", Err(Incomplete(Size(one)))),
547 ("erfüllen123", Ok(("123", "erfüllen"))),
548 ("조선글", Err(Incomplete(Size(one)))),
549 ("조선글123", Ok(("123", "조선글"))),
550 (" \t\n\x08", Err(Error(NError::new(" \t\n\x08", ErrorKind::Alpha)))),
551 ("\u{200b}", Err(Error(NError::new("\u{200b}", ErrorKind::Alpha)))),
552 ("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", Err(Error(NError::new("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", ErrorKind::Alpha)))),
553 ("\x00\x01\x02\u{80}", Err(Error(NError::new("\x00\x01\x02\u{80}", ErrorKind::Alpha)))),
554 ("\u{94}\u{100}", Err(Error(NError::new("\u{94}\u{100}", ErrorKind::Alpha)))),
555 ("", Err(Incomplete(Size(one))))
556
557 ]);
558 }
559
560 #[test]
561 fn lower0_streaming_test() {
562 let one = NonZeroUsize::new(1).unwrap();
563 run_tests(&streaming::lower0, &[
564 ("latin", Err(Incomplete(Size(one)))),
565 ("latin123", Ok(("123", "latin"))),
566 ("LATIN", Ok(("LATIN", ""))),
567 ("LATIN123", Ok(("LATIN123", ""))),
568 ("123", Ok(("123", ""))),
569 ("erfüllen", Err(Incomplete(Size(one)))),
570 ("erfüllen123", Ok(("123", "erfüllen"))),
571 ("조선글", Ok(("조선글", ""))),
572 ("조선글123", Ok(("조선글123", ""))),
573 (" \t\n\x08", Ok((" \t\n\x08", ""))),
574 ("\u{200b}", Ok(("\u{200b}", ""))),
575 ("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", Ok(("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", ""))),
576 ("\x00\x01\x02\u{80}", Ok(("\x00\x01\x02\u{80}", ""))),
577 ("\u{94}\u{100}", Ok(("\u{94}\u{100}", ""))),
578 ("", Err(Incomplete(Size(one))))
579 ]);
580 }
581
582 #[test]
583 fn lower1_streaming_test() {
584 let one = NonZeroUsize::new(1).unwrap();
585 run_tests(&streaming::lower1, &[
586 ("latin", Err(Incomplete(Size(one)))),
587 ("latin123", Ok(("123", "latin"))),
588 ("LATIN", Err(Error(NError::new("LATIN", ErrorKind::Alpha)))),
589 ("LATIN123", Err(Error(NError::new("LATIN123", ErrorKind::Alpha)))),
590 ("123", Err(Error(NError::new("123", ErrorKind::Alpha)))),
591 ("erfüllen", Err(Incomplete(Size(one)))),
592 ("erfüllen123", Ok(("123", "erfüllen"))),
593 ("조선글", Err(Error(NError::new("조선글", ErrorKind::Alpha)))),
594 ("조선글123", Err(Error(NError::new("조선글123", ErrorKind::Alpha)))),
595 (" \t\n\x08", Err(Error(NError::new(" \t\n\x08", ErrorKind::Alpha)))),
596 ("\u{200b}", Err(Error(NError::new("\u{200b}", ErrorKind::Alpha)))),
597 ("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", Err(Error(NError::new("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", ErrorKind::Alpha)))),
598 ("\x00\x01\x02\u{80}", Err(Error(NError::new("\x00\x01\x02\u{80}", ErrorKind::Alpha)))),
599 ("\u{94}\u{100}", Err(Error(NError::new("\u{94}\u{100}", ErrorKind::Alpha)))),
600 ("", Err(Incomplete(Size(one))))
601 ]);
602 }
603
604 #[test]
605 fn upper0_streaming_test() {
606 let one = NonZeroUsize::new(1).unwrap();
607 run_tests(&streaming::upper0, &[
608 ("latin", Ok(("latin", ""))),
609 ("latin123", Ok(("latin123", ""))),
610 ("LATIN", Err(Incomplete(Size(one)))),
611 ("LATIN123", Ok(("123", "LATIN"))),
612 ("123", Ok(("123", ""))),
613 ("erfüllen", Ok(("erfüllen", ""))),
614 ("erfüllen123", Ok(("erfüllen123", ""))),
615 ("조선글", Ok(("조선글", ""))),
616 ("조선글123", Ok(("조선글123", ""))),
617 (" \t\n\x08", Ok((" \t\n\x08", ""))),
618 ("\u{200b}", Ok(("\u{200b}", ""))),
619 ("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", Ok(("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", ""))),
620 ("\x00\x01\x02\u{80}", Ok(("\x00\x01\x02\u{80}", ""))),
621 ("\u{94}\u{100}", Ok(("\u{94}\u{100}", ""))),
622 ("", Err(Incomplete(Size(one))))
623 ]);
624 }
625
626 #[test]
627 fn upper1_streaming_test() {
628 let one = NonZeroUsize::new(1).unwrap();
629 run_tests(&streaming::upper1, &[
630 ("latin", Err(Error(NError::new("latin", ErrorKind::Alpha)))),
631 ("latin123", Err(Error(NError::new("latin123", ErrorKind::Alpha)))),
632 ("LATIN", Err(Incomplete(Size(one)))),
633 ("LATIN123", Ok(("123", "LATIN"))),
634 ("123", Err(Error(NError::new("123", ErrorKind::Alpha)))),
635 ("erfüllen", Err(Error(NError::new("erfüllen", ErrorKind::Alpha)))),
636 ("erfüllen123", Err(Error(NError::new("erfüllen123", ErrorKind::Alpha)))),
637 ("조선글", Err(Error(NError::new("조선글", ErrorKind::Alpha)))),
638 ("조선글123", Err(Error(NError::new("조선글123", ErrorKind::Alpha)))),
639 (" \t\n\x08", Err(Error(NError::new(" \t\n\x08", ErrorKind::Alpha)))),
640 ("\u{200b}", Err(Error(NError::new("\u{200b}", ErrorKind::Alpha)))),
641 ("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", Err(Error(NError::new("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", ErrorKind::Alpha)))),
642 ("\x00\x01\x02\u{80}", Err(Error(NError::new("\x00\x01\x02\u{80}", ErrorKind::Alpha)))),
643 ("\u{94}\u{100}", Err(Error(NError::new("\u{94}\u{100}", ErrorKind::Alpha)))),
644 ("", Err(Incomplete(Size(one))))
645 ]);
646 }
647
648 #[test]
649 fn space0_streaming_test() {
650 let one = NonZeroUsize::new(1).unwrap();
651 run_tests(&streaming::space0, &[
652 ("latin", Ok(("latin", ""))),
653 ("latin123", Ok(("latin123", ""))),
654 ("LATIN", Ok(("LATIN", ""))),
655 ("LATIN123", Ok(("LATIN123", ""))),
656 ("123", Ok(("123", ""))),
657 ("erfüllen", Ok(("erfüllen", ""))),
658 ("erfüllen123", Ok(("erfüllen123", ""))),
659 ("조선글", Ok(("조선글", ""))),
660 ("조선글123", Ok(("조선글123", ""))),
661 (" \t\n\x08", Ok(("\x08", " \t\n"))),
662 ("\u{200b}", Ok(("\u{200b}", ""))),
663 ("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", Ok(("\u{200b}", "\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}"))),
664 ("\x00\x01\x02\u{80}", Ok(("\x00\x01\x02\u{80}", ""))),
665 ("\u{94}\u{100}", Ok(("\u{94}\u{100}", ""))),
666 ("", Err(Incomplete(Size(one))))
667 ]);
668 }
669
670 #[test]
671 fn space1_streaming_test() {
672 let one = NonZeroUsize::new(1).unwrap();
673 run_tests(&streaming::space1, &[
674 ("latin", Err(Error(NError::new("latin", ErrorKind::Space)))),
675 ("latin123", Err(Error(NError::new("latin123", ErrorKind::Space)))),
676 ("LATIN", Err(Error(NError::new("LATIN", ErrorKind::Space)))),
677 ("LATIN123", Err(Error(NError::new("LATIN123", ErrorKind::Space)))),
678 ("123", Err(Error(NError::new("123", ErrorKind::Space)))),
679 ("erfüllen", Err(Error(NError::new("erfüllen", ErrorKind::Space)))),
680 ("erfüllen123", Err(Error(NError::new("erfüllen123", ErrorKind::Space)))),
681 ("조선글", Err(Error(NError::new("조선글", ErrorKind::Space)))),
682 ("조선글123", Err(Error(NError::new("조선글123", ErrorKind::Space)))),
683 (" \t\n\x08", Ok(("\x08", " \t\n"))),
684 ("\u{200b}", Err(Error(NError::new("\u{200b}", ErrorKind::Space)))),
685 ("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", Ok(("\u{200b}", "\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}"))),
686 ("\x00\x01\x02\u{80}", Err(Error(NError::new("\x00\x01\x02\u{80}", ErrorKind::Space)))),
687 ("\u{94}\u{100}", Err(Error(NError::new("\u{94}\u{100}", ErrorKind::Space)))),
688 ("", Err(Incomplete(Size(one))))
689 ]);
690 }
691
692 #[test]
693 fn alphanumeric0_streaming_test() {
694 let one = NonZeroUsize::new(1).unwrap();
695 run_tests(&streaming::alphanumeric0, &[
696 ("latin", Err(Incomplete(Size(one)))),
697 ("latin123", Err(Incomplete(Size(one)))),
698 ("LATIN", Err(Incomplete(Size(one)))),
699 ("LATIN123", Err(Incomplete(Size(one)))),
700 ("123", Err(Incomplete(Size(one)))),
701 ("erfüllen", Err(Incomplete(Size(one)))),
702 ("erfüllen123", Err(Incomplete(Size(one)))),
703 ("조선글", Err(Incomplete(Size(one)))),
704 ("조선글123", Err(Incomplete(Size(one)))),
705 (" \t\n\x08", Ok((" \t\n\x08", ""))),
706 ("\u{200b}", Ok(("\u{200b}", ""))),
707 ("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", Ok(("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", ""))),
708 ("\x00\x01\x02\u{80}", Ok(("\x00\x01\x02\u{80}", ""))),
709 ("\u{94}\u{100}", Ok(("\u{94}\u{100}", ""))),
710 ("", Err(Incomplete(Size(one))))
711 ]);
712 }
713
714 #[test]
715 fn alphanumeric1_streaming_test() {
716 let one = NonZeroUsize::new(1).unwrap();
717 run_tests(&streaming::alphanumeric1, &[
718 ("latin", Err(Incomplete(Size(one)))),
719 ("latin123", Err(Incomplete(Size(one)))),
720 ("LATIN", Err(Incomplete(Size(one)))),
721 ("LATIN123", Err(Incomplete(Size(one)))),
722 ("123", Err(Incomplete(Size(one)))),
723 ("erfüllen", Err(Incomplete(Size(one)))),
724 ("erfüllen123", Err(Incomplete(Size(one)))),
725 ("조선글", Err(Incomplete(Size(one)))),
726 ("조선글123", Err(Incomplete(Size(one)))),
727 (" \t\n\x08", Err(Error(NError::new(" \t\n\x08", ErrorKind::AlphaNumeric)))),
728 ("\u{200b}", Err(Error(NError::new("\u{200b}", ErrorKind::AlphaNumeric)))),
729 ("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", Err(Error(NError::new("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", ErrorKind::AlphaNumeric)))),
730 ("\x00\x01\x02\u{80}", Err(Error(NError::new("\x00\x01\x02\u{80}", ErrorKind::AlphaNumeric)))),
731 ("\u{94}\u{100}", Err(Error(NError::new("\u{94}\u{100}", ErrorKind::AlphaNumeric)))),
732 ("", Err(Incomplete(Size(one))))
733
734 ]);
735 }
736
737 #[test]
738 fn control0_streaming_test() {
739 let one = NonZeroUsize::new(1).unwrap();
740 run_tests(&streaming::control0, &[
741 ("latin", Ok(("latin", ""))),
742 ("latin123", Ok(("latin123", ""))),
743 ("LATIN", Ok(("LATIN", ""))),
744 ("LATIN123", Ok(("LATIN123", ""))),
745 ("123", Ok(("123", ""))),
746 ("erfüllen", Ok(("erfüllen", ""))),
747 ("erfüllen123", Ok(("erfüllen123", ""))),
748 ("조선글", Ok(("조선글", ""))),
749 ("조선글123", Ok(("조선글123", ""))),
750 (" \t\n\x08", Ok((" \t\n\x08", ""))),
751 ("\u{200b}", Ok(("\u{200b}", ""))),
752 ("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", Ok(("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", ""))),
753 ("\x00\x01\x02\u{80}", Err(Incomplete(Size(one)))),
754 ("\u{94}\u{100}", Ok(("\u{100}", "\u{94}"))),
755 ("", Err(Incomplete(Size(one))))
756 ]);
757 }
758
759 #[test]
760 fn control1_streaming_test() {
761 let one = NonZeroUsize::new(1).unwrap();
762 run_tests(&streaming::control1, &[
763 ("latin", Err(Error(NError::new("latin", ErrorKind::TakeWhile1)))),
764 ("latin123", Err(Error(NError::new("latin123", ErrorKind::TakeWhile1)))),
765 ("LATIN", Err(Error(NError::new("LATIN", ErrorKind::TakeWhile1)))),
766 ("LATIN123", Err(Error(NError::new("LATIN123", ErrorKind::TakeWhile1)))),
767 ("123", Err(Error(NError::new("123", ErrorKind::TakeWhile1)))),
768 ("erfüllen", Err(Error(NError::new("erfüllen", ErrorKind::TakeWhile1)))),
769 ("erfüllen123", Err(Error(NError::new("erfüllen123", ErrorKind::TakeWhile1)))),
770 ("조선글", Err(Error(NError::new("조선글", ErrorKind::TakeWhile1)))),
771 ("조선글123", Err(Error(NError::new("조선글123", ErrorKind::TakeWhile1)))),
772 (" \t\n\x08", Err(Error(NError::new(" \t\n\x08", ErrorKind::TakeWhile1)))),
773 ("\u{200b}", Err(Error(NError::new("\u{200b}", ErrorKind::TakeWhile1)))),
774 ("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", Err(Error(NError::new("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", ErrorKind::TakeWhile1)))),
775 ("\x00\x01\x02\u{80}", Err(Incomplete(Size(one)))),
776 ("\u{94}\u{100}", Ok(("\u{100}", "\u{94}"))),
777 ("", Err(Incomplete(Size(one))))
778 ]);
779 }
780
781 #[test]
782 fn digit0_streaming_test() {
783 let one = NonZeroUsize::new(1).unwrap();
784 run_tests(&streaming::digit0, &[
785 ("latin", Ok(("latin", ""))),
786 ("latin123", Ok(("latin123", ""))),
787 ("LATIN", Ok(("LATIN", ""))),
788 ("LATIN123", Ok(("LATIN123", ""))),
789 ("123", Err(Incomplete(Size(one)))),
790 ("erfüllen", Ok(("erfüllen", ""))),
791 ("erfüllen123", Ok(("erfüllen123", ""))),
792 ("조선글", Ok(("조선글", ""))),
793 ("조선글123", Ok(("조선글123", ""))),
794 (" \t\n\x08", Ok((" \t\n\x08", ""))),
795 ("\u{200b}", Ok(("\u{200b}", ""))),
796 ("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", Ok(("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", ""))),
797 ("\x00\x01\x02\u{80}", Ok(("\x00\x01\x02\u{80}", ""))),
798 ("\u{94}\u{100}", Ok(("\u{94}\u{100}", ""))),
799 ("", Err(Incomplete(Size(one))))
800 ]);
801 }
802
803 #[test]
804 fn digit1_streaming_test() {
805 let one = NonZeroUsize::new(1).unwrap();
806 run_tests(&streaming::digit1, &[
807 ("latin", Err(Error(NError::new("latin", ErrorKind::Digit)))),
808 ("latin123", Err(Error(NError::new("latin123", ErrorKind::Digit)))),
809 ("LATIN", Err(Error(NError::new("LATIN", ErrorKind::Digit)))),
810 ("LATIN123", Err(Error(NError::new("LATIN123", ErrorKind::Digit)))),
811 ("123", Err(Incomplete(Size(one)))),
812 ("erfüllen", Err(Error(NError::new("erfüllen", ErrorKind::Digit)))),
813 ("erfüllen123", Err(Error(NError::new("erfüllen123", ErrorKind::Digit)))),
814 ("조선글", Err(Error(NError::new("조선글", ErrorKind::Digit)))),
815 ("조선글123", Err(Error(NError::new("조선글123", ErrorKind::Digit)))),
816 (" \t\n\x08", Err(Error(NError::new(" \t\n\x08", ErrorKind::Digit)))),
817 ("\u{200b}", Err(Error(NError::new("\u{200b}", ErrorKind::Digit)))),
818 ("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", Err(Error(NError::new("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", ErrorKind::Digit)))),
819 ("\x00\x01\x02\u{80}", Err(Error(NError::new("\x00\x01\x02\u{80}", ErrorKind::Digit)))),
820 ("\u{94}\u{100}", Err(Error(NError::new("\u{94}\u{100}", ErrorKind::Digit)))),
821 ("", Err(Incomplete(Size(one))))
822 ]);
823 }
824
825 #[test]
826 fn ascii0_streaming_test() {
827 let one = NonZeroUsize::new(1).unwrap();
828 run_tests(&streaming::ascii0, &[
829 ("latin", Err(Incomplete(Size(one)))),
830 ("latin123", Err(Incomplete(Size(one)))),
831 ("LATIN", Err(Incomplete(Size(one)))),
832 ("LATIN123", Err(Incomplete(Size(one)))),
833 ("123", Err(Incomplete(Size(one)))),
834 ("erfüllen", Ok(("üllen", "erf"))),
835 ("erfüllen123", Ok(("üllen123", "erf"))),
836 ("조선글", Ok(("조선글", ""))),
837 ("조선글123", Ok(("조선글123", ""))),
838 (" \t\n\x08", Err(Incomplete(Size(one)))),
839 ("\u{200b}", Ok(("\u{200b}", ""))),
840 ("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", Ok(("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", ""))),
841 ("\x00\x01\x02\u{80}", Ok(("\u{80}", "\x00\x01\x02"))),
842 ("\u{94}\u{100}", Ok(("\u{94}\u{100}", ""))),
843 ("", Err(Incomplete(Size(one))))
844 ]);
845 }
846
847 #[test]
848 fn ascii1_streaming_test() {
849 let one = NonZeroUsize::new(1).unwrap();
850 run_tests(&streaming::ascii1, &[
851 ("latin", Err(Incomplete(Size(one)))),
852 ("latin123", Err(Incomplete(Size(one)))),
853 ("LATIN", Err(Incomplete(Size(one)))),
854 ("LATIN123", Err(Incomplete(Size(one)))),
855 ("123", Err(Incomplete(Size(one)))),
856 ("erfüllen", Ok(("üllen", "erf"))),
857 ("erfüllen123", Ok(("üllen123", "erf"))),
858 ("조선글", Err(Error(NError::new("조선글", ErrorKind::TakeWhile1)))),
859 ("조선글123", Err(Error(NError::new("조선글123", ErrorKind::TakeWhile1)))),
860 (" \t\n\x08", Err(Incomplete(Size(one)))),
861 ("\u{200b}", Err(Error(NError::new("\u{200b}", ErrorKind::TakeWhile1)))),
862 ("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", Err(Error(NError::new("\u{1680}\u{200a}\u{2028}\u{202f}\u{205f}\u{3000}\u{200b}", ErrorKind::TakeWhile1)))),
863 ("\x00\x01\x02\u{80}", Ok(("\u{80}", "\x00\x01\x02"))),
864 ("\u{94}\u{100}", Err(Error(NError::new("\u{94}\u{100}", ErrorKind::TakeWhile1)))),
865 ("", Err(Incomplete(Size(one))))
866 ]);
867 }
868}