Skip to content

Commit f5c7d57

Browse files
author
Robert Durfee
committed
slightly more complicated test
1 parent d7f3024 commit f5c7d57

File tree

1 file changed

+64
-1
lines changed

1 file changed

+64
-1
lines changed

src/lib.rs

+64-1
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ pub fn compile<T: Copy + Ord>(productions: &Map<RE, Option<T>>) -> Result<DFA<Se
190190

191191
#[cfg(test)]
192192
mod tests {
193-
use regular_expression::{sym, rep, cat};
193+
use regular_expression::{sym, rep, cat, alt};
194194

195195
use crate::{Result, lex, compile};
196196

@@ -249,4 +249,67 @@ mod tests {
249249
assert_eq!(expected, actual?);
250250
Ok(())
251251
}
252+
253+
#[test]
254+
fn test_4() -> Result<()> {
255+
#[derive(Clone, Copy, Debug, Eq, Ord, PartialEq, PartialOrd)]
256+
#[allow(non_camel_case_types)]
257+
#[allow(dead_code)]
258+
enum Token {
259+
PRODUCTION_OPERATOR,
260+
TOKEN,
261+
SEMICOLON,
262+
VERTICAL_BAR,
263+
ASTERISK,
264+
PLUS_SIGN,
265+
QUESTION_MARK,
266+
CARET,
267+
DOLLAR_SIGN,
268+
FULL_STOP,
269+
LEFT_PARENTHESIS,
270+
RIGHT_PARENTHESIS,
271+
LEFT_SQUARE_BRACKET,
272+
RIGHT_SQUARE_BRACKET,
273+
HYPHEN,
274+
UNESCAPED_LITERAL,
275+
ESCAPED_LITERAL,
276+
CONTROL_LITERAL,
277+
OCTAL_LITERAL,
278+
HEXADECIMAL_LITERAL,
279+
UNICODE_LITERAL,
280+
LEFT_CURLY_BRACKET,
281+
RIGHT_CURLY_BRACKET,
282+
COMMA,
283+
INTEGER,
284+
};
285+
use Token::*;
286+
let expected = vec![UNESCAPED_LITERAL, UNESCAPED_LITERAL, UNESCAPED_LITERAL, PRODUCTION_OPERATOR, TOKEN, SEMICOLON];
287+
let actual = lex("abc => ABC;", &compile(&map![
288+
cat![sym!('='), sym!('>')] => Some(PRODUCTION_OPERATOR),
289+
cat![alt![sym!('A'), sym!('B'), sym!('C') /* ... */], rep!(alt![sym!('A'), sym!('B'), sym!('C') /* ... */])] => Some(TOKEN),
290+
sym!(';') => Some(SEMICOLON),
291+
sym!('|') => Some(VERTICAL_BAR),
292+
sym!('*') => Some(ASTERISK),
293+
sym!('+') => Some(PLUS_SIGN),
294+
sym!('?') => Some(QUESTION_MARK),
295+
sym!('^') => Some(CARET),
296+
sym!('$') => Some(DOLLAR_SIGN),
297+
sym!('.') => Some(FULL_STOP),
298+
sym!('(') => Some(LEFT_PARENTHESIS),
299+
sym!(')') => Some(RIGHT_PARENTHESIS),
300+
sym!('[') => Some(LEFT_SQUARE_BRACKET),
301+
sym!(']') => Some(RIGHT_SQUARE_BRACKET),
302+
sym!('-') => Some(HYPHEN),
303+
alt![sym!('a'), sym!('b'), sym!('c') /* ... */] => Some(UNESCAPED_LITERAL),
304+
cat![sym!('\\'), alt![sym!('.'), sym!('^'), sym!('$') /* ... */]] => Some(ESCAPED_LITERAL),
305+
cat![sym!('\\'), alt![sym!('n'), sym!('r'), sym!('t') /* ... */]] => Some(CONTROL_LITERAL),
306+
sym!('{') => Some(LEFT_CURLY_BRACKET),
307+
sym!('}') => Some(RIGHT_CURLY_BRACKET),
308+
sym!(',') => Some(COMMA),
309+
cat![alt![sym!('0'), sym!('1'), sym!('2') /* ... */], rep!(alt![sym!('1'), sym!('2'), sym!('3') /* ... */])] => Some(INTEGER),
310+
rep!(sym!(' ')) => None
311+
])?);
312+
assert_eq!(expected, actual?);
313+
Ok(())
314+
}
252315
}

0 commit comments

Comments
 (0)