Exemplo n.º 1
0
        public void VariableDeclarationAssignment()
        {
            Expression expression = parseStatement("a -> int = 4 + p;");
            VariableDeclarationAssignmentExpression a = assertTypeAndCast <VariableDeclarationAssignmentExpression>(expression);

            Assert.AreEqual("a", a.declaration.name);
            Assert.AreEqual("int", a.declaration.typeName.name);

            AdditionExpression          b = assertTypeAndCast <AdditionExpression>(a.value);
            IntegralLiteralExpression   c = assertTypeAndCast <IntegralLiteralExpression>(b.left);
            VariableReferenceExpression d = assertTypeAndCast <VariableReferenceExpression>(b.right);

            Assert.AreEqual(4, c.value);
            Assert.AreEqual("p", d.name);
        }
Exemplo n.º 2
0
        public void AnonymousFunctionDefinitionAndAssignment()
        {
            Expression expression = parseExpression("anon -> Function<int,Banana, Platypus> = (a -> int, b -> Banana) -> Platypus { a + 5; }");
            VariableDeclarationAssignmentExpression z = assertTypeAndCast <VariableDeclarationAssignmentExpression>(expression);

            Assert.AreEqual("anon", z.declaration.name);            Assert.AreEqual("Function", z.declaration.typeName.name);


            GenericTypeName y = assertTypeAndCast <GenericTypeName>(z.declaration.typeName);

            Assert.AreEqual(3, y.genericTypes.Count);
            Assert.AreEqual("int", y.genericTypes[0].name);
            Assert.AreEqual("Banana", y.genericTypes[1].name);
            Assert.AreEqual("Platypus", y.genericTypes[2].name);

            AnonymousFunctionExpression a = assertTypeAndCast <AnonymousFunctionExpression>(z.value);

            Assert.AreEqual("Platypus", a.returnType.name);
            Assert.IsNotInstanceOfType(a.returnType, typeof(GenericTypeName));
            Assert.AreEqual(2, a.arguments.members.Count);
            Assert.AreEqual(1, a.body.innerExpressions.Count);

            Assert.AreEqual("a", a.arguments.members[0].name);
            Assert.AreEqual("int", a.arguments.members[0].typeName.name);
            Assert.IsNotInstanceOfType(a.arguments.members[0].typeName, typeof(GenericTypeName));

            Assert.AreEqual("b", a.arguments.members[1].name);
            Assert.AreEqual("Banana", a.arguments.members[1].typeName.name);
            Assert.IsNotInstanceOfType(a.arguments.members[1].typeName, typeof(GenericTypeName));

            AdditionExpression          d = assertTypeAndCast <AdditionExpression>(a.body.innerExpressions[0]);
            VariableReferenceExpression e = assertTypeAndCast <VariableReferenceExpression>(d.left);
            IntegralLiteralExpression   f = assertTypeAndCast <IntegralLiteralExpression>(d.right);

            Assert.AreEqual("a", e.name);
            Assert.AreEqual(5, f.value);
        }
Exemplo n.º 3
0
        public void ClassTest()
        {
            Expression expression       = parseExpression(@"class Test {
                jelly -> int;
                public belly -> Banana<int,int>;
                p -> String = ""haha"";
                
                foopy(a -> int, b -> Banana) -> String {
                    a = 5;
                }
            }");
            ClassDefinitionExpression a = assertTypeAndCast <ClassDefinitionExpression>(expression);

            Assert.AreEqual("Test", a.name);
            Assert.AreEqual(4, a.members.Count);
            Assert.AreEqual(Visibility.None, a.visibility);

            VariableDeclarationExpression           b = assertTypeAndCast <VariableDeclarationExpression>(a.members[0]);
            VariableDeclarationExpression           c = assertTypeAndCast <VariableDeclarationExpression>(a.members[1]);
            VariableDeclarationAssignmentExpression d = assertTypeAndCast <VariableDeclarationAssignmentExpression>(a.members[2]);
            FunctionExpression e = assertTypeAndCast <FunctionExpression>(a.members[3]);

            Assert.AreEqual("jelly", b.name);
            Assert.AreEqual("int", b.typeName.name);
            Assert.IsNotInstanceOfType(b.typeName, typeof(GenericTypeName));
            Assert.AreEqual(Visibility.None, b.visibility);

            Assert.AreEqual("belly", c.name);
            Assert.AreEqual("Banana", c.typeName.name);
            Assert.AreEqual(Visibility.Public, c.visibility);
            GenericTypeName f = assertTypeAndCast <GenericTypeName>(c.typeName);

            Assert.AreEqual(2, f.genericTypes.Count);
            Assert.AreEqual("int", f.genericTypes[0].name);
            Assert.IsNotInstanceOfType(f.genericTypes[0], typeof(GenericTypeName));
            Assert.AreEqual("int", f.genericTypes[1].name);
            Assert.IsNotInstanceOfType(f.genericTypes[1], typeof(GenericTypeName));

            Assert.AreEqual("p", d.declaration.name);
            Assert.AreEqual("String", d.declaration.typeName.name);
            Assert.IsNotInstanceOfType(d.declaration.typeName, typeof(GenericTypeName));

            StringLiteralExpression g = assertTypeAndCast <StringLiteralExpression>(d.value);

            Assert.AreEqual("haha", g.value);

            Assert.AreEqual("foopy", e.name);
            Assert.AreEqual(Visibility.None, e.visibility);
            Assert.AreEqual("String", e.returnType.name);
            Assert.IsNotInstanceOfType(e.returnType, typeof(GenericTypeName));
            Assert.AreEqual(2, e.arguments.members.Count);
            Assert.AreEqual(1, e.body.innerExpressions.Count);

            Assert.AreEqual("a", e.arguments.members[0].name);
            Assert.AreEqual("int", e.arguments.members[0].typeName.name);
            Assert.IsNotInstanceOfType(e.arguments.members[0].typeName, typeof(GenericTypeName));

            Assert.AreEqual("b", e.arguments.members[1].name);
            Assert.AreEqual("Banana", e.arguments.members[1].typeName.name);
            Assert.IsNotInstanceOfType(e.arguments.members[1].typeName, typeof(GenericTypeName));

            VariableAssignmentExpression h = assertTypeAndCast <VariableAssignmentExpression>(e.body.innerExpressions[0]);

            Assert.AreEqual("a", h.name);
            IntegralLiteralExpression i = assertTypeAndCast <IntegralLiteralExpression>(h.value);

            Assert.AreEqual(5, i.value);
        }