public void ShouldNotUnify(string testCode)
        {
            // Arrange
            var database    = TestUtilities.LoadStatements(testCode);
            var unification = new UnifierCalculation(database);
            var lhs         = database.Reader.ReadInternalTermsForLabel("lhs").Single();
            var rhs         = database.Reader.ReadInternalTermsForLabel("rhs").Single();

            // Act
            var eq = new Equation {
                Lhs = lhs, Rhs = rhs
            };

            var(substitutions, succeed) = unification.GetSyntacticUnifier(eq);

            // Assert
            Assert.False(succeed);
            Assert.Empty(substitutions);
        }
        public void ShouldUnify(string testCode, string[] substitutions)
        {
            // Arrange
            var database    = TestUtilities.LoadStatements(testCode);
            var unification = new UnifierCalculation(database);
            var lhs         = database.Reader.ReadInternalTermsForLabel("lhs").Single();
            var rhs         = database.Reader.ReadInternalTermsForLabel("rhs").Single();

            // Act
            var eq = new Equation {
                Lhs = lhs, Rhs = rhs
            };
            var unifier = unification.GetSyntacticUnifier(eq);

            // Assert
            Assert.True(unifier.succeed);
            var unifierStrings = unifier.substitutions.Select(u => u.ToSourceCode(database));

            Assert.True(TestUtilities.ContainsTheSameValues(substitutions, unifierStrings));
        }