public void Should_evaluate_formula_correctly() { // Arrange SignedLiteral a = new SignedLiteral("A", false, true); // evaluates to true SignedLiteral b = new SignedLiteral("B", false, false); // evaluates to false SignedLiteral c = new SignedLiteral("C", true, true); // evaluates to false Clause clause1 = new Clause(new List <SignedLiteral>() { a, b }); // evaluates to true Clause clause2 = new Clause(new List <SignedLiteral>() { a, c }); // evaluates to true Formula formula = new Formula(new List <Clause>() { clause1, clause2 }); // Act bool formulaEvaluation = formula.Evaluate(); // Assert Assert.IsTrue(formulaEvaluation); // Re-arrange a.Value = false; // both clauses now evaluate to false // Act again formulaEvaluation = formula.Evaluate(); //Assert Assert.IsFalse(formulaEvaluation); }
public void Should_evaluate_negative_literal_with_value_false_to_true() { SignedLiteral literal = new SignedLiteral("A", true); literal.Value = false; Assert.IsTrue(literal.Evaluate()); }
public void Should_evaluate_positive_literal_with_value_false_to_false() { SignedLiteral literal = new SignedLiteral("A", false); literal.Value = false; Assert.IsFalse(literal.Evaluate()); }
public void Should_display_clauses_with_single_literal_correctly() { // Arrange SignedLiteral a = new SignedLiteral("A", false); Clause clause = new Clause(new List <SignedLiteral>() { a }); // Act string clauseAsString = clause.ToString(); // Assert Assert.AreEqual(clauseAsString, "(A)"); }
public void Should_swallow_duplicate_literals() { // Arrange SignedLiteral a = new SignedLiteral("A", false); SignedLiteral b = new SignedLiteral("B", true); Clause clause = new Clause(new List <SignedLiteral>() { a, a, b, b }); // Act string clauseAsString = clause.ToString(); // Assert Assert.AreEqual(clauseAsString, "(A ∨ ¬B)"); }
public void Should_display_clauses_with_or_signs() { // Arrange SignedLiteral a = new SignedLiteral("A", false); SignedLiteral b = new SignedLiteral("B", false); Clause clause = new Clause(new List <SignedLiteral>() { a, b }); // Act string clauseAsString = clause.ToString(); // Assert Assert.AreEqual(clauseAsString, "(A ∨ B)"); }
public void Should_evaluate_clause_with_mixed_valued_literals_to_true() { // Arrange SignedLiteral a = new SignedLiteral("A", false, false); SignedLiteral b = new SignedLiteral("B", false, true); SignedLiteral c = new SignedLiteral("C", false, false); Clause clause = new Clause(new List <SignedLiteral>() { a, b, c }); // Act bool clauseEvaluation = clause.Evaluate(); // Assert Assert.IsTrue(clauseEvaluation); }
// Returns the following formula: (A ∨ B) ∧ (A ∨ ¬C) static internal Formula GetTestFormula() { SignedLiteral a = new SignedLiteral("A", false); SignedLiteral b = new SignedLiteral("B", false); SignedLiteral c = new SignedLiteral("C", true); Clause clause1 = new Clause(new List <SignedLiteral>() { a, b }); Clause clause2 = new Clause(new List <SignedLiteral>() { a, c }); return(new Formula(new List <Clause>() { clause1, clause2 })); }
public void Should_evaluate_clauses_with_negated_values_correctly() { // Arrange SignedLiteral a = new SignedLiteral("A", true, false); // evaluates to true SignedLiteral b = new SignedLiteral("B", false, false); // evaluates to false SignedLiteral c = new SignedLiteral("C", false, true); // evaluates to true SignedLiteral d = new SignedLiteral("D", true, true); // evaluates to false Clause clause1 = new Clause(new List <SignedLiteral>() { a, b, c }); Clause clause2 = new Clause(new List <SignedLiteral>() { a, c }); Clause clause3 = new Clause(new List <SignedLiteral>() { a, b }); Clause clause4 = new Clause(new List <SignedLiteral>() { b, d }); // Act bool clauseEvaluation1 = clause1.Evaluate(); bool clauseEvaluation2 = clause2.Evaluate(); bool clauseEvaluation3 = clause3.Evaluate(); bool clauseEvaluation4 = clause4.Evaluate(); // Assert Assert.IsTrue(clauseEvaluation1); Assert.IsTrue(clauseEvaluation2); Assert.IsTrue(clauseEvaluation3); Assert.IsFalse(clauseEvaluation4); }
public void Should_display_positive_literal_without_not_sign() { SignedLiteral literal = new SignedLiteral("A", false); Assert.AreEqual(literal.ToString(), "A"); }
public void Should_display_negative_literal_with_not_sign() { SignedLiteral literal = new SignedLiteral("A", true); Assert.AreEqual(literal.ToString(), "¬A"); }