Before larger refactoring
This commit is contained in:
parent
1a497254a8
commit
d1ab7963b1
@ -10,19 +10,21 @@ impl super::Precedence for crate::Formula
|
|||||||
| Self::Boolean(_)
|
| Self::Boolean(_)
|
||||||
| Self::Compare(_)
|
| Self::Compare(_)
|
||||||
=> 0,
|
=> 0,
|
||||||
Self::Exists(_)
|
/*Self::And(formulas)
|
||||||
|
| Self::Or(formulas) if formulas.len() == 1
|
||||||
|
=> 0,*/
|
||||||
|
Self::Not(_)
|
||||||
|
| Self::Exists(_)
|
||||||
| Self::ForAll(_)
|
| Self::ForAll(_)
|
||||||
=> 1,
|
=> 1,
|
||||||
Self::Not(_)
|
|
||||||
=> 2,
|
|
||||||
Self::And(_)
|
Self::And(_)
|
||||||
=> 3,
|
=> 2,
|
||||||
Self::Or(_)
|
Self::Or(_)
|
||||||
=> 4,
|
=> 3,
|
||||||
Self::Implies(_)
|
Self::Implies(_)
|
||||||
=> 5,
|
=> 4,
|
||||||
Self::IfAndOnlyIf(_)
|
Self::IfAndOnlyIf(_)
|
||||||
=> 6,
|
=> 5,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -609,6 +611,13 @@ mod tests
|
|||||||
let term_3 = || exponentiate(constant("a"), exponentiate(constant("b"), constant("c")));
|
let term_3 = || exponentiate(constant("a"), exponentiate(constant("b"), constant("c")));
|
||||||
let term_4 = || negative(function("f", vec![integer(5), add(variable("X"), integer(3))]));
|
let term_4 = || negative(function("f", vec![integer(5), add(variable("X"), integer(3))]));
|
||||||
|
|
||||||
|
assert_eq!(format(not(greater(term_1(), term_2()))), "not (a + b) * c > |d - e|");
|
||||||
|
assert_eq!(format(not(less(term_1(), term_2()))), "not (a + b) * c < |d - e|");
|
||||||
|
assert_eq!(format(not(less_or_equal(term_1(), term_2()))), "not (a + b) * c <= |d - e|");
|
||||||
|
assert_eq!(format(not(greater_or_equal(term_1(), term_2()))), "not (a + b) * c >= |d - e|");
|
||||||
|
assert_eq!(format(not(equal(term_1(), term_2()))), "not (a + b) * c = |d - e|");
|
||||||
|
assert_eq!(format(not(not_equal(term_1(), term_2()))), "not (a + b) * c != |d - e|");
|
||||||
|
|
||||||
assert_eq!(format(
|
assert_eq!(format(
|
||||||
exists(vec![variable_declaration("X")], greater(term_1(), term_2()))),
|
exists(vec![variable_declaration("X")], greater(term_1(), term_2()))),
|
||||||
"exists X (a + b) * c > |d - e|");
|
"exists X (a + b) * c > |d - e|");
|
||||||
@ -646,13 +655,6 @@ mod tests
|
|||||||
for_all(vec![variable_declaration("X")], not_equal(term_1(), term_2()))),
|
for_all(vec![variable_declaration("X")], not_equal(term_1(), term_2()))),
|
||||||
"forall X (a + b) * c != |d - e|");
|
"forall X (a + b) * c != |d - e|");
|
||||||
|
|
||||||
assert_eq!(format(not(greater(term_1(), term_2()))), "not (a + b) * c > |d - e|");
|
|
||||||
assert_eq!(format(not(less(term_1(), term_2()))), "not (a + b) * c < |d - e|");
|
|
||||||
assert_eq!(format(not(less_or_equal(term_1(), term_2()))), "not (a + b) * c <= |d - e|");
|
|
||||||
assert_eq!(format(not(greater_or_equal(term_1(), term_2()))), "not (a + b) * c >= |d - e|");
|
|
||||||
assert_eq!(format(not(equal(term_1(), term_2()))), "not (a + b) * c = |d - e|");
|
|
||||||
assert_eq!(format(not(not_equal(term_1(), term_2()))), "not (a + b) * c != |d - e|");
|
|
||||||
|
|
||||||
assert_eq!(format(
|
assert_eq!(format(
|
||||||
and(vec![greater(term_1(), term_2()), greater(term_3(), term_4()),
|
and(vec![greater(term_1(), term_2()), greater(term_3(), term_4()),
|
||||||
greater(term_2(), term_4())])),
|
greater(term_2(), term_4())])),
|
||||||
@ -777,4 +779,71 @@ mod tests
|
|||||||
not_equal(term_2(), term_4())])),
|
not_equal(term_2(), term_4())])),
|
||||||
"(a + b) * c != |d - e| <-> a ** b ** c != -f(5, X + 3) <-> |d - e| != -f(5, X + 3)");
|
"(a + b) * c != |d - e| <-> a ** b ** c != -f(5, X + 3) <-> |d - e| != -f(5, X + 3)");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn format_combination_not_and_lower()
|
||||||
|
{
|
||||||
|
assert_eq!(format(not(not(predicate("p", vec![])))), "not not p");
|
||||||
|
|
||||||
|
assert_eq!(format(
|
||||||
|
not(exists(vec![variable_declaration("X"), variable_declaration("Y"),
|
||||||
|
variable_declaration("Z")], predicate("p", vec![])))),
|
||||||
|
"not exists X, Y, Z p");
|
||||||
|
assert_eq!(format(
|
||||||
|
exists(vec![variable_declaration("X"), variable_declaration("Y"),
|
||||||
|
variable_declaration("Z")], not(predicate("p", vec![])))),
|
||||||
|
"exists X, Y, Z not p");
|
||||||
|
assert_eq!(format(
|
||||||
|
not(for_all(vec![variable_declaration("X"), variable_declaration("Y"),
|
||||||
|
variable_declaration("Z")], predicate("p", vec![])))),
|
||||||
|
"not forall X, Y, Z p");
|
||||||
|
assert_eq!(format(
|
||||||
|
for_all(vec![variable_declaration("X"), variable_declaration("Y"),
|
||||||
|
variable_declaration("Z")], not(predicate("p", vec![])))),
|
||||||
|
"forall X, Y, Z not p");
|
||||||
|
|
||||||
|
assert_eq!(format(
|
||||||
|
not(and(vec![predicate("p", vec![])]))),
|
||||||
|
"not p");
|
||||||
|
assert_eq!(format(
|
||||||
|
not(and(vec![predicate("p", vec![]), predicate("q", vec![]), predicate("r", vec![])]))),
|
||||||
|
"not (p and q and r)");
|
||||||
|
|
||||||
|
assert_eq!(format(
|
||||||
|
or(vec![predicate("p", vec![]), or(vec![or(vec![predicate("q", vec![]), predicate("r", vec![])])])])),
|
||||||
|
"p or q or r");
|
||||||
|
|
||||||
|
assert_eq!(format(
|
||||||
|
and(vec![predicate("p", vec![]), or(vec![or(vec![predicate("q", vec![]), predicate("r", vec![])])])])),
|
||||||
|
"p and (q or r)");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn format_combination_quantifiers_and_lower()
|
||||||
|
{
|
||||||
|
assert_eq!(format(
|
||||||
|
exists(vec![variable_declaration("X"), variable_declaration("Y"),
|
||||||
|
variable_declaration("Z")], exists(vec![variable_declaration("A"),
|
||||||
|
variable_declaration("B"), variable_declaration("C")],
|
||||||
|
predicate("p", vec![])))),
|
||||||
|
"exists X, Y, Z exists A, B, C p");
|
||||||
|
assert_eq!(format(
|
||||||
|
exists(vec![variable_declaration("X"), variable_declaration("Y"),
|
||||||
|
variable_declaration("Z")], for_all(vec![variable_declaration("A"),
|
||||||
|
variable_declaration("B"), variable_declaration("C")],
|
||||||
|
predicate("p", vec![])))),
|
||||||
|
"exists X, Y, Z forall A, B, C p");
|
||||||
|
assert_eq!(format(
|
||||||
|
for_all(vec![variable_declaration("X"), variable_declaration("Y"),
|
||||||
|
variable_declaration("Z")], exists(vec![variable_declaration("A"),
|
||||||
|
variable_declaration("B"), variable_declaration("C")],
|
||||||
|
predicate("p", vec![])))),
|
||||||
|
"forall X, Y, Z exists A, B, C p");
|
||||||
|
assert_eq!(format(
|
||||||
|
for_all(vec![variable_declaration("X"), variable_declaration("Y"),
|
||||||
|
variable_declaration("Z")], for_all(vec![variable_declaration("A"),
|
||||||
|
variable_declaration("B"), variable_declaration("C")],
|
||||||
|
predicate("p", vec![])))),
|
||||||
|
"forall X, Y, Z forall A, B, C p");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user