Test disjunction parser
This commit is contained in:
parent
17d8dbd8ba
commit
5ea0a96ec4
@ -531,6 +531,46 @@ mod tests
|
|||||||
assert_eq!(formula_remainder("p (and q)"), " (and q)");
|
assert_eq!(formula_remainder("p (and q)"), " (and q)");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn parse_or()
|
||||||
|
{
|
||||||
|
let formula_as_or = |i| match formula(i)
|
||||||
|
{
|
||||||
|
Formula::Or(arguments) => arguments,
|
||||||
|
_ => panic!("expected disjunction"),
|
||||||
|
};
|
||||||
|
|
||||||
|
let as_predicate = |x| match x
|
||||||
|
{
|
||||||
|
Formula::Predicate(arguments) => arguments,
|
||||||
|
_ => panic!("expected predicate"),
|
||||||
|
};
|
||||||
|
|
||||||
|
assert_eq!(format_formula("true or false"), "true or false");
|
||||||
|
assert_eq!(formula_as_or("true or false").len(), 2);
|
||||||
|
assert_eq!(*formula_as_or("true or false").remove(0), Formula::true_());
|
||||||
|
assert_eq!(*formula_as_or("true or false").remove(1), Formula::false_());
|
||||||
|
// The order of elements is retained
|
||||||
|
assert_ne!(formula("true or false"), formula("false or true"));
|
||||||
|
assert_eq!(format_formula("p or q or r or s"), "p or q or r or s");
|
||||||
|
assert_eq!(
|
||||||
|
as_predicate(*formula_as_or("p or q or r or s").remove(0)).declaration.name, "p");
|
||||||
|
assert_eq!(
|
||||||
|
as_predicate(*formula_as_or("p or q or r or s").remove(3)).declaration.name, "s");
|
||||||
|
|
||||||
|
let formula = |i| original::formula(i, &Declarations::new());
|
||||||
|
|
||||||
|
// Malformed formulas shouldn’t be accepted
|
||||||
|
assert!(formula("or").is_err());
|
||||||
|
assert!(formula("or p").is_err());
|
||||||
|
assert_eq!(formula_remainder("p or"), " or");
|
||||||
|
assert_eq!(formula_remainder("p orq"), " orq");
|
||||||
|
assert_eq!(formula_remainder("p or q or"), " or");
|
||||||
|
assert_eq!(formula_remainder("p or q orq"), " orq");
|
||||||
|
assert!(formula("(p or) q").is_err());
|
||||||
|
assert_eq!(formula_remainder("p (or q)"), " (or q)");
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn parse_predicate()
|
fn parse_predicate()
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user