public void testSeekFromStart()
        {
            // ^(101 ^(102 103 ^(106 107) ) 104 105)
            // stream has 7 real + 6 nav nodes
            // Sequence of types: 101 DN 102 DN 103 106 DN 107 Up Up 104 105 Up EndOfFile
            ITree r0 = new CommonTree(new CommonToken(101));
            ITree r1 = new CommonTree(new CommonToken(102));

            r0.AddChild(r1);
            r1.AddChild(new CommonTree(new CommonToken(103)));
            ITree r2 = new CommonTree(new CommonToken(106));

            r2.AddChild(new CommonTree(new CommonToken(107)));
            r1.AddChild(r2);
            r0.AddChild(new CommonTree(new CommonToken(104)));
            r0.AddChild(new CommonTree(new CommonToken(105)));

            BufferedTreeNodeStream stream = new BufferedTreeNodeStream(r0);

            stream.Seek(7);               // seek to 107
            Assert.AreEqual(107, ((ITree)stream.LT(1)).Type);
            stream.Consume();             // consume 107
            stream.Consume();             // consume Up
            stream.Consume();             // consume Up
            Assert.AreEqual(104, ((ITree)stream.LT(1)).Type);
        }
        public void testList()
        {
            ITree root = new CommonTree((IToken)null);

            ITree t = new CommonTree(new CommonToken(101));

            t.AddChild(new CommonTree(new CommonToken(102)));
            t.GetChild(0).AddChild(new CommonTree(new CommonToken(103)));
            t.AddChild(new CommonTree(new CommonToken(104)));

            ITree u = new CommonTree(new CommonToken(105));

            root.AddChild(t);
            root.AddChild(u);

            BufferedTreeNodeStream stream = new BufferedTreeNodeStream(root);
            string expected = " 101 102 103 104 105";
            string actual   = GetStringOfEntireStreamContentsWithNodeTypesOnly(stream);

            Assert.AreEqual(expected, actual);

            expected = " 101 2 102 2 103 3 104 3 105";
            actual   = stream.ToString();
            Assert.AreEqual(expected, actual);
        }
        public void testPushPopFromEOF()
        {
            // ^(101 ^(102 103) ^(104 105) ^(106 107) 108 109)
            // stream has 9 real + 8 nav nodes
            // Sequence of types: 101 DN 102 DN 103 Up 104 DN 105 Up 106 DN 107 Up 108 109 Up
            ITree r0 = new CommonTree(new CommonToken(101));
            ITree r1 = new CommonTree(new CommonToken(102));

            r1.AddChild(new CommonTree(new CommonToken(103)));
            r0.AddChild(r1);
            ITree r2 = new CommonTree(new CommonToken(104));

            r2.AddChild(new CommonTree(new CommonToken(105)));
            r0.AddChild(r2);
            ITree r3 = new CommonTree(new CommonToken(106));

            r3.AddChild(new CommonTree(new CommonToken(107)));
            r0.AddChild(r3);
            r0.AddChild(new CommonTree(new CommonToken(108)));
            r0.AddChild(new CommonTree(new CommonToken(109)));

            BufferedTreeNodeStream stream = new BufferedTreeNodeStream(r0);

            while (stream.LA(1) != Token.EndOfFile)
            {
                stream.Consume();
            }
            int indexOf102 = 2;
            int indexOf104 = 6;

            Assert.AreEqual(Token.EndOfFile, ((ITree)stream.LT(1)).Type);

            // CALL 102
            stream.Push(indexOf102);
            Assert.AreEqual(102, ((ITree)stream.LT(1)).Type);
            stream.Consume();             // consume 102
            Assert.AreEqual(Token.Down, ((ITree)stream.LT(1)).Type);
            stream.Consume();             // consume DN
            Assert.AreEqual(103, ((ITree)stream.LT(1)).Type);
            stream.Consume();             // consume 103
            Assert.AreEqual(Token.Up, ((ITree)stream.LT(1)).Type);
            // RETURN (to empty stack)
            stream.Pop();
            Assert.AreEqual(Token.EndOfFile, ((ITree)stream.LT(1)).Type);

            // CALL 104
            stream.Push(indexOf104);
            Assert.AreEqual(104, ((ITree)stream.LT(1)).Type);
            stream.Consume();             // consume 102
            Assert.AreEqual(Token.Down, ((ITree)stream.LT(1)).Type);
            stream.Consume();             // consume DN
            Assert.AreEqual(105, ((ITree)stream.LT(1)).Type);
            stream.Consume();             // consume 103
            Assert.AreEqual(Token.Up, ((ITree)stream.LT(1)).Type);
            // RETURN (to empty stack)
            stream.Pop();
            Assert.AreEqual(Token.EndOfFile, ((ITree)stream.LT(1)).Type);
        }
        public void testPushPop()
        {
            // ^(101 ^(102 103) ^(104 105) ^(106 107) 108 109)
            // stream has 9 real + 8 nav nodes
            // Sequence of types: 101 DN 102 DN 103 Up 104 DN 105 Up 106 DN 107 Up 108 109 Up
            ITree r0 = new CommonTree(new CommonToken(101));
            ITree r1 = new CommonTree(new CommonToken(102));

            r1.AddChild(new CommonTree(new CommonToken(103)));
            r0.AddChild(r1);
            ITree r2 = new CommonTree(new CommonToken(104));

            r2.AddChild(new CommonTree(new CommonToken(105)));
            r0.AddChild(r2);
            ITree r3 = new CommonTree(new CommonToken(106));

            r3.AddChild(new CommonTree(new CommonToken(107)));
            r0.AddChild(r3);
            r0.AddChild(new CommonTree(new CommonToken(108)));
            r0.AddChild(new CommonTree(new CommonToken(109)));

            BufferedTreeNodeStream stream = new BufferedTreeNodeStream(r0);
            String expecting = " 101 2 102 2 103 3 104 2 105 3 106 2 107 3 108 109 3";
            String found     = stream.ToString();

            Assert.AreEqual(expecting, found);

            // Assume we want to hit node 107 and then "call 102" then return

            int indexOf102 = 2;
            int indexOf107 = 12;

            for (int k = 1; k <= indexOf107; k++)
            {             // consume til 107 node
                stream.Consume();
            }
            // CALL 102
            Assert.AreEqual(107, ((ITree)stream.LT(1)).Type);
            stream.Push(indexOf102);
            Assert.AreEqual(102, ((ITree)stream.LT(1)).Type);
            stream.Consume();             // consume 102
            Assert.AreEqual(Token.Down, ((ITree)stream.LT(1)).Type);
            stream.Consume();             // consume DN
            Assert.AreEqual(103, ((ITree)stream.LT(1)).Type);
            stream.Consume();             // consume 103
            Assert.AreEqual(Token.Up, ((ITree)stream.LT(1)).Type);
            // RETURN
            stream.Pop();
            Assert.AreEqual(107, ((ITree)stream.LT(1)).Type);
        }
        public void testStackStretch()
        {
            // make more than INITIAL_CALL_STACK_SIZE pushes
            ITree r0 = new CommonTree(new CommonToken(101));
            BufferedTreeNodeStream stream = new BufferedTreeNodeStream(r0);

            // go 1 over initial size
            for (int i = 1; i <= BufferedTreeNodeStream.INITIAL_CALL_STACK_SIZE + 1; i++)
            {
                stream.Push(i);
            }
            Assert.AreEqual(10, stream.Pop());
            Assert.AreEqual(9, stream.Pop());
        }
        public void testMarkRewindInMiddle()
        {
            // ^(101 ^(102 103 ^(106 107) ) 104 105)
            // stream has 7 real + 6 nav nodes
            // Sequence of types: 101 DN 102 DN 103 106 DN 107 Up Up 104 105 Up EndOfFile
            ITree r0 = new CommonTree(new CommonToken(101));
            ITree r1 = new CommonTree(new CommonToken(102));

            r0.AddChild(r1);
            r1.AddChild(new CommonTree(new CommonToken(103)));
            ITree r2 = new CommonTree(new CommonToken(106));

            r2.AddChild(new CommonTree(new CommonToken(107)));
            r1.AddChild(r2);
            r0.AddChild(new CommonTree(new CommonToken(104)));
            r0.AddChild(new CommonTree(new CommonToken(105)));

            BufferedTreeNodeStream stream = new BufferedTreeNodeStream(r0);

            for (int k = 1; k <= 7; k++)
            {             // consume til middle
                //System.out.println(((ITree)stream.LT(1)).Type);
                stream.Consume();
            }
            Assert.AreEqual(107, ((ITree)stream.LT(1)).Type);
            int m = stream.Mark();        // MARK

            stream.Consume();             // consume 107
            stream.Consume();             // consume Up
            stream.Consume();             // consume Up
            stream.Consume();             // consume 104
            stream.Rewind(m);             // REWIND

            Assert.AreEqual(107, ((ITree)stream.LT(1)).Type);
            stream.Consume();
            Assert.AreEqual(Token.Up, ((ITree)stream.LT(1)).Type);
            stream.Consume();
            Assert.AreEqual(Token.Up, ((ITree)stream.LT(1)).Type);
            stream.Consume();
            Assert.AreEqual(104, ((ITree)stream.LT(1)).Type);
            stream.Consume();
            // now we're past rewind position
            Assert.AreEqual(105, ((ITree)stream.LT(1)).Type);
            stream.Consume();
            Assert.AreEqual(Token.Up, ((ITree)stream.LT(1)).Type);
            stream.Consume();
            Assert.AreEqual(Token.EndOfFile, ((ITree)stream.LT(1)).Type);
            Assert.AreEqual(Token.Up, ((ITree)stream.LT(-1)).Type);
        }
        public void testListWithOneNode()
        {
            ITree root = new CommonTree((IToken)null);

            root.AddChild(new CommonTree(new CommonToken(101)));

            BufferedTreeNodeStream stream = new BufferedTreeNodeStream(root);
            string expected = " 101";
            string actual   = GetStringOfEntireStreamContentsWithNodeTypesOnly(stream);

            Assert.AreEqual(expected, actual);

            expected = " 101";
            actual   = stream.ToString();
            Assert.AreEqual(expected, actual);
        }
        public void testMarkRewindNested()
        {
            // ^(101 ^(102 103 ^(106 107) ) 104 105)
            // stream has 7 real + 6 nav nodes
            // Sequence of types: 101 DN 102 DN 103 106 DN 107 Up Up 104 105 Up EndOfFile
            ITree r0 = new CommonTree(new CommonToken(101));
            ITree r1 = new CommonTree(new CommonToken(102));

            r0.AddChild(r1);
            r1.AddChild(new CommonTree(new CommonToken(103)));
            ITree r2 = new CommonTree(new CommonToken(106));

            r2.AddChild(new CommonTree(new CommonToken(107)));
            r1.AddChild(r2);
            r0.AddChild(new CommonTree(new CommonToken(104)));
            r0.AddChild(new CommonTree(new CommonToken(105)));

            BufferedTreeNodeStream stream = new BufferedTreeNodeStream(r0);
            int m = stream.Mark();        // MARK at start

            stream.Consume();             // consume 101
            stream.Consume();             // consume DN
            int m2 = stream.Mark();       // MARK on 102

            stream.Consume();             // consume 102
            stream.Consume();             // consume DN
            stream.Consume();             // consume 103
            stream.Consume();             // consume 106
            stream.Rewind(m2);            // REWIND to 102
            Assert.AreEqual(102, ((ITree)stream.LT(1)).Type);
            stream.Consume();
            Assert.AreEqual(Token.Down, ((ITree)stream.LT(1)).Type);
            stream.Consume();
            // stop at 103 and rewind to start
            stream.Rewind(m);             // REWIND to 101
            Assert.AreEqual(101, ((ITree)stream.LT(1)).Type);
            stream.Consume();
            Assert.AreEqual(Token.Down, ((ITree)stream.LT(1)).Type);
            stream.Consume();
            Assert.AreEqual(102, ((ITree)stream.LT(1)).Type);
            stream.Consume();
            Assert.AreEqual(Token.Down, ((ITree)stream.LT(1)).Type);
        }
        public void testMarkRewindEntire()
        {
            // ^(101 ^(102 103 ^(106 107) ) 104 105)
            // stream has 7 real + 6 nav nodes
            // Sequence of types: 101 DN 102 DN 103 106 DN 107 Up Up 104 105 Up EndOfFile
            ITree r0 = new CommonTree(new CommonToken(101));
            ITree r1 = new CommonTree(new CommonToken(102));

            r0.AddChild(r1);
            r1.AddChild(new CommonTree(new CommonToken(103)));
            ITree r2 = new CommonTree(new CommonToken(106));

            r2.AddChild(new CommonTree(new CommonToken(107)));
            r1.AddChild(r2);
            r0.AddChild(new CommonTree(new CommonToken(104)));
            r0.AddChild(new CommonTree(new CommonToken(105)));

            BufferedTreeNodeStream stream = new BufferedTreeNodeStream(r0);
            int m = stream.Mark();             // MARK

            for (int k = 1; k <= 13; k++)
            {             // consume til end
                stream.LT(1);
                stream.Consume();
            }
            Assert.AreEqual(Token.EndOfFile, ((ITree)stream.LT(1)).Type);
            Assert.AreEqual(Token.Up, ((ITree)stream.LT(-1)).Type);
            stream.Rewind(m);                  // REWIND

            // consume til end again :)
            for (int k = 1; k <= 13; k++)
            {             // consume til end
                stream.LT(1);
                stream.Consume();
            }
            Assert.AreEqual(Token.EndOfFile, ((ITree)stream.LT(1)).Type);
            Assert.AreEqual(Token.Up, ((ITree)stream.LT(-1)).Type);
        }
Пример #10
0
		public void testPushPopFromEOF()
		{
			// ^(101 ^(102 103) ^(104 105) ^(106 107) 108 109)
			// stream has 9 real + 8 nav nodes
			// Sequence of types: 101 DN 102 DN 103 Up 104 DN 105 Up 106 DN 107 Up 108 109 Up
			ITree r0 = new CommonTree(new CommonToken(101));
			ITree r1 = new CommonTree(new CommonToken(102));
			r1.AddChild(new CommonTree(new CommonToken(103)));
			r0.AddChild(r1);
			ITree r2 = new CommonTree(new CommonToken(104));
			r2.AddChild(new CommonTree(new CommonToken(105)));
			r0.AddChild(r2);
			ITree r3 = new CommonTree(new CommonToken(106));
			r3.AddChild(new CommonTree(new CommonToken(107)));
			r0.AddChild(r3);
			r0.AddChild(new CommonTree(new CommonToken(108)));
			r0.AddChild(new CommonTree(new CommonToken(109)));

            BufferedTreeNodeStream stream = new BufferedTreeNodeStream(r0);

			while (stream.LA(1) != Token.EndOfFile)
			{
				stream.Consume();
			}
			int indexOf102 = 2;
			int indexOf104 = 6;
			Assert.AreEqual(Token.EndOfFile, ((ITree)stream.LT(1)).Type);

			// CALL 102
			stream.Push(indexOf102);
			Assert.AreEqual(102, ((ITree)stream.LT(1)).Type);
			stream.Consume(); // consume 102
			Assert.AreEqual(Token.Down, ((ITree)stream.LT(1)).Type);
			stream.Consume(); // consume DN
			Assert.AreEqual(103, ((ITree)stream.LT(1)).Type);
			stream.Consume(); // consume 103
			Assert.AreEqual(Token.Up, ((ITree)stream.LT(1)).Type);
			// RETURN (to empty stack)
			stream.Pop();
			Assert.AreEqual(Token.EndOfFile, ((ITree)stream.LT(1)).Type);

			// CALL 104
			stream.Push(indexOf104);
			Assert.AreEqual(104, ((ITree)stream.LT(1)).Type);
			stream.Consume(); // consume 102
			Assert.AreEqual(Token.Down, ((ITree)stream.LT(1)).Type);
			stream.Consume(); // consume DN
			Assert.AreEqual(105, ((ITree)stream.LT(1)).Type);
			stream.Consume(); // consume 103
			Assert.AreEqual(Token.Up, ((ITree)stream.LT(1)).Type);
			// RETURN (to empty stack)
			stream.Pop();
			Assert.AreEqual(Token.EndOfFile, ((ITree)stream.LT(1)).Type);
		}
Пример #11
0
		public void testNestedPushPop()
		{
			// ^(101 ^(102 103) ^(104 105) ^(106 107) 108 109)
			// stream has 9 real + 8 nav nodes
			// Sequence of types: 101 DN 102 DN 103 Up 104 DN 105 Up 106 DN 107 Up 108 109 Up
			ITree r0 = new CommonTree(new CommonToken(101));
			ITree r1 = new CommonTree(new CommonToken(102));
			r1.AddChild(new CommonTree(new CommonToken(103)));
			r0.AddChild(r1);
			ITree r2 = new CommonTree(new CommonToken(104));
			r2.AddChild(new CommonTree(new CommonToken(105)));
			r0.AddChild(r2);
			ITree r3 = new CommonTree(new CommonToken(106));
			r3.AddChild(new CommonTree(new CommonToken(107)));
			r0.AddChild(r3);
			r0.AddChild(new CommonTree(new CommonToken(108)));
			r0.AddChild(new CommonTree(new CommonToken(109)));

            BufferedTreeNodeStream stream = new BufferedTreeNodeStream(r0);

			// Assume we want to hit node 107 and then "call 102", which
			// calls 104, then return

			int indexOf102 = 2;
			int indexOf107 = 12;
			for (int k = 1; k <= indexOf107; k++)
			{ // consume til 107 node
				stream.Consume();
			}
			Assert.AreEqual(107, ((ITree)stream.LT(1)).Type);
			// CALL 102
			stream.Push(indexOf102);
			Assert.AreEqual(102, ((ITree)stream.LT(1)).Type);
			stream.Consume(); // consume 102
			Assert.AreEqual(Token.Down, ((ITree)stream.LT(1)).Type);
			stream.Consume(); // consume DN
			Assert.AreEqual(103, ((ITree)stream.LT(1)).Type);
			stream.Consume(); // consume 103

			// CALL 104
			int indexOf104 = 6;
			stream.Push(indexOf104);
			Assert.AreEqual(104, ((ITree)stream.LT(1)).Type);
			stream.Consume(); // consume 102
			Assert.AreEqual(Token.Down, ((ITree)stream.LT(1)).Type);
			stream.Consume(); // consume DN
			Assert.AreEqual(105, ((ITree)stream.LT(1)).Type);
			stream.Consume(); // consume 103
			Assert.AreEqual(Token.Up, ((ITree)stream.LT(1)).Type);
			// RETURN (to Up node in 102 subtree)
			stream.Pop();

			Assert.AreEqual(Token.Up, ((ITree)stream.LT(1)).Type);
			// RETURN (to empty stack)
			stream.Pop();
			Assert.AreEqual(107, ((ITree)stream.LT(1)).Type);
		}
Пример #12
0
		public void testPushPop()
		{
			// ^(101 ^(102 103) ^(104 105) ^(106 107) 108 109)
			// stream has 9 real + 8 nav nodes
			// Sequence of types: 101 DN 102 DN 103 Up 104 DN 105 Up 106 DN 107 Up 108 109 Up
			ITree r0 = new CommonTree(new CommonToken(101));
			ITree r1 = new CommonTree(new CommonToken(102));
			r1.AddChild(new CommonTree(new CommonToken(103)));
			r0.AddChild(r1);
			ITree r2 = new CommonTree(new CommonToken(104));
			r2.AddChild(new CommonTree(new CommonToken(105)));
			r0.AddChild(r2);
			ITree r3 = new CommonTree(new CommonToken(106));
			r3.AddChild(new CommonTree(new CommonToken(107)));
			r0.AddChild(r3);
			r0.AddChild(new CommonTree(new CommonToken(108)));
			r0.AddChild(new CommonTree(new CommonToken(109)));

            BufferedTreeNodeStream stream = new BufferedTreeNodeStream(r0);
			String expecting = " 101 2 102 2 103 3 104 2 105 3 106 2 107 3 108 109 3";
			String found = stream.ToString();
			Assert.AreEqual(expecting, found);

			// Assume we want to hit node 107 and then "call 102" then return

			int indexOf102 = 2;
			int indexOf107 = 12;
			for (int k = 1; k <= indexOf107; k++)
			{ // consume til 107 node
				stream.Consume();
			}
			// CALL 102
			Assert.AreEqual(107, ((ITree)stream.LT(1)).Type);
			stream.Push(indexOf102);
			Assert.AreEqual(102, ((ITree)stream.LT(1)).Type);
			stream.Consume(); // consume 102
			Assert.AreEqual(Token.Down, ((ITree)stream.LT(1)).Type);
			stream.Consume(); // consume DN
			Assert.AreEqual(103, ((ITree)stream.LT(1)).Type);
			stream.Consume(); // consume 103
			Assert.AreEqual(Token.Up, ((ITree)stream.LT(1)).Type);
			// RETURN
			stream.Pop();
			Assert.AreEqual(107, ((ITree)stream.LT(1)).Type);
		}
Пример #13
0
		public void testSeekFromStart()
		{
			// ^(101 ^(102 103 ^(106 107) ) 104 105)
			// stream has 7 real + 6 nav nodes
			// Sequence of types: 101 DN 102 DN 103 106 DN 107 Up Up 104 105 Up EndOfFile
			ITree r0 = new CommonTree(new CommonToken(101));
			ITree r1 = new CommonTree(new CommonToken(102));
			r0.AddChild(r1);
			r1.AddChild(new CommonTree(new CommonToken(103)));
			ITree r2 = new CommonTree(new CommonToken(106));
			r2.AddChild(new CommonTree(new CommonToken(107)));
			r1.AddChild(r2);
			r0.AddChild(new CommonTree(new CommonToken(104)));
			r0.AddChild(new CommonTree(new CommonToken(105)));

            BufferedTreeNodeStream stream = new BufferedTreeNodeStream(r0);
			stream.Seek(7);   // seek to 107
			Assert.AreEqual(107, ((ITree)stream.LT(1)).Type);
			stream.Consume(); // consume 107
			stream.Consume(); // consume Up
			stream.Consume(); // consume Up
			Assert.AreEqual(104, ((ITree)stream.LT(1)).Type);
		}
Пример #14
0
		public void testMarkRewindNested()
		{
			// ^(101 ^(102 103 ^(106 107) ) 104 105)
			// stream has 7 real + 6 nav nodes
			// Sequence of types: 101 DN 102 DN 103 106 DN 107 Up Up 104 105 Up EndOfFile
			ITree r0 = new CommonTree(new CommonToken(101));
			ITree r1 = new CommonTree(new CommonToken(102));
			r0.AddChild(r1);
			r1.AddChild(new CommonTree(new CommonToken(103)));
			ITree r2 = new CommonTree(new CommonToken(106));
			r2.AddChild(new CommonTree(new CommonToken(107)));
			r1.AddChild(r2);
			r0.AddChild(new CommonTree(new CommonToken(104)));
			r0.AddChild(new CommonTree(new CommonToken(105)));

            BufferedTreeNodeStream stream = new BufferedTreeNodeStream(r0);
			int m = stream.Mark(); // MARK at start
			stream.Consume(); // consume 101
			stream.Consume(); // consume DN
			int m2 = stream.Mark(); // MARK on 102
			stream.Consume(); // consume 102
			stream.Consume(); // consume DN
			stream.Consume(); // consume 103
			stream.Consume(); // consume 106
			stream.Rewind(m2);      // REWIND to 102
			Assert.AreEqual(102, ((ITree)stream.LT(1)).Type);
			stream.Consume();
			Assert.AreEqual(Token.Down, ((ITree)stream.LT(1)).Type);
			stream.Consume();
			// stop at 103 and rewind to start
			stream.Rewind(m); // REWIND to 101
			Assert.AreEqual(101, ((ITree)stream.LT(1)).Type);
			stream.Consume();
			Assert.AreEqual(Token.Down, ((ITree)stream.LT(1)).Type);
			stream.Consume();
			Assert.AreEqual(102, ((ITree)stream.LT(1)).Type);
			stream.Consume();
			Assert.AreEqual(Token.Down, ((ITree)stream.LT(1)).Type);
		}
Пример #15
0
		public void testMarkRewindInMiddle()
		{
			// ^(101 ^(102 103 ^(106 107) ) 104 105)
			// stream has 7 real + 6 nav nodes
			// Sequence of types: 101 DN 102 DN 103 106 DN 107 Up Up 104 105 Up EndOfFile
			ITree r0 = new CommonTree(new CommonToken(101));
			ITree r1 = new CommonTree(new CommonToken(102));
			r0.AddChild(r1);
			r1.AddChild(new CommonTree(new CommonToken(103)));
			ITree r2 = new CommonTree(new CommonToken(106));
			r2.AddChild(new CommonTree(new CommonToken(107)));
			r1.AddChild(r2);
			r0.AddChild(new CommonTree(new CommonToken(104)));
			r0.AddChild(new CommonTree(new CommonToken(105)));

            BufferedTreeNodeStream stream = new BufferedTreeNodeStream(r0);
			for (int k = 1; k <= 7; k++)
			{ // consume til middle
				//System.out.println(((ITree)stream.LT(1)).Type);
				stream.Consume();
			}
			Assert.AreEqual(107, ((ITree)stream.LT(1)).Type);
			int m = stream.Mark(); // MARK
			stream.Consume(); // consume 107
			stream.Consume(); // consume Up
			stream.Consume(); // consume Up
			stream.Consume(); // consume 104
			stream.Rewind(m);      // REWIND

			Assert.AreEqual(107, ((ITree)stream.LT(1)).Type);
			stream.Consume();
			Assert.AreEqual(Token.Up, ((ITree)stream.LT(1)).Type);
			stream.Consume();
			Assert.AreEqual(Token.Up, ((ITree)stream.LT(1)).Type);
			stream.Consume();
			Assert.AreEqual(104, ((ITree)stream.LT(1)).Type);
			stream.Consume();
			// now we're past rewind position
			Assert.AreEqual(105, ((ITree)stream.LT(1)).Type);
			stream.Consume();
			Assert.AreEqual(Token.Up, ((ITree)stream.LT(1)).Type);
			stream.Consume();
			Assert.AreEqual(Token.EndOfFile, ((ITree)stream.LT(1)).Type);
			Assert.AreEqual(Token.Up, ((ITree)stream.LT(-1)).Type);
		}
Пример #16
0
		public void testMarkRewindEntire()
		{
			// ^(101 ^(102 103 ^(106 107) ) 104 105)
			// stream has 7 real + 6 nav nodes
			// Sequence of types: 101 DN 102 DN 103 106 DN 107 Up Up 104 105 Up EndOfFile
			ITree r0 = new CommonTree(new CommonToken(101));
			ITree r1 = new CommonTree(new CommonToken(102));
			r0.AddChild(r1);
			r1.AddChild(new CommonTree(new CommonToken(103)));
			ITree r2 = new CommonTree(new CommonToken(106));
			r2.AddChild(new CommonTree(new CommonToken(107)));
			r1.AddChild(r2);
			r0.AddChild(new CommonTree(new CommonToken(104)));
			r0.AddChild(new CommonTree(new CommonToken(105)));

            BufferedTreeNodeStream stream = new BufferedTreeNodeStream(r0);
			int m = stream.Mark(); // MARK
			for (int k = 1; k <= 13; k++)
			{ // consume til end
				stream.LT(1);
				stream.Consume();
			}
			Assert.AreEqual(Token.EndOfFile, ((ITree)stream.LT(1)).Type);
			Assert.AreEqual(Token.Up, ((ITree)stream.LT(-1)).Type);
			stream.Rewind(m);      // REWIND

			// consume til end again :)
			for (int k = 1; k <= 13; k++)
			{ // consume til end
				stream.LT(1);
				stream.Consume();
			}
			Assert.AreEqual(Token.EndOfFile, ((ITree)stream.LT(1)).Type);
			Assert.AreEqual(Token.Up, ((ITree)stream.LT(-1)).Type);
		}
Пример #17
0
		public void testStackStretch()
		{
			// make more than INITIAL_CALL_STACK_SIZE pushes
			ITree r0 = new CommonTree(new CommonToken(101));
            BufferedTreeNodeStream stream = new BufferedTreeNodeStream(r0);
			// go 1 over initial size
            for (int i = 1; i <= BufferedTreeNodeStream.INITIAL_CALL_STACK_SIZE + 1; i++)
			{
				stream.Push(i);
			}
			Assert.AreEqual(10, stream.Pop());
			Assert.AreEqual(9, stream.Pop());
		}
        public void testNestedPushPop()
        {
            // ^(101 ^(102 103) ^(104 105) ^(106 107) 108 109)
            // stream has 9 real + 8 nav nodes
            // Sequence of types: 101 DN 102 DN 103 Up 104 DN 105 Up 106 DN 107 Up 108 109 Up
            ITree r0 = new CommonTree(new CommonToken(101));
            ITree r1 = new CommonTree(new CommonToken(102));

            r1.AddChild(new CommonTree(new CommonToken(103)));
            r0.AddChild(r1);
            ITree r2 = new CommonTree(new CommonToken(104));

            r2.AddChild(new CommonTree(new CommonToken(105)));
            r0.AddChild(r2);
            ITree r3 = new CommonTree(new CommonToken(106));

            r3.AddChild(new CommonTree(new CommonToken(107)));
            r0.AddChild(r3);
            r0.AddChild(new CommonTree(new CommonToken(108)));
            r0.AddChild(new CommonTree(new CommonToken(109)));

            BufferedTreeNodeStream stream = new BufferedTreeNodeStream(r0);

            // Assume we want to hit node 107 and then "call 102", which
            // calls 104, then return

            int indexOf102 = 2;
            int indexOf107 = 12;

            for (int k = 1; k <= indexOf107; k++)
            {             // consume til 107 node
                stream.Consume();
            }
            Assert.AreEqual(107, ((ITree)stream.LT(1)).Type);
            // CALL 102
            stream.Push(indexOf102);
            Assert.AreEqual(102, ((ITree)stream.LT(1)).Type);
            stream.Consume();             // consume 102
            Assert.AreEqual(Token.Down, ((ITree)stream.LT(1)).Type);
            stream.Consume();             // consume DN
            Assert.AreEqual(103, ((ITree)stream.LT(1)).Type);
            stream.Consume();             // consume 103

            // CALL 104
            int indexOf104 = 6;

            stream.Push(indexOf104);
            Assert.AreEqual(104, ((ITree)stream.LT(1)).Type);
            stream.Consume();             // consume 102
            Assert.AreEqual(Token.Down, ((ITree)stream.LT(1)).Type);
            stream.Consume();             // consume DN
            Assert.AreEqual(105, ((ITree)stream.LT(1)).Type);
            stream.Consume();             // consume 103
            Assert.AreEqual(Token.Up, ((ITree)stream.LT(1)).Type);
            // RETURN (to Up node in 102 subtree)
            stream.Pop();

            Assert.AreEqual(Token.Up, ((ITree)stream.LT(1)).Type);
            // RETURN (to empty stack)
            stream.Pop();
            Assert.AreEqual(107, ((ITree)stream.LT(1)).Type);
        }
Пример #19
0
		public void testList()
		{
			ITree root = new CommonTree((IToken)null);

			ITree t = new CommonTree(new CommonToken(101));
			t.AddChild(new CommonTree(new CommonToken(102)));
			t.GetChild(0).AddChild(new CommonTree(new CommonToken(103)));
			t.AddChild(new CommonTree(new CommonToken(104)));

			ITree u = new CommonTree(new CommonToken(105));

			root.AddChild(t);
			root.AddChild(u);

            BufferedTreeNodeStream stream = new BufferedTreeNodeStream(root);
			string expected = " 101 102 103 104 105";
			string actual = GetStringOfEntireStreamContentsWithNodeTypesOnly(stream);
			Assert.AreEqual(expected, actual);

			expected = " 101 2 102 2 103 3 104 3 105";
			actual = stream.ToString();
			Assert.AreEqual(expected, actual);
		}
Пример #20
0
		public void testListWithOneNode()
		{
			ITree root = new CommonTree((IToken)null);

			root.AddChild(new CommonTree(new CommonToken(101)));

            BufferedTreeNodeStream stream = new BufferedTreeNodeStream(root);
			string expected = " 101";
			string actual = GetStringOfEntireStreamContentsWithNodeTypesOnly(stream);
			Assert.AreEqual(expected, actual);

			expected = " 101";
			actual = stream.ToString();
			Assert.AreEqual(expected, actual);
		}