1pub mod chars;
3pub mod codebase;
5pub mod token_reader;
7
8pub use codebase::Codebase;
9pub use token_reader::TokenReader;
10
11#[cfg(test)]
12mod tests {
13 use super::*;
14
15 #[test]
16 fn test_character_buffer() {
17 let data = "Awesome\ndemo";
18 let mut source = TokenReader::new(std::rc::Rc::from(data));
19 assert_eq!(source.peek_char(), Some('A'));
20 assert_eq!(source.next_char(), Some('A'));
21 assert_eq!(source.next_char_if(|char| char == 'e'), None);
22 source.next_char();
23 assert_eq!(source.next_char_if(|char| char == 'e'), Some('e'));
24 assert_eq!(source.cursor, 2);
25 for _ in 0..5 {
26 source.next_char();
27 }
28 assert_eq!(source.cursor, 7);
29 assert_eq!(source.next_token(char::is_alphabetic, '1'), "1demo");
30 assert_eq!(source.peek_char(), None);
31 assert_eq!(source.next_char(), None);
32 }
33
34 #[test]
35 fn test_chars() {
36 assert!(chars::is_whitespace(' '));
37 assert!(chars::is_whitespace('\n'));
38 assert!(chars::is_whitespace('\t'));
39 assert!(chars::is_whitespace('\r'));
40
41 assert!(!chars::is_whitespace('a'));
42 assert!(!chars::is_whitespace('_'));
43
44 assert!(chars::is_ident_start('D'));
45 assert!(chars::is_ident_start('f'));
46 assert!(chars::is_ident_start('_'));
47
48 assert!(!chars::is_ident_start('!'));
49 assert!(!chars::is_ident_start(' '));
50 assert!(!chars::is_ident_start('4'));
51
52 assert!(chars::is_ident_continue('D'));
53 assert!(chars::is_ident_continue('f'));
54 assert!(chars::is_ident_continue('_'));
55 assert!(chars::is_ident_continue('4'));
56
57 assert!(!chars::is_ident_continue('!'));
58 assert!(!chars::is_ident_continue(' '));
59
60 #[cfg(feature = "xid")]
61 {
62 assert!(chars::is_ident_start('Ф'));
63 assert!(chars::is_ident_start('ф'));
64 assert!(chars::is_ident_start('\u{1000d}'));
65 assert!(chars::is_ident_start('\u{10026}'));
66
67 assert!(!chars::is_ident_start('\u{02c2}'));
68 assert!(!chars::is_ident_start('\u{ffff}'));
69
70 assert!(chars::is_ident_continue('\u{1000d}'));
71 assert!(chars::is_ident_continue('\u{10026}'));
72
73 assert!(!chars::is_ident_continue('\u{02c2}'));
74 assert!(!chars::is_ident_continue('\u{ffff}'));
75 }
76
77 assert!(chars::is_digit('0'));
78 assert!(chars::is_digit('4'));
79 assert!(chars::is_digit('8'));
80 assert!(!chars::is_digit('s'));
81 assert!(!chars::is_digit(' '));
82 assert!(!chars::is_digit('/'));
83
84 assert!(chars::is_bindigit('0'));
85 assert!(chars::is_bindigit('1'));
86 assert!(!chars::is_bindigit('2'));
87 assert!(!chars::is_bindigit(' '));
88 assert!(!chars::is_bindigit('/'));
89
90 assert!(chars::is_hexdigit('3'));
91 assert!(chars::is_hexdigit('f'));
92 assert!(chars::is_hexdigit('F'));
93 assert!(!chars::is_hexdigit('g'));
94 assert!(!chars::is_hexdigit(' '));
95 assert!(!chars::is_hexdigit('/'));
96
97 assert!(chars::is_octdigit('0'));
98 assert!(chars::is_octdigit('4'));
99 assert!(chars::is_octdigit('7'));
100 assert!(!chars::is_octdigit('8'));
101 assert!(!chars::is_octdigit('f'));
102 assert!(!chars::is_octdigit('/'));
103 }
104}