From 6f71d9f5b394c16224cf9440b0db1e44595e5870 Mon Sep 17 00:00:00 2001 From: mehbark Date: Fri, 2 Jan 2026 22:26:24 -0500 Subject: [PATCH] add some parser tests --- src/main.rs | 3 +++ src/tests/mod.rs | 1 + src/tests/parser.rs | 42 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 46 insertions(+) create mode 100644 src/tests/mod.rs create mode 100644 src/tests/parser.rs diff --git a/src/main.rs b/src/main.rs index f1caf59..7cdd562 100644 --- a/src/main.rs +++ b/src/main.rs @@ -8,6 +8,9 @@ mod parser; mod symbol; mod val; +#[cfg(test)] +mod tests; + fn main() { let src = &env::args().nth(1).expect("give me an argument now"); let res = parse(src); diff --git a/src/tests/mod.rs b/src/tests/mod.rs new file mode 100644 index 0000000..b93e263 --- /dev/null +++ b/src/tests/mod.rs @@ -0,0 +1 @@ +mod parser; diff --git a/src/tests/parser.rs b/src/tests/parser.rs new file mode 100644 index 0000000..67714e3 --- /dev/null +++ b/src/tests/parser.rs @@ -0,0 +1,42 @@ +use crate::parser::*; + +fn test(src: &str, expected: &str) { + assert_eq!( + parse(src) + .into_iter() + .map(|stmt| format!("{stmt}")) + .collect::>() + .join(";\n"), + expected.trim(), + ); +} + +#[test] +fn double() { + test( + " + fn double([x]) ( + ^x = x * 2; + ) +", + "(set! double (fn ([x] [x]) (^x = (x * 2))))", + ); +} + +#[test] +fn make_counter() { + test( + " +fn make_counter([] [inc]) ( + i = 0; + ^inc = fn([] [i]) ( + i = i + 1; + ^i = i; + ); + + # or fn ^inc(...) +) +", + "(set! make_counter (fn ([] [inc]) (i = 0) (^inc = (fn ([] [i]) (i = (i + 1)) (^i = i)))))", + ); +}