diff options
author | Greg Brown <gmb60@cam.ac.uk> | 2021-05-06 19:40:59 +0100 |
---|---|---|
committer | Greg Brown <gmb60@cam.ac.uk> | 2021-05-06 19:40:59 +0100 |
commit | dfc08ff2c6580bbeb3951b223e0332546ba3b0d9 (patch) | |
tree | 60597dd9492b9c2dfa10ea610289f143dd3e41b7 /autochomp/tests | |
parent | ef485d6f3e4df6e1a424ba3797388fa0bba6eb2e (diff) |
Introduce lambda expressions.
Diffstat (limited to 'autochomp/tests')
-rw-r--r-- | autochomp/tests/compare/main.rs | 39 | ||||
l--------- | autochomp/tests/compare/nibble | 1 | ||||
-rw-r--r-- | autochomp/tests/compare/nibble_exp.nb | 44 | ||||
-rw-r--r-- | autochomp/tests/compare/ratata.nb | 3 | ||||
-rw-r--r-- | autochomp/tests/compare/regex.nb | 5 | ||||
-rw-r--r-- | autochomp/tests/compare/regex_fix.nb | 4 | ||||
-rw-r--r-- | autochomp/tests/compare/sheep.nb | 3 |
7 files changed, 27 insertions, 72 deletions
diff --git a/autochomp/tests/compare/main.rs b/autochomp/tests/compare/main.rs index 681014a..112f642 100644 --- a/autochomp/tests/compare/main.rs +++ b/autochomp/tests/compare/main.rs @@ -1,26 +1,39 @@ use chewed::{IterWrapper, Parser}; -use chomp::{chomp::ast::{Function, NamedExpression}, nibble}; +use chomp::{ + chomp::ast::NamedExpression, + nibble::{ + self, + convert::{Context, Convert}, + }, +}; -fn chomp(input: &str) -> (Vec<Function>, NamedExpression) { - syn::parse_str::<nibble::File>(&input).unwrap().convert().unwrap() +fn chomp(input: &str) -> NamedExpression { + syn::parse_str::<nibble::Statement>(&input) + .unwrap() + .convert(&mut Context::default()) + .unwrap() } -fn autonibble(input: &str) -> (Vec<Function>, NamedExpression) { - IterWrapper::new(input.chars()).parse::<autochomp::Ast>().unwrap().convert().unwrap() +fn autonibble(input: &str) -> NamedExpression { + IterWrapper::new(input.chars()) + .parse::<autochomp::Ast>() + .unwrap() + .convert(&mut Context::default()) + .unwrap() } macro_rules! compare { - ($name:ident, $file:literal) => { - #[test] + ($name:ident, $file:literal) => { + #[test] fn $name() { let input = include_str!($file); assert_eq!(chomp(input), autonibble(input)) } - }; + }; } -compare!(compare_sheep, "sheep.nb"); -compare!(compare_ratata, "ratata.nb"); -compare!(compare_regex, "regex.nb"); -compare!(compare_regex_fix, "regex_fix.nb"); -compare!(compare_nibble, "nibble_exp.nb"); +compare!(compare_sheep, "nibble/sheep.nb"); +compare!(compare_ratata, "nibble/ratata.nb"); +compare!(compare_regex, "nibble/regex.nb"); +compare!(compare_regex_fix, "nibble/regex_fix.nb"); +compare!(compare_nibble, "nibble/nibble_exp.nb"); diff --git a/autochomp/tests/compare/nibble b/autochomp/tests/compare/nibble new file mode 120000 index 0000000..bfe7e8e --- /dev/null +++ b/autochomp/tests/compare/nibble @@ -0,0 +1 @@ +../../../tests/full/nibble
\ No newline at end of file diff --git a/autochomp/tests/compare/nibble_exp.nb b/autochomp/tests/compare/nibble_exp.nb deleted file mode 100644 index 6e6d8b5..0000000 --- a/autochomp/tests/compare/nibble_exp.nb +++ /dev/null @@ -1,44 +0,0 @@ -let opt(x) = _ | x; -let plus(x) = [plus](x . opt(plus)); -let star(x) = [star](opt(x . star)); - -let Pattern_Whitespace = "\n"|" "; - -let XID_Start = - "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | - "i" | "j" | "k" | "l" | "m" | "n" | "o" | "p" | - "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | - "y" | "z" | - "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | - "I" | "J" | "K" | "L" | "M" | "N" | "O" | "P" | - "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | - "Y" | "Z" ; -let XID_Continue = - XID_Start | "_" | "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ; - -let literal_char = XID_Continue; - -let ws = star(Pattern_Whitespace); -let must_ws = plus(Pattern_Whitespace); - -let punctuated(x, p) = [rec](x . opt(p . ws . rec)); -let list(x) = "(" . ws . [rec](x . opt("," . ws . opt(rec))) . ")"; - -let epsilon = "_"; -let ident = XID_Start . star(XID_Continue); -let literal = "\"" . plus(literal_char) . "\""; -let parens(expr) = "(" . ws . expr . ")"; -let fix(expr) = "[" . ws . ident . ws . "]" . ws . parens(expr); - -let term(expr) = - epsilon . ws - | literal . ws - | parens(expr) . ws - | fix(expr) . ws - | ident . ws . opt(list(expr) . ws) - ; - -let cat(expr) = punctuated(term(expr), "."); -let alt(expr) = punctuated(cat(expr), "|"); -let expr = [expr](alt(expr)); -match expr;
\ No newline at end of file diff --git a/autochomp/tests/compare/ratata.nb b/autochomp/tests/compare/ratata.nb deleted file mode 100644 index 2cf7cd9..0000000 --- a/autochomp/tests/compare/ratata.nb +++ /dev/null @@ -1,3 +0,0 @@ -let opt(x) = _ | x; -let plus(x) = [rec](x . opt(rec)); -match plus(("r" | "t") . "a"); diff --git a/autochomp/tests/compare/regex.nb b/autochomp/tests/compare/regex.nb deleted file mode 100644 index ad37f3b..0000000 --- a/autochomp/tests/compare/regex.nb +++ /dev/null @@ -1,5 +0,0 @@ -let opt(x) = _ | x; -let plus(x) = [plus](x . opt(plus)); -let star(x) = [star](opt(x . star)); - -match plus("a") . star("b"); diff --git a/autochomp/tests/compare/regex_fix.nb b/autochomp/tests/compare/regex_fix.nb deleted file mode 100644 index 5b7533c..0000000 --- a/autochomp/tests/compare/regex_fix.nb +++ /dev/null @@ -1,4 +0,0 @@ -let opt(x) = _ | x; -let ws = [star](opt(" " . star)); - -match [rec]("a" . opt("." . ws . rec)); diff --git a/autochomp/tests/compare/sheep.nb b/autochomp/tests/compare/sheep.nb deleted file mode 100644 index 1016fec..0000000 --- a/autochomp/tests/compare/sheep.nb +++ /dev/null @@ -1,3 +0,0 @@ -let opt(x) = _ | x; -let plus(x) = [rec](x . opt(rec)); -match "ba" . plus("a"); |