Beispiel #1
0
        public void cullBachelorsTest()
        {
            // Test removal of bachelors as leaves on different levels
            SExpression root      = new SExpression(SExpression.FormatType.Document);
            SExpression statement = root.AddChild(new SExpression(SExpression.FormatType.Statement));
            SExpression under     = statement.AddChild(new SExpression(SExpression.FormatType.Under));

            under.AddChild(new SString("x"));
            SExpression italic = under.AddChild(new SExpression(SExpression.FormatType.Italic));

            italic.AddChild(new SString("y"));
            SExpression strike = italic.AddChild(new SExpression(SExpression.FormatType.Strike));

            strike.AddChild(new SString("z"));
            italic.AddChild(new SExpression(SExpression.FormatType.Color, null, 15));
            under.AddChild(new SExpression(SExpression.FormatType.Size, null, 12));

            Assert.AreEqual("document(statement(under(\"x\", italic(\"y\", strike(\"z\"), color15()), size12())))",
                            root.ToString());

            root.cullBachelors();
            Assert.AreEqual("document(statement(under(\"x\", italic(\"y\", strike(\"z\")))))",
                            root.ToString());

            // Ensure subsequent calls don't remove anything else
            root.cullBachelors();
            Assert.AreEqual("document(statement(under(\"x\", italic(\"y\", strike(\"z\")))))",
                            root.ToString());
        }
Beispiel #2
0
        public void SizeBadChildren()
        {
            SExpression size = new SExpression(SExpression.FormatType.Size);

            size.AddChild(new SString("test1"));
            size.AddChild(new SString("test2"));
            Parser.parse(size);
        }
Beispiel #3
0
        public void StatementBadChildren()
        {
            SExpression statement = new SExpression(SExpression.FormatType.Statement);

            statement.AddChild(new SString("test1"));
            statement.AddChild(new SString("test2"));
            Parser.parse(statement);
        }
Beispiel #4
0
        public void SubFirstChild()
        {
            SExpression size = new SExpression(SExpression.FormatType.Size);
            SExpression sub  = size.AddChild(new SExpression(SExpression.FormatType.Sub));

            sub.AddChild(new SString("arg1"));
            sub.AddChild(new SString("arg2"));
            Parser.parse(size);
        }
Beispiel #5
0
        public void UnderBadChildren()
        {
            SExpression under = new SExpression(SExpression.FormatType.Under);

            under.AddChild(new SString("test1"));
            under.AddChild(new SString("test2"));
            under.AddChild(new SString("test3"));
            Parser.parse(under);
        }
Beispiel #6
0
        public void CommaToken()
        {
            SExpression size  = new SExpression(SExpression.FormatType.Size);
            SExpression under = size.AddChild(new SExpression(SExpression.FormatType.Under));

            under.AddChild(new SString("bad,arg"));
            under.AddChild(new SString("test"));
            size.AddChild(new SString(","));
            size.AddChild(new SString("test2"));
            Parser.parse(size);
        }
Beispiel #7
0
        public void CommaFirst()
        {
            SExpression size = new SExpression(SExpression.FormatType.Size);

            size.AddChild(new SString(","));
            SExpression under = size.AddChild(new SExpression(SExpression.FormatType.Under));

            under.AddChild(new SString("test1"));
            under.AddChild(new SString("test2"));
            size.AddChild(new SString(","));
            size.AddChild(new SString("test3"));
            Parser.parse(size);
        }
Beispiel #8
0
        public void IndexNotSWithArgs()
        {
            SExpression idx = new SExpression(SExpression.FormatType.Index);

            idx.AddChild(new SString("test"));
            Parser.parse(idx);
        }
Beispiel #9
0
        public void FunctionNotSWithArgs()
        {
            SExpression func = new SExpression(SExpression.FormatType.Function);

            func.AddChild(new SString("test"));
            Parser.parse(func);
        }
Beispiel #10
0
        public void ItalicBadChildren()
        {
            SExpression italic = new SExpression(SExpression.FormatType.Italic);

            italic.AddChild(new SString("test"));
            Parser.parse(italic);
        }
Beispiel #11
0
        public void BoldBadChildren()
        {
            SExpression bold = new SExpression(SExpression.FormatType.Bold);

            bold.AddChild(new SString("test"));
            Parser.parse(bold);
        }
Beispiel #12
0
        public void DocumentBadChildren()
        {
            SExpression root = new SExpression(SExpression.FormatType.Document);

            root.AddChild(new SString("test"));
            Parser.parse(root);
        }
Beispiel #13
0
        public void isEmptyTest()
        {
            SExpression root = new SExpression(SExpression.FormatType.Document);

            Assert.IsTrue(root.isEmpty());

            SExpression statement = root.AddChild(new SExpression(SExpression.FormatType.Statement));

            Assert.IsFalse(root.isEmpty());
            Assert.IsTrue(statement.isEmpty());
        }
Beispiel #14
0
        public void PreParseSExpressions()
        {
            SExpression seq   = new SExpression(SExpression.FormatType.Sequence);
            SExpression under = seq.AddChild(new SExpression(SExpression.FormatType.Under));

            under.AddChild(new SString("result"));

            List <SExpression> funcArgs = new List <SExpression>();

            funcArgs.Add(new SString("x"));
            funcArgs.Add(new SString("y"));
            under.AddChild(new SWithArgs(SExpression.FormatType.Function, new SString("func"), funcArgs));

            SExpression idx = seq.AddChild(new SWithArgs(SExpression.FormatType.Index, new SString("array")));

            idx.AddChild(new SString("result"));

            Assert.AreEqual("seq(under(\"result\", function(\"func\", (\"x\", \"y\"))), index(\"array\", (\"result\")))", seq.ToString());

            Assert.AreEqual("SeqC(BindC(IdC(\"result\"), FuncC(IdC(\"func\"), (IdC(\"x\"), IdC(\"y\")))), IndexC(IdC(\"array\")[IdC(\"result\")]))", Parser.parse(seq).ToString());
        }
Beispiel #15
0
        public void ToStringTest()
        {
            // Test nesting, one child (linear)
            SExpression root      = new SExpression(SExpression.FormatType.Document);
            SExpression statement = root.AddChild(new SExpression(SExpression.FormatType.Statement));
            SExpression str       = statement.AddChild(new SString("testString"));

            Assert.AreEqual("\"testString\"",
                            str.ToString());
            Assert.AreEqual("statement(\"testString\")",
                            statement.ToString());
            Assert.AreEqual("document(statement(\"testString\"))",
                            root.ToString());

            // Test nesting, many children (branching)
            statement = root.AddChild(new SExpression(SExpression.FormatType.Statement));
            SExpression under = statement.AddChild(new SExpression(SExpression.FormatType.Under));

            under.AddChild(new SString("x"));
            SExpression italic = under.AddChild(new SExpression(SExpression.FormatType.Italic));

            italic.AddChild(new SString("y"));
            SExpression strike = italic.AddChild(new SExpression(SExpression.FormatType.Strike));

            strike.AddChild(new SString("z"));

            Assert.AreEqual("statement(under(\"x\", italic(\"y\", strike(\"z\"))))",
                            statement.ToString());
            Assert.AreEqual("document(statement(\"testString\"), " +
                            "statement(under(\"x\", italic(\"y\", strike(\"z\")))))",
                            root.ToString());

            // Test last few SExpression.FormatTypes
            statement = root.AddChild(new SExpression(SExpression.FormatType.Statement));
            SExpression bold = statement.AddChild(new SExpression(SExpression.FormatType.Bold));

            bold.AddChild(new SString("cond"));
            SExpression size = bold.AddChild(new SExpression(SExpression.FormatType.Size, null, 12));

            under = size.AddChild(new SExpression(SExpression.FormatType.Under));
            under.AddChild(new SString("a"));
            italic = under.AddChild(new SExpression(SExpression.FormatType.Italic));
            italic.AddChild(new SString("a"));
            italic.AddChild(new SString("one"));
            size.AddChild(new SString(","));
            size.AddChild(new SString("Mult"));
            SExpression super = size.AddChild(new SExpression(SExpression.FormatType.Super));

            super.AddChild(new SString("a"));
            SExpression color = super.AddChild(new SExpression(SExpression.FormatType.Color, null, 10));

            color.AddChild(new SString("tenVal"));
            bold.AddChild(new SString("Arr"));
            SExpression sub = bold.AddChild(new SExpression(SExpression.FormatType.Sub));

            sub.AddChild(new SString("b"));

            Assert.AreEqual("statement(bold(\"cond\", size12(under(\"a\", italic(\"a\", \"one\")), \",\", \"Mult\", super(\"a\", color10(\"tenVal\"))), \"Arr\", sub(\"b\")))",
                            statement.ToString());
            Assert.AreEqual("document(statement(\"testString\"), " +
                            "statement(under(\"x\", italic(\"y\", strike(\"z\")))), " +
                            "statement(bold(\"cond\", size12(under(\"a\", italic(\"a\", \"one\")), \",\", \"Mult\", super(\"a\", color10(\"tenVal\"))), \"Arr\", sub(\"b\"))))",
                            root.ToString());
        }
Beispiel #16
0
        public void parseTest()
        {
            // Test nesting, one child (linear)
            SExpression root      = new SExpression(SExpression.FormatType.Document);
            SExpression statement = root.AddChild(new SExpression(SExpression.FormatType.Statement));
            SExpression str       = statement.AddChild(new SString("testString"));

            Assert.AreEqual("IdC(\"testString\")", Parser.parse(str).ToString());
            Assert.AreEqual("IdC(\"testString\")", Parser.parse(statement).ToString());
            Assert.AreEqual("SeqC(IdC(\"testString\"))", Parser.parse(root).ToString());

            // Test nesting, many children (branching)
            statement = root.AddChild(new SExpression(SExpression.FormatType.Statement));
            SExpression under = statement.AddChild(new SExpression(SExpression.FormatType.Under));

            under.AddChild(new SString("x"));
            SExpression italic = under.AddChild(new SExpression(SExpression.FormatType.Italic));

            italic.AddChild(new SString("y"));
            SExpression strike = italic.AddChild(new SExpression(SExpression.FormatType.Strike));

            strike.AddChild(new SString("z"));

            Assert.AreEqual("BindC(IdC(\"x\"), AddC(IdC(\"y\"), NegC(IdC(\"z\"))))", Parser.parse(under).ToString());
            Assert.AreEqual("BindC(IdC(\"x\"), AddC(IdC(\"y\"), NegC(IdC(\"z\"))))", Parser.parse(statement).ToString());
            Assert.AreEqual("SeqC(IdC(\"testString\"), BindC(IdC(\"x\"), AddC(IdC(\"y\"), NegC(IdC(\"z\")))))", Parser.parse(root).ToString());

            // Test last few types
            statement = root.AddChild(new SExpression(SExpression.FormatType.Statement));
            SExpression bold = statement.AddChild(new SExpression(SExpression.FormatType.Bold));

            bold.AddChild(new SString("cond"));
            SExpression size = bold.AddChild(new SExpression(SExpression.FormatType.Size, null, 12));

            under = size.AddChild(new SExpression(SExpression.FormatType.Under));
            under.AddChild(new SString("a"));
            italic = under.AddChild(new SExpression(SExpression.FormatType.Italic));
            italic.AddChild(new SString("a"));
            italic.AddChild(new SString("one"));
            size.AddChild(new SString(","));
            size.AddChild(new SString("Mult"));
            SExpression super = size.AddChild(new SExpression(SExpression.FormatType.Super));

            super.AddChild(new SString("a"));
            SExpression color = super.AddChild(new SExpression(SExpression.FormatType.Color, null, 10));

            color.AddChild(new SString("tenVal"));
            bold.AddChild(new SString("Arr"));
            SExpression sub = bold.AddChild(new SExpression(SExpression.FormatType.Sub));

            sub.AddChild(new SString("b"));

            Assert.AreEqual("IfC(IdC(\"cond\"), SeqC(BindC(IdC(\"a\"), AddC(IdC(\"a\"), IdC(\"one\"))), FuncC(IdC(\"Mult\"), (IdC(\"a\"), NumC(10)))), IndexC(IdC(\"Arr\")[IdC(\"b\")]))", Parser.parse(statement).ToString());
            Assert.AreEqual("SeqC(IdC(\"testString\"), " +
                            "BindC(IdC(\"x\"), AddC(IdC(\"y\"), NegC(IdC(\"z\")))), " +
                            "IfC(IdC(\"cond\"), SeqC(BindC(IdC(\"a\"), AddC(IdC(\"a\"), IdC(\"one\"))), FuncC(IdC(\"Mult\"), (IdC(\"a\"), NumC(10)))), IndexC(IdC(\"Arr\")[IdC(\"b\")])))", Parser.parse(root).ToString());

            // Test size for call instead of sequencing
            size = new SExpression(SExpression.FormatType.Size);
            size.AddChild(new SString("Div"));
            super = size.AddChild(new SExpression(SExpression.FormatType.Super));
            super.AddChild(new SString("x"));
            SExpression num = super.AddChild(new SExpression(SExpression.FormatType.Color, null, 5));

            num.AddChild(new SString("fiveVal"));

            Assert.AreEqual("FuncC(IdC(\"Div\"), (IdC(\"x\"), NumC(5)))", Parser.parse(size).ToString());
        }