Пример #1
0
        public void ImproperListToString()
        {
            ConsBox improperList = new ConsBox {
                Head = Lisp.Symbol("test"), Tail = Lisp.Constant(1)
            };

            Assert.AreEqual("(test . 1)", improperList.ToString());
        }
Пример #2
0
        public static List List(params ILispValue[] items)
        {
            List current = Nil.Instance;

            for (int i = items.Length - 1; i >= 0; i--)
            {
                current = new ConsBox {
                    Head = items[i], Tail = current
                };
            }
            return(current);
        }
Пример #3
0
        public void ProperListConstruction()
        {
            ILispValue helperConstructedList = Lisp.List(
                Lisp.Symbol("test"),
                Lisp.Constant(1),
                Lisp.Constant("foo"),
                Lisp.List(Lisp.Constant(1), Lisp.Constant(2), Lisp.Constant(3)),
                Lisp.Constant(true));

            ILispValue manuallyConstructedList = new ConsBox
            {
                Head = Lisp.Symbol("test"),
                Tail = new ConsBox
                {
                    Head = Lisp.Constant(1),
                    Tail = new ConsBox
                    {
                        Head = Lisp.Constant("foo"),
                        Tail = new ConsBox
                        {
                            Head = new ConsBox
                            {
                                Head = Lisp.Constant(1),
                                Tail = new ConsBox
                                {
                                    Head = Lisp.Constant(2),
                                    Tail = new ConsBox
                                    {
                                        Head = Lisp.Constant(3),
                                        Tail = Nil.Instance
                                    }
                                }
                            },
                            Tail = new ConsBox
                            {
                                Head = Lisp.Constant(true),
                                Tail = Nil.Instance
                            }
                        }
                    }
                }
            };

            // Do not use Assert.AreEqual here since it doesn't use IEquatable.
            LispAssert.AreEqual(manuallyConstructedList, helperConstructedList);
        }
Пример #4
0
        public void MixedImproperListToString()
        {
            ConsBox improperList = new ConsBox
            {
                Head = Lisp.Symbol("test"),
                Tail = new ConsBox
                {
                    Head = Lisp.Constant(1),
                    Tail = new ConsBox
                    {
                        Head = Lisp.Constant("foo"),
                        Tail = new ConsBox
                        {
                            Head = Lisp.List(Lisp.Constant(1), Lisp.Constant(2), Lisp.Constant(3)),
                            Tail = Lisp.Constant(true)
                        }
                    }
                }
            };

            Assert.AreEqual("(test 1 \"foo\" (1 2 3) . #t)", improperList.ToString());
        }