public void Interpret_GivenValidRuleDefinition_ReturnsCorrectResult()
        {
            var lexer = new DefaultLexer();

            const string queryText = "ensure holding.Nav is within 10 of fund.Nav";

            var tokens = lexer.Lex(queryText).ToList();

            var parser = new DefaultParser();

            var ruleDefinition = parser.Parse(tokens);

            var sut = new DefaultInterpreter();

            var ruleFunc = sut.Interpret <Holding, Fund>(ruleDefinition);

            var holding = new Holding
            {
                Nav = 5
            };

            var fund = new Fund
            {
                Nav = 6
            };

            var actual = ruleFunc(holding, fund);

            Assert.That(actual, Is.True);
        }
        public void Parse_GivenTargetObjectPropertyOfMethod_ReturnsCorrectResult()
        {
            var lexer = new DefaultLexer();

            const string queryText = "ensure target.SomeMethod() is within 10 of comparison.SomeProperty";

            var tokens = lexer.Lex(queryText).ToList();

            var sut = new DefaultParser();

            var expected = new RuleDefinition
            {
                Id             = null,
                RuleConditions = new List <RuleCondition>
                {
                    new RuleCondition
                    {
                        ComparisonType      = RuleObject.ObjectProperty,
                        ComparisonAttribute = "SomeProperty",
                        ComparisonTypeName  = "comparison",
                        LogicalOperator     = RuleLogicalOperator.None,
                        Operator            = RuleComparatorOperator.Within,
                        Value = "10"
                    }
                },
                TargetAttribute = "SomeMethod",
                TargetType      = RuleObject.ObjectMethod,
                TargetTypeName  = "target"
            };

            var actual = sut.Parse(tokens);

            Assert.That(actual, Is.EqualTo(expected));
        }
Exemple #3
0
        static void Main(string[] args)
        {
            if (args.Length != 1 || !File.Exists(args[0]))
            {
                return;
            }
            using (InitializeLLVM())
            {
                RegisterNative();

                var session = new Session();
                //var machine = new TargetMachine( Triple.HostTriple);
                //var visitor = new CodeGenVisitor(false, session, machine);
                //var listener = new CodeGenParserListener(visitor);
                var visitor  = new IlGeneratorVisitor(session);
                var listener = new IlGeneratorParserListener(visitor);
                var lexer    = new DefaultLexer(File.OpenText(args[0]));
                var parser   = new DefaultParser(lexer, listener, session);

                MainLoop(lexer, parser);

                /*machine.EmitToFile(visitor.Module, "output.o", CodeGenFileType.ObjectFile);
                 * if( !visitor.Module.WriteToTextFile( "output.ll", out string msg ) )
                 * {
                 *  Console.Error.WriteLine( msg );
                 *  return;
                 * }
                 * machine.EmitToFile( visitor.Module, "output.s", CodeGenFileType.AssemblySource );*/
            }
        }
        public void Parse_GivenValidTokens_ReturnsCorrectResult()
        {
            var lexer = new DefaultLexer();

            const string queryText = "ensure holding.Nav is within 10 of fund.Nav";

            var tokens = lexer.Lex(queryText).ToList();

            var sut = new DefaultParser();

            var expected = new RuleDefinition
            {
                Id             = null,
                RuleConditions = new List <RuleCondition>
                {
                    new RuleCondition
                    {
                        ComparisonType      = RuleObject.ObjectProperty,
                        ComparisonAttribute = "Nav",
                        ComparisonTypeName  = "fund",
                        LogicalOperator     = RuleLogicalOperator.None,
                        Operator            = RuleComparatorOperator.Within,
                        Value = "10"
                    }
                },
                TargetAttribute = "Nav",
                TargetType      = RuleObject.ObjectProperty,
                TargetTypeName  = "holding"
            };

            var actual = sut.Parse(tokens);

            Assert.That(actual, Is.EqualTo(expected));
        }