summaryrefslogtreecommitdiff
path: root/rust/src/parser.rs
diff options
context:
space:
mode:
Diffstat (limited to 'rust/src/parser.rs')
-rw-r--r--rust/src/parser.rs33
1 files changed, 33 insertions, 0 deletions
diff --git a/rust/src/parser.rs b/rust/src/parser.rs
index d5d4c30..6b18a9d 100644
--- a/rust/src/parser.rs
+++ b/rust/src/parser.rs
@@ -25,3 +25,36 @@ fn parse_number(token: &str) -> Result<Value, String> {
.map(Value::Num)
.map_err(|e| e.to_string())
}
+
+#[cfg(test)]
+mod tests {
+ use super::parse;
+ use super::Value::*;
+ use proptest::prelude::*;
+
+ proptest! {
+ #[test]
+ fn parse_integer_as_number(i in -1000i32..1000) {
+ let result = parse(&i.to_string());
+ assert_eq!(Num(i), result);
+ }
+
+ }
+
+ #[test]
+ fn parse_truth_values_as_booleans() {
+ assert_eq!(Bool(true), parse("true"));
+ assert_eq!(Bool(false), parse("false"));
+ }
+
+ #[test]
+ fn parse_identifiers_values_as_symbols() {
+ assert_eq!(Sym("foo".to_string()), parse("foo"));
+ }
+
+ #[test]
+ fn ignores_whitespace() {
+ assert_eq!(Sym("foo".to_string()), parse(" foo \n\r"));
+ assert_eq!(Num(-42), parse("\n-42"));
+ }
+}