Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        public void Should_evaluate_negative_literal_with_value_false_to_true()
        {
            SignedLiteral literal = new SignedLiteral("A", true);

            literal.Value = false;

            Assert.IsTrue(literal.Evaluate());
        }
Ejemplo n.º 3
0
        public void Should_evaluate_positive_literal_with_value_false_to_false()
        {
            SignedLiteral literal = new SignedLiteral("A", false);

            literal.Value = false;

            Assert.IsFalse(literal.Evaluate());
        }
Ejemplo n.º 4
0
        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)");
        }
Ejemplo n.º 5
0
        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)");
        }
Ejemplo n.º 6
0
        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)");
        }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 8
0
            // 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
                }));
            }
Ejemplo n.º 9
0
        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);
        }
Ejemplo n.º 10
0
        public void Should_display_positive_literal_without_not_sign()
        {
            SignedLiteral literal = new SignedLiteral("A", false);

            Assert.AreEqual(literal.ToString(), "A");
        }
Ejemplo n.º 11
0
        public void Should_display_negative_literal_with_not_sign()
        {
            SignedLiteral literal = new SignedLiteral("A", true);

            Assert.AreEqual(literal.ToString(), "¬A");
        }