示例#1
0
        public void Check_ArithmeticExpression_Valid()
        {
            var parser  = new Parser();
            var program = new TestProgramBuilder()
                          .WithTokens(TestSourceKey.Simple)
                          .WithMainFunction()
                          .Build();

            var actual = parser.Check(program.Tokens);

            Assert.IsTrue(actual.IsValid);
        }
示例#2
0
        public void Check_ExpressionWithCycleWhileInCondition_Valid()
        {
            var parser  = new Parser();
            var program = new TestProgramBuilder()
                          .WithTokens(TestSourceKey.CycleWhileInCondition)
                          .WithMainFunction()
                          .Build();

            var actual = parser.Check(program.Tokens);

            Assert.IsTrue(actual.IsValid);
        }
示例#3
0
        public void GetTokensFromExpression_ExpressionWithCycleWhileInCondition_CorrectTokens()
        {
            var lexer   = new Lexer();
            var program = new TestProgramBuilder()
                          .WithSource(TestSourceKey.CycleWhileInCondition)
                          .WithTokens(TestSourceKey.CycleWhileInCondition)
                          .Build();

            var actual = lexer.GetTokensFromExpression(program.Source);

            Assert.AreEqual(program.Tokens, actual);
        }
示例#4
0
        public void Check_ExpressionWithSeveralReturns_Valid()
        {
            var parser  = new Parser();
            var program = new TestProgramBuilder()
                          .WithTokens(TestSourceKey.SeveralReturnsWithFirstWorking)
                          .WithMainFunction()
                          .Build();

            var actual = parser.Check(program.Tokens);

            Assert.IsTrue(actual.IsValid);
        }
示例#5
0
        public void GetTokensFromExpression_ArithmeticExpression_CorrectTokens()
        {
            var lexer   = new Lexer();
            var program = new TestProgramBuilder()
                          .WithSource(TestSourceKey.Simple)
                          .WithTokens(TestSourceKey.Simple)
                          .Build();

            var actual = lexer.GetTokensFromExpression(program.Source);

            Assert.AreEqual(program.Tokens, actual);
        }
示例#6
0
        public void GetTokensFromExpression_ExpressionWithTwoReturns_CorrectTokens()
        {
            var lexer   = new Lexer();
            var program = new TestProgramBuilder()
                          .WithSource(TestSourceKey.SeveralReturnsWithFirstWorking)
                          .WithTokens(TestSourceKey.SeveralReturnsWithFirstWorking)
                          .Build();

            var actual = lexer.GetTokensFromExpression(program.Source);

            Assert.AreEqual(program.Tokens, actual);
        }
        public void Optimize_ArithmeticExpression_CorrectOptimization()
        {
            var triadsOptimizer = new TriadsOptimizer();
            var program         = new TestProgramBuilder()
                                  .WithTriads(TestSourceKey.Simple)
                                  .WithOptimizedTriads(TestSourceKey.Simple)
                                  .Build();

            var actual = triadsOptimizer.Optimize(program.Triads, program.TriadsConditionIndexes);

            Assert.AreEqual(program.OptimizedTriads, actual);
        }
示例#8
0
        public void GetTriadsFromPolis_ExpressionWithCycleWhileInCondition_CorrectTriads()
        {
            var triadsConverter = new TriadsConverter();
            var program         = new TestProgramBuilder()
                                  .WithPolis(TestSourceKey.CycleWhileInCondition)
                                  .WithTriads(TestSourceKey.CycleWhileInCondition)
                                  .Build();

            var actual = triadsConverter.GetTriadsFromPolis(program.Polis, program.PolisConditionIndexes, null);

            Assert.AreEqual(program.Triads, actual);
            Assert.AreEqual(program.TriadsConditionIndexes, triadsConverter.TriadsConditionIndexes);
        }
示例#9
0
        public void GetTriadsFromPolis_ExpressionWithSeveralReturns_CorrectTriads()
        {
            var triadsConverter = new TriadsConverter();
            var program         = new TestProgramBuilder()
                                  .WithPolis(TestSourceKey.SeveralReturnsWithFirstWorking)
                                  .WithTriads(TestSourceKey.SeveralReturnsWithFirstWorking)
                                  .Build();

            var actual = triadsConverter.GetTriadsFromPolis(program.Polis, program.PolisConditionIndexes, null);

            Assert.AreEqual(program.Triads, actual);
            Assert.AreEqual(program.TriadsConditionIndexes, triadsConverter.TriadsConditionIndexes);
        }
示例#10
0
        public void Check_ProgramCodeWithGrammarMistake_NoOperation_Invalid()
        {
            var parser  = new Parser();
            var program = new TestProgramBuilder()
                          .WithTokens(TestSourceKey.CycleWhile)
                          .WithMainFunction()
                          .WithGrammarMistake(TestGrammarMistakeType.NoOperation)
                          .Build();

            var actual = parser.Check(program.Tokens);

            Assert.IsFalse(actual.IsValid);
        }
示例#11
0
        public void Convert_ExpressionWithCycleWhileInCondition_CorrectPolis()
        {
            var syntacticalAnalyzer = new SyntacticalAnalyzer();
            var program             = new TestProgramBuilder()
                                      .WithTokens(TestSourceKey.CycleWhileInCondition)
                                      .WithPolis(TestSourceKey.CycleWhileInCondition)
                                      .Build();

            var actual = syntacticalAnalyzer.Convert(program.Tokens);

            Assert.AreEqual(program.Polis, actual);
            Assert.AreEqual(program.PolisConditionIndexes, syntacticalAnalyzer.PolisConditionsIndexes);
        }
示例#12
0
        public void Convert_ExpressionWithSeveralReturns_CorrectPolis()
        {
            var syntacticalAnalyzer = new SyntacticalAnalyzer();
            var program             = new TestProgramBuilder()
                                      .WithTokens(TestSourceKey.SeveralReturnsWithFirstWorking)
                                      .WithPolis(TestSourceKey.SeveralReturnsWithFirstWorking)
                                      .Build();

            var actual = syntacticalAnalyzer.Convert(program.Tokens);

            Assert.AreEqual(program.Polis, actual);
            Assert.AreEqual(program.PolisConditionIndexes, syntacticalAnalyzer.PolisConditionsIndexes);
        }
示例#13
0
        public void Check_TwoFunctions_Valid()
        {
            var parser  = new Parser();
            var program = new TestProgramBuilder()
                          .WithTokens(TestSourceKey.SeveralReturnsWithFirstWorking)
                          .WithMainFunction()
                          .WithAnotherFunction(new TestProgramBuilder()
                                               .WithTokens(TestSourceKey.Simple)
                                               .WithFunction("func", "test", new [] { "a", "b" }))
                          .Build();

            var actual = parser.Check(program.Tokens);

            Assert.IsTrue(actual.IsValid);
        }