예제 #1
0
        public void CheckConjunctionDoesNothing()
        {
            var yes = new BooleanLiteral (true);
            var no = new BooleanLiteral (false);
            var conjunction = new LogicalConjunction (yes, no);

            var result = conjunction.Walk (new RefChecker (), new [] { "Foobar" });

            Assert.AreEqual (1, result.Length);
            Assert.Contains ("Foobar", result);
        }
예제 #2
0
        public void SerializeLogicalConjunction()
        {
            var conjunction = new LogicalConjunction(
                new BooleanLiteral(true),
                new BooleanLiteral(false)
            );

            var sql = conjunction.Walk (new Sqlizer (foobarTable()));

            Assert.AreEqual ("(TRUE AND FALSE)", sql);
        }
예제 #3
0
        public void ConjunctionErrorsOnNumbers()
        {
            var numberVal = new NumberLiteral (42);
            var boolVal = new BooleanLiteral (true);
            var left = new LogicalConjunction (numberVal, boolVal);
            var right = new LogicalConjunction (boolVal, numberVal);

            var leftEx = Assert.Throws<TypeCheckException>(() => left.Walk (new TypeChecker ()));
            var rightEx = Assert.Throws<TypeCheckException>(() => right.Walk (new TypeChecker ()));

            Assert.That (INCOMPATIBLE_RE.IsMatch (leftEx.Message));
            Assert.That (INCOMPATIBLE_RE.IsMatch (rightEx.Message));
        }
예제 #4
0
        public void ConjunctionErrorsOnStrings()
        {
            var stringVal = new StringLiteral ("foobar");
            var boolVal = new BooleanLiteral (true);
            var left = new LogicalConjunction (stringVal, boolVal);
            var right = new LogicalConjunction (boolVal, stringVal);

            var leftEx = Assert.Throws<TypeCheckException>(() => left.Walk (new TypeChecker ()));
            var rightEx = Assert.Throws<TypeCheckException>(() => right.Walk (new TypeChecker ()));

            Assert.That (INCOMPATIBLE_RE.IsMatch (leftEx.Message));
            Assert.That (INCOMPATIBLE_RE.IsMatch (rightEx.Message));
        }
예제 #5
0
        public void CheckLogicalConjunction()
        {
            var lhs = new BinaryOperation ("=", new NumberLiteral (1), new NumberLiteral (2));
            var rhs = new BinaryOperation ("<", new NumberLiteral (3), new NumberLiteral (4));
            var conjunction = new LogicalConjunction (lhs, rhs);

            var type = conjunction.Walk (new TypeChecker ());

            Assert.AreEqual (SpecType.Boolean, type.Type);
        }