예제 #1
0
        public void ShouldCreateIntFunction()
        {
            var dm = new NPCompiler().CompileMethod("funcao inteiro principal() fim");

            Assert.AreEqual(typeof(int), dm.ReturnType);
            Assert.AreEqual("principal", dm.Name);
        }
예제 #2
0
        public void Should_Load_Args()
        {
            var result = new NPCompiler()
                .CompileMethod("funcao inteiro soma(inteiro x) retorne x fim")
                .Invoke(null, new object[]{20});

            Assert.AreEqual(20, result);
        }
예제 #3
0
        public void Should_Create_Function_Returning_Value()
        {
            var dm = new NPCompiler().CompileMethod("funcao inteiro soma(inteiro a, inteiro b) retorne 1 fim");

            var result = dm.Invoke(null, new object[] {1, 1});

            Assert.AreEqual(1, result);
        }
예제 #4
0
        public void Should_Create_Function_Returning_Value()
        {
            var dm = new NPCompiler().CompileMethod("funcao inteiro soma() retorne 8 + 2 fim");

            var result = dm.Invoke(null, null);

            Assert.AreEqual(10, result);
        }         
예제 #5
0
        public void Should_Add_Int_Locals()
        {
            var result = new NPCompiler()
				.CompileMethod("funcao inteiro soma() variavel inteiro x = 20, y = 20 retorne x + y fim")
                .Invoke(null, null);

            Assert.AreEqual(40, result);
        }
예제 #6
0
        public void ShouldCreateIntFunctionParams()
        {
            var dm = new NPCompiler().CompileMethod("funcao inteiro soma(inteiro a, inteiro b) fim");            

            Assert.AreEqual(typeof(int), dm.ReturnType);
            Assert.AreEqual("soma", dm.Name);

            var parameters = dm.GetParameters();

            Assert.AreEqual(2, parameters.Length);

            Assert.AreEqual(typeof(int), parameters[0].ParameterType);
            Assert.AreEqual(typeof(int), parameters[0].ParameterType);
        }
예제 #7
0
        public void Should_Execute_Arithmetic_Function()
        {
            var result = new NPCompiler()
                .CompileMethod("funcao inteiro calc() retorne 2*5+10-9+4/2 fim")
                .Invoke(null, null);

            Assert.AreEqual(13, result);

            var result2 = new NPCompiler()
                .CompileMethod("funcao inteiro calc() retorne 2*(5+10)-9+4/2 fim")
                .Invoke(null, null);

            Assert.AreEqual(23, result2);
        }
예제 #8
0
 public NPortugol2()
 {
     _compiler = new NPCompiler();
 }
예제 #9
0
 public NPortugol2(string script)
 {
     _script = script;
     _compiler = new NPCompiler();
 }
예제 #10
0
        public void Hello()
        {
            var method = @"funcao inteiro soma() retorne 1 + 1 fim";

            var dm = new NPCompiler().CompileMethod(method);

            var result = dm.Invoke(null, null);

            Assert.AreEqual(2, (int) result);
        }