From 0fc8506164246460bee16983970947f6f7355431 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20L=C3=BChne?= Date: Wed, 26 Feb 2020 14:15:33 +0100 Subject: [PATCH] Implement booleans --- src/parse.rs | 2 +- src/parse/terms.rs | 60 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 1 deletion(-) diff --git a/src/parse.rs b/src/parse.rs index 4783197..d9a5983 100644 --- a/src/parse.rs +++ b/src/parse.rs @@ -4,7 +4,7 @@ mod terms; pub(crate) use helpers::word_boundary; pub use names::{function_name, predicate_name, variable_name}; -pub use terms::{integer, special_integer, string}; +pub use terms::{boolean, integer, special_integer, string}; /* use nom:: diff --git a/src/parse/terms.rs b/src/parse/terms.rs index a3003dd..b6cfee1 100644 --- a/src/parse/terms.rs +++ b/src/parse/terms.rs @@ -10,6 +10,41 @@ use nom:: use super::word_boundary; +fn true_(i: &str) -> IResult<&str, crate::Term> +{ + map + ( + terminated + ( + tag("true"), + word_boundary, + ), + |_| crate::Term::true_(), + )(i) +} + +fn false_(i: &str) -> IResult<&str, crate::Term> +{ + map + ( + terminated + ( + tag("false"), + word_boundary, + ), + |_| crate::Term::false_(), + )(i) +} + +pub fn boolean(i: &str) -> IResult<&str, crate::Term> +{ + alt + (( + true_, + false_, + ))(i) +} + pub fn integer(i: &str) -> IResult<&str, crate::Term> { map @@ -175,6 +210,24 @@ mod tests use crate::parse::*; use crate::Term; + #[test] + fn parse_boolean() + { + assert_eq!(boolean("true"), Ok(("", Term::true_()))); + assert_eq!(boolean("false"), Ok(("", Term::false_()))); + assert_eq!(boolean("true false"), Ok((" false", Term::true_()))); + assert_eq!(boolean("false true"), Ok((" true", Term::false_()))); + assert_eq!(boolean("true,"), Ok((",", Term::true_()))); + assert_eq!(boolean("false,"), Ok((",", Term::false_()))); + assert!(boolean("truefalse").is_err()); + assert!(boolean("falsetrue").is_err()); + assert!(boolean("truea").is_err()); + assert!(boolean("falsea").is_err()); + assert!(boolean("a").is_err()); + assert!(boolean("-").is_err()); + assert!(boolean(" ").is_err()); + } + #[test] fn parse_integer() { @@ -216,6 +269,9 @@ mod tests assert!(special_integer("0").is_err()); assert!(special_integer("10000").is_err()); assert!(special_integer("-10000").is_err()); + assert!(special_integer("-").is_err()); + assert!(special_integer("+").is_err()); + assert!(special_integer("a").is_err()); assert!(special_integer(" ").is_err()); } @@ -243,5 +299,9 @@ mod tests assert_eq!(string("\"test 🙂 123\""), Ok(("", Term::string("test 🙂 123".to_string())))); assert!(string("\"test 123\"a").is_err()); assert!(string("\"test\\i123\"").is_err()); + assert!(string("\"test").is_err()); + assert!(string("test").is_err()); + assert!(string("-").is_err()); + assert!(string(" ").is_err()); } }